Direkt zum Hauptinhalt

Media Library Grundlagen

Die Mediathek (im Dashboard-Menü heißt sie „Mediathek", intern „Media Library") ist deine zentrale Asset-Verwaltung in Chatlix. Alle Bilder, Sounds, GIFs, Videos, Stinger und Transitions, die du in Overlays, Automations, Alerts, Soundboard oder OBS-Steuerung nutzt, liegen hier. Pro Account, mit Ordnern, Labels, Kind-Filter und Suche.

Du erreichst sie unter /dashboard/media. Backend-seitig steckt das Ganze in Chatlix\Service\MediaService plus den spezialisierten Diensten unter Chatlix\Service\Media\*: MediaEngine (Playback/Fanout an Overlays), MediaProbe (Format-/Metadaten-Erkennung), MediaValidator (Codec-Whitelist), MediaQuotaService (Plan-Limits), MediaFolderService (Ordner-Baum), MediaJobQueue/MediaJobProcessor (asynchrones Transcoding/Thumbnails) und MediaProxy/MediaProxyService (Auslieferung).

Asset-Typen (Kind)

Es gibt keine freien Kategorien wie „Sticker" oder „Alert" – die Mediathek klassifiziert jedes Asset in ein festes kind-Feld. Das steuert Icon, Filter und welche Validierung beim Upload läuft:

  • image 🖼️ — statische Bilder (Logos, Wasserzeichen, Hintergründe).
  • sound 🔊 — Audio-Assets (Alert-Sounds, Soundboard-Effekte, TTS).
  • gif — animierte GIFs (werden intern als Video-Stream ohne Audiospur behandelt).
  • video 🎬 — kurze Videoclips (MP4/WebM/MOV/M4V).
  • stinger ⚡ — kurze Übergangs-Clips, typischerweise für Szenenwechsel in OBS.
  • transition 🌀 — Transition-Assets für Overlay-/Szenen-Übergänge.

Zusätzlich landen automatisch generierte Assets mit eigenen Kind-Werten in derselben Mediathek: tts, sfx, tts-preview, sfx-preview aus dem Audio Studio, sowie cam_background aus der Kamera-Hintergrund-Funktion. Diese erscheinen automatisch, sobald du sie im jeweiligen Studio erzeugst — kein manueller Upload nötig.

Die Kind-Auswahl beim manuellen Upload läuft automatisch über die Dateiendung (z.B. .mp3 → sound, .mp4 → video, .gif → gif); du kannst danach nicht mehr zwischen image/sound wechseln, weil das die Backend-Validierung bestimmt.

Ordner statt Kategorien

Organisation läuft über einen echten Ordner-Baum (nicht über feste Kategorien): Du legst beliebig viele Ordner an, auch verschachtelt (bis max. 8 Ebenen tief), verschiebst Assets per Drag-and-drop oder über den „Verschieben"-Dialog dorthin, und benennst Ordner um oder löschst sie. Löschst du einen Ordner, wandern die enthaltenen Dateien automatisch zurück nach „Ohne Ordner" — sie werden nicht mitgelöscht.

Zusätzlich hat jedes Asset ein optionales, einzeiliges Label (max. 120 Zeichen) als Anzeigename — das ist der einzige „Tagging"-Mechanismus, den es gibt. Es gibt kein Mehrfach-Tag-System. Details zu Label und Ordner-Workflow findest du im Kapitel Upload + Tagging (dort ist auch das Mapping des Kapitelnamens auf den echten Workflow erklärt).

Unterstützte Formate

Die Whitelist ist strikt (Server-seitiges MIME-Sniffing per finfo, nicht der Browser-Header):

  • Bilder (Kind image): PNG, JPG/JPEG, WebP, GIF, AVIF, APNG (animiertes PNG — Animation bleibt beim Metadaten-Strip erhalten).
  • Video (läuft technisch über denselben image-Upload-Pfad, Kind wird über die Endung erkannt): MP4, WebM, MOV, M4V.
  • Audio (Kind sound): MP3, WAV, OGG, OGA, OPUS, AAC, FLAC, M4A.

Nicht unterstützt, auch wenn sie technisch ähnlich sind: SVG (aus Sicherheitsgründen aktiv geblockt, siehe unten), OGV/Theora, AIFF, CAF, WEBA. Wenn ffprobe/finfo ein Format nicht sauber von Video trennen kann (z.B. WEBA vs. WebM-Video), ist es bewusst draußen.

SVG/HTML/XML sind hart gesperrt — sowohl über die Endungs-Whitelist als auch über eine zusätzliche Deny-Liste (Endung und erkannter MIME-Typ). Grund: SVG kann Inline-<script> und <foreignObject> enthalten und wäre ein XSS-Vektor, wenn es direkt im Overlay/Browser gerendert wird. Ein Upload-Versuch mit .svg scheitert immer mit extension_denied/mime_denied, unabhängig vom Plan.

Größenlimits — planabhängig

Es gibt kein festes 50-MB-Limit für alle. Das Limit pro Upload und der Gesamt-Speicher hängen vom Plan ab:

PlanSpeicher gesamtMax. pro UploadVideos erlaubt
Free100 MB5 MBNein
Starter1 GB10 MBJa
Creator5 GB30 MBJa
Pro20 GB100 MBJa
Team100 GB200 MBJa

Auf Free-Plan sind Video-Uploads komplett gesperrt (Fehlercode free_video_blocked) — dazu zählen alle Dateien mit MIME video/mp4, video/webm, video/quicktime, video/x-m4v. GIFs sind davon nicht betroffen, die zählen als Bild-Kind.

Serverseitig (Nginx/PHP-FPM) ist zusätzlich ein technisches Hard-Limit von 20 MB upload_max_filesize / 25 MB post_max_size gesetzt — das ist unabhängig vom Plan-Limit die absolute Obergrenze für einen einzelnen Request. Für Pro/Team mit 100–200 MB Plan-Limit heißt das: aktuell größere Assets müssten über einen anderen Weg hochgeladen werden; sprich in dem Fall den Support an, falls du an diese Grenze stößt.

Bei Erreichen des Speicher-Kontingents schlägt der Upload fehl mit free_storage_full (Free) bzw. storage_full (bezahlte Pläne) — inklusive einer freundlichen deutschen Fehlermeldung und ggf. einem Upgrade-Hinweis. Im Dashboard siehst du oben in der Mediathek den belegten/verfügbaren Speicher als Balken.

Speicherung, CDN und Sicherheit

Dateien liegen geschützt auf dem Server — der Dateiname wird beim Upload durch einen Zufalls-Hash ersetzt (kein User-Input im Pfad, verhindert Path-Traversal und Enumeration fremder Assets). Ausgeliefert werden Assets über einen signierten Proxy-Pfad (/v1/media/proxy/<token>), nicht über eine öffentlich erratbare URL — das verhindert, dass jemand fremde Storage-URLs direkt erraten oder scrapen kann.

Bilder werden beim Upload von EXIF-/Metadaten befreit (außer bei erkannten Animationen wie APNG, da sonst die Animation verloren geht). Für Sounds und Bilder wird zusätzlich zum MIME-Sniffing ein Magic-Bytes-Check gefahren.

Wenn du ein Asset ersetzen willst (z.B. neues Logo mit gleichem Namen), gibt es kein „Überschreiben" — ein neuer Upload bekommt immer eine neue ID. Referenzen in Automations/Overlays/Alerts musst du manuell auf die neue ID umstellen. Das ist Absicht: verhindert, dass ein Live-Overlay plötzlich kaputtes Audio bekommt, weil im Hintergrund eine Datei ausgetauscht wurde.

Wo werden Assets verwendet?

  • Automations als Action play_media_sound („Sound abspielen").
  • Pro Editor (Overlay-Builder) als Image-, Audio- oder Video-Widget.
  • Alerts als Alert-Sound/Alert-Bild.
  • Soundboard/StreamDeck-Buttons.
  • OBS-Steuerung: Stinger/Transition-Assets für Szenenwechsel.

Details und konkrete Konfigurationsschritte dazu findest du im Kapitel Media in Action verwenden. Löschst du ein Asset, das noch irgendwo referenziert ist, zeigt die Mediathek eine Warnung — Details dazu im Kapitel Upload + Tagging, Abschnitt „Asset entfernen".