=== ThumbPress – Compress Images, Manage Thumbnails, Detect Image Issues, WebP/AVIF, Lazy Loading, Hotlinking & More ===
Contributors: thumbpressco, codexpert, mukto90
Tags: image optimization, compress images, thumbnail manager, WebP converter, media library cleaner, AVIF converter, regenerate thumbnails, unused images, lazy load, hotlink protection
Requires at least: 6.0
Tested up to: 7.0
Requires PHP: 7.4
Stable tag: 6.4.1
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

The all-in-one WordPress image optimization plugin. Disable thumbnails, compress images, convert to WebP & AVIF, clean your media library, and more.

== Source Code ==

This plugin includes a compiled JavaScript bundle (`build/admin.js`) built with webpack, React, and TypeScript. The full uncompiled, human-readable source is included **inside this plugin**, so it can be reviewed, studied, modified, and rebuilt with no external dependency:

* React/TypeScript source: `spa/admin/src/`
* Plain JS/CSS: `assets/`
* Build configuration: `package.json`, `webpack.config.js`, `tailwind.config.js`, `postcss.config.js`, `tsconfig.json`

To rebuild the compiled bundle from the included source, run these from the plugin directory:

1. Install dependencies: `npm install`
2. Build: `npm run build`

This regenerates `build/admin.js` and `build/tailwind.css` from `spa/admin/src/`.

== Description ==

🚀 [Pro Version](https://thumbpress.co) | 🔵 [Facebook](https://www.facebook.com/codexpert.io/) | 🐦 [X](https://x.com/codexpertio) | 👥 [LinkedIn](https://www.linkedin.com/company/codexpertio/)

WordPress image management is a mess. And most site owners don't even know it.

Here's what's quietly happening on your site right now:

* Each upload creates 7+ thumbnails. Themes and plugins add more. Most stay unused and waste storage.
* Many images are still JPG or PNG. They’re heavier, slow down pages, and hurt Core Web Vitals and rankings.
* Unused, duplicate, and oversized images keep piling up. Updating them across pages takes extra time.

None of this is dramatic. It's just the slow, invisible damage that builds up on every WordPress site without a proper image management system.

**ThumbPress fixes it all with a single plugin.**

ThumbPress is a complete WordPress image optimization and media management plugin built for site owners, developers, and agencies who want full control over their media library. Compress images, convert to WebP or AVIF, regenerate thumbnails, find duplicate images, detect unused files, and much more — all from your WordPress dashboard.

**Version 6.0 is here** - with a redesigned interface, AVIF image conversion, and duplicate image detection.

---

👉 **All ThumbPress Features**

**Free Modules**

* 💥 [Disable Thumbnails](https://thumbpress.co/modules/disable-thumbnails)
* 💥 [Regenerate Thumbnails](https://thumbpress.co/modules/regenerate-thumbnails)
* 💥 [Set Image Upload Limit](https://thumbpress.co/modules/image-upload-limit)
* 💥 [Convert Images to WebP](https://thumbpress.co/modules/convert-images-to-webp)
* 💥 [Convert Images to AVIF](https://thumbpress.co/modules/convert-images-to-avif) *(Bulk conversion is Pro)*
* 💥 [Set Social Media Thumbnails](https://thumbpress.co/modules/set-social-media-thumbnails)
* 💥 Lazy Load Images
* 💥 Hotlink Protection
* 💥 [Disable Right Click on Images](https://thumbpress.co/modules/disable-right-click)

**Pro Modules**

* 🔥 [Find Unused Images](https://thumbpress.co/modules/detect-unused-images)
* 🔥 [Detect Large Images](https://thumbpress.co/modules/detect-large-images)
* 🔥 [Compress Images](https://thumbpress.co/modules/compress-images)
* 🔥 [Replace Image with New Version](https://thumbpress.co/modules/replace-image-with-new-version)
* 🔥 [Image Editor](https://thumbpress.co/modules/image-editor)
* 🔥 [Detect Duplicate Images](https://thumbpress.co/modules/detect-duplicate-images) *(New in 6.0)*
* 🔥 [Bulk AVIF Conversion](https://thumbpress.co/modules/convert-images-to-avif) *(New in 6.0)*
* 🔥 Trash Images *(Not a module, but lets you recover deleted images)*

---

🚀 **Free Features - In Detail**

**Disable Thumbnails - Stop Wasting Server Storage**

Every image upload triggers WordPress to create multiple resized copies - Thumbnail, Medium, Medium-Large, Large, Scaled — plus whatever your theme and plugins add on top. Most of these copies are never used anywhere on your site.

The Disable Thumbnails module lets you choose exactly which image sizes to block. Stop the copies before they're created, save server storage from day one, and keep your WordPress media library clean and manageable.

**Regenerate Thumbnails - Fix Broken Image Sizes Instantly**

Switched themes? Changed your image size settings? Installed a new page builder? Your existing images now have the wrong dimensions - and broken layouts are the result.

The Regenerate Thumbnails module rebuilds all your image sizes on demand. Select specific sizes or regenerate everything at once. No manual work, no missing thumbnails. Your site stays consistent without touching a single image file.

**Convert Images to WebP - Boost Site Speed and SEO Rankings**

WebP images are 25–35% smaller than JPG and PNG without any visible quality loss. Google recommends WebP. Core Web Vitals reward it. Page speed tools flag JPG and PNG as a performance issue.

ThumbPress converts your existing WordPress images to WebP in bulk or one by one, right from your dashboard. No FTP, no separate tools. Just faster images and better SEO rankings.

**Convert Images to AVIF - Next-Generation Image Format**

AVIF is the successor to WebP. It compresses images even further while preserving quality, and browser support is now mainstream across Chrome, Firefox, and Safari.

ThumbPress lets you convert individual images to AVIF for free. Need to convert your entire media library at once? That's a Pro feature available in the new 6.0 release.

**Image Upload Limit - Protect Site Performance at the Source**

One oversized image upload can slow down a page significantly. Without limits, editors and contributors regularly upload images straight from their phones or cameras - files that are 5MB, 10MB, sometimes larger.

Set a maximum file size and resolution for every image upload. Any file that exceeds your rules gets blocked before it ever hits the server. Clean media library, faster site - automatically enforced.

**Social Media Thumbnails - Look Intentional Everywhere You're Shared**

When you share a page on Facebook, Twitter, or LinkedIn, each platform crops the image differently. Without customization, your carefully chosen image ends up poorly framed or cut off entirely.

ThumbPress lets you set distinct thumbnails for each social media platform. Upload one version for Facebook, another for Twitter, another for LinkedIn. Your content always looks deliberate when shared.

**Lazy Load Images - Faster Pages Without Changing a Single Image**

By default, WordPress loads every image on a page at once - including images that are way below the fold and won't be seen until the user scrolls down. That's wasted bandwidth, slower initial load times, and a worse experience for users on mobile or slower connections.

Lazy loading changes this. Images only load as users scroll toward them. The result is a noticeably faster page on first load, lower bandwidth usage, and a real improvement in Core Web Vitals scores - all without touching your images or content.

**Hotlink Protection - Stop Other Sites From Stealing Your Bandwidth**

Hotlinking happens when another website embeds your images directly using your image URLs. Your server serves the image, your bandwidth takes the hit - and you get nothing in return.

ThumbPress blocks external sites from loading images directly from your server. Your images stay on your site, your bandwidth stays yours, and your hosting costs don't quietly inflate because someone else decided to use your media library as their CDN.

**Disable Right Click - Protect Your Images from Theft**

Right-click protection disables the ability to save, copy, or drag images directly from your site. It's a practical barrier that stops casual image theft - especially useful for photographers, portfolio sites, and ecommerce stores.

Enable it globally or for specific pages. No code needed.

---

🔥 **Pro Features — In Detail**

**Find and Delete Unused Images — Reclaim Your Server Space**

As websites evolve, images get left behind. Old blog post headers, replaced product photos, outdated banners — they all stay in your media library indefinitely, taking up space and adding noise.

The Find Unused Images module scans your entire site and surfaces every image that isn't linked to any post, page, or content. Review the list, then delete in bulk. Reclaim storage and clean up years of media clutter in minutes.

**Detect Large Images — Find What's Slowing Your Site Down**

Large images are one of the top causes of slow WordPress page load times. And slow pages hurt conversions and search rankings alike.

ThumbPress scans your media library for oversized images and flags them for action. Then compress them directly from the dashboard — no image editing software, no re-uploading. A faster WordPress site without sacrificing visual quality.

**Image Compression — Smaller Files, Same Visual Quality**

ThumbPress includes a built-in WordPress image compression tool that reduces file size while keeping your images sharp. Compress in bulk across your entire media library or optimize new uploads automatically.

Smaller images mean faster pages, better Core Web Vitals scores, and stronger SEO — across your entire site.

**Replace Image with New Version — Update Without Breaking Links**

Need to update a product image, fix a low-quality photo, or refresh a visual after a rebrand? Normally, replacing an image in WordPress means deleting the old file and updating every page where it appears manually.

ThumbPress lets you replace an image with a newer version while keeping the same URL. Every page, post, or widget that uses that image updates automatically. No broken links. No manual edits.

**Detect Duplicate Images — New in 6.0 🆕**

Duplicate images waste storage and create confusion in your media library. The same file uploaded twice, variations of the same photo, slightly different crops of one original — they all add up over time.

The new Duplicate Image Detection module identifies redundant files in your media library and helps you remove them safely. One of the most-requested features we've ever received — now available in ThumbPress 6.0.

**Image Editor — Edit Images Without Leaving WordPress**

Sometimes an uploaded image just needs a small adjustment — a crop, a rotation, a brightness tweak. The ThumbPress Image Editor lets you make those changes without ever leaving your WordPress dashboard.

No Photoshop. No re-uploading. Edit, save, and publish right from your media library.

---

🆕 **What's New in ThumbPress 6.0**

* Redesigned interface — cleaner, faster, and easier to navigate
* AVIF Image Converter — next-gen format support, with bulk conversion via Pro
* Duplicate Image Detection — find and remove redundant files from your media library
* Improved performance across all existing modules

---

👉 **Why ThumbPress Instead of Multiple Separate Plugins?**

Most WordPress sites end up using 4–6 different plugins just to manage images:

* One for thumbnail control
* One for compression
* One for WebP conversion
* One for social media previews
* One for image cleanup

Each plugin adds overhead. Each one adds potential conflicts. And none of them talks to each other.

**ThumbPress is one plugin that does everything.** Thumbnail management, image compression, WebP and AVIF conversion, media library cleanup, duplicate detection, image protection — all in a single, unified interface. Install once, manage everything.

---

== Installation ==

1. Upload the `thumbpress` folder to the `/wp-content/plugins/` directory, or install directly through the WordPress plugin screen.
2. Activate the plugin through the **Plugins** screen in WordPress.
3. Go to **ThumbPress** in your WordPress admin menu to get started.

== Frequently Asked Questions ==

= Will ThumbPress delete my existing thumbnails when I disable image sizes? =
No. The Disable Thumbnails module only prevents new thumbnails from being generated on future uploads. Your existing files stay untouched unless you manually delete them. You can regenerate thumbnails based on the sizes you have picked.

= Is WebP conversion reversible? =
It’s a one-way process. You reduce image size without losing quality, and there’s rarely a need to switch back to heavier formats from WebP.

= Can I use ThumbPress on multiple sites? =
Yes, both Professional and Agency plans let you use it on multiple sites. Visit the [Pricing page](https://thumbpress.co/pricing) to view multi-site license options.

= Is ThumbPress compatible with WooCommerce? =
Yes. ThumbPress works with WooCommerce, Elementor, Divi, and most major WordPress themes and plugins.

= Will image compression affect my image quality? =
No, ThumbPress uses lossless compression, so there’s no visible quality loss in your WordPress site images.

= What's the difference between WebP and AVIF? =
WebP is a widely supported modern image format that reduces file sizes compared to JPG and PNG. AVIF is the next generation — it compresses even further with equal or better quality. Both are supported by major browsers and recommended for WordPress performance.

= Can I bulk-convert images to AVIF for free? =
No, you can convert individual images to AVIF in the free version. Bulk conversion across your entire media library requires ThumbPress Pro.

= How does Duplicate Image Detection work? =
ThumbPress scans your media library and compares image files using unique hashes to find exact duplicates. This method is highly accurate since identical files share the same hash. You review the matches and decide if a fix is required - nothing is deleted automatically.

== Screenshots ==
1. Dashboard - Quick overview of key media factors
2. General Settings - Control essential image parameters globally
3. Detect Large Images - Identify oversized images slowing performance
4. Optimize Images - Optimize images while keeping visual quality intact
5. Disable & Regenerate Thumbnails - Block unwanted thumbnails and regenerate the ones you need.
6. Unused Image Detection - Find and remove unused media files
7. Convert to WebP - Bulk convert images to WebP format
8. Convert to AVIF - Convert images to modern AVIF format
9. Detect Duplicate Images - Find images uploaded more than once
10. Merge Duplicate Images - Replace duplicate images with the original and remove the copies
11. Compress Images - Reduce size without visible quality loss
12. Trashed Images - Restore deleted images or remove them permanently
13. Image Editor - Edit images directly inside WordPress
14. Social Media Share - Set custom thumbnails for each platform

== External Services ==

This plugin connects to the following external services. No personal data is ever transmitted automatically — the only transmissions described below happen solely after an explicit, opt-in action by a logged-in administrator.

**ThumbPress Feedback Service (pluggable.io / FluentCRM)**
ThumbPress can send your information to our marketing/CRM endpoint (`https://my.pluggable.io/?fluentcrm=1`) so we can follow up, improve the plugin, and understand how it is used.

This service is used in two places, and **only** when you choose to participate:

* *Activation survey notice* — if (and only if) you click the "Ok, I agree" button on the optional survey notice, the plugin sends your WordPress user first name, last name, email address, the plugin slug, and your site URL. Clicking "Remind me later", dismissing, or ignoring the notice sends nothing.
* *Deactivation feedback form* — if (and only if) you click "Submit & Deactivate" on the optional feedback form shown when deactivating the plugin, it sends your WordPress user first name, last name, email address, the plugin slug, your site URL, the time since install, the deactivation reason(s) you selected, and any free-text feedback you typed. Clicking "Skip & Deactivate" sends nothing.

No data is sent on activation, on normal usage, in the background, or on a schedule. Nothing is sent unless you actively submit one of the forms above.

Service provided by ThumbPress / Codexpert. Terms of Service: https://thumbpress.co/terms-of-service/ — Privacy Policy: https://thumbpress.co/privacy-policy/

**WordPress.org Plugin API**
ThumbPress may connect to the WordPress.org API (api.wordpress.org) to check for plugin updates. This is standard WordPress behavior used by all plugins. No personal data is transmitted beyond what WordPress core sends.

**ThumbPress Website (thumbpress.co)**
The plugin links to thumbpress.co for Pro upgrade information. No data is sent automatically; links only open when the user clicks them.

== Changelog ==

= 6.4.1 - 2026-07-21 =
* [add] Added Spanish (es_ES), German (de_DE), French (fr_FR), and Brazilian Portuguese (pt_BR) translations, and refreshed the Bengali (bn_BD) translation
* [add] Internationalized all frontend strings and numbers so they can be translated
* [perf] Improved WebP/AVIF conversion performance by batching database URL rewrites across a full convert run
* [fix] Fixed React SPA and PHP translations not loading for the current site locale

= 6.4 - 2026-07-16 =
* [imp] Convert to WebP/AVIF: the single-image convert buttons now show the real reason a conversion failed instead of a generic "Failed to convert image" — including a memory-limit message stating how much memory was needed vs the server limit and how to raise it
* [perf] Auto Featured Image: fixed an N+1 query on archive/blog/shop pages — the resolved image is now cached per request and persisted in post meta, so thumbnail-less posts no longer trigger a content regex scan and extra database query on every view
* [perf] Dashboard: added stampede (dog-pile) protection to the large-image and thumbnail stat recompute so a cold cache under concurrent load recomputes once instead of many times
* [perf] Dashboard: large-image count now uses a single indexed SQL query over stored file-size meta instead of a per-image filesystem scan, and the thumbnail count reads attachment metadata in chunks — the dashboard no longer risks timeouts or memory exhaustion on large media libraries
* [imp] Header: pointed the community link to the ThumbPress community space and moved it first (before Support and Docs), with icons added to each link
* [security] WP.org compliance: removed the remote Google Fonts request from the admin build and self-hosted Inter locally — no fonts are loaded from an external server

= 6.3.3.2 - 2026-07-14 =
* [compat] Version compatibility tested with 7.0.1
* [chore] Restructured the PHPUnit test suite

= 6.3.3.1 - 2026-06-28 =
* [fix] WP.org compliance: removed legacy/ folder entirely — eliminates all legacy-specific violations (Google Fonts unconditional enqueue, cwebp binary files, 5-star review filter links, unguarded nonce checks, unescaped output in legacy views)
* [fix] WP.org compliance: removed helpwp.dev in-plugin chat widget — the script was loaded automatically on every admin page without user opt-in (phoning home, Guideline 7); bundle rebuilt
* [security] REST /option GET endpoint now enforces the same allowlist as the POST endpoint (thumbpress_allowed_option_keys filter) — previously any wp_option key could be read including sensitive WordPress core options
* [fix] VersionManager simplified: get_version_to_load() always returns 'new'; legacy routing, load_legacy(), register_rest_routes(), save_preference(), and dismiss_notice() removed
* [fix] Admin/Init.php: inlined is_new_user() check directly (false === get_option('thumbpress_modules')) to avoid call to removed VersionManager method

= 6.3.3 - 2026-06-27 =
* [fix] WP.org compliance: removed Google Fonts enqueue (fonts.googleapis.com) from legacy admin — was loading unconditionally without opt-in consent (phoning home, Guidelines 7 & 9)
* [fix] WP.org compliance: bumped rosell-dk/webp-convert from 2.9 to 2.9.5 in legacy/composer.json (out-of-date library)
* [fix] WP.org compliance: documented the helpwp.dev in-plugin chat widget under == External Services == in readme.txt
* [security] REST API permission callbacks now use current_user_can('manage_options') (capability-based) instead of current_user_can('administrator') (role-string) across all thumbpress/v1 endpoints
* [security] All wp_verify_nonce() calls in legacy AJAX handlers now sanitize input with sanitize_text_field(wp_unslash()) before verification (8 locations across regenerate-thumbnails, convert-images, social-share, and AJAX classes)
* [security] Fixed AJAX nonce bypass in legacy bulk WebP conversion (convert_images()): previously set an error message but continued executing file operations on nonce failure; now exits immediately with wp_send_json_error() + return, and added manage_options capability guard
* [security] Fixed three AJAX handlers that accepted state-changing requests with no authentication: legacy image_sizes_dismiss() (now checks manage_options cap + nonce), AdminNotice::dismiss_pro_outdated_notice() (now checks manage_options + nonce), and legacy Notice::hide_notice() (now checks manage_options cap + sanitizes notice_id input)
* [fix] WP.org compliance: replaced all bare _e() calls with esc_html_e(), esc_attr_e(), or echo wp_kses_post(__()) depending on context — 27+ locations in legacy views (modules.php, upgrade-pro.php) and controllers (Admin.php, Menu.php, disable-thumbnails, regenerate-thumbnails)
* [fix] WP.org compliance: added defined('ABSPATH') || exit direct-access guard to 12 PHP files that lacked it (legacy/app/Admin.php, legacy/app/Settings.php, six legacy module entry files, legacy/modules/disable-thumbnails/views/settings.php, legacy/modules/convert-images/inc/functions.php, app/Config/autoload.php, app/Helpers/functions.php)

= 6.3.2 - 2026-06-23 =
* [fix] WP.org compliance: removed the bulk AVIF conversion worker from the free plugin — the handler shipped in free code but was only triggerable by the Pro add-on (trialware / locked feature, Guideline 5)
* [fix] WP.org compliance & privacy: the activation survey and deactivation feedback forms (pluggable.io / FluentCRM) are now fully documented as an opt-in External Service in the readme — they transmit data (name, email, site URL, deactivation reason, feedback) only when you explicitly click "Agree" / "Submit & Deactivate", never automatically, with Terms of Service and Privacy Policy links provided (Guidelines 6, 7 & 9)
* [fix] WP.org compliance: replaced the remote secure.gravatar.com reviewer avatars on the Pro page with locally bundled images — the free plugin no longer loads any image from a remote server (Guideline: no calling files remotely)
* [fix] WP.org compliance: the legacy WebP URL builder now derives the public URL from wp_upload_dir() instead of str_replace(ABSPATH, home_url()), so it works on custom upload paths, subdirectory installs, multisite, and symlinked setups
* [fix] WP.org compliance: the uncompiled React/TypeScript source (spa/) and its build configuration are now shipped inside the plugin zip so the source of build/admin.js can be reviewed and rebuilt directly, with no external dependency

= 6.3.1 - 2026-06-23 =
* [fix] WebP/AVIF conversion now updates the image URL everywhere it is stored — post content, custom fields, and options — so images no longer break in page builders (Elementor, Divi, Beaver Builder), the Customizer, or WooCommerce email and placeholder images after converting (#341, #357)
* [fix] URL replacement handles plain, PHP-serialized, and escaped-JSON stored values, and matches by URL path so CDN, protocol-relative, and root-relative links are rewritten too
* [perf] Faster, safer database URL rewriting with a basename pre-filter and per-option cache clearing
* [fix] Aligned the Compress size selector and button on the media attachment screen

= 6.3.0 - 2026-06-17 =
* [fix] WP.org compliance: removed bulk AVIF code from free plugin (trialware violation)
* [fix] WP.org compliance: restricted REST /option endpoint to allowlisted keys
* [fix] WP.org compliance: removed external data transmission from deactivation survey
* [fix] WP.org compliance: replaced remote Font Awesome CDN with WordPress dashicons
* [fix] WP.org compliance: removed Intercom live chat widget (external service)
* [fix] WP.org compliance: wrapped core admin includes in is_admin() guards
* [fix] WP.org compliance: replaced WP_CONTENT_DIR and ABSPATH URL patterns with wp_upload_dir()
* [fix] WP.org compliance: added ABSPATH guards to view/template files
* [fix] WP.org compliance: fixed text domain from 'thumbpress' to 'image-sizes' in 5 strings
* [fix] WP.org compliance: replaced esc_attr_e($var) with echo esc_attr($var) in legacy views
* [fix] WP.org compliance: include composer.json in plugin release
* [fix] WP.org compliance: updated Action Scheduler from 3.7.1 to 3.9.3
* [add] readme.txt: source code link and build instructions
* [add] readme.txt: external services documentation
* [feat] Media library: added Convert to WebP/AVIF Pro feature buttons with an upsell popup in the free version
* [fix] Convert to WebP/AVIF: conversion no longer corrupts attachment metadata or loses data — the new file is written before old files are deleted, metadata writes are guarded, and -scaled originals are no longer orphaned or served at full size
* [fix] Regenerate Thumbnails: cancelling a background regeneration no longer leaves a zombie batch chain that corrupts progress
* [fix] Background jobs: completed Regenerate and Convert to WebP jobs now restore their progress view on page reload instead of showing the initial screen
* [fix] Regenerate & Convert: orphan attachments are no longer processed silently — a not-found count is now surfaced
* [fix] Fixed null dereferences, stale debug keys, and unhandled promise rejections in the new SPA
* [fix] Pro: show an Activate License / Pro activation notice when Pro is installed but its license is inactive
* [fix] No longer force-redirect to the ThumbPress dashboard on every plugin update
* [fix] Fixed settings page and general responsiveness issues (including MacBook screens)

= 6.2.2 – 2026-06-04 =
* [fix] Fixed stale settings values when switching tabs after save
* [fix] Fixed WebP convert-on-upload settings screen
* [fix] Fixed lazy load settings screen
* [fix] Hide dismiss button in admin notice when in legacy mode
* [refactor] Removed unused Social_Share API class

= 6.2 - 2026-05-22 =
* [fix] Fixed admin redirect loop — AJAX and REST requests now skipped in `maybe_redirect`
* [feat] Added `thumbpress_media_changed` action hook fired after media changes to allow cache rebuilds
* [fix] Hotlink protection `.htaccess` writes now gated to Apache only
* [fix] Hotlink protection URL rewriting now gated to Apache only
* [refactor] Renamed dashboard API identifiers from `fast/medium/slow` to `counts/optimization/analysis` across PHP methods, REST routes, TypeScript interfaces, API functions, and React state

= 6.1.4 - 2026-05-21 =
* [feat] Add RTL support for switch component
* [fix] Dashboard stats now load sequentially to prevent race conditions
* [fix] Dashboard skeleton loading states display correctly while data loads
* [fix] Pro card filters apply during initial dashboard load
* [refactor] Prefix namespaces with Codexpert to match legacy
* [refactor] Replace single pro_cards filter with 5 per-card filters for granular control
* [chore] Ignore .worktrees directory

= 6.1.3 - 2026-05-19 =
* [imp] Improved empty state messages across feature pages
* [imp] Enhanced cache management for dashboard data
* [add] Made all strings translatable across entire codebase
* [fix] Fixed unicode curly quotes to ASCII straight quotes for proper encoding
* [remove] Removed unnecessary code from public-facing views

= 6.1.2 - 2026-05-13 =
* [fix] Fixed foreground chunk loop not stopping on cancel for Regenerate and Convert WebP
* [fix] Fixed background WebP and AVIF stale queue, cancel race condition, and stuck loop
* [fix] Fixed AVIF background conversion stuck at 0% due to empty batch and division by zero
* [fix] Fixed loader modal conflicting with page head by moving it to wp_footer
* [fix] Fixed thumbnail size caches not clearing immediately on save disabled sizes
* [perf] Cache thumbnail sizes list for 24h; invalidate only on plugin activate, deactivate, or update
* [perf] Lazy-load Settings tab data to reduce API calls on mount

= 6.1.1 - 2026-05-09 =
* [imp] Set stats cache expiry to 1 hour

= 6.1 - 2026-05-09 =
* [fix] Fixed heavy `_thumbpress_file_hash` queries after opening dashboard
* [add] Added number of images in the debug dataset

= 6.0.2 - 2026-05-07 =
* [add] Added a Debug tab under Settings with system info (WordPress, PHP, MySQL, server software, memory limits), active plugins list, active theme, WP_DEBUG flags, and ThumbPress-specific settings
* [add] Added one-click Copy as JSON button in the Debug tab header for easy support sharing
* [imp] Moved ThumbPress admin menu item down in the WordPress sidebar

= 6.0.1 - 2026-05-07 =
* [imp] Minor improvements and stability fixes

= 6.0.0 - 2026-05-07 =

**New Features**
* Launched a completely redesigned React SPA admin interface with a persistent sidebar, page-level headers, and smooth client-side navigation — replacing the legacy PHP admin
* Added a new Dashboard with a weighted health score gauge, stat cards (Total Images, Total Thumbnails, Unoptimized Images, Space Saved), and a Quick Facts panel sorted by health impact
* Added Convert to AVIF as a free feature — includes auto-convert on upload and single-image conversion from the media library; bulk conversion requires Pro
* Added duplicate image detection in the free plugin using file-hash fingerprinting of original images
* Added Hotlink Protection via .htaccess RewriteRules to block external referrers from embedding site images
* Added JavaScript-based Lazy Load via IntersectionObserver as a configurable option
* Added a unified, tabbed Settings page covering all features: General, Thumbnails, Convert to WebP, Convert to AVIF, Social Share, Compress Images (Pro), and Duplicate Images (Pro)
* Added Cancel button for background WebP conversion and thumbnail regeneration jobs — immediately unschedules queued tasks
* Added single-image Convert to WebP and Convert to AVIF buttons directly on the media attachment edit page
* Added a Regenerate Thumbnails button on the media attachment edit page for per-image regeneration
* Added a Space Saved stat card to the regeneration progress view — tracks cumulative storage recovered across all operations
* Added a welcome notice for new installations that auto-dismisses when visiting the ThumbPress dashboard
* Added an admin notice when an outdated ThumbPress Pro (below 6.0) is detected, prompting an upgrade
* Added a version router so new users receive the new interface automatically while existing users retain their experience until they opt in; a "Turn on legacy mode" link is available in Settings for those who prefer the classic UI

**Improvements**
* Moved Convert to WebP from Pro-only to the free plugin, with dynamic file format selection (JPEG, PNG, GIF, etc.) and configurable batch size
* Redesigned the Regenerate Thumbnails page with six progress stat cards: Total Images, Total Thumbnails, Images Processed, Images Deleted, Images Created, and Space Saved
* Added a toggle-all switch to the Thumbnails page card header for quickly enabling or disabling all thumbnail sizes at once
* Redesigned the Convert to WebP page with initial/progress states, immediate progress display on button click, and a settings shortcut link
* Replaced the third-party rosell-dk/webp-convert library with WordPress's native wp_get_image_editor() for WebP and AVIF conversion
* Added skeleton loading animations to the Dashboard, Convert to WebP, and Regenerate Thumbnails pages to prevent layout flash during data fetch
* Added toast notifications on all Settings tabs for save confirmation and error feedback
* Added URL-based tab navigation in Settings so individual tabs are deep-linkable and survive page reload
* Added Pro badge indicators to pro-gated sidebar navigation items and settings rows
* Added an "Upgrade to Pro" button to the page header when the pro plugin is not active
* Added a dedicated Pro page with hero section, feature comparison, pricing plans, accordion FAQ, and testimonials
* Automatically redirected to the ThumbPress dashboard after plugin activation or upgrade
* Automatically migrated legacy option data to the new format when switching from the legacy UI to the new version
* Automatically cleared relevant stat caches when thumbnail sizes are saved, plugins are activated/deactivated, or media is added/deleted
* Pre-warmed stat caches on first activation via Action Scheduler so the Dashboard loads with real data immediately
* Rebuilt stat caches automatically after each media upload or deletion to keep dashboard numbers current without a manual refresh
* Tracked space saved cumulatively across all operations (WebP conversion, AVIF conversion, compression, regeneration) in a single unified option
* Added file-hash and file-size meta backfill for all existing images on activation to enable duplicate detection without a full rescan

**Bug Fixes**
* Fixed division by zero error in the health score calculation when no images are present
* Fixed WebP and AVIF conversion leaving the original file on disk after a successful swap
* Fixed filename collisions when two source files (e.g. foo.jpg and foo.png) both targeted the same output — the second file now receives a unique name (e.g. foo-1.webp)
* Fixed memory exhaustion on very large image uploads during WebP conversion by pre-flighting available memory before calling the image editor
* Fixed large image detection incorrectly measuring the -scaled derivative instead of the original uploaded file
* Fixed hotlink protection .htaccess rules not working correctly on Apache and Nginx
* Fixed stale progress data disabling action buttons after a completed job
* Fixed foreground WebP conversion not accumulating space-saved totals correctly across multiple chunks
* Fixed a TypeError in Convert to WebP caused by the loop variable being overwritten during iteration
* Fixed migration ordering bug that caused legacy settings to be overwritten by plugin defaults during the version switch
* Fixed WordPress admin submenu active state not syncing with the SPA sidebar when navigating from other admin pages
* Fixed Tailwind CSS leaking styles into the WordPress sidebar and other admin pages by scoping all rules to the plugin container
* Fixed the legacy PHP admin showing a blank screen when switching back from the SPA version
* Fixed AVIF conversion being silently skipped due to an overly strict server support check
* Fixed the Convert to WebP card header not appearing until data finished loading, causing a visible flash
* Fixed Quick Facts showing incorrect WebP/AVIF counts — each format now uses its own independent count
* Fixed the health score incorrectly penalising sites for having thumbnail sizes disabled (disabled sizes save storage and should improve the score)
* Fixed General and Thumbnails settings tabs not saving changes
* Fixed missing file-existence checks before WebP/AVIF conversion that could cause fatal errors on missing source files
* Fixed trashed and missing-file attachments being included in image queries, skewing counts
* Fixed the progress screen flashing briefly when retrying after no images were found

= v5.8.37 - 2026-01-13 =
- [remove] Removed the notice for the Year End sale campaign.

= v5.8.36 - 2025-12-23 =
- [added] Added a new notice for the Year End sale campaign.

= v5.8.35 - 2025-12-08 =
- [fix] Fixed regenerate thumbnails, detect unused & large Images not working issue.

= v5.8.34 - 2025-11-25 =
- [fix] Fixed Free/Pro tab switching (clicks were being ignored)

= v5.8.33 - 2025-11-09 =
- [added] Added a new notice for the upcoming BFCM campaign.

= v5.8.32 - 2025-10-08 =
* [imp] Version compatibility tested with 6.8.3

= v5.8.31 - 2025-06-22 =
* [imp] Version compatibility tested

= v5.8.30 - 2025-06-02 =
- [fix] Plugin search issue fixed

= 2025-05-26 – v5.8.28 =
* [imp] Security issue fixed

= 2025-05-23 – v5.8.27 =
* [imp] CSS issues fixed

= 2025-05-14 – v5.8.26 =
* [imp] Security issue fixed

= 2025-05-14 – v5.8.25 =
* [imp] Change in upgrade to pro text and link.

= 2025-05-13 – v5.8.25 =
* [imp] Code improved

= 2025-05-11 – v5.8.24 =
* [imp] Compatibility tested with WordPress v6.8.1

= 2025-05-08 – v5.8.23 =
* [fix] Security issues fixed

= 2025-05-07 – v5.8.22 =
* [fix] Fixed issue where images with the same name but different extensions were incorrectly converted to the same image.

= 2025-04-29 – v5.8.21 =
* [fix] Notice issue updated
* [fix] Code improved

= 2025-04-20 – v5.8.20 =

- [fix] Fix Menu disappeared issue

= 2025-04-20 – v5.8.19 =
* [fix] Plugin search result issue fixed

= 2025-04-17 – v5.8.18 =
* [imp] Code improved

= 2025-04-17 – v5.8.17 =
* [imp] Code improved

= 2025-04-09 – v5.8.16 =
* [imp] Compatibility tested with WordPress v6.8

= 2025-03-10 – v5.8.15 =
* [misc] Compatibility tested with WP v6.7.2
* [misc] Version number conflict fixed

= 2025-03-10 – v5.8.12 =
* [fix] Fixed the bug related to the convert to WebP feature reached more than 100%
* [add] Code improved

= 2025-02-23 – v5.8.11 =
* [add] Code improved

= 2025-01-17 – v5.8.10 =
* [add] Compatibility tested

= 2025-01-02 – v5.8.9 =
* [add] New Year Notice added

= 2024-12-12 – v5.8.8 =
* [fix] Error related to `_load_textdomain_just_in_time` fixed

= 2024-11-25 – v5.8.7 =
* [remove] removed promotional button from dashboard
* [imp] update promotional link & text from plugin menu

= 2024-11-25 – v5.8.6 =
* [imp] compatibility tested with WordPress 6.7.1

= 2024-11-20 – v5.8.5 =
* [imp] compatibility tested with WordPress 6.7

= 2024-11-12 – v5.8.4 =
* [imp] routine maintenance

= 2024-11-03 – v5.8.3 =
* [imp] routine maintenance

= 2024-10-27 – v5.8.2 =
* [imp] routine maintenance

= 2024-10-16 – v5.8.1 =
* [add] added escaping functions for output
* [imp] corrected escaping attribute format

= 2024-10-08 – v5.8 =
* [fix] fixed ninja forms conflict issue
* [imp] enabled necessary modules upon install

= 2024-10-02 – v5.7.5 =
* [add] added escaping functions for output

= 2024-09-26 – v5.7.4 =
* [add] added escaping functions for output
* [imp] corrected escaping attribute format
* [fix] fixed string and translation issue

= 2024-09-19 – v5.7.3 =
* [add] added escaping functions for output

= 2024-09-12 – v5.7.2 =
* [imp] code formatted
* [imp] compatibility tested with WordPress 6.6.2

= 2024-09-04 – v5.7.1 =
* [add] added escaping functions for output
* [imp] corrected escaping attribute format
* [fix] solved string and translation issue

= 2024-08-21 – v5.7 =
* [add] added escaping functions for output
* [imp] corrected escaping attribute format
* [fix] solved string and translation issue
* [rem] removed unnecessary DS_Store files

= 2024-08-11 – v5.6.1 =
* [fix] fixed thumbpress constant issue
* [fix] fixed font-awesome enqueue issue
* [imp] updated text-domain
* [imp] updated css classes

= 2024-08-08 – v5.6 =
* [fix] fixed background actions for modules
* [fix] fixed offset count issue
* [add] new progress messages added
* [imp] improved progress bar design
* [imp] updated settings for modules
* [imp] restricted double click on action buttons
* [imp] optimized javascript code

= 2024-07-30 – v5.5.1 =
* [fix] convert images action scheduler issue fixed
* [fix] regenerate thumbnails real time ajax issue fixed

= 2024-07-30 – v5.5 =
* [fix] convert images offset fixed
* [imp] progress completion system improved
* [imp] javascript code optimized
* [imp] improved regenerate thumbnails progress
* [imp] plugin activation time condition updated
* [imp] code structure updated for compress images
* [add] new css class added for buttons
* [add] not found message added in multiple modules
* [add] real time actions added using ajax in multiple modules

= 2024-07-15 – v5.4 =
* [imp] integrated Action Scheduler into convert to WebP module
* [imp] integrated Action Scheduler into some other modules
* [imp] improved background process of regenerate thumbnails module
* [imp] improved design issues of some modules

= 2024-06-09 – v5.3 =
* [fix] fixed disable thumbnails drag-n-drop not working issue
* [fix] fixed module interconnecting links not working issue
* [imp] moved overview page contents to advanced features page

= 2024-05-31 – v5.2.4 =
* [imp] Removed unnecessary `wporg-assets` folder

= 2024-05-29 – v5.2.3 =
* [imp] optimized code and reduced plugin file size
* [imp] improved style of disable thumbnails module
* [imp] added links for interconnecting two modules

= 2024-05-21 – v5.2.2 =
* [fix] Fixed the issue of stopping generating thumbnails

= 2024-05-21 – v5.2.1 =
* [imp] removed pointer notice

= 2024-05-21 – v5.2 =
* [fix] solved regenerate thumbnails issue
* [imp] optimized javascript code

= 2024-05-20 – v5.1.2 =
* [imp] removed admin notice from dashboard
* [mod] changed leave a review button url

= 2024-05-15 – v5.1.1 =
* [fix] `Add New Plugin` page refersh button onclick issue fixed

= 2024-05-09 – v5.1.0.2 =
* [imp] code structure improved
* [fix] sub-menu text changed
* [fix] replace images issue fixed
* [fix] convert all images issue fixed
* [fix] convert images scaled issue fixed
* [fix] delete original image after conversion issue fixed
* [add] get image from attached file with scaled name function added
* [imp] code cleaned and image mime type updated
* [fix] action scheduler table issue fixed
* [imp] check action scheduler table function updated
* [add] create action scheduler tables if missing
* [imp] check action table before activation and delete option table data
* [imp] plugin settings slug changed
* [fix] dashboard pointer issue solved
* [imp] dashboard banner logic updated
* [add] social share image single post check added
* [add] social share image extra check added to avoid warning
* [fix] scaled image regenerate issue fixed
* [fix] scaled image thumbnail regenerate in background issue fixed

= 2024-05-01 – v5.0.2 =
* [fix] fixed pinterest thumbnail in social share images module
* [fix] fixed typographic issues in sereral modules
* [fix] fixed Setup Wizard skip button URL
* [fix] fixed some minor issues in Setup Wizard
* [add] Pinterest pin support added for woocommerce product in social share images module
* [add] fallback image meta tag added for Twitter card in social share images module
* [imp] Pinterest pin meta tag updated in social share images module
* [imp] improved some styles

= 2024-04-29 – v5.0.1 =
* [fix] JS and CSS minified
* [fix] Compat tested with WordPress 6.5.2

= 2024-04-29 – v5.0 =
* [new] #### 🚀 Introduced modules-
	- Detect Unused Images
	- Set Image Upload Limit
	- Detect Large Images
	- Compress Images
	- Replace Image with New Version
	- Set Social Media Thumbnails
	- Image Editor
	- Convert Images into WebP
	- Disable Right Click on Image

View detailed Changelog from [👉 here](https://thumbpress.co/changelog/).

== Upgrade Notice ==

= 6.0 =
ThumbPress 6.0 includes a redesigned interface and two new modules — AVIF conversion and Duplicate Image Detection. Update recommended for all users.
