Changelog¶
Alle nennenswerten Änderungen an dieser Extension, neueste zuerst.
[0.9.8] – 2026-08-11¶
Sicherheit¶
- Massenbearbeitung prüft jetzt das Tabellenrecht. Der Schreibweg läuft
über die FAL-Metadaten und damit an der Rechteprüfung des DataHandler
vorbei. Der Modulzugriff allein besagt nur „darf die Übersicht sehen“; ob
jemand Dateimetadaten ändern darf, steht in seinen Tabellenrechten. Vorher
hätte ein Redakteur mit Modulzugriff, aber ohne Schreibrecht auf
sys_file_metadata, den KI-Status jeder Datei setzen können. Administratoren sind wie immer ausgenommen.
Weitere Punkte aus einer gezielten Durchsicht waren bereits in Ordnung und
werden hier nur der Vollständigkeit halber genannt: alle Datenbankzugriffe
laufen über den QueryBuilder mit gebundenen Parametern; das inline
eingebundene EU-Symbol stammt aus einem Enum-gesteuerten Dateinamen und läuft
durch den TYPO3-SvgSanitizer; die Detailebene gibt Redakteursfelder escaped
aus; der CSV-Export im Zusatzpaket entschärft Formel-Präfixe; das XMP-Lesen
verbietet Netzwerkzugriffe (LIBXML_NONET); c2patool wird nur mit einer
Argumentliste aufgerufen, nie über eine Shell.
[0.9.7] – 2026-08-11¶
Behoben¶
- Die Verfallszeit der Erreichbarkeitsprobe wirkte nicht. Die
Voreinstellung nutzt
SimpleFileBackend, und das kennt keine Lebensdauer — die beim Schreiben angegebenen fünf Minuten wurden stillschweigend ignoriert. Die Probe blieb stehen, bis jemand „Jetzt prüfen“ drückte; im Betrieb standen dort Stunden. Das Alter wird jetzt im Code geprüft und hängt damit nicht mehr daran, welches Backend jemand konfiguriert hat.
Geändert¶
- Lesbare Zeitangabe statt roher Sekunden: „gerade geprüft“ oder „vor 3 Minuten geprüft“ statt „vor 13746 s“. Die Einzahl hat einen eigenen Schlüssel, weil „vor 1 Minuten“ falsch ist und sich nicht mit einem Platzhalter retten lässt.
[0.9.6] – 2026-08-11¶
Geändert¶
- Autor ist NET.THINKS, nicht die Privatperson. Das TER zeigt das Feld
author, nichtauthor_company— dort stand der Name des Entwicklers zwischen lauter Firmeneinträgen. Ebenso incomposer.jsonfür Packagist.
[0.9.5] – 2026-08-11¶
Geändert¶
- Titel und Beschreibung auf Englisch in
ext_emconf.phpundcomposer.json. Das TER und Packagist sind internationale Kataloge; dort stand der Eintrag als einziger auf Deutsch zwischen englischen Nachbarn. Labels und Dokumentation der Extension bleiben zweisprachig wie bisher.
[0.9.4] – 2026-08-11¶
Hinzugefügt¶
C2paInspectorProbeInterface(@api) und eine Erreichbarkeitsanzeige im Systemstatus: „✓ Erreichbar (vor 12 s geprüft)“ samt Schaltfläche Jetzt prüfen.
Eingerichtet zu sein und zu antworten sind zwei verschiedene Dinge, und nur das zweite hilft. Schlägt die Probe fehl, wird der Befund zur Warnung.
Die Probe ist fünf Minuten zwischengespeichert. Eine Anfrage je Modulaufruf würde das Backend an einen fremden Server hängen — bei fünf Redakteuren fünffach, und bei einer Zeitüberschreitung mit sekundenlangem Warten. So kostet es höchstens zwölf Anfragen in der Stunde, gleich wie viele Leute hinsehen. Wer eine belastbare Antwort will, drückt die Schaltfläche.
isAvailable() bleibt unverändert ohne Netzzugriff.
Sonstiges¶
- Wöchentlicher TER-Abgleich: prüft, ob der neueste Tag auch veröffentlicht wurde, und legt sonst ein Issue an. Geprüft wird das Ergebnis, nicht die Voraussetzung — das deckt abgelaufene Token, fehlgeschlagene Workflows und vergessene Tags gleichermaßen ab.
[0.9.3] – 2026-08-11¶
Hinzugefügt¶
C2paInspectorDescriptionInterface(@api): Optionaler Begleiter zuC2paInspectorInterface. Der Systemstatus nennt damit den Ort der Prüfung statt nur ihre Möglichkeit.
„In Ordnung“ deckte bisher zwei Fälle ab, die ein Betreiber auseinanderhalten können muss: Die Datei wird auf dem eigenen Server gelesen — oder sie wird dafür woanders hingeschickt. Bei einer Extension, deren Gegenstand Transparenz ist, wäre das Verschweigen die falsche Art von Stille.
Der Systemstatus zeigt jetzt „Die Prüfung erfolgt über: c2patool (lokal)“ bzw. den Namen des Dienstes samt Hinweis, dass Dateien den Server verlassen. Implementierungen ohne diese Schnittstelle verhalten sich unverändert.
[0.9.2] – 2026-08-11¶
Hinzugefügt¶
C2paInspectorInterface(@api): Naht vor dem Auslesen der C2PA-Signatur.C2paServiceimplementiert sie, alle Aufrufer im Kernpaket fragen die Schnittstelle. Ein zweites Paket kann den Alias dekorieren und die Prüfung anderswo erledigen — nötig, weilc2patooleinen Loader unter/lib64braucht, den viele gemanagte Hostings nicht haben. Dokumentiert inDocumentation/Integration.md.
[0.9.1] – 2026-08-11¶
Behoben¶
- Arbeitsliste zählt Dateien statt Metadatensätze.
sys_file_metadataführt je Sprache einen Satz; auf einer Website mit übersetzten Datei-Metadaten erschien deshalb jedes Bild mehrfach — in einer Installation 587 Einträge für 365 Dateien. Kennzahlen, Arbeitsliste, Scan und C2PA-Revalidierung arbeiten jetzt auf der Standardsprache. - Größe der Kennzeichnung. Seit dem engeren Symbolrahmen (0.9.0) füllte der Schriftzug 39 statt 23 Prozent der Symbolhöhe; dieselbe Höhenangabe rendert ihn dadurch 1,7-fach größer als gemessen. Höhen neu abgeleitet.
- Kennzeichnung in Extbase-Listen.
nt:aiFigureundnt:aiLabelbekamen aus Templates von Blog, News und ähnlichen Extensions eine Extbase-Dateireferenz und gaben ihren Inhalt unverändert zurück — ohne Symbol und ohne Fehlermeldung. Solche Referenzen werden jetzt ausgepackt. - Abstände in der Arbeitsliste. Filterzeile und Statusgruppe standen bündig an der Dateiliste bzw. aneinander.
Hinzugefügt¶
- Einstellung
addOnInfoUrl: Adresse, auf die das Modul hinweist, wenn eine Funktion mehr voraussetzt als das Paket mitbringt — derzeit bei fehlendemc2patool, das sich auf vielen gemanagten Hostings nicht installieren lässt. Nur ein Link: keine Lizenzprüfung, keine Freischaltung, kein Rückkanal. Leeres Feld schaltet den Hinweis ab.
[0.9.0] – 2026-08-09¶
Erste Veröffentlichung. Funktional vollständig: Erfassung, automatische Vorschläge, Kennzeichnung im Frontend, Nachweisführung und die Erweiterungspunkte stehen. Beta, weil die Extension noch keine Laufzeit in fremden Installationen hinter sich hat — die Schnittstellen gelten ab hier als stabil.
Hinzugefügt¶
- Datenmodell für die KI-Transparenz von Mediendateien: KI-Anteil,
Kennzeichnungsmodus, Ausnahmegrund, Symbol, Beschriftung, eingesetztes
System, Erzeugungsdatum, Prüfvermerk sowie Felder für erkannte
Herkunftsdaten (C2PA, IPTC
DigitalSourceType). - Stichtagslogik zum 2. August 2026. Ein nicht gesetztes Erzeugungsdatum gilt ausdrücklich nicht als „vor Stichtag“.
- Backend-Reiter „KI-Transparenz“ in den Datei-Metadaten mit fünf Paletten. Felder werden nur eingeblendet, wenn sie zur Sache gehören.
- Regelwerk (
DisclosureRuleService), das entscheidet, ob und wie gekennzeichnet wird. Ein unbestätigter Vorschlag aus der automatischen Erkennung führt nie zu einer Kennzeichnung im Frontend. - Barrierefreie Frontend-Ausgabe über die ViewHelper
aiFigure,aiLabelundhasLabel: EU-Symbol inline als SVG, aufklappbare Detailebene mit Tastaturbedienung, kein Layout-Shift. - Degradation ohne die EU-Icons: Fehlen die Dateien, wird ein Textlabel ausgegeben statt eines leeren Elements.
- Site Set
AI Markmit Einstellungen für Symbolposition, Symbolgröße, Detailebene und den Umgang mit Dateien unbekannter Herkunft. - Audit-Tabelle
tx_ntaimark_audit(append-only) als Grundlage der Nachweisführung. - Kontrastlogik: Der Bildbereich hinter dem Symbol wird gemessen; die deckende Plakette entfällt nur, wenn die gewählte Symbolfarbe dort an jedem Messpunkt 4,5:1 erreicht. Jeder Fehlerpfad führt zurück zur Plakette.
- FileRenderer für Audio und Video: kennzeichnet ohne Template-Anpassung,
indem er die Ausgabe des Core-Renderers umschließt. Per Site-Einstellung
ntAimark.useFileRendererabschaltbar. Bilder deckt er bewusst nicht ab. -
Barrierefreiheits-Gate in der CI: Playwright mit axe-core gegen WCAG 2.1 AA, dazu Prüfungen auf Tastaturbedienbarkeit, eindeutige
aria-controls-Ziele und ausbleibenden Layout-Shift. -
Automatische Erkennung beim Upload und beim Ersetzen einer Datei, in drei Stufen: signiertes C2PA-Manifest, IPTC
DigitalSourceTypeaus XMP, zuletzt eine Signaturliste über EXIF-Felder. Das Ergebnis ist immer nur ein Vorschlag; ein von einem Menschen bestätigter Status wird nie überschrieben. Liegt das Erzeugungsdatum vor dem Stichtag, wird zusätzlichpre_cutoffals Ausnahmegrund vorgeschlagen. - Protokollierung der automatischen Erkennung in
tx_ntaimark_audit(source = auto_detect), mit denormalisiertem Benutzernamen. -
Extension-Einstellungen für Pfad und Zeitlimit von
c2patoolsowie für zusätzliche EXIF-Signaturen. -
Metadaten-Erhalt: Das XMP-Paket wird nach der Bildverarbeitung in die abgeleitete JPEG-Datei zurückgeschrieben, ohne die Strip-Konfiguration von TYPO3 anzutasten. C2PA-Signaturen werden ausdrücklich nicht übertragen — sie sind nach dem Skalieren gebrochen, und eine mitkopierte Signatur würde die abgeleitete Datei als manipuliert ausweisen. Messergebnis siehe
Documentation/Metadata.md. -
Textkennzeichnung: Felder auf
pagesundtt_content, weitere Tabellen über die Extension-Einstellungen nachrüstbar. Eigenes Regelwerk — die Pflicht greift nur bei Angelegenheiten von öffentlichem Interesse und entfällt bei redaktioneller Prüfung mit benannter verantwortlicher Person. Ein Häkchen ohne Namen hebt die Pflicht nicht auf. Ausgabe übernt:textNoticeals Satz statt als Symbol. -
Backend-Modul „KI-Transparenz“: Übersicht je Speicher (geprüft, offen, gebrochene Signaturen), filterbare Arbeitsliste mit Direktsprung in die Metadatenbearbeitung, Massenbearbeitung mit einem Protokolleintrag je Datei, Systemstatus und der Hinweis, dass das Modul keine Rechtsberatung ersetzt.
-
SystemStatusCheck: meldet fehlende EU-Symbole, fehlendes
c2patool, eine Bildverarbeitung, die Metadaten zerstört, und eine fehlende PHP-Erweiterungexif— alles Fälle, in denen die Extension bewusst leise degradiert und der Betreiber es trotzdem wissen sollte. -
CLI-Befehle
aimark:scan,aimark:reportundaimark:verify, alle mit--dry-runund über den Scheduler planbar.aimark:scan --forcefrischt bestehende Vorschläge auf, rührt einen von einem Menschen bestätigten Datensatz aber nie an.aimark:verifyprüft Signaturen erneut, weil eine beim Upload gültige Signatur später brechen kann. -
Durchgängige Protokollierung: Jede Änderung an den Transparenzfeldern landet im Protokoll — die redaktionelle Bearbeitung im Formular ebenso wie Schreibvorgänge anderer Extensions über die FAL-API, die Massenbearbeitung im Backend-Modul, die automatische Erkennung und die CLI-Befehle. Der vorherige Wert stammt aus dem Protokoll selbst; ein bereits erfasster Vorgang wird dadurch kein zweites Mal geschrieben.
-
Event-Schnittstelle
AiContentGeneratedEvent(@api): Wer KI-Inhalte erzeugt, meldet sie und die Kennzeichnung entsteht ohne redaktionellen Zusatzaufwand. Keine harte Abhängigkeit in eine der beiden Richtungen. Gemeldete Medien werden zum Vorschlag, nicht zur Feststellung; gemeldete Texte als Tatsache erfasst, weil die meldende Extension sie selbst geschrieben hat; ein gemeldeter Alt-Text ändert den Status des Bildes nicht, weil er nichts darüber aussagt, wie das Bild entstanden ist. -
Dokumentation:
Documentation/nach TYPO3-Konvention und parallel dazu eine zweisprachige MkDocs-Site unterdocs/(Material-Theme, i18n), nach demselben Muster wie nt_ai und nt_lingua. -
Erweiterungspunkte für ein späteres Zusatzpaket, alle
@apiund inDocumentation/Integration.mddokumentiert:LabelDecisionModifierInterface, die EventsAfterLabelDecisionEventundAfterStatusChangedEvent,IconCompositorInterfaceundLabelInjectorInterface(beide mit Durchreiche-Standard), ein benannter Platz in der Middleware-Kette sowie derProcessedFileDeclarationResolver.AuditServiceist beschreibbar. Keinerlei Lizenz-, Aktivierungs- oder Domainprüfung — ein Test sichert das ab. -
Begleitbeschriftung in der Sprache der Website neben dem Symbol (
ntAimark.showTextLabel, Vorgabe aus). Die offiziellen Symbole tragen einen englischen Schriftzug und sind nicht übersetzbar; der Verhaltenskodex empfiehlt stattdessen eine Beschriftung in einfacher Sprache daneben. - Detailebene als Option (
ntAimark.showDetails, Vorgabe aus). Art. 50 Abs. 4 verlangt die Offenlegung, dass KI beteiligt war — nicht das System, den Anbieter oder das Datum. Ist sie eingeschaltet, ist das Symbol selbst die Schaltfläche; eine zweite Fläche unter dem Bild gibt es nicht mehr. - Backend-Modul: Ringdiagramme für Prüffortschritt und Verteilung, Kennzahlen über alle Speicher, farbige Statusplaketten, Blätterfunktion, Speicherfilter und dauerhafte Filterwerte. Reines SVG mit Präsentationsattributen, damit eine Content Security Policy nichts davon verwirft.
- Formatvarianten ausgenommen: automatisch erzeugte WebP- und AVIF-Fassungen
(
bild.jpg.webp) erscheinen nicht in Arbeitsliste und Kennzahlen (hideDerivedFormats). Ein hochgeladenesbild.webpbleibt drin. - Prüfung auf Medien beschränkt (
reviewedMimeTypes, Vorgabeimage/*,audio/*,video/*,application/pdf) — für ein Stylesheet gibt es keine sinnvolle KI-Kennzeichnung. - Architekturdokumentation mit sieben Diagrammen, zweisprachig, dazu Screenshots aus einer laufenden Installation.
- Die offiziellen EU-Symbole liegen jetzt bei — zwölf SVG für die Ausgabe
und zwölf PNG für das Einbrennen durch das Zusatzpaket. Bisher mussten sie
von Hand heruntergeladen, umbenannt und abgelegt werden; bis dahin zeigte die
Extension nur Textlabel. Herkunft und Nutzungsbedingungen stehen in
Resources/Public/Icons/Eu/README.md. Die Dateien sind unveränderte Originale, lediglich nach einem einheitlichen Schema benannt. - Backend-Modul lesbarer. Die Plaketten verwendeten Bootstraps
bg-*, das nur den Hintergrund faerbt und die Schriftfarbe auf dem dunklen Standardwert laesst — schwarze Schrift auf Gruen. Jetzt die Backend-eigenenbadge-*-Varianten, die Vorder- und Hintergrund gemeinsam setzen und dem hellen wie dem dunklen Backend folgen (gemessen 5,5:1 bis 9,4:1 statt darunter). Die Kartenueberschriften sind echte Ueberschriften mitcard-titlestatt Fließtext. - Speicher heissen jetzt nach ihrem Inhalt. „Storage 0“ ist der Ort, an
dem TYPO3 alles ablegt, was ausserhalb einer eingerichteten Dateiablage
liegt — der Name sagte niemandem etwas, der die Zeile abarbeiten soll. Er
heisst jetzt „Dateien ausserhalb der Dateiablagen“; unbenannte Ablagen
heissen „Dateiablage
“. - Die Plakette bestand zur Hälfte aus Leerraum. Die offiziellen Dateien
setzen die Zeichnung mit breitem Rand auf eine größere Leinwand: Bei
„AI GENERATED“ belegt sie 1384 × 266 von 1790 × 567 Einheiten, also 47 % der
Höhe. Unverändert eingebettet wirkte das Zeichen kleiner, als es ist. Der
sichtbare Ausschnitt wird jetzt auf die Zeichnung verengt — vermessen mit
getBBox()über die ausgelieferten Dateien, nicht geschätzt. Die Grafik selbst bleibt unangetastet; eine Datei ohne vermessene Fläche behält ihren Rahmen. - Kennzeichnung blieb in Extbase-Listen stumm aus. Blog, News und
vergleichbare Extensions liefern in ihren Templates eine Extbase-Dateireferenz.
Die implementiert
FileInterfacenicht, weshalb der ViewHelper die Kinder unverändert zurückgab: kein Symbol, kein Fehler, kein Hinweis. Er packt solche Referenzen jetzt selbst aus.
Bekannte Einschränkungen¶
- Der Metadaten-Erhalt deckt nur JPEG ab; PNG und WebP verlieren ihr XMP-Paket bei der Verarbeitung.
- Content Credentials überleben die Bildverarbeitung grundsätzlich nicht.
- Ohne
c2patoolentfällt die C2PA-Stufe der Erkennung; XMP und EXIF greifen weiterhin. -
TYPO3 14.3 verwarnt
ext_emconf.php. Die Datei bleibt bestehen, solange TYPO3 13.4 unterstützt wird. -
Ein Bild, das als CSS-Hintergrund eingebunden ist (typisch für Hero-Banner), wird nicht automatisch gekennzeichnet — es gibt kein Bildelement, an dem die Überlagerung hängen könnte. Der ViewHelper
nt:aiLabellässt sich im umgebenden Container setzen; automatisch findet die Extension solche Bilder nicht. - Unterhalb von rund 180 px Bildbreite passt die Begleitbeschriftung nicht mehr
neben das Symbol. Für Vorschaubilder
showTextLabel=“false“am Aufruf setzen.