Handbuch · Kapitel 4.3

KI-Kennzeichnung in Sanity: im Schema entscheiden, im Frontend zeigen

KI-generiertes Bild aus einem Sanity-Projekt mit sichtbarer Kennzeichnung nach EU AI Act
Das Wichtigste in Kürze
  • Sanity rendert keine Website – im Studio wird entschieden, im Frontend dargestellt.
  • Ein Bild liegt einmal und wird beliebig oft referenziert – die Frage „ist das KI?” hat also eine Antwort. Einen Platz dafür am Asset bietet Sanity aber nicht.
  • Bilder in Portable Text laufen über eine eigene Komponente – dort wird die Kennzeichnung am häufigsten vergessen.
  • Vorher klären, welche Bilder überhaupt betroffen sind – pauschal alles zu markieren entwertet die Kennzeichnung.

Was Sanity ist: Ein Headless-CMS. Es hält Inhalte strukturiert vor und liefert sie über eine Schnittstelle aus, baut aber selbst keine Seiten – das übernimmt ein eigenes Frontend. Redigiert wird im Studio, abgefragt mit der Abfragesprache GROQ.

Sanity unterscheidet sich von allen anderen Systemen in diesem Kapitel durch einen Punkt, der die ganze Umsetzung bestimmt: Sanity rendert keine Website. Es hält Inhalte vor und liefert sie über eine Schnittstelle aus. Was der Besucher sieht, baut ein eigenes Frontend – Next.js, Astro, Nuxt, was auch immer.

Für die Kennzeichnung heißt das: Im Studio wird entschieden, im Frontend wird dargestellt. Beides muss zusammenpassen, sonst steht die Angabe in der Datenbank und niemand sieht sie.

Was bei Sanity besonders ist

Ein Asset liegt einmal, wird aber beliebig oft referenziert. Lädt jemand ein Bild hoch, entsteht ein eigenes Dokument vom Typ sanity.imageAsset. Jeder Beitrag, jede Seite verweist nur darauf. Das ist die wichtigste Eigenschaft für unser Thema – mehr dazu gleich.

Es gibt keine Ordner. Die naheliegende Ordnung ist stattdessen der Dokumenttyp, in dem ein Bild verwendet wird. „Alle Bilder in Wissensartikeln” ist eine Aussage, die ein Redakteur treffen kann. Wer das Media-Plugin einsetzt, hat mit dessen Tags eine zweite Ebene.

Alt-Texte liegen unterschiedlich. Sanity kennt am Asset ein Feld altText, viele Projekte pflegen den Alt-Text aber am Bildfeld im Dokument, weil er je nach Verwendung anders lauten soll. Beides ist verbreitet, und es lohnt sich zu wissen, welchen Weg Ihr Projekt geht.

Die Antwort gehört ans Bild – Sanity hat dafür aber keinen Platz

Die Frage „ist dieses Bild KI-erzeugt?” hat genau eine Antwort. Sie hängt am Bild, nicht daran, wo es eingebunden ist.

Sanity trennt beides bewusst: Am Asset-Dokument stehen nur die eingebauten Felder – title, description und altText. Alles, was Sie im Schema an einem Bildtyp definieren, landet dagegen am Bildfeld im Dokument, also an der Verwendungsstelle. Für Zuschnitt und Bildunterschrift ist diese Trennung richtig, denn die dürfen sich je Verwendung unterscheiden. Für „ist das KI?” ist sie unpraktisch, weil die Antwort immer dieselbe ist.

Ein eigenes Feld direkt am Asset ginge nur, indem Sie das Dokument sanity.imageAsset selbst beschreiben – über eine eigene Eingabekomponente oder ein Script. Das ist möglich, aber deutlich mehr Aufwand als ein Schema-Feld, und Sie bauen sich damit eine Sonderlösung, die jeder im Team kennen muss.

Weg B lebt deshalb mit dieser Einschränkung. Weg C umgeht sie, weil das Register die Antwort am Asset führt, statt sie in Sanity zu speichern.

Was vorher geklärt sein muss

Bevor Sie das Schema anfassen, muss feststehen, welche Medien betroffen sind. Die Pflicht greift nicht bei allem, was mit KI zu tun hatte, sondern bei Deepfakes – siehe Was gekennzeichnet werden muss und Deepfake, KI-generiert, KI-bearbeitet.

Für eine erste Einordnung genügen ein paar Fragen im Kennzeichnungs-Check.

Was die Kennzeichnung leisten muss

Der Inhalt liegt bei Sanity, zu sehen bekommt ihn jemand woanders – und dort gelten die Anforderungen. Artikel 50 Absatz 5 verlangt, dass die Information spätestens beim ersten Ansehen bereitsteht, klar und eindeutig ist und den Barrierefreiheitsanforderungen entspricht. Der Verhaltenskodex der EU-Kommission wird bei der Platzierung konkreter: deutlich wahrnehmbar, ohne Elemente darüber, in den Inhalt eingebettet, möglichst auch beim Teilen oder Herunterladen noch sichtbar. Der Kodex ist eine freiwillige Selbstverpflichtung – die Pflicht selbst steht in der Verordnung.

Für Sanity folgt daraus:

Drei Wege – welcher passt?

Weg A, von Hand im Frontend. Sie schreiben den Hinweis direkt in die Komponente, die das Bild rendert. Sofort wirksam, aber pro Komponente einzeln – und die Redaktion sieht im Studio nichts davon.

Weg B, über ein Feld im Schema. Die Frage wird beim Pflegen beantwortet, die Antwort hängt am Dokument. Wächst mit dem Bestand – setzt einen Schema-Deploy voraus und greift nur dort, wo das Frontend das Feld auch ausliest.

Weg C, automatisiert. Ein Script kennzeichnet anhand einer zentral gepflegten Liste, unabhängig davon, wo ein Bild eingebunden ist. Dafür braucht es ein Werkzeug, das diese Liste führt.

Die Wege schließen sich nicht aus. Viele fangen mit A an und stellen um, wenn der Bestand wächst.

Weg A: von Hand im Frontend

Sinnvoll bei überschaubaren Projekten oder wenn nur einzelne Bilder betroffen sind: Der Hinweis steht direkt in der Komponente, die das Bild rendert.

<figure>
  <img src={urlFor(bild).url()} alt={bild.alt} />
  <figcaption className="ki-hinweis">
    <img src="/eu-icons/ai_generated_black.svg" alt="EU-Symbol: KI-generiert"
         width={20} height={20} />
    Mit KI erstellt
  </figcaption>
</figure>

Das erfüllt die Anforderungen sauber: sichtbar am Inhalt, als Text lesbar, mit Alt-Text am Symbol. Die drei offiziellen EU-Symbole dürfen Sie frei verwenden, alle Fassungen stehen in Die offiziellen EU-Icons.

Für das Symbol müssen Sie nichts entwerfen: Die EU-Kommission hat im Juni 2026 drei Zeichen veröffentlicht, die frei genutzt werden dürfen. Welches davon passt, hängt davon ab, wie stark KI beteiligt war:

EU-Basissymbol AI Basissymbol

KI war an der Erstellung beteiligt.

EU-Symbol AI generated Vollständig KI-generiert

Komplett von einer KI erzeugt, ohne von Menschen geschaffene Elemente.

EU-Symbol AI modified Teilweise KI-verändert

Bestehender Inhalt wurde mit KI verändert, etwa ein ausgetauschtes Gesicht.

Es gibt sie in Schwarz, Weiß und je einer halbtransparenten Fassung. Alle zwölf Dateien und die Platzierungsregeln stehen in Die offiziellen EU-Icons.

Ein Hinweis, der oft untergeht: Die Verwendung dieser Symbole ist freiwillig, die Kennzeichnungspflicht ist es nicht. Und die Kommission hat getestet, dass die Zeichen deutlich besser verstanden werden, wenn ein kurzer Text danebensteht – das Symbol allein sagt vielen Menschen noch nichts.

Der Haken: Die Information steht im Code, nicht im Inhalt. Redakteure können nichts daran ändern, und bei jedem neuen Bild muss jemand ins Repository.

Weg B: ein Feld im Schema

Der übliche Weg – und der einzige, bei dem die Redaktion die Frage selbst beantworten kann, ohne dass jemand ins Repository muss.

Wie oben beschrieben landet die Angabe dabei am Bildfeld, nicht am Asset. Was Sie tun können: einen eigenen Bildtyp definieren und den überall verwenden, statt image direkt. Dann steht das Feld wenigstens an einer Stelle im Schema und sieht in jedem Dokument gleich aus:

// schemas/objects/bild.ts
import { defineType, defineField } from 'sanity';

export const bild = defineType({
  name: 'bild',
  title: 'Bild',
  type: 'image',
  options: { hotspot: true },
  fields: [
    defineField({
      name: 'alt',
      type: 'string',
      title: 'Alt-Text',
    }),
    defineField({
      name: 'kiErzeugt',
      type: 'boolean',
      title: 'Mit KI erstellt oder verändert',
      description:
        'Nur setzen, wenn der Inhalt reale Personen, Orte oder Ereignisse zeigt – siehe Handbuch: Deepfake, KI-generiert, KI-bearbeitet.',
      initialValue: false,
    }),
  ],
});

Im Frontend hängt der Hinweis dann an einer Stelle:

export function Bild({ wert }: { wert: BildTyp }) {
  return (
    <figure>
      <img src={urlFor(wert).url()} alt={wert.alt ?? ''} />
      {wert.kiErzeugt && (
        <figcaption className="ki-hinweis">Mit KI erstellt</figcaption>
      )}
    </figure>
  );
}
Portable Text nicht vergessen

Bilder im Fließtext laufen über eine eigene Komponente. Wenn Sie den Bildtyp dort nicht ebenfalls ergänzen, entsteht der unangenehmste Fall: Die Kennzeichnung sieht auf den meisten Seiten richtig aus – und fehlt ausgerechnet in den Artikeln, in denen die meisten Bilder stehen.

Prüfen Sie nach dem Einbau eine Seite mit einem Bild im Fließtext, nicht nur ein Hero-Bild.

Was dieser Weg leistet: Die Entscheidung fällt dort, wo der Inhalt gepflegt wird, und neue Beiträge sind von Anfang an richtig ausgezeichnet.

Was er nicht leistet: Wird dasselbe Bild an anderer Stelle neu eingesetzt, ist es dort wieder unmarkiert – jemand muss das Häkchen erneut setzen. Bei einem kleinen, gepflegten Projekt fällt das nicht ins Gewicht; bei mehreren hundert Assets und mehreren Redakteuren wird daraus die Lücke, die man erst bemerkt, wenn jemand nachfragt.

Weg C: automatisiert mit wirklich.ai

Ab ein paar hundert Medien wird Handarbeit unwirtschaftlich, spätestens beim zweiten Durchgang. Und anders als bei Weg A und B haben Sie hier am Ende einen Nachweis darüber, wer wann was entschieden hat.

Anbindung einrichten

In der wirklich.ai App wählen Sie Sanity CMS und tragen zwei Angaben ein:

Ist das Dataset privat, kommt ein Lese-Token dazu: in sanity.io/manage Ihr Projekt öffnen, dann Settings → API → Tokens → Add new token, Rolle Viewer. Leserechte genügen – der Abgleich schreibt nichts nach Sanity zurück.

Neue Datasets legt Sanity standardmäßig öffentlich an; dann ist der Token nicht nötig. Ob Ihres öffentlich oder privat ist, steht in derselben Ansicht unter Datasets.

Was gelesen wird

Der Abgleich fragt den Asset-Bestand ab, nicht die Dokumente. Das ist eine bewusste Entscheidung mit zwei Folgen:

Der Bestand ist vollständig. Auch hochgeladene, aber noch nicht eingebundene Dateien tauchen auf. Für ein Register ist das der ehrlichere Stand – und es fällt auf, wenn jemand etwas hochlädt und erst Wochen später verwendet.

Jedes Bild erscheint einmal. Nicht einmal pro Verwendung. Genau das Problem aus der Merke-Box oben löst sich damit von selbst: eine Entscheidung je Bild, gültig überall.

Zusätzlich holt der Abgleich den Dokumenttyp, in dem ein Asset verwendet wird, und – falls vorhanden – die Tags des Media-Plugins. Beides steht danach als Bezugsgröße für Regeln zur Verfügung.

Regeln statt Einzelentscheidungen

Damit lassen sich Aussagen treffen wie „alle Bilder in Wissensartikeln sind echte Fotos ohne KI-Einsatz” oder „alles mit dem Tag Illustration ist erkennbar gezeichnet”. Beim Prüfen bleibt dann pro Medium höchstens eine Frage übrig – und mit „Alle auswählen” haken Sie einen ganzen Dokumenttyp in einem Zug ab.

Einbau der Scripte

Die Scripte kommen ins Frontend, nicht ins Studio – dort sieht sie kein Besucher. Am besten in das Layout, das alle Seiten verwenden, vor dem schließenden </body>:

<!-- wirklich.ai · KI-Kennzeichnung -->
<script src="https://cdn.wirklich.ai/label.js"
        data-wirklich-site="IHRE-SITE-ID" async></script>

Unter 10 kB, lädt asynchron, setzt keine Cookies. Bei Next.js verwenden Sie dafür die Script-Komponente mit strategy="afterInteractive", bei Astro ein <script> mit is:inline.

Transparenz-Protokoll auf eine Unterseite, verlinkt aus Footer oder Impressum:

<!-- wirklich.ai · KI-Transparenz-Protokoll -->
<div id="wirklich-protokoll"></div>
<script src="https://cdn.wirklich.ai/protokoll.js"
        data-wirklich-site="IHRE-SITE-ID" async></script>

Trust-Badge, optional, siehe Das wirklich.ai Signet – und den Abschnitt am Ende dieses Kapitels.

Die Site-ID finden Sie in der wirklich.ai App. Dort hinterlegen Sie auch die Domains, auf denen die Scripte laufen dürfen – auf allen anderen bleiben sie stumm. Bei einem Headless-Setup ist das besonders praktisch, weil neben der Live-Domain meist noch Vorschau-Adressen des Hosters existieren.

Der Ablauf in Kürze
  1. Projekt-ID und Dataset in der wirklich.ai App eintragen, Abgleich starten.
  2. Die gefundenen Medien durchgehen und einstufen – geführt, Frage für Frage. Mit Regeln lassen sich ganze Dokumenttypen in einem Zug abhaken.
  3. Scripte ins Frontend einbauen. Ab jetzt trägt jedes eingestufte Medium seinen Hinweis.
  4. Der Abgleich läuft automatisch weiter und meldet neue Assets.

Die Basisnutzung der wirklich.ai App ist dauerhaft kostenlos – kostenloses Konto erstellen.

Sanity-spezifische Fallstricke

Alle drei folgen aus derselben Eigenschaft: Sanity hält den Inhalt, ein anderes System zeigt ihn.

Eine Änderung am Frontend kann die Kennzeichnung stillschweigend entfernen. Ein Redesign, eine überarbeitete Bildkomponente, ein neues Template – das Feld im Dokument bleibt gesetzt, der Hinweis auf der Seite verschwindet. Sanity merkt davon nichts, weil es die Seite nicht rendert. Anders als bei einem CMS, das Inhalt und Darstellung zusammen ausliefert, gibt es hier keine Stelle, die den Verlust melden würde. Nehmen Sie eine Seite mit einem gekennzeichneten Bild in die Abnahme nach jedem größeren Frontend-Deploy auf.

Ein Feld reicht nur, wenn jedes Frontend es kennt. Headless heißt oft mehr als eine Website – eine Kampagnenseite aus einem zweiten Repository, eine zweite Sprache mit eigenem Aufbau. Das Feld liegt einmal im Datenmodell, ausgewertet werden muss es überall einzeln. Und wo es fehlt, fällt es niemandem auf, weil das Studio überall gleich aussieht.

Nicht jedes Bild auf der Seite kommt aus Sanity. Ein Headless-Frontend bringt eigene Medien mit: Logo, Hintergrundgrafiken, Illustrationen im Layout, das Hero-Bild einer handgebauten Landingpage. Die liegen im Repository und tauchen im Studio nie auf – der Abgleich liest den Asset-Bestand und kennt sie deshalb nicht. Für die Pflicht zählt aber, was der Besucher sieht.

Was davon bei Weg C entfällt

Die Fallstricke von oben – und was aus ihnen wird

Frontend-Änderungen. Das Script arbeitet am ausgelieferten HTML, nicht an Ihren Komponenten. Ein Redesign kann die Kennzeichnung also nicht mehr einzeln verlieren – es bleibt ein Punkt, an dem etwas schiefgehen kann, nämlich das Script-Tag im Layout, statt jeder Bildkomponente im Projekt.

Mehrere Frontends. Der Bestand ist einer, und die Entscheidungen gelten für alle. Das Script muss trotzdem in jedes Frontend – weniger Arbeit, nicht keine.

Bilder außerhalb von Sanity. Tragen Sie sie einmalig über ihre Adresse nach. Danach stehen sie im selben Register und werden behandelt wie alle anderen.

Haltung zeigen: der wirklich.ai Transparenz-Pledge

Wer Aufwand in Transparenz steckt, muss das nicht im Hintergrund verstecken. Mit dem wirklich.ai Transparenz-Pledge setzen Sie ein Zeichen für ehrliche Kommunikation im Netz – unabhängig davon, ob Sie KI-Medien einsetzen und offen ausweisen oder vollständig auf echte Fotografie setzen.

Das Signet für Ihren Footer verlinkt direkt auf Ihr öffentliches Transparenz-Protokoll. Es zeigt Kundschaft, Partnern und Behörden auf einen Blick, dass auf Ihrer Website nicht nur behauptet, sondern geprüft wird:

Es behauptet bewusst wenig: keine Zertifizierung, keine Rechtskonformität, sondern nur, dass hier gekennzeichnet und darüber Buch geführt wird – nachprüfbar über das verlinkte Protokoll. Was es genau aussagt und was nicht, steht in Das wirklich.ai Signet.

Andere Systeme

Die Anforderungen sind überall dieselben, die Umsetzung nicht. Betreuen Sie weitere Websites, finden Sie hier die passende Anleitung:

Häufige Fragen

Muss ich jedes KI-Bild in Sanity kennzeichnen?

Nein. Die Pflicht aus Artikel 50 Absatz 4 greift bei Deepfakes – also bei Inhalten, die reale Personen, Orte oder Ereignisse zeigen und für echt gehalten werden könnten. Abstrakte Hintergründe, Icons und erkennbar gezeichnete Illustrationen fallen in der Regel nicht darunter. Die Abgrenzung steht in Deepfake, KI-generiert, KI-bearbeitet, für eine schnelle Einordnung genügt der Kennzeichnungs-Check.

Kann die Kennzeichnung im Sanity Studio passieren?

Nein – und das ist keine Einschränkung, sondern die Bauweise. Sanity liefert Inhalte aus, es rendert keine Website. Sichtbar wird ein Hinweis erst in dem Frontend, das die Inhalte abruft. Im Studio wird entschieden, im Frontend dargestellt.

Soll das Kennzeichen ans Bild oder an die Stelle, wo es verwendet wird?

Sachlich ans Bild – ein Asset liegt in Sanity einmal und wird von beliebig vielen Dokumenten referenziert. Sanity bietet dafür allerdings keinen Platz: Am Asset-Dokument stehen nur die eingebauten Felder title, description und altText; eigene Felder aus dem Schema landen immer am Bildfeld im Dokument, also an der Verwendungsstelle. Wer die Angabe wirklich am Asset führen will, müsste sanity.imageAsset selbst beschreiben oder ein Register außerhalb von Sanity nutzen.

Brauche ich einen Token für die Anbindung?

Nur wenn das Dataset privat ist. Öffentliche Datasets lassen sich ohne Zugangsdaten lesen; dann genügen Projekt-ID und Dataset-Name. Für private Datasets erzeugen Sie in sanity.io unter API → Tokens einen Token mit der Rolle „Viewer“ – Leserechte reichen, es wird nichts geschrieben.

Werden auch Bilder erfasst, die noch nirgends eingebunden sind?

Ja. Der Abgleich liest den Asset-Bestand direkt, nicht die Dokumente. Damit erscheinen auch hochgeladene, aber noch nicht verwendete Dateien im Register. Für ein Nachweisdokument ist das der ehrlichere Bestand – und es fällt auf, wenn jemand etwas hochlädt und später einbindet.

Was ist mit Bildern in Portable Text?

Die werden genauso erfasst wie alle anderen, denn auch sie sind Assets. Für die Darstellung müssen Sie den Bild-Typ in Ihrer Portable-Text-Komponente einmal ergänzen – sonst rendert das Frontend dort ein Bild ohne Hinweis, während es an anderen Stellen richtig aussieht.

Funktioniert das auch mit dem Media-Plugin?

Ja, und es hilft sogar. Die Tags, die das Media-Plugin an Assets vergibt, liest der Abgleich als Bezugsgröße für Regeln aus. Damit lässt sich eine Aussage wie „alles mit dem Tag Illustration ist erkennbar gezeichnet“ auf einmal treffen, statt jedes Bild einzeln zu beantworten.

Quellen

Dieser Beitrag gibt den Verordnungstext und benannte Quellen wieder. Er ist keine Rechtsberatung und ersetzt im Einzelfall keine anwaltliche Prüfung.

Angaben zur Rechtslage, zu deren Auslegung sowie zu Funktionen, Oberflächen und Schnittstellen fremder Systeme geben den Stand zum oben genannten Datum wieder. Beides kann sich jederzeit und ohne Ankündigung ändern. Für Aktualität, Richtigkeit und Vollständigkeit übernehmen wir keine Gewähr; eine Haftung für Schäden aus der Nutzung dieser Inhalte, der beschriebenen Anleitungen oder der Code-Beispiele ist ausgeschlossen, soweit gesetzlich zulässig. Genannte Produkt- und Firmennamen gehören ihren jeweiligen Inhabern; eine Verbindung zu ihnen besteht nicht.

AI modified – EU-PiktogrammDieser Text wurde mit Unterstützung von KI erstellt und redaktionell geprüft.
Sie brauchen Hilfe bei der technischen Umsetzung? Support kontaktieren →

Support kontaktieren

Ob Einbau, Einstufung oder Trainings-Signale – schreiben Sie uns, wo es hakt. Wir sehen uns Ihre Website an und melden uns persönlich bei Ihnen.