Harvify Image Optimizer for WebP and AVIF

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:

AVIF to PNG Converter

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

  1. Upload the plugin folder to /wp-content/plugins/.
  2. Activate the plugin through the Plugins screen in WordPress.
  3. Open Harvify Image Optimizer in the WordPress admin menu.
  4. Choose a source format, choose WebP or AVIF as the target, and scan the library.
  5. 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.

Why is AVIF unavailable on some sites?

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.

Contributors

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 Contributors field 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 are harvify-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.