AddOn
Media Negotiator
Beschreibung
Ändert den Bildtyp des Media-Managers je nachdem, was der anfragende Browser akzeptiert.media_negotiator
Addon für Redaxo welches dem Media Manager Addon einen Effekt für Content Negotiation hinzufügt. Siehe https://developer.mozilla.org/en-US/docs/Web/HTTP/Content_negotiation
Anleitung:
Dem Media Profil den Effekt "Negotiate image format" hinzufügen.
Danach wird automatisch eines der folgenden Formate ausgeliefert: avif, webp, jpg (in dieser Reihenfolge).
github.com/FriendsOfREDAXO/media_negotiator
Umsetzung
Versionen
6.2.2
6.2.2] - 2026-06-29
Fixed
-
Focus-Point-Crop bleibt bei WebP/AVIF erhalten:
rex_effect_negotiatorverwendet inconvertWithFallback()jetzt die aktuell prozessierte Quelle aus der Effektkette ($this->media->getSource()) statt den Original-Dateipfad (getMediaPath()). -
Damit gehen Crops aus vorgeschalteten Effekten (z. B. Focus-Point-Fit) bei ausgehandelten Formaten nicht mehr verloren.
-
Converter-Kette vereinfacht: vips und Imagick geben nun direkt den konvertierten Bild-Blob zurück (statt
GdImage), womit der GD-Fallback entfällt. Fallback bei fehlschlagenden Konvertern ist jetzt das Original-Format (JPEG/PNG). -
Helper::vipsConvert()undHelper::imagickConvert()liefernstring|falsestattGdImage|false– GD wird nicht mehr zum Dekodieren der Converter-Ausgabe verwendet. -
rex_effect_negotiatornutzt eineconvertWithFallback()-Methode mittry/catch(\Throwable), um Converter-Fehler abzufangen ohne den Media-Request zu blockieren. -
Konvertierter Blob wird über
setSourceFromBlob()als Temp-Datei mit korrekter Format-Extension (.webp,.avif) gespeichert, was korrekte Content-Type- und Content-Disposition-Header sicherstellt. -
Gesamte
execute()-Logik in einentry/catch(\Throwable)-Block gewrappt, damit Negotiator-Fehler niemals einen Media-Manager-Request abbrechen.
6.2.0
Added
- Bild-Request-Probe: Die Setup-Seite lädt jetzt ein echtes 1×1-Pixel-Bild gegen das Backend und liest dabei den vom Browser tatsächlich bei Bild-Requests gesendeten Accept-Header aus. Damit wird korrekt angezeigt, ob der Browser
image/avifundimage/webpunterstützt – unabhängig vom Accept-Header des HTML-Seiten-Requests. - Neuer Backend-API-Endpunkt
rex_api_media_negotiator_probe(Backend-only, CSRF-frei für die Probe) speichert das Probe-Ergebnis in der Session und liefert es per JSON. - „Media Negotiator würde liefern"-Badge aktualisiert sich nach der Probe automatisch per JS auf den tatsächlichen Wert (AVIF/WebP/Original), inklusive Thumbs-up-Icon bei echtem Upgrade.
- Accept-Header wird nun getrennt angezeigt: Seiten-Request vs. Bild-Request.
Helper::avifDisabled()vonprivateaufpublichochgestuft.
Fixed
- Alle per JS oder
data-*-Attribut verwendeten URLs werden jetzt mitrex_url::backendController([...], false)gebaut (kein&in Fetch-/img.src-Kontexten). - Langer Accept-Header und User-Agent-String brechen nun korrekt um (
overflow-wrap,white-space: pre-wrap). - Warning-Zustand in
$statusRowundrenderProbeState()verwendet keine eigenen Textfarb-Klassen mehr – Bootstraplist-group-item-warningregelt Farben vollständig. - Veraltete Kommentare in
Helper.phpzur Safari-Accept-Header-Problematik aktualisiert (gefixt in Safari 16.4: „Fixed the accept header to correctly indicate AVIF
6.1.0
Added
- Neuer Effekt
srgb_preprocesszum farbverwalteten Konvertieren von Uploads mit ICC-Profilen nach sRGB vor der weiteren Media-Manager-Verarbeitung. - Mitgeliefertes Zielprofil
data/icc/sRGB Profile.iccfür echte ICC-zu-sRGB-Transformation im Effekt. - Neue Backend-Seite
ICC Fixzur Mehrfach-Zuweisung und Entfernung des sRGB/ICC-Fix-Effekts auf mehreren Media-Manager-Typen.
6.0.2
6.0.2] - 2026-04-28
- MIME-Header korrigiert:
Content-Typewird bei AVIF/WebP nun alsimage/avifbzw.image/webpgesetzt. - Config-Seite erweitert:
preferred_formatist jetzt als UI-Feld verfügbar (Konsistenz zudefault_config). - Setup-Seite bereinigt: JS-Einbindung entfernt,
setup_compare.jswird nur noch zentral überboot.phpgeladen.
6.0.1]
imagedestroy auf setupseite entfernt
Stefan Dannfald
@dpf-dd
6.0.0] - 2026-04-28
Breaking Changes
- Namespace auf
FriendsOfRedaxo\MediaNegotiatorumgestellt. - Cache-Key-Strategie für Negotiator-Derivate geändert (Format + Quality + relevante Config), bestehende Derivate werden damit neu aufgebaut.
Added
- Vollständige i18n für Deutsch/Englisch (
lang/de_de.lang,lang/en_gb.lang). - Neue Konfigurationsoptionen:
webp_quality(0–100, Standard 80)avif_quality(0–100, Standard 60)ua_fallback(User-Agent-Fallback bei fehlenden expliziten Accept-Formaten)preferred_format(avifoderwebp)
- Neues CLI-Kommando
media:negotiator:warmupzum Vorwärmen des Media-Manager-Caches (--type,--formats,--limit,--base-url,--dry-run). - Neue Backend-Seite zur Mehrfach-Zuweisung des Negotiator-Effekts auf Media-Manager-Typen (Bulk Add/Remove, Append/Prepend).
- Setup-Seite als 3-Panel-Ansicht überarbeitet (Server, Browser, Demo).
- Demo-Vergleich mit Side-by-Side-Slider und Format-Auswahl ergänzt.
Changed
- Formatentscheidung berücksichtigt
preferred_formatin Accept- und UA-Fallback-Pfaden. - Browser-Fähigkeitserkennung in
getBrowserFormatSupport()von serverseitiger Codec-Verfügbarkeit entkoppelt. - Demo-Bilder auf der Setup-Seite verwenden die aktiven Addon-Einstellungen (Engine/Codec-Entscheidung, Quality, AVIF-Disable, Preferred-Format).
- JS-Initialisierung für Setup-Vergleich auf REDAXO-Backend-Navigation (
rex:ready) und robuste Event-Delegation ausgelegt.
Fixed
-
8: Wildcards (
*/*,image/*) werden nicht mehr als AVIF/WebP-Support gewertet. - Safari/UA-Erkennung korrigiert (Browser-Support-Anzeige vs. tatsächliche Server-Auslieferung getrennt).
webpPossible()/avifPossible()korrigiert (OR-Logik statt fehlerhafter UND-Verknüpfung).- SVG/GIF/ICO werden im Effekt korrekt übersprungen (#28).
- Imagick-Konvertierung gegen Laufzeitfehler abgesichert (Fallback auf Original statt 500, #31).
- Typisierung und Rückgabewerte in Helper/Effekt-Klassen nachgezogen (
GdImage|false-Checks etc.). - Konfigurations-Radios auf stabile 1/0-Werte umgestellt.
5.0.3
5.0.3] - 22.01.2025
-
29 / fix error messages
- Check if PHP and GD is compiled with avif support
5.0.2
5.0.2] - 24.10.2024
-
23 / fix error on addon page when Imagick is not available
What's Changed
- Fehler auf Setup Seite, wenn kein Imagick vorhanden by @isospin in https://github.com/AndiLeni/media_negotiator/pull/23
New Contributors
- @isospin made their first contribution in https://github.com/AndiLeni/media_negotiator/pull/23
Full Changelog: https://github.com/AndiLeni/media_negotiator/compare/5.0.1...5.0.2
5.0.1
5.0.1] - 23.10.2024
- fix addon page
Full Changelog: https://github.com/AndiLeni/media_negotiator/compare/5.0.0...5.0.1
5.0.0
5.0.0] - 23.10.2024
- use new extensionpoint MEDIA_MANAGER_INIT in Redaxo >= 5.18 instead of patching media_manager.php / #18
- new addon page for settings
Full Changelog: https://github.com/AndiLeni/media_negotiator/compare/4.1.0...5.0.0
4.1.0
4.1.0] - 19.10.2024
- move addon backend page into the media manager addon as a subpage / #22
What's Changed
- move from addon menu to media manger subpage by @alxndr-w in https://github.com/AndiLeni/media_negotiator/pull/22
New Contributors
- @alxndr-w made their first contribution in https://github.com/AndiLeni/media_negotiator/pull/22
Full Changelog: https://github.com/AndiLeni/media_negotiator/compare/4.0.4...4.1.0
4.0.4
4.0.4] - 23.10.2023
- add hint if method is already changed for setup
- ui improvements on config page
4.0.3
4.0.3] - 19.10.2023
- fix version in package.yml
4.0.0
4.0.0] - 14.10.2023
- add option to disable avif generation (some servers d not have avif codecs installed) / #15
4.0.0alpha1
4.0.0alpha1] - 05.08.2023
- remove params
- now for working correctly the media_manager.php file must be changed which shloud ensure correct function of the caching mechanism
- MIGRATION:
Die Datei media_manager.php des media manager Addons muss angepasst werden.
Die Anleitung dazu findet sich auf der Setup Seite des Addons.
Dies ist notwendig um die Cache-Funktionalität korrekt zu gewährleisten.
3.0.0
3.0.0] - 01.08.2023
- Added check to confirm whether file is already cached or not
- MIGRATION: alle Media-Manager Effekte die den Negotiator nutzen müssen einmal bearbeitet werden.
Dabei muss das neue Parameterfeld "Name dieses Effekts" auf den Namen des Effekts gesetzt werden, welcher den Negotiator nutzt.
Das Feld sollte den korrekten Wert bereits als default tragen.
2.2.2
2.2.2] - 31.07.2023
- check added if Imagick supports webp or avif as output formats
2.2.1
2.2.1] - 28.07.2023
- Settings page shows which functions are available and which output formats are possible
2.2.0
2.2.0] - 28.07.2023
- Added setting to force usage of Imagick. F.e. when GD is not supporting avif as expected.
2.1.0
2.1.0] - 27.07.2023
- Imagick is now used as fallback when the PHP version is compiled without webp or avif support
- fix issues for setting the cache path correctly
2.0.0
2.0.0] - 02.03.2023
Changed
- deliver original file when image can not be converted to avif or webp #1
1.1.1
1.1.0
1.1.0] - 06.02.2023
Changed
- the effect could not be applied to any profile because it was set to a fixed name
1.0.0
Initial release