---
title: "AI labelling and publishing"
manual: "nr_repurpose"
version: "main"
permalink: "https://docs.typo3.org/permalink/netresearch/nr-repurpose:configuration-output@main"
source: "Configuration/AiLabelAndPublishing.rst"
rendered: "2026-09-30T16:39:51+00:00"
---

# AI labelling and publishing {#configuration-output}

Four extension settings control the visible AI labels and the webhook
that publishes approved social posts.

## AI labelling {#configuration-ai-label}

Every artifact carries a machine-readable AI marker, whatever the settings
below say: the `aiLabel` block of the artifact metadata, the markers embedded
in PNG and MP3 files, and the description of the stored file. See
[AI labelling](https://docs.typo3.org/permalink/netresearch/nr-repurpose:usage-ai-label@main) for what each artifact carries and [ADR-005: AI Label on Every Artifact, Embedded at Storage](https://docs.typo3.org/permalink/netresearch/nr-repurpose:adr-005@main) for
why. Two extension settings (*Admin Tools > Settings > Extension
Configuration > nr_repurpose*) control the **visible** labels:

-   **`aiLabelImages` (default: on)**

    Renders a small "AI-generated" label into the top corner of every
    Schaubild HTML render (variants `html` and `html_bg`) and every story
    slide, in the language the artifact is written in. The full AI image
    (`ki_image`) comes straight from the image model and never passes the
    HTML renderer, so it carries the machine-readable marker only.

-   **`aiLabelTexts` (default: off)**

    Appends the closing line "This text was created with AI." (German:
    "Dieser Text wurde mit KI erstellt.") to the copy-ready text of the
    executive summary, the FAQ, the social posts and the newsletter, in the
    text's language. It is off by default because editors usually paste these
    texts into a page, a newsletter tool or a social network that shows its own
    AI disclosure, where a second one in the text is noise. The social posts
    reserve the line's length inside their platform limit, so a post with the
    line still fits.

A setting that is missing — an installation whose extension configuration has
not been saved since the update — keeps its default.

## Publishing social posts {#configuration-social}

Approved, scheduled social posts leave through a webhook (see [ADR-007: Approval Step and Publishing Through a Webhook](https://docs.typo3.org/permalink/netresearch/nr-repurpose:adr-007@main)).
Two extension settings:

-   **`socialWebhookUrl` (default: empty)**

    The `http` or `https` URL that receives each due post by POST as JSON:
    `artifactUid`, `jobUid`, `platform` (`linkedin`, `x`,
    `instagram`), `text`, `publishAt` (UTC, ISO 8601), `sourceUrl`
    (the job's source URL without user name and password; query and fragment
    stay), `aiGenerated` (always `true`) and `aiLabel`. A 2xx answer marks the
    post published; anything else marks it failed with the status. Empty: no
    post is sent.

-   **`socialWebhookSecret` (default: empty)**

    With a secret, each request carries
    `X-Nr-Repurpose-Signature: sha256=<hex HMAC-SHA256 of the body>`, so the
    receiver can check that it comes from this installation.

The command `nr_repurpose:publish-due` sends the posts whose time has come.
Add it as a task in the scheduler (it is schedulable) or run it from cron every
few minutes:

```bash
vendor/bin/typo3 nr_repurpose:publish-due
```
