DOCUMENTATION · FEATURES

Features

Everything Tempaloo WebP does, in one place. From per-upload conversion stats to the Diagnostic tab that surfaces drift between WordPress meta and disk state — every feature is visible in your WP admin without extra setup.

Compression stats — every uploaded image

The moment an upload finishes on /wp-admin/media-new.php, a stats line appears right under the filename — no need to click Edit to see what just happened.

wp-admin / media-new.php
dreamstime_xxl_367422651.jpg
WEBP67%1.24 MB412 KB · 7 sizes
WEBP

The same data is visible in three other places:

  • Media Library list view — a new Optimized column with the saved % and before/after sizes.
  • Attachment edit modal — a green stats block in the right sidebar.
  • Block editor / Gutenberg — every attachment object now carries a tempaloo field readable by any custom block.
No data costs
Stats are computed by reading the file sizes of the .webp /.avif siblings on disk — a filesize() call. Zero API round-trips, zero storage, zero quota.

Restore originals — one click, no risk

Found in Tempaloo WebP → Settings, at the bottom: a button that wipes every.webp / .avif sibling we ever wrote.

wp-admin / admin.php?page=tempaloo-webp
Restore originals
One-click delete of every .webp/.avif file we generated. Your original JPEG/PNG/GIF files are never touched and remain on the server.
Safe: only the converted siblings are removed.

What gets deleted

  • Every .webp file matching {filename}.{ext}.webp in your uploads folder.
  • Every .avif file similarly.
  • The tempaloo_webp meta block on each attachment.

What stays untouched

  • Your originals (.jpg, .png, .gif) — never written, never deleted.
  • Your monthly quota — restoring doesn't refund credits because the work was already done.
Reversible by design
After restoring, you can re-run a Bulk conversion to regenerate the.webp files with new settings (different quality, different format). It's a clean reset, not a destruction.

Resize on upload — shrink huge photos automatically

Most photos uploaded by editors are 4000–8000 px wide — way more than any browser will ever display. Resize-on-upload caps the width before WordPress generates thumbnails, saving disk space, conversion quota, and outbound bandwidth.

wp-admin / admin.php?page=tempaloo-webp
Resize on upload
Shrink huge photos down to a sensible web width before WordPress generates thumbnails.
Off
1920px
2560px
3840px

How it works

The plugin hooks into WordPress core's big_image_size_threshold filter (added in WP 5.3). When a user uploads an image wider than the threshold, WP automatically scales it down and saves the untouched original as {filename}-scaled-original.{ext} for safekeeping.

Default 2560 px is right for most sites
On a 4K display the largest image you'll ever render is around 2560 px wide. Going higher just bloats your storage. Pick 3840 only if you serve real Retina / print assets.

Quality presets — three buttons covering 95% of cases

The quality slider is still there for power users. But picking 72 vs 78 isn't a decision most users want to make. Three named presets do the work:

wp-admin / admin.php?page=tempaloo-webp
Compression preset
Normal
Visually identical, ~50% smaller
q=85
Aggressive
Indistinguishable on web, ~65% smaller
q=75
Ultra
Smallest files, slight artifacts
q=60

What each preset means

  • Normal (q=85) — visually identical to the original on any monitor. Use for portfolios, photography sites, anything where image quality is part of the product.
  • Aggressive (q=75) — the default, recommended for blogs, news sites, e-commerce. Indistinguishable from the original at typical viewing distances.
  • Ultra (q=60) — 30%+ smaller than Aggressive. You'll start to see banding on gradients, but typical photos still look fine. Use on landing pages where speed beats fidelity.
Per-attachment override
Need a different quality for one specific image? Use thetempaloo_webp_quality_for filter — see Developer hooks.

Media Library actions — per-image control

The Optimized column on /wp-admin/upload.php is more than a status indicator. Every row carries a complete control surface: the conversion badge, savings breakdown, an expandable detail panel, and a one-click restore.

wp-admin / upload.php
WEBP−96%Detail ▾
2.0 MB → 67 KB

Per-row capabilities

  • Format badge — color-coded by output: emerald (WebP), violet (AVIF), gradient (Both).
  • Detail accordion — expand to see per-size breakdown (original, thumbnail, medium, large…) with bytes-in / bytes-out / saved-percent for each.
  • Convert now — for unconverted images, a one-click button that runs the full conversion (1 credit, every WP-generated size).
  • Restore original — opens an inline confirm panel (no native browser dialog), wipes the .webp / .avif siblings, leaves your original JPEG/PNG/GIF on disk untouched.

Bulk row-actions

The standard WordPress bulk-actions dropdown above the list view also carries our two operations:

  • Optimize with Tempaloo — convert every selected image. Already-converted ones are skipped (no credit burn).
  • Restore originals (Tempaloo) — restore every selected image at once.

Capped at 100 attachments per submit — beyond that, use the dedicated Bulk page with its pause / resume / retry queue.

Async upload pipeline — uploads never wait on conversion

Conversion-on-upload doesn't run synchronously inside the WordPress filter chain, where it would have to share the request with LiteSpeed Image Optimization, Wordfence, host security scanners, and any other plugin hooked on the same filter. Instead, Tempaloo WebP captures the attachment ID at upload time and dispatches a non-blocking loopback request.

How it works

  1. You upload an image. WordPress finishes its standard upload flow (DB insert, thumbnail generation).
  2. The plugin enqueues the attachment ID and returns immediately. The user's upload finishes within milliseconds.
  3. On shutdown, a fire-and-forget wp_remote_post hits admin-post.php.
  4. The loopback lands in a fresh PHP process and runs the conversion in isolation. No competing filter, no race condition.
  5. Result: the converter writes .webp / .avif siblings, updates the attachment meta. The Overview "this month" counter reflects the new conversion within seconds.
Fallback for hosts that block loopback HTTP
Some hosts (Hostinger behind aggressive WAFs, certain shared providers) block server-to-self HTTP calls. Tempaloo's Diagnostic poll notices stalled pending uploads and drains them inline on the next admin refresh. Worst-case, the retry-queue cron picks them up within 5 minutes. You never see a missed conversion.

Emergency rollback

If you need to disable the async pipeline (testing, debugging, host quirks), drop a constant in wp-config.php:

php
define( 'TEMPALOO_WEBP_DISABLE_ASYNC', true );

The plugin reverts to synchronous conversion-on-upload — same behavior as v1.8.x and earlier. Remove the line to switch back.

Diagnostic tab — state audit & repair

The Diagnostic tab in your WP admin is a forensics surface for "what's actually going on with my images". Three tools, one place.

State audit

Walks four sources of truth in parallel and surfaces drift between them:

  • Filesystem — what .webp / .avif files actually exist in /wp-content/uploads/.
  • Attachment meta — what the _tempaloo_webp post_meta key says was converted.
  • Bulk state — the running / paused / done state of the last bulk job.
  • Retry queue — attachments whose first conversion failed and are scheduled for cron retry.

The audit detects orphans (files on disk with no meta record), ghosts (meta records pointing at missing files), stuck running jobs, and overage retries. Reconcile fixes them in one click.

Inspect attachment by ID

Type any attachment ID, get a forensic dump: meta in both storage locations side-by-side (_tempaloo_webp vs legacy in-metadata), the original file existence + bytes, per-size disk state for .webp and .avif, plus a directory listing of every file matching the attachment's filename pattern. Surfaces immediately whether another optimizer touched the same files.

Filesystem self-test

Writes a real (tiny, 26-byte) .webp into your uploads directory, immediately re-checks existence, sleeps 5 seconds, re-checks, then fetches the file via HTTP and inspects the Content-Type. Returns one verdict line that names the failure mode:

  • WRITE_FAILED — permissions issue.
  • POST_WRITE_VANISH — host security caught the write.
  • PERSISTENCE_FAILURE — something deleted it within 5 seconds (LiteSpeed Image Opt, Wordfence, host WAF).
  • WRONG_MIME — file persists but served as image/jpeg → browser can't decode.
  • OK — write, persistence, and serve all healthy.

Cache compatibility — survives every page-cache plugin

LiteSpeed Cache, WP Rocket, W3 Total Cache, Cache Enabler, and Hummingbird all sometimes cache authenticated REST responses by URL — even when those responses carry per-user data. Without active opt-out, the Overview "this month" counter would freeze after every upload until a manual cache purge.

Four-layer cache opt-out

  1. Every REST callback sends nocache_headers() + defines DONOTCACHEPAGE / DONOTCACHEOBJECT / DONOTCACHEDB — the constants every major page-cache plugin checks.
  2. Explicit litespeed_control_set_nocache action on every request — no-op without LSCache, immediate opt-out where it's installed.
  3. The plugin self-registers its REST namespace with litespeed_cache_excludes_uri, rocket_cache_reject_uri, and w3tc_minify_pgcache_reject_uri filters, so cache layers skip us at config-resolution time, not just runtime.
  4. Frontend appends a ?_=Date.now() cache-buster on every fetch and sends Cache-Control: no-cache + Pragma: no-cache headers — last line of defence against Cloudflare APO and Varnish without ESI.
No setup required
All four layers fire automatically. You don't need to add cache exclusion rules to your LSCache / Rocket / W3TC settings. The plugin's REST namespace (/wp-json/tempaloo-webp/v1) is already excluded.

Troubleshooting — common issues

"This month" counter doesn't update after an upload

Almost always a page-cache layer holding a stale /state response. Open the Diagnostic tab and click the Reconcile button — it forces a fresh audit and bypasses cached data. If the issue persists, your cache plugin needs to be told to skip /wp-json/tempaloo-webp/v1 manually (Tempaloo registers itself automatically with LSCache / Rocket / W3TC; if you're on a different cache, add the rule).

Conversion logs success but .webp files vanish

A host-level scanner (Wordfence, iThemes Security, Hostinger LSCache stack) is quarantining the freshly-written sibling. Run the Filesystem self-test in Diagnostic — if it returns PERSISTENCE_FAILURE orPOST_WRITE_VANISH, you have evidence to escalate to your host. Tempaloo writes via the atomic temp + rename pattern (inspired by WP Smush) so the scanner doesn't catch a half-written file — but if it specifically targets the.jpg.webp pattern post-rename, only host-side allow-listing fixes it.

Free plan AVIF dropdown won't stay selected

AVIF is paid-only. The Free plan's settings UI lets you click AVIF, but it's quietly re-saved as WebP on submit. Upgrade to Starter or above to unlock AVIF and the dual-format Both mode that generates both siblings in one credit.

Bulk page shows "Converting…" but no progress

The Bulk loop pings ajax_tick every 350 ms. If you see no progress, your server's admin-ajax.php is probably rate-limited. Check theAPI health banner — if it shows a 5xx error, the worker is rebooting and Bulk will resume on its own with adaptive backoff (5s → 10s → 15s → 20s).

Need direct help?

Reach out via the contact page — we read every message. Include your site URL, plugin version, and a screenshot of the Diagnostic tab if relevant.