KI-Bildkennzeichnung 2/6: Async C2PA-Upload-Scan (Subscriber + Messenger-Handler) #5

Closed
opened 2026-08-02 06:51:59 +00:00 by csaeum · 0 comments
Owner

Teil 2 von 6 der Serie "KI-Bildkennzeichnung" (Art. 50 Abs. 4 KI-VO). Baut auf #4 auf (braucht FIELD_MEDIA_AI_STATUS).

Ziel

Beim Medien-Upload asynchron prüfen, ob die Datei ein C2PA/Content-Credentials-Manifest mit digitalSourceType-Assertion enthält, und bei Treffer automatisch ai_status setzen — ohne den Upload-Vorgang zu blockieren.

Komponenten

  • Neuer Subscriber src/Subscriber/MediaUploadSubscriber.php auf Shopware\Core\Content\Media\Event\MediaUploadedEvent (Event-Name media.uploaded, wird sowohl vom Admin-Upload-Controller als auch vom API-Upload-Service ausgelöst — deckt beide Upload-Wege ab). Tut nichts Blockierendes — dispatcht nur eine Symfony-Messenger-Message mit der mediaId und kehrt sofort zurück.
  • Neue Message + Handler ScanMediaForAiContentMessage / ScanMediaForAiContentHandler (#[AsMessageHandler]). Lädt die MediaEntity, prüft die Datei auf ein eingebettetes C2PA-Manifest (digitalSourceType, z. B. trainedAlgorithmicMedia, compositeWithTrainedAlgorithmicMedia). Setzt bei Treffer FIELD_MEDIA_AI_STATUS = true über das media.repository.
  • Setzt das Feld nie aktiv auf false zurück, damit eine manuelle not_ai_confirmed-Korrektur durch den Admin (ai_type, siehe #4) nicht vom nächsten Scan überschrieben wird.

Wichtiger Fund: C2PA-Parsing in PHP

Es gibt keine etablierte PHP-native C2PA-Bibliothek (offiziell unterstützt sind nur Rust/JS/Python-SDKs). Empfohlener Ansatz: der Handler ruft das offizielle c2patool-Binary (Content Authenticity Initiative) als Subprozess auf (c2patool --detailed <pfad> → JSON) und parst dessen Ausgabe.
→ Das Binary muss im Worker-Container verfügbar sein — siehe Infrastruktur-Issue "KI-Bildkennzeichnung 6/6" (separates Repo Docker-Stacks/projekt-sw6).

Infrastruktur

Kein neuer Worker-Service nötig — projekt-sw6/docker-compose.yml hat bereits einen laufenden worker-Service (php bin/console messenger:consume async low_priority). Die neue Message wird auf den bestehenden async- oder low_priority-Transport geroutet.

Akzeptanzkriterien

  • Upload eines Testbilds mit eingebettetem C2PA-Manifest → ai_status wird nach Worker-Durchlauf automatisch true
  • Upload eines normalen Fotos ohne Manifest → ai_status bleibt unverändert
  • Upload-Vorgang selbst wird durch den Scan nicht spürbar verzögert (asynchron)
  • Manuell auf not_ai_confirmed korrigierte Bilder werden vom Scan nicht wieder überschrieben
Teil 2 von 6 der Serie "KI-Bildkennzeichnung" (Art. 50 Abs. 4 KI-VO). Baut auf #4 auf (braucht `FIELD_MEDIA_AI_STATUS`). ## Ziel Beim Medien-Upload asynchron prüfen, ob die Datei ein C2PA/Content-Credentials-Manifest mit `digitalSourceType`-Assertion enthält, und bei Treffer automatisch `ai_status` setzen — ohne den Upload-Vorgang zu blockieren. ## Komponenten - **Neuer Subscriber** `src/Subscriber/MediaUploadSubscriber.php` auf `Shopware\Core\Content\Media\Event\MediaUploadedEvent` (Event-Name `media.uploaded`, wird sowohl vom Admin-Upload-Controller als auch vom API-Upload-Service ausgelöst — deckt beide Upload-Wege ab). Tut nichts Blockierendes — dispatcht nur eine Symfony-Messenger-Message mit der `mediaId` und kehrt sofort zurück. - **Neue Message + Handler** `ScanMediaForAiContentMessage` / `ScanMediaForAiContentHandler` (`#[AsMessageHandler]`). Lädt die `MediaEntity`, prüft die Datei auf ein eingebettetes C2PA-Manifest (`digitalSourceType`, z. B. `trainedAlgorithmicMedia`, `compositeWithTrainedAlgorithmicMedia`). Setzt bei Treffer `FIELD_MEDIA_AI_STATUS = true` über das `media.repository`. - Setzt das Feld **nie aktiv auf `false`** zurück, damit eine manuelle `not_ai_confirmed`-Korrektur durch den Admin (`ai_type`, siehe #4) nicht vom nächsten Scan überschrieben wird. ## Wichtiger Fund: C2PA-Parsing in PHP Es gibt keine etablierte PHP-native C2PA-Bibliothek (offiziell unterstützt sind nur Rust/JS/Python-SDKs). Empfohlener Ansatz: der Handler ruft das offizielle `c2patool`-Binary (Content Authenticity Initiative) als Subprozess auf (`c2patool --detailed <pfad>` → JSON) und parst dessen Ausgabe. → Das Binary muss im Worker-Container verfügbar sein — siehe Infrastruktur-Issue "KI-Bildkennzeichnung 6/6" (separates Repo `Docker-Stacks/projekt-sw6`). ## Infrastruktur Kein neuer Worker-Service nötig — `projekt-sw6/docker-compose.yml` hat bereits einen laufenden `worker`-Service (`php bin/console messenger:consume async low_priority`). Die neue Message wird auf den bestehenden `async`- oder `low_priority`-Transport geroutet. ## Akzeptanzkriterien - [ ] Upload eines Testbilds mit eingebettetem C2PA-Manifest → `ai_status` wird nach Worker-Durchlauf automatisch `true` - [ ] Upload eines normalen Fotos ohne Manifest → `ai_status` bleibt unverändert - [ ] Upload-Vorgang selbst wird durch den Scan nicht spürbar verzögert (asynchron) - [ ] Manuell auf `not_ai_confirmed` korrigierte Bilder werden vom Scan nicht wieder überschrieben
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
SW-Plugins/wsc_swplugin_aiseotools#5
No description provided.