Built by a
Boston photographer for site owners who care about visual quality and full control. This plugin prioritizes
image quality over everything else — no subscriptions, no external services.
0.8.2
- Enhancement: The existing full-image fade setting now uses a 180ms opacity crossfade only for eligible images initially below the viewport; first-screen, high-priority, and already loaded images appear normally.
- Fix: Keep the ThumbHash visible through image decoding and the actual transition, with safe cleanup for cached images, errors, responsive source changes, and reduced-motion preferences.
- Fix: Preserve saved fade settings and authored picture styles, keep pixelated placeholders from affecting photograph rendering, and retain compatibility with independent image-loading buffers.
- Tests: Added Chromium and WebKit coverage at desktop and mobile sizes for loading races, visual transitions, and unchanged image delivery and layout.
0.8.1
- Fix: Preserve WebP and other non-JPEG files when deleting companion AVIFs, and isolate playground previews so existing media cannot be overwritten.
- Fix: Support WordPress's three-argument image-quality filter, final responsive image attributes, cropped galleries, and native lightbox controls.
- Fix: Keep CSS background media queries, gradients, multiple layers, and stylesheet ordering intact, including pages whose backgrounds appear only in linked CSS.
- Fix: Preserve custom thumbnail crops, accept valid compact AVIF files, and apply PHP memory limits only to encoders running inside PHP.
- Fix: Preserve resumable job progress across delayed cron runs, cancel queued LQIP generation on deletion, and prevent active workers from restoring deleted placeholders.
- Fix: Preserve the file-cache lifetime when saving settings, avoid unused playground conversions, respect disabled AVIF delivery, generate accurate palette-image placeholders, and honor LQIP CLI
--force.
- Fix: Avoid deprecated GD cleanup calls on PHP 8.5.
- Tests: Added portable regression suites and disposable WordPress integration coverage; see the GitHub test documentation.
0.8.0
- Enhancement: Setting explanations are now always visible below each field instead of hidden in hover-only "?" tooltips, making them accessible to keyboard and touch users.
- Enhancement: Redesigned the Logs panel — each entry is a compact one-line summary (engine, duration, size change) that expands for full details, with accessible status colors and no more scroll trapping.
- Enhancement: Destructive buttons (Delete All AVIF Files, Delete All LQIPs, Clear Logs, Reset All Plugin Settings) now use red styling, and confirmation dialogs show how many items will be affected.
- Change: The negated "Disable memory safety check" setting is now a positive "Check available memory before each conversion" (new
aviflosu_memory_check option); existing settings migrate automatically.
- Enhancement: Clearer Tools tab — sections scoped as "AVIF Tools: Media Library" and "AVIF Tools: Uploads Folder", the diagnostics panel renamed to "Server Diagnostics", and engine statuses now read "Will be tried" / "Not used" instead of "Attempting" / "Skipped".
- Enhancement: Unified interface copy — consistent generate/convert verbs, "JPEG" naming, sentence-case labels, typographic dashes and arrows, and count-aware confirmation strings.
- Enhancement: The Settings Playground loads the preview automatically when a JPEG is selected, and tabs announce the active state to assistive technology.
- Fix: Corrected the documented encoding speed range from 0–10 to the actual 0–8.
- Fix: A warning notice pointed to the removed "Upload Test" tool; it now points to the AVIF Settings Playground.
0.7.0
- Fix: LQIP (ThumbHash) placeholders were decoded at the wrong aspect ratio and rendered as distorted slivers; placeholders now match each image's shape.
- Fix: LQIP placeholders no longer stay hidden for images that are not wrapped in a
<picture> element.
- Fix: Failed conversions no longer leave tiny invalid
.avif files that could be served to visitors and were never regenerated; such files are now cleaned up and reconverted.
- Fix: "Delete All AVIF" no longer erases LQIP placeholder data, which is managed independently.
- Fix: LQIP generation now succeeds for attachments with missing or broken metadata by falling back to the original file.
- Enhancement: Bulk AVIF conversion and LQIP generation now run as resumable, time-sliced background jobs, preventing request timeouts and cron stalls on large media libraries.
- Enhancement: Removed a database write that occurred on every front-end request from the AVIF file-existence cache.
- Enhancement: Unified the Tools interface — consistent progress indicators that end on a completion checkmark, clearer status messages, and accurate stopped/queued states for scans.
- Enhancement: Renamed settings tabs to "AVIF Settings" and "LQIP Settings" and removed redundant in-tab headings.
- Chore: Made filesystem-scan status messages translatable and removed an unused bundled admin script.
0.6.4
- Feature: Added a filesystem scanner for JPEGs under uploads that are not represented in the Media Library, including WP-CLI and admin Tools support.
- Enhancement: Added WordPress AVIF compatibility diagnostics to
wp avif status --format=json and Site Health debug data.
- Chore: Confirmed WordPress 7.0 compatibility and hardened production package exclusions for development metadata.
0.6.3
- Fix: Lightbox/slideshow links now correctly rewrite from JPEG to AVIF when the image was already wrapped in a
<picture> element by another plugin (e.g. photo-collage). Previously the <a> href rewriting was skipped for images inside <picture>, causing lightboxes to load full-size JPEGs instead of AVIFs.
0.6.2
- Chore: Added a commit-based beta build workflow that publishes prerelease ZIPs to GitHub Releases.
- Chore: Kept stable release builds tag-based and guarded WordPress.org deploy so
beta-* tags are ignored.
0.6.1
- Fix: Clear Logs now reliably clears stored logs and prevents stale long-running processes from repopulating old entries.
- Enhancement: Logs panel now refreshes from server state after clearing, so UI always matches stored data.
- Enhancement: Clear Logs button is temporarily disabled while the clear request is in progress to prevent duplicate requests.
- Chore: Uninstall now removes the logs-generation option used by the clear-logs protection.
0.6.0
- Fix: Removed redundant on-upload AVIF conversion hook path to avoid duplicate work and keep upload conversion predictable.
- Fix: Improved daily scheduling behavior so overdue events run instead of being pushed to tomorrow, and on-demand AVIF scans always run regardless of schedule toggle state.
- Feature: Added stop control for bulk LQIP generation (REST endpoint + transient stop signal + admin status updates).
- Enhancement: Standardized admin LQIP wording and labels, including a short LQIP explanation at the top of the LQIP tab.
- Fix: Uninstall now clears LQIP stop transient and uses
delete_post_meta_by_key() for ThumbHash metadata cleanup.
- Chore: Plugin Check hardening for release by excluding non-distribution files from check scope and clearing stray
.DS_Store files.
0.5.23
- Feature: Added an AVIF Settings Playground for real JPEG/AVIF preview comparisons and one-click apply of tested settings.
- Feature: Expanded Tools with dedicated LQIP bulk generation/deletion controls and progress/status feedback.
- Enhancement: Refreshed admin UX across tabs (clearer labels, advanced sections, improved diagnostics and logs layout).
- Enhancement: Updated WordPress.org screenshots to match the current AVIF, Placeholders, Tools, and About screens.
- Fix: Plugin Check hardening for release by escaping help-tip output safely and using
wp_delete_file() in preview cleanup paths.
0.5.22
- Fix: AVIF Delete All now removes only plugin companion AVIF files for JPEG attachments, preventing deletion of user-uploaded AVIF originals.
- Fix: CSS background AVIF overrides now keep a JPEG fallback and use
image-set(...) so non-AVIF browsers still render backgrounds.
- Fix: ThumbHash decoder aspect-ratio extraction corrected (
h16 & 7) to match the upstream reference implementation.
- Fix: Restore defaults now resets background-image and all LQIP settings in addition to core AVIF settings.
- Fix: Corrected malformed HTML in the Tools diagnostics table around the schedule-time display.
- Fix: Clarified Tools count labels to match scope: AVIF now shows file-level totals as "JPEG Files" (originals + generated sizes), and LQIP shows attachment-level totals as "Media Items" (plus clearer "Without AVIF/LQIP" and "AVIF files" progress wording).
0.5.21
- Enhancement: ThumbHash input increased to 100px for richer LQIP placeholders.
- Fix: AVIF srcset now correctly lists all responsive sizes by running after WordPress adds srcset attributes.
- Fix: Single AVIF images now include width descriptors for proper responsive selection.
- Refactor: Removed redundant
render_block filter; unified image processing in the_content filter.
0.5.20
- Fix: Instant reveal now waits for
img.decode() to prevent white flash on fast-loading images.
0.5.19
- Refactor: Simplified LQIP fade transition — removed blur filter and scale animation.
- Fix: Eliminated white flash during LQIP-to-image transition by ensuring image is fully visible before removing placeholder.
- Fix: Fast-loading images now appear instantly without the 400ms fade delay.
- Cleanup: Removed unused per-image load duration tracking.
0.5.18
- Feature: LQIP Generate All now shows real-time progress counter, status text, and stop button.
- Feature: Unified spinner/status UI for both AVIF and LQIP tools panels.
- Fix: "AVIF conversion available" badge now correctly shows "Yes" when engines report support.
- Fix: AVIF Delete All button now correctly re-enables Generate All button after completion.
0.5.17
- Fix: LQIP background now correctly clears for already-loaded/cached images.
0.5.16
- Feature: Restored LQIP background cleanup after image load.
- Feature: Added "Pixelated placeholders" option to display ThumbHash as sharp pixels.
- Enhancement: Improved LQIP transition — blur-up effect with scale animation.
- Change: Transition updated to 400ms ease-out for smoother reveal.
0.5.15
- Enhancement: Tuned LQIP fade thresholds based on human perception research.
- Change: Page load window increased to 2 seconds (covers initial render).
- Change: Individual load duration increased to 200ms (perception threshold).
0.5.14
- Fix: WordPress Plugin Check compliance — proper escaping for inline scripts/styles.
- Fix: Replace
strip_tags() with wp_strip_all_tags() in BackgroundImages.
- Fix: Prefix global variables with plugin prefix.
- Chore: Remove
.DS_Store files from repository.
0.5.13
- Refactor: Simplified LQIP fade logic by removing background cleanup step.
0.5.12
- Feature: LQIP operations now log successes, failures, and summaries to the Logs panel.
- Fix: LQIP stats now correctly validate metadata structure, matching generation skip logic.
- Fix: Add object cache clearing before LQIP generation to prevent stale data on servers with persistent caching.
- Fix: Prevent false positive \"success\" reports in
wp lqip generate when generation fails silently but stale data exists.
- Fix: Remove deprecated
imagedestroy() calls for PHP 8.0+ compatibility.
- Refactor: Consolidate LQIP generation logic into shared helper for consistency between Admin UI and CLI.
0.5.11
- Fix: Critical fix for
wp lqip generate --force option.
- Fix:
wp lqip delete --all now correctly clears object cache to prevent stale stats.
0.5.9
- Feature: Added
--force option to wp lqip generate command to force regeneration of LQIPs.
0.5.8
- Fix: Resolved "Insufficient memory" error when generating LQIP for high-resolution images by optimizing ImageMagick loading.
0.5.7
- Feature: CSS background image AVIF support — replaces JPEG background images with AVIF versions. Thanks to David C.
- Feature: Works with page builders (Elementor, Divi, Beaver Builder, WPBakery, Bricks, etc.)
- Feature: New setting "Serve AVIF for CSS backgrounds" under AVIF serving options
- Fix: Versioned image URLs (e.g.,
image.jpg?ver=123) now correctly detected and replaced
- Fix: Query string stripping for CSS file path resolution
- Security: Sanitize CSS selectors to prevent XSS injection
0.5.6
- Enhancement: Smart fade logic — only apply fade transition for slow-loading images
- Enhancement: Images loading within 1 second of page load display instantly (no fade)
- Enhancement: Cached/fast-loading images skip fade for snappier feel
0.5.5
- Feature: Added "Fade in images" option to smoothly transition from LQIP to full image
- Fix: Used img.decode() to prevent white flash during LQIP fade transition
- Fix: CSS selector now correctly handles both picture wrapper and standalone img cases
0.5.4
- Feature: Added optional smooth fade-in for LQIP images
- Translations: Added German, Italian, Japanese, Portuguese (Brazil), and Russian translations
- Enhancement: Updated translations for Spanish, French, Hindi, and Chinese
- Fix:
wp lqip generate --all now correctly processes all eligible images
- Fix:
wp lqip stats accurately counts all supported image types
- Fix: LQIP JavaScript is now correctly excluded when feature is disabled
- Fix: Improved error logging for LQIP generation failures
0.5.3
- Fix: Added missing LQIP options to plugin activation (thumbhash_size, generate_on_upload, generate_via_schedule)
- Fix: Added missing LQIP options to uninstall cleanup for complete data removal
- Fix: Properly minified thumbhash-decoder.min.js (62% size reduction)
- Fix: Excluded developer documentation from WordPress plugin distribution
0.5.2
- Feature: Bundled ThumbHash library — no Composer dependency required on deployment
- Enhancement: Improved LQIP generation with better error handling, progress reporting, and memory management
- Enhancement: Added
--limit and --verbose options to wp lqip generate command
- Fix: Resolved hanging issue in
wp lqip generate --all command with better error handling and progress output
- Fix: Clear error messages when ThumbHash library is unavailable
0.5.1
- Fix: Improved error handling and logging for ThumbHash generation
- Enhancement: WP-CLI now warns if LQIP feature is disabled in settings
- Enhancement: Better diagnostics for missing source files during LQIP generation
0.5.0
- Feature: LQIP (Low Quality Image Placeholder) using ThumbHash for smooth image loading
- Feature: WP-CLI commands for LQIP management (
wp lqip stats, wp lqip generate, wp lqip delete)
- Feature: Dedicated LQIP settings tab with enable/disable toggle
- Enhancement: Reorganized admin UI with combined AVIF Tools section
- Enhancement: Consistent stat labels across AVIF and LQIP tools (Images/With/Without)
- Enhancement: Renamed "Test conversion" to "Test AVIF Conversion" for clarity
- Enhancement: Removed beta labels from LQIP feature
- Fix: LQIP stats now correctly count all supported image types (JPEG, PNG, GIF, WebP)
- Dev: Auto-fixed 6,152+ PHPCS issues for WordPress coding standards compliance
0.4.9
- Fix: WordPress Plugin Check compliance — proper escaping, Yoda conditions, and PHPCS ignores
- Fix: Improved uninstall cleanup with object cache awareness
- Dev: Code formatting aligned with WordPress coding standards
0.4.8
- Fix: Resolved logging pipeline issues where REST API couldn't retrieve logs due to
is_admin() check
- Fix: Fixed upload test timeout by temporarily disabling synchronous AVIF conversion during test uploads
- Fix: Improved AJAX feedback for log operations (clear/refresh)
- Docs: Updated minimum requirements to WordPress 6.8 and PHP 8.3
- Docs: Cleaned up README header format for WordPress.org compatibility
- Docs: Removed donate link from readme
- Dev: Added WordPress stubs for improved IDE support
0.4.7
- Enhancement: Improved time formatting in conversion progress display (hh:mm:ss format)
- Enhancement: CLI code formatting improvements
- Fix: Corrected contributor username in readme
0.4.6
- Docs: Added WordPress.org metadata headers
- Docs: Updated tested up to WordPress 6.9
0.4.5
- Fix: Corrected "Upload & Test" status display issues (spinner visibility, status text alignment)
- Fix:
wp avif delete command now correctly reports success/failure counts and handles permission errors
- Fix:
wp avif convert command output now includes count of missing AVIFs
- Enhancement: Added GitHub Action for automated release creation
0.4.4
- Feature: Fully asynchronous "Upload & Test" conversion to prevent timeouts on large images
- Enhancement: Re-architected test conversion to use sequential polling
- Enhancement: Admin UI modularized with template-based architecture
- Optimization: Removed unused
vendor storage and legacy dependencies, reducing plugin size
- Fix: Restored robust queue rendering for test results
0.4.3
- Added WP-CLI commands: status, convert, stats, logs, delete
- Refactored admin interface with modular architecture
- Improved logging and environment diagnostics
0.4.2
- Auto-detection for ImageMagick CLI in "Auto" mode
- REST API replaces admin-ajax for better performance
- Smart -define namespace probing (heic/avif)
- Tested with WordPress 6.9
0.4.1
- Compatibility: Tested up to WordPress 6.9
0.4.0
- Major refactor: strict types, DTOs, dedicated Encoder classes
- Optimized frontend HTML parsing
- Enhanced CLI execution and error handling
- Composer support (PSR-4 ready)
0.3.x
- Environment variable injection for restricted PHP environments
- Original image source handling fixes
- Engine priority: CLI, Imagick, GD
0.2.x
- ImageMagick CLI support with auto-detection
- Memory pre-check to prevent fatal errors
- Logs panel with detailed entries
- Lightbox anchor rewriting
- Chroma subsampling and bit depth options
0.1.x
- Initial release with Imagick/GD support
- ICC profile preservation
- EXIF orientation handling
- Basic admin interface
See
GitHub releases for complete version history.