Description
Harvify Image Optimizer helps WordPress administrators convert Media Library images to modern WebP and AVIF formats without running heavy compression work inside PHP.
The plugin scans lightweight attachment metadata first, then your browser converts selected images in a small queue. Images are processed with Web Workers and OffscreenCanvas where available, uploaded back through authenticated WordPress REST API requests, and released from browser memory as each item finishes.
This client-side approach is designed for shared hosting environments where PHP memory limits and execution timeouts can interrupt large image optimization jobs.
Key features
- Convert JPEG, PNG, WebP, and AVIF source images to WebP or AVIF.
- Scan one source format at a time so existing target-format images are not
accidentally reprocessed. - Select a few images for a test run before processing the full queue.
- Skip small files, very large images, selected upload paths, or filename
patterns. - Lazy-load images on the front end.
- Media Library “Optimize now” row action — convert and replace a single
image straight from the Media Library list, using the same in-browser engine
as the bulk queue. - PNG to JPEG preset — one click in the optimizer switches PNG sources to a
JPEG target, which is usually far smaller for photographs. - Restore an image you replaced — put the original file back for a single
attachment, in the free tier. - Total optimized and KB saved — how many images you have optimised and how
much space that has saved, totalled across the whole library. - Adjust quality and queue concurrency from the admin screen.
- Save queue state in the browser with IndexedDB so work can resume after
interruption. - Keep wp-admin responsive by doing conversion work in browser workers.
- Process images locally in your browser without using an external optimization
API. - Optional original-file deletion, disabled by default.
Pro features (Harvify Pro Bundle)
- Automatic front-end delivery — your pages serve WebP/AVIF through a
element with the original as the fallback, so browsers that cannot
read the new formats still get an image. Covers post content and featured
images. - Keep originals, and restore — convert to sidecar variants instead of
replacing the file, then restore a single image or bulk-restore every
generated variant in one action. - Auto-queue new uploads — images uploaded from now on are marked for the
next run, so the library does not drift back out of date. - Media Library status column — see at a glance which attachments are
optimised, and which queue items are WooCommerce product images. - Savings reports with CSV export — how much space you have actually
reclaimed, per format, plus a debug log you can copy into a support request. - Per-format quality control — separate WebP, AVIF and JPEG quality settings
rather than one slider for everything.
Privacy and external services
Harvify Image Optimizer does not send images to a third-party compression service, load scripts from external CDNs, or track usage. Images are fetched by your browser from your own WordPress site and uploaded back to your own WordPress REST API.
AVIF encoding uses bundled WebAssembly encoder files. The current AVIF path uses the Apache-2.0 licensed @jsquash/avif single-thread encoder, with the earlier bundled wasm-avif encoder retained as a local fallback.
Format testing
If you want to experiment with AVIF conversion outside your WordPress Media Library first, you can use this browser-based test tool:
External services
This plugin connects to Freemius, the licensing and update service Harvify uses to
sell and deliver the Pro tier of its plugins.
Nothing is sent to Freemius unless you choose to send it. The plugin ships in
anonymous mode, so a fresh install makes no outbound request at all, and the free
tier stays fully usable if you never opt in. Data is transmitted only when you take
one of these actions:
- You click “Allow & Continue” on the Freemius opt-in screen. This sends your
site address, your administrator email address, and your WordPress, PHP and active
plugin/theme details, so Harvify can provide support and know which environments to
test against. Skipping that screen sends nothing and leaves the plugin working
normally. - You enter a Pro Bundle licence key. This sends the key together with your site
address so the licence can be activated for that site. While a licence is active the
site also re-checks periodically that it is still valid and whether a Pro update is
available.
Service provided by Freemius, Inc. – https://freemius.com/
Terms of service: https://freemius.com/terms/
Privacy policy: https://freemius.com/privacy/
Image conversion
Conversion runs entirely inside your own browser using WebAssembly encoders bundled
with the plugin. Images are read from, and written back to, your own WordPress site.
No image is sent to any third-party service and no external CDN is used.
Screenshots



Installation
- Upload the plugin folder to
/wp-content/plugins/. - Activate the plugin through the Plugins screen in WordPress.
- Open Harvify Image Optimizer in the WordPress admin menu.
- Choose a source format, choose WebP or AVIF as the target, and scan the library.
- Select a few test images if desired, adjust quality, and start the selected queue.
FAQ
-
Which conversions are supported?
-
The source selector can scan JPEG, PNG, WebP, or AVIF attachments. The target selector can write WebP or AVIF, depending on browser, WordPress, and server image metadata support.
-
Can I test only a few images first?
-
Yes. Scan a source format, select only the queue rows you want to process, adjust quality, and start the selected queue. This is recommended before processing a large live media library.
-
Does it modify theme or plugin files?
-
No. This version only replaces Media Library attachment files inside the uploads directory. Theme and plugin asset rewriting is intentionally excluded because it can break updates, checksums, and third-party package expectations.
-
Does this send my images to a remote service?
-
No. Images are fetched by your browser from your own WordPress site and uploaded back to your WordPress REST API.
-
Why can AVIF be slower than WebP?
-
AVIF compression is more CPU intensive, especially when using a WebAssembly encoder in the browser. For large batches, start with a small test selection and keep concurrency low.
-
AVIF output depends on browser WebAssembly support and WordPress/server support for AVIF media metadata. WordPress added AVIF support in version 6.5, but the hosting image library must also support it.
-
What happens if the tab is closed?
-
The queue is saved in IndexedDB in the same browser. Open Harvify Image Optimizer again and choose Start Selected / Resume.
-
Are original files deleted?
-
No, not by default. The admin must explicitly enable the delete originals option before starting the queue.
Reviews
There are no reviews for this plugin.
Contributors & Developers
“Harvify Image Optimizer for WebP and AVIF” is open source software. The following people have contributed to this plugin.
ContributorsTranslate “Harvify Image Optimizer for WebP and AVIF” into your language.
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by RSS.
Changelog
1.0.29
- Added: a single Support entry in the Harvify menu, so you can reach us from
inside WordPress. Until now no plugin offered a contact route at all. One entry for
the whole suite rather than one per plugin. - No behaviour changes.
1.0.28
- Added: an External services section to this readme, naming every third-party
service the plugin can contact, exactly what is sent, when, and each provider’s terms
and privacy policy. Required for WordPress.org submission. - Changed: the
Contributorsfield now names the correct WordPress.org account. - No behaviour changes.
1.0.27
- Rebuild: the published 1.0.26 package was generated from an earlier tree. Documentation
only; no behaviour changes.
1.0.26
- Added: a single Manage licence link on the Plan screen, so an active customer can
deactivate this site, change their licence key or re-check their licence without
needing a URL from support. No per-plugin Account tab is added.
1.0.25
- One upgrade link instead of one per plugin. With several Harvify plugins active the
menu showed a row called “Upgrade” for each of them, all identically labelled, and it kept
saying Upgrade to people who had already bought. They are replaced by a single Plan
screen that says what the bundle costs, what it covers, and whether your licence is active. - The dashboard is quiet again. Each plugin used to add its own “opt in to make this
better” notice to the main WordPress dashboard, so five plugins meant five notices. Harvify
plugins now share one queue: promotional notices appear only on Harvify’s own screens, and
only one at a time. Licence and account messages are never held back. - Fixed: the “Data & uninstall” box covered the page. It was being drawn into the admin
footer, which WordPress pins to the bottom of the screen, so it floated on top of whatever was
underneath it. It now sits in the page like any other card. Saving it also tells you what it
saved, instead of just reloading. - Fixed: the upgrade screen advertised the wrong number of sites. Several plugins listed
the Freelancer and Agency plans as covering 5 and 25 sites. They cover 3 and 10.
1.0.24
- Packaging fix for the download this plugin actually ships as. The Freemius product slug
still held the name originally requested, so every generated ZIP unpacked into
harvify-image-optimizer-for-webp-and-avif/ while the plugin’s text domain and its
WordPress.org home areharvify-image-optimizer-webp-avif. A mismatched folder means the text
domain no longer matches its directory, and an update served outside WordPress.org would land
in a second directory alongside the first. The product slug is corrected; no plugin code
changed.
1.0.23
- Deleting the plugin can now clean up after itself. It previously had no uninstall routine
at all, so its options stayed in your database forever with no way to remove them. A new
Data & uninstall control on the plugin’s own screen lets you opt in to a full cleanup; the
default is to keep everything, so nothing changes unless you ask for it.
1.0.22
- Fixed: the admin screen could come up completely blank with only “Internal error.” above
it. The plugin keeps its conversion queue in your browser’s storage, and it opened that
storage before drawing anything. If the browser refused — which it does when the disk is
full or the browser profile is damaged — start-up stopped dead and the entire screen was
replaced by the browser’s own two-word message. WordPress then moved that message to the top of
the page, away from the plugin, so there was nothing left to look at and nothing saying which
plugin had failed. - Browser storage is now optional. If it is unavailable the queue is switched off and clearly
explained — what failed, that it is your browser rather than your site, and what to do
about it — while Settings, Insights and your plan keep working normally. - Start-up failures now name the plugin and stay on screen instead of being relocated away from it.
- The readme never listed the Pro features. Seven Pro capabilities ship in this plugin and
the WordPress.org listing described none of them, so nobody reading the page could learn a paid
tier existed or what it does. Added: AVIF output, automatic<picture>delivery, keep-originals
with single and bulk restore, auto-queue for new uploads, the Media Library status column,
savings reports with CSV export, and per-format quality control. - Corrected the free feature list, which advertised Pro
<picture>delivery among the free
capabilities. - Tested up to WordPress 7.1. The readme still declared 7.0, which Plugin Check reports as an
ERROR: a plugin not documented against the current WordPress version is excluded from
WordPress.org search results.
1.0.21
- Fixed: the License screen listed the plans and their prices but had no way to buy one.
There was no upgrade button and no link to compare plans anywhere on it — the checkout URL
was already available to the screen and simply was not rendered. - Fixed: stale copy. The screen told you that “license activation and checkout will be
connected through the future Freemius integration”. That has been wired for months. It now
explains what actually happens on a lapse: images you have already converted keep working
and nothing is deleted, while new Pro actions pause until the licence is renewed.
1.0.20
- Savings Dashboard now shows the debug diagnostics log. The log was being recorded and
returned by the reports endpoint but never displayed, so nobody could read it. It now
appears under the savings table, with a “Copy diagnostics” button (clipboard, falling back
to a JSON download). - Removed the “WooCommerce product priority” Pro checkbox. It saved a value that nothing
read — the queue was never reordered by it — and the licence screen advertised it. The
WooCommerce feature that IS built, product labels in the queue, is unchanged and the
licence copy now describes that instead.
1.0.19
- Security: only a licence unlocks Pro. Three leftover developer switches could turn Pro
features on without one — including a hook any other plugin on the site could call. All three
are removed. - Harvify Tools now opens with a Your licences table: every installed Harvify plugin,
the plan it is on, whether Pro features are actually running, and a link to its Account screen.
Freemius gives each product its own separate Account page, so this is the one place that
answers “what am I on” across the whole bundle. - The repeated “Opt in to make … better!” admin notice no longer appears. Licence, plan and
update notices are unaffected — only the opt-in prompt is suppressed.
1.0.18
- Change: License activation now uses per-plugin key entry — enter your bundle license key on each Pro plugin to unlock Pro. Improves activation reliability.
1.0.17
- New: “Optimize now” in the Media Library (free). JPEG/PNG rows get a real in-place optimize action — the image converts to WebP right in your browser with the same engine as the bulk optimizer and replaces the file, showing the savings inline. No more page hop.
- New: PNG JPEG preset (free). One click in the optimizer sets PNG-to-JPEG conversion — photos exported as PNG shrink massively as JPEG (transparency is flattened). The JPEG target is now labeled “JPEG (compress / convert PNG)”.
- New: resize on upload (free, off by default). Downscale new JPEG/PNG/WebP uploads that exceed a configurable maximum dimension (default 2560px) before WordPress generates sizes. Aspect ratio preserved; GIF animations never touched; existing images unchanged.
1.0.16
- New admin design system (Harvify Admin Kit): branded header with plan pill, first-run onboarding, section navigation (Optimizer, Insights, Settings, Plan/Upgrade) and a skeleton loader on start. UI layer only — the in-browser conversion engine, queue, settings and free/Pro gating are unchanged.
1.0.15
- Fix: Pro features now unlock only on the premium build with a valid license (per-plugin gate). Previously “Pro mode active” could show with no license / on the free build when another Harvify plugin was licensed.
1.0.14
- Admin menu now registers on init (fixes a “translation loaded too early” notice under WordPress 6.7+).
1.0.13
- Pricing now sourced from the shared bundle-license package; upgrade prompts link to the pricing page.
1.0.1 – 1.0.12
- Foundational releases building on the initial version: browser-based bulk conversion engine (Web Workers + OffscreenCanvas, IndexedDB queue that resumes after the tab is closed), one-source-format-at-a-time Media Library scanning, small test-run selection before the full queue, skip rules (small files, very large images, upload paths, filename patterns), adjustable quality and queue concurrency, authenticated REST upload-back of converted images, optional original-file deletion (off by default), and front-end lazy-loading.
- Added the Freemius-based free/Pro framework and Pro sidecar-variant delivery via PHP picture tags.
- Various stability, browser-compatibility, and internationalization fixes.
1.0.0
- Initial release.
