Download the PHP package netzhirsch/contao-ai-tag-bundle without Composer

On this page you can find all versions of the php package netzhirsch/contao-ai-tag-bundle. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.

FAQ

After the download, you have to make one include require_once('vendor/autoload.php');. After that you have to import the classes with use statements.

Example:
If you use only one package a project is not needed. But if you use more then one package, without a project it is not possible to import the classes with use statements.

In general, it is recommended to use always a project to download your libraries. In an application normally there is more than one library needed.
Some PHP packages are not free to download and because of that hosted in private repositories. In this case some credentials are needed to access such packages. Please use the auth.json textarea to insert credentials, if a package is coming from a private repository. You can look here for more information.

  • Some hosting areas are not accessible by a terminal or SSH. Then it is not possible to use Composer.
  • To use Composer is sometimes complicated. Especially for beginners.
  • Composer needs much resources. Sometimes they are not available on a simple webspace.
  • If you are using private repositories you don't need to share your credentials. You can set up everything on our site and then you provide a simple download link to your team member.
  • Simplify your Composer build process. Use our own command line tool to download the vendor folder as binary. This makes your build process faster and you don't need to expose your credentials for private repositories.
Please rate this library. Is it a good library?

Informations about the package contao-ai-tag-bundle

Contao AI Tag Bundle

Contao 5.3 (LTS) bis 5.7+, PHP 8.1+. Alle genutzten Contao-APIs existieren unverändert in beiden Zweigen – es gibt keine Kompatibilitätsschicht und keine versionsabhängigen Codepfade.

Kennzeichnet KI-generierte Bilder in Contao so, dass die Kennzeichnung jede erzeugte Bildgröße überlebt: Redaktion markiert eine Datei (oder einen ganzen Ordner) in der Dateiverwaltung, das Bundle brennt den Hinweis beim Erzeugen jeder Bildgröße ein – sprachsensitiv, am Bildrand und möglichst außerhalb des wichtigen Bildbereichs.

Kein Rechtsrat. Das Bundle ist ein Werkzeug zur Umsetzung einer Kennzeichnung. Die Entscheidung, welche Inhalte kennzeichnungspflichtig sind, trifft der Betreiber. Art. 50 EU AI Act verlangt die Kennzeichnung insbesondere für Deepfakes und ohne redaktionelle Prüfung veröffentlichte Texte; künstlerische, satirische und fiktionale Werke sind ausgenommen. Deshalb kennzeichnet das Bundle bewusst nichts automatisch, sondern nur, was die Redaktion markiert.

Funktionsumfang

Installation

Danach unter System → Lizenz KI-Kennzeichnung die Testphase starten oder das Abonnement abschließen – ohne aktive Lizenz wird die Kennzeichnung nicht eingebrannt (siehe Lizenz und Aktivierung). Voraussetzung ist ext-sodium (in üblichen PHP-Builds vorhanden) und ein laufender Cron.

Zusätzlich muss eine TrueType-Schrift verfügbar sein. Ohne Schrift bleiben Bilder ungekennzeichnet (mit Fehlereintrag im Log) – die Bildauslieferung selbst bricht nie ab. Gängige System-Schriften werden automatisch gefunden (DejaVu, Liberation, Arial, Segoe UI). Auf schlanken Containern ohne Schriftpaket den Pfad explizit setzen:

Konfiguration

Schrift und Größe

Schlüssel Standard Bedeutung
font_path null Absoluter Pfad zur TrueType-Schrift. Ohne Angabe automatische Suche.
min_font_size 11 Kleinste Schriftgröße in Pixel.
relative_font_size 0.03 Wunsch-Schriftgröße relativ zur Bildbreite.
max_font_size 48 Größte Schriftgröße. Ohne Deckel würde das Label auf einem 3000px-Hero 90px groß und damit zum Bildelement.

Gestaltung

Schlüssel Standard Bedeutung
style box box = Text auf halbtransparenter Fläche, outline = Text mit Kontur, plain = nur Text.
text_color null Hex-Farbe des Textes. Ohne Angabe automatisch hell oder dunkel, je nach Untergrund.
box_color null Hex-Farbe der Fläche bzw. der Kontur. Ohne Angabe die Gegenfarbe zum Text.
box_opacity 60 Deckkraft der Fläche in Prozent.
corner_radius 0.25 Eckenradius relativ zur Label-Höhe. 0 ergibt rechte Winkel, 0.5 eine Pillenform.
padding_ratio 0.45 Innenabstand der Fläche, relativ zur Schriftgröße.
margin_ratio 0.5 Abstand zum Bildrand, relativ zur Schriftgröße.
uppercase false Kennzeichnung in Großbuchstaben.

Reichweite

Schlüssel Standard Bedeutung
max_box_width 0.65 Maximaler Anteil der Bildbreite für das Label.
max_box_height 0.3 Maximaler Anteil der Bildhöhe für das Label.
min_width / min_height 0 Bildgrößen darunter werden nicht gekennzeichnet. 0 schaltet die Prüfung ab.
excluded_paths [] Pfade, die nie gekennzeichnet werden – auch nicht über die Ordner-Vererbung.

Markup und Betrieb

Schlüssel Standard Bedeutung
detection suggest Erkennung beim Hinzufügen von Dateien: suggest, auto oder off. Siehe Erkennung.
tag_backend_images false Auch Bilder im Backend kennzeichnen. Standardmäßig aus, siehe Backend-Vorschau.
hint_placement alt Wohin die barrierefreie Textfassung geht: alt, caption, both oder none.
hint_separator ' – ' Trenner zwischen vorhandenem Text und der Kennzeichnung.
intermediate_quality 95 Qualität der ersten Kodierung (die Nachbearbeitung kodiert ein zweites Mal).
log_retention_days 1095 Aufbewahrungsfrist des Protokolls in Tagen (3 Jahre). 0 bewahrt unbegrenzt auf.
license_backend_url '' Adresse oder Hostname des Backends, auf den die Lizenz ausgestellt ist. Nur für Cron und CLI nötig, siehe Lizenz.
license_server_url '' Abweichender Lizenzserver. Nur für die Entwicklung.

Jede Einstellung, die das Aussehen verändert, fließt über einen Fingerabdruck in den Cache-Schlüssel der Bildgröße ein. Eine Design-Änderung erzeugt die betroffenen Bilder also automatisch neu; der Bild-Cache muss nicht geleert werden.

Zu den runden Ecken: die Fläche entsteht aus drei Rechtecken und vier Kreissegmenten, die sich bewusst nicht überlappen – bei halbtransparenter Fläche würde die Farbe an den Nahtstellen sonst zweimal aufgetragen und als dunklere Linie sichtbar. GD zeichnet Bögen ohne Kantenglättung, die Rundung ist deshalb bei kleinen Radien leicht stufig; Imagick glättet.

Erkennung

Viele Generatoren schreiben ihre Herkunft in die Metadaten. Das Bundle liest sie, wenn eine Datei neu in tl_files landet, und unterscheidet zwei Stufen:

Signal Aussage
XMP Iptc4xmpExt:DigitalSourceType = trainedAlgorithmicMedia (oder compositeWith…) Erklärung – der IPTC-Standard, den C2PA und die großen Generatoren schreiben
xmp:CreatorTool, photoshop:Credit, dc:creator, EXIF Software mit bekanntem Generatornamen Indiz
PNG-Textblock parameters (Stable Diffusion legt dort den Prompt ab) Indiz

Gesetzt wird nichts automatisch (detection: suggest). Die Datei bekommt eine Notiz, die beim Bearbeiten erscheint; die Entscheidung bleibt bei der Redaktion, weil sie vom Inhalt abhängt – ein Deepfake ist kennzeichnungspflichtig, eine Illustration nicht. Mit detection: auto setzt das Bundle die Kennzeichnung bei einer echten Erklärung selbst und protokolliert das mit der Quelle; off schaltet die Prüfung ab.

Angebunden ist die Erkennung an DbafsChangeEvent – damit erreicht sie jeden Weg in die Dateiverwaltung: Upload, Drag and Drop, contao:filesync, MCP, per FTP nachgeschobene Dateien.

Auf Contao 5.3 gibt es dieses Ereignis noch nicht. Dort greift der postUpload-Hook, der nur den Upload im Backend-Dateimanager abdeckt; alle anderen Dateien werden geprüft, sobald sie jemand im Backend öffnet. Das Bundle registriert automatisch den jeweils passenden Weg.

Grenzen: Metadaten überleben Screenshots, Messenger und viele Exporte nicht. Die Erkennung ist ein Netz gegen das Vergessen, kein Beweis für das Gegenteil – und ausdrücklich keine Bildanalyse, sondern nur die Auswertung dessen, was die Datei über sich selbst behauptet.

Lesbarkeit je Bildgröße

Ist die Kennzeichnung gesetzt, zeigt die Dateibearbeitung für jede in dieser Installation angelegte Bildgröße, ob das Label dort noch lesbar hineinpasst. Gerechnet wird mit Contaos eigenem ResizeCalculator, die Maße entsprechen also der späteren Auslieferung. Wo es nicht passt, trägt allein die Textalternative im Markup – und genau das steht dann in der Übersicht statt einer stillen Auslassung.

Backend-Vorschau

Die Dateiverwaltung läuft durch dieselbe Bildpipeline wie das Frontend – ohne Gegenmaßnahme trägt deshalb schon das Thumbnail in der Dateiliste die Kennzeichnung. Dort soll aber die Datei zu sehen sein, nicht ihre Auslieferung. Bilder im Backend-Scope werden daher nicht gekennzeichnet (umstellbar über tag_backend_images).

Stattdessen zeigt die Dateibearbeitung beide Fassungen nebeneinander, sobald die Kennzeichnung gesetzt ist: Ohne Kennzeichnung und Mit Kennzeichnung. Die rechte Fassung erzwingt die Kennzeichnung gezielt und trifft dabei dieselbe Cache-Datei wie das Frontend – es entsteht kein zusätzliches Bild.

Die Vorschau zeigt das Label in der Größe der Vorschau. In der ausgelieferten Bildgröße fällt es entsprechend größer oder kleiner aus, unterhalb der Lesbarkeitsgrenze bleibt es ganz weg.

Protokoll und Aufbewahrung

Jede Änderung landet an zwei Stellen:

Warum eine eigene Tabelle, obwohl es das Systemprotokoll gibt: Contao räumt tl_log über PurgeExpiredDataCron nach der Systemeinstellung logPeriod ab – Standard 7 Tage. Ein Nachweis, der sich nach einer Woche selbst löscht, ist keiner. Die eigene Tabelle hat stattdessen eine eigene Frist (log_retention_days, Standard 3 Jahre), die ein täglicher Cron-Job durchsetzt: lang genug für den Nachweis, ohne Benutzernamen dauerhaft vorzuhalten.

Anlegen und Ändern sind über die Oberfläche für alle gesperrt, Löschen nur für Administratoren.

Nachweis-Export

Im Protokoll-Modul liegt eine Schaltfläche CSV-Export. Zwei Fassungen:

Zur Sicherheit: der Export prüft dieselbe Modulberechtigung wie die Ansicht, verlangt das Contao-Anfrage-Token (ein untergeschobener Link läuft ins Leere), streamt zeilenweise statt alles in den Speicher zu laden, und neutralisiert Formeln – ein Dateiname wie =cmd|… würde von Excel sonst beim Öffnen ausgeführt. Zeiten stehen in der Zeitzone der Installation, passend zur Backend-Ansicht.

Der Stichtag kann nur zeigen, was das Protokoll enthält: Kennzeichnungen aus der Zeit vor der Installation des Bundles, direkte Datenbankänderungen und Einträge jenseits der Aufbewahrungsfrist (log_retention_days) sind darin nicht enthalten.

Ein Eingabeformular für den Stichtag gibt es noch nicht – das Datum wird an die URL angehängt.

Wortlaut

Reihenfolge, die greift:

  1. Text an der Datei (Feld Text der Kennzeichnung in der Dateiverwaltung)
  2. Text am Startpunkt der Website (tl_page, Palette Startpunkt einer Website)
  3. Standardformulierung aus den Bundle-Übersetzungen – KI-generiert (de) bzw. AI-generated (en)

Der Standard ist absichtlich kurz: er muss auch in kleinen Bildgrößen lesbar bleiben. Weitere Sprachen ergänzen, indem eine Datei translations/netzhirsch_ai_tag.<locale>.xlf im Projekt hinterlegt wird.

Ein geänderter Wortlaut wirkt sofort: der Text geht in den Cache-Schlüssel der Bildgröße ein, bereits erzeugte Bilder werden dadurch automatisch neu erzeugt. Ein manuelles Leeren des Bild-Caches ist nicht nötig.

Zu kleine Bildgrößen

Passt das Label nicht lesbar ins Bild (Grenzwerte siehe Konfiguration), wird nichts eingebrannt, statt eine unlesbare Kennzeichnung zu erzeugen. Beim Markieren weist das Backend darauf hin, wenn das Bild selbst dafür zu klein ist. In diesen Fällen trägt nur die Textalternative im Markup die Information – eine sichtbare Kennzeichnung muss dann im Layout gelöst werden (z. B. größere Bildgröße oder Bildunterschrift).

MCP-Werkzeuge (optional)

Ist netzhirsch/contao-mcp-bundle installiert, bringt das Bundle drei Werkzeuge für den MCP-Server mit. Ohne das MCP-Bundle wird der Service gar nicht registriert – es besteht keine harte Abhängigkeit.

Werkzeug Zweck
netzhirsch_ai_tag_get Liest den Kennzeichnungsstand einer Datei oder eines Ordners, inklusive Vererbung (inherited_from), wirksamem Text und ob das Format überhaupt einbrennbar ist. Nur lesend.
netzhirsch_ai_tag_list Listet die als KI-generiert markierten Dateien und Ordner, optional auf einen Ordner begrenzt. Nur lesend.
netzhirsch_ai_tag_set Setzt oder entfernt die Kennzeichnung, optional mit Position und Wortlaut.

Wichtig für den Betrieb:

Für die Entwicklung wird das MCP-Bundle als require-dev aus dem privaten GitHub-Repository geladen; die CI braucht dafür Zugangsdaten (COMPOSER_AUTH).

Lizenz und Aktivierung

Lizenzpflichtig ist allein das Einbrennen der Kennzeichnung in die erzeugten Bildgrößen. Markieren in der Dateiverwaltung, Erkennung, Protokoll, Nachweis-Export und die Textalternative im Markup funktionieren immer – der Zugriff auf die eigenen Nachweise darf nicht an einem Abonnement hängen.

Verwaltet wird das unter System → Lizenz KI-Kennzeichnung (nur für Administratoren): Zustand, Testphase starten, Abonnieren, Abo verwalten und Lizenz aktualisieren.

Wie es funktioniert. Der Lizenzserver (https://license.netzhirsch.de) stellt kurzlebige, mit Ed25519 signierte Tokens aus; das Bundle prüft sie offline gegen den einkompilierten Public Key und erneuert sie über einen stündlichen Cron-Job. Ein Serverausfall ist damit unkritisch, ein Widerruf greift trotzdem innerhalb weniger Stunden. Geprüft werden Signatur, Produkt, Domain und Ablauf; gegen ein Zurückstellen der Systemuhr steht eine High-Water-Mark.

Zustand prüfen oder Token sofort erneuern, ohne Backend:

Ohne aktive Lizenz bleibt die Website unangetastet und markierte Bilder werden unverändert ausgeliefert. Das sagt das Bundle deutlich: beim Setzen der Kennzeichnung erscheint eine Fehlermeldung, und das Vorschaufeld zeigt statt der Gegenüberstellung denselben Hinweis. Eine stillschweigend fehlende Kennzeichnung wäre ein rechtliches Risiko für den Betreiber.

Sicherheit. Der Public Key steht im Code und nicht in der Konfiguration – ein konfigurierbarer Schlüssel ließe sich gegen einen selbst erzeugten tauschen. Die Server-Adresse ist ebenfalls einkompiliert. Bezahlt wird ausschließlich auf den von Stripe gehosteten Seiten; Karten- und SEPA-Daten laufen nie durch Contao. Gefolgt wird nur eine https://-Adresse auf einer von Stripe gehosteten Domain – am anderen Ende der Weiterleitung sitzt ein angemeldeter Administrator. Token und instance_secret erscheinen weder im Protokoll noch im Backend. Alles Weitere in SECURITY.md.

Ehrliche Grenze: PHP liegt beim Kunden im Klartext, das Gate ist patchbar. Ziel ist, bequeme Weitergabe zu verhindern und absichtliche sichtbar und widerrufbar zu machen – kein DRM.

Grenzen (bewusst)

Technischer Kern

Die Kennzeichnung entsteht in einem Decorator auf contao.image.resizer (AiTagResizer), nicht in einer Subklasse:

Eine Subklasse wäre der falsche Weg: DeferredResizer::executeResize() trifft dort die Deferral-Entscheidung (ein Override deaktiviert Deferred-Rendering global), und executeDeferredResize() ruft per parent:: direkt die Basisklasse auf und überspringt jede Subklasse – der Deferred-Pfad bliebe ungekennzeichnet.

Kosten: eine zweite Kodierung des fertigen Bildes, gemessen etwa +8 % Dateigröße bei Fotos. Die erste Kodierung läuft dafür mit angehobener Qualität, gespeichert wird mit der Zielqualität der Bildgröße. Über Contao-Bildgrößen konfigurierte Copyright-Metadaten werden nach dem Zeichnen wieder angewandt.

Rechte

Das Recht KI-Kennzeichnung setzen und entfernen (netzhirsch_ai_tagp) steuert, wer die Felder ändern darf – in tl_user_group und tl_user. Administratoren dürfen immer. Zusätzlich sind die Felder exclude, unterliegen also auch den Contao-Feldrechten.

Qualität und Versionsabdeckung

Die Entwicklungsumgebung ist über config.platform.php = 8.1.0 bewusst auf den untersten unterstützten Stand festgenagelt: lokal wird damit dieselbe Abhängigkeitsauflösung getestet, die eine Contao-5.3-Installation bekommt (DBAL 3, Monolog 2, Symfony 6.4). PHPStan läuft zusätzlich mit phpVersion: 80100, damit die Verwendung neuerer Sprachfeatures hier auffällt und nicht erst auf der Zielinstallation. Deshalb kein readonly class (8.2) und keine typisierten Klassenkonstanten (8.3) im Code – Rector ist entsprechend auf das PHP-8.1-Set gestellt.

Die CI prüft PHP 8.1 (lowest und highest) sowie PHP 8.4.

Sicherheit

Sicherheitslücken bitte nicht über öffentliche Issues melden – der Weg steht in SECURITY.md. Dort stehen auch das Sicherheitsmodell, die Vertrauensgrenzen (u. a. personenbezogene Daten im Protokoll) und die Empfehlungen für den Betrieb.

Lizenz

Proprietär, © Netzhirsch GmbH. Siehe LICENSE.


All versions of contao-ai-tag-bundle with dependencies

PHP Build Version
Package Version
Requires php Version ^8.1
ext-sodium Version *
contao/core-bundle Version ^5.3
contao/image Version ^1.2
doctrine/dbal Version ^3.6 || ^4.0
imagine/imagine Version ^1.3
psr/log Version ^3.0
symfony/config Version ^6.4 || ^7.0
symfony/console Version ^6.4 || ^7.0
symfony/dependency-injection Version ^6.4 || ^7.0
symfony/filesystem Version ^6.4 || ^7.0
symfony/http-client-contracts Version ^3.0
symfony/http-foundation Version ^6.4 || ^7.0
symfony/http-kernel Version ^6.4 || ^7.0
symfony/routing Version ^6.4 || ^7.0
symfony/security-bundle Version ^6.4 || ^7.0
symfony/security-core Version ^6.4 || ^7.0
symfony/translation-contracts Version ^3.0
twig/twig Version ^3.10
Composer command for our command line client (download client) This client runs in each environment. You don't need a specific PHP version etc. The first 20 API calls are free. Standard composer command

The package netzhirsch/contao-ai-tag-bundle contains the following files

Loading the files please wait ...