Skip to content

Releases: FriendsOfREDAXO/media_negotiator

6.2.2

Choose a tag to compare

@skerbis skerbis released this 29 Jun 14:10
ec64ac4

[6.2.2] - 2026-06-29

Fixed

  • Focus-Point-Crop bleibt bei WebP/AVIF erhalten: rex_effect_negotiator verwendet in convertWithFallback() 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() und Helper::imagickConvert() liefern string|false statt GdImage|false – GD wird nicht mehr zum Dekodieren der Converter-Ausgabe verwendet.

  • rex_effect_negotiator nutzt eine convertWithFallback()-Methode mit try/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 einen try/catch(\Throwable)-Block gewrappt, damit Negotiator-Fehler niemals einen Media-Manager-Request abbrechen.

6.2.1

Choose a tag to compare

@skerbis skerbis released this 25 Jun 10:58

[6.2.1] - 2026-06-25

Fixed

  • 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() und Helper::imagickConvert() liefern string|false statt GdImage|false – GD wird nicht mehr zum Dekodieren der Converter-Ausgabe verwendet.
  • rex_effect_negotiator nutzt eine convertWithFallback()-Methode mit try/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.

6.2.0

Choose a tag to compare

@skerbis skerbis released this 06 May 14:33

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/avif und image/webp unterstü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() von private auf public hochgestuft.

Fixed

  • Alle per JS oder data-*-Attribut verwendeten URLs werden jetzt mit rex_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 $statusRow und renderProbeState() verwendet keine eigenen Textfarb-Klassen mehr – Bootstrap list-group-item-warning regelt Farben vollständig.
  • Veraltete Kommentare in Helper.php zur Safari-Accept-Header-Problematik aktualisiert (gefixt in Safari 16.4: „Fixed the accept header to correctly indicate AVIF

6.1.4]

Choose a tag to compare

@skerbis skerbis released this 04 May 19:38

[6.1.4] - 2026-05-04

Changed

  • Die Architektur ist jetzt bewusst getrennt: Der Negotiator verwendet fuer AVIF/WebP automatisch libvips > Imagick > GD, waehrend der Effekt srgb_preprocess fuer ICC-zu-sRGB-Konvertierungen wieder ausschliesslich auf Imagick setzt.
  • README auf den tatsaechlichen Stand gebracht: libvips wird nur fuer den Negotiator beschrieben, nicht mehr fuer den ICC-Fix.

Fixed

  • Dokumentation und Changelog korrigiert: Der vorherige Eintrag zu 6.1.3 suggerierte faelschlich einen aktiven vips-basierten ICC-Fix-Pfad. Tatsaechlich bleibt der farbkritische ICC-Workflow wieder auf dem bewaehrten Imagick-Pfad.

[6.1.3] - 2026-05-04

Added

  • libvips-Support: Wenn die PHP-Extension vips installiert ist, wird sie automatisch bevorzugt eingesetzt (Priorität: vips › imagick › GD). libvips ist 3–8× schneller als Imagick und benötigt rund 10× weniger Arbeitsspeicher, da es im Streaming-Verfahren arbeitet statt das gesamte Bild in den RAM zu laden.
  • Helper::vipsPossible(): Erkennt ob die vips-Extension verfügbar ist.
  • Helper::vipsConvert(): Konvertiert einen Image-Blob via libvips zu WebP oder AVIF.
  • Helper::getForceImagick(): Extrahiert die force_imagick-Config in eine eigene Methode.
  • Setup-Seite zeigt libvips-Status und -Version an.
  • Hinweis in der Setup-Übersicht wenn libvips aktiv ist.

[6.1.2] - 2026-05-04

Performance

  • Konfigurationswerte (webp_quality, avif_quality, preferred_format, ua_fallback, disable_avif) werden jetzt per Request in statischen Eigenschaften gecacht – rex_config::get() wird nicht mehr bei jedem Effekt-Aufruf wiederholt aufgerufen.
  • gd_info() wird nur noch einmal pro Request ausgeführt (gecacht in $gdInfoCache).
  • webpPossible() und avifPossible() werden pro Request gecacht.
  • Format-Auflösung (Accept-Header + UA-Parsing) findet jetzt nur noch einmal statt: boot.php und rex_effect_negotiator teilen sich das Ergebnis via Helper::getRequestOutputFormat().

[6.1.1] - 2026-05-04

Fixed

  • Imagick-Speicherleck behoben: Imagick::destroy() wird nun nach jeder Konvertierung in imagickConvert() und im srgb_preprocess-Effekt explizit aufgerufen, da Imagick nativen C-Heap-Speicher hält, den der PHP-Garbage-Collector nicht automatisch freigibt.
  • getImagickFormats() cacht das Ergebnis jetzt prozessweit in $imagickFormatsCache, sodass pro Request nur noch eine einzige Imagick-Instanz erzeugt wird (statt einer pro webpPossible()/avifPossible()-Aufruf).

6.1.0

Choose a tag to compare

@skerbis skerbis released this 03 May 10:01

Added

  • Neuer Effekt srgb_preprocess zum farbverwalteten Konvertieren von Uploads mit ICC-Profilen nach sRGB vor der weiteren Media-Manager-Verarbeitung.
  • Mitgeliefertes Zielprofil data/icc/sRGB Profile.icc für echte ICC-zu-sRGB-Transformation im Effekt.
  • Neue Backend-Seite ICC Fix zur Mehrfach-Zuweisung und Entfernung des sRGB/ICC-Fix-Effekts auf mehreren Media-Manager-Typen.

6.0.2

Choose a tag to compare

@skerbis skerbis released this 28 Apr 14:04

[6.0.2] - 2026-04-28

  • MIME-Header korrigiert: Content-Type wird bei AVIF/WebP nun als image/avif bzw. image/webp gesetzt.
  • Config-Seite erweitert: preferred_format ist jetzt als UI-Feld verfügbar (Konsistenz zu default_config).
  • Setup-Seite bereinigt: JS-Einbindung entfernt, setup_compare.js wird nur noch zentral über boot.php geladen.

[6.0.1]

imagedestroy auf setupseite entfernt
Stefan Dannfald
@dpf-dd

[6.0.0] - 2026-04-28

Breaking Changes

  • Namespace auf FriendsOfRedaxo\MediaNegotiator umgestellt.
  • 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 (avif oder webp)
  • Neues CLI-Kommando media:negotiator:warmup zum 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_format in 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.

6.0.0 Danke Andi

Choose a tag to compare

@skerbis skerbis released this 28 Apr 12:03
1fcce91

[6.0.0] - 2026-04-28

Breaking Changes

  • Namespace auf FriendsOfRedaxo\MediaNegotiator umgestellt.
  • 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 (avif oder webp)
  • Neues CLI-Kommando media:negotiator:warmup zum 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_format in 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

Choose a tag to compare

@AndiLeni AndiLeni released this 22 Jan 12:16

[5.0.3] - 22.01.2025

  • #29 / fix error messages
  • Check if PHP and GD is compiled with avif support

5.0.2

Choose a tag to compare

@AndiLeni AndiLeni released this 24 Oct 13:13

[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 #23

New Contributors

Full Changelog: 5.0.1...5.0.2

5.0.1

Choose a tag to compare

@AndiLeni AndiLeni released this 23 Oct 15:38

[5.0.1] - 23.10.2024

  • fix addon page

Full Changelog: 5.0.0...5.0.1