= 1.1.2 =

Release date: 28 September 2026

**Added**

* Redesigned Optimized column in the Media Library: converted sizes per format, total savings and a Details link that opens a per-size table showing original size, WebP and AVIF sizes, and why any size was skipped.
* Retry action in the Media Library and the Edit Media Save box for images with skipped or failed copies. It clears those results and converts the image again.
* Retry skipped and failed images checkbox on the Bulk Optimize screen, which does the same for every affected image in one run.

**Changed**

* The Image optimization section in the Edit Media Save box now sits below the file details and uses the same summary and Details table.
* Images with no optimized copy now show Failed, Queued or Original kept in the Optimized column instead of Not yet.

**Fixed**

* Images processed while no encoder was available were marked Not supported permanently, so neither Optimize nor the bulk scan converted them once an encoder became available. They are now retried, and affected images are queued again automatically.
* Re-optimize images that are already done on the Bulk Optimize screen, and `wp wzio queue --force`, queued finished images again but the queue then kept their existing copies and recorded skips, so nothing was re-encoded. Queued images are now re-encoded as intended.
* On the Bulk Optimize screen, images queued again were counted as both Already optimized and Waiting in the queue.
* The Pause button showed on the Bulk Optimize screen even when nothing was running.

= 1.1.1 =

Release date: 28 September 2026

**Added**

* PNG lossy fallback quality setting. A PNG whose lossless WebP copy misses the minimum saving is tried once more as lossy WebP at this quality, default 95. PNGs skipped earlier are queued again automatically.

**Fixed**

* The Already optimized count on the Bulk Optimize screen could stay at its old value after the background queue finished, while Bandwidth saved had already updated.
* Saving settings caused a fatal error when the stored settings option held something other than an array.
* The hook registry used `spl_object_hash()`, which is deprecated in PHP 8.6.

= 1.1.0 =

Release date: 12 September 2026
Release post: https://webberzone.com/announcements/image-optimizer-v1-1/

**Added**

* Media Library filter for optimized, not-yet-optimized, skipped and failed images. Thanks to [muneeb-ashraf](https://github.com/muneeb-ashraf).
* One lower-quality retry for a lossy copy that misses the minimum saving, preserving more optimized candidates before discarding a stubborn size. The step is a share of the configured quality, floored at 40, and filterable with `wzio_conversion_retry_step`. The retry is skipped where the server's encoder ignores the quality setting, because it would produce an identical file at twice the cost.
* A Bulk Optimize warning when images are queued but the background worker has stopped running, naming `DISABLE_WP_CRON` or a blocked loopback request as the likely cause and giving the WP-CLI and system cron commands that recover it.
* A note in the Media Library column, on the attachment screen and in `wp wzio convert` when a copy needed a lower quality than the one configured.
* A note on the Formats setting that AVIF costs a few times more CPU than WebP and runs on every image size, pointing at Convert new uploads as the way to move that work into the background queue.

**Changed**

* Optimized `<picture>` sources now omit missing intermediate `srcset` candidates while requiring the smallest and widest or highest-density candidates. Complete format sets are listed before partial sets.
* AVIF encoder effort now maps onto each encoder's own speed scale rather than one shared invented scale, with the default sitting at the measured point where files stop getting meaningfully smaller. This cuts AVIF conversion time by roughly thirty times on ImageMagick servers for a few per cent of file size.
* A source that can carry transparency is never encoded at the fastest AVIF speed, where its file can grow by two fifths for no gain.
* Lossless encoding of PNG sources now applies to WebP only. A lossless AVIF is almost always larger than the PNG it came from, so it was discarded anyway.
* The capability probe encodes at the cheapest effort. It only answers whether a format works, so it no longer runs the slowest encode the plugin is capable of.

**Security**

* Hardened settings textarea sanitization for users without the `unfiltered_html` capability.

**Fixed**

* The AVIF encoder effort setting had no effect on servers that use GD, which never received it and fell back to its own default.
* The AVIF quality setting was ignored for PNG sources on servers that use GD. The encoder was handed its own default quality instead, which was neither the lossless encode the setting implied nor the quality configured on the Quality tab.
* Very large images were automatically pushed towards a faster encoder setting, which could make them substantially larger instead of merely quicker.
* Images were wrapped in a second `<picture>` element when content and template rewriting both ran.
* An image whose conversion stopped the background worker was claimed again indefinitely, because the abandoned attempt was never counted against its retry budget.
* A single attachment could run far past the batch time budget. The worker now stops between files and resumes after the last file it attempted.
* The queue table was reported missing for the rest of the request in which it was created, so a new site silently queued nothing.
* `trim()`, `ltrim()` and `rtrim()` relied on the default character list, which changes in PHP 8.6.

= 1.0.2 =

Release date: 27 August 2026

* Enhancements:
    * The Bulk Optimize scan runs in time-bounded passes and resumes where it left off, so building the queue can no longer time out on a very large media library.
    * The library-wide counts on the Bulk Optimize screen are cached, so a bulk run no longer re-counts the entire media library after every batch.
    * The naming detection scan primes its post and meta caches, replacing roughly two hundred queries with two.

= 1.0.1 =

Release date: 26 August 2026

* Features:
    * Optimized copies left by another plugin are detected, with a one-click switch to match their file naming so they start being served.
    * An optimized copy that already exists is adopted rather than re-encoded, so moving from another plugin does not repeat work it has already done.

* Bug fixes:
    * An optimized copy that is not small enough is now rejected before it replaces anything, so a rejected conversion can no longer delete a usable copy from an earlier run.
    * An optimized copy inherited from another plugin is kept only when it is no older than its source, so a stale copy is never served.

= 1.0.0 =

Release date: 25 August 2026

* Features:
    * Convert JPEG, PNG and GIF images in the media library to WebP and AVIF. Optimized copies are written alongside the original with the extension appended (`photo.jpg` becomes `photo.jpg.webp`) and originals are never modified.
    * Bulk Optimize screen backed by a resumable queue. Closing the tab does not lose progress and a background worker continues the run.
    * Images are served through a `<picture>` element so the browser chooses the format, which stays correct behind page caches and CDNs. Every `srcset` candidate is mapped, and an image falls back to the original unless every size converted.
    * Automatic conversion of new uploads, and of thumbnails regenerated after an image edit.
    * Images seen on the front end without an optimized copy are queued in the background. Nothing is ever encoded during a page render.
    * Per-format quality, encoder effort, metadata stripping that preserves the colour profile, and lossless mode for PNG sources.
    * An optimized copy that is not smaller than its source is discarded, decided per file.
    * Generated Apache and nginx rules, including `Vary: Accept`, for images referenced from stylesheets.
    * Per-image savings column and Optimize / Delete-copies actions in the Media library.
    * Multisite aware, with a per-site queue table created automatically for new sites.
    * WP-CLI commands: `wp wzio status`, `convert`, `queue`, `run` and `clean`.
    * Whole page rewriting uses the template enhancement output buffer introduced in WordPress 6.9, so it cannot interfere with buffers owned by a theme, a cache or another plugin. The option is unavailable on earlier versions.
