This is the complete PixSpeed guide. Everything you need lives on this one page — what the plugin does, installation, every setting, bulk conversion, the three serving modes and fixes for the most common problems. Use the table of contents to jump straight to what you need.
PixSpeed is a free WordPress plugin that creates next-generation copies of your images — WebP and AVIF — and serves them automatically to browsers that support them. The result: smaller image payloads, faster page loads and better Core Web Vitals, with your original files left completely untouched.
Why next-gen image formats matter
JPEG turned thirty in 2022 and it shows. Modern formats compress the same image far more efficiently:
- WebP is typically 25–35% smaller than an equivalent JPEG — supported by every browser released since 2020.
- AVIF can be up to 50% smaller than JPEG, with better colour detail — supported by all major current browsers.
What PixSpeed actually does
- Converts every image size — the full-size original and all sizes WordPress generates (thumbnails, medium, and so on).
- Bulk-converts the entire media library from the dashboard with a live progress bar and log.
- Auto-converts new uploads the moment they land.
- Serves the right format with three modes: Picture tag (default, zero config, cache-safe), Server rewrite (fastest) and legacy URL swap.
- Lets you control quality separately for WebP and AVIF.
- Auto-detects the best conversion engine on your host — PHP GD, Imagick or the cwebp/avifenc binaries.
- Adds a WebP/AVIF status column, one-click convert and bulk actions to the media library.
- Ships WP-CLI commands (
wp wac status, convert, restore) for large sites. - Reports live savings: files converted, space saved and average reduction.
- Integrates a one-click FlynCache Purge button for after a bulk run.
What PixSpeed does not do
Just as important:
- Your originals are never modified or deleted. Variants are written as new files next to the originals; restoring removes only the variants.
- No external service. Conversion runs 100% on your own server with PHP libraries or CLI binaries — nothing is uploaded to a third party.
- No lock-in. Delete the plugin and your site keeps working exactly as before.
How the conversion engine works
PixSpeed checks what your server can do and picks the best available engine automatically:
| Format | Detection order | Typical availability |
|---|---|---|
| WebP | GD → Imagick → cwebp | Nearly universal |
| AVIF | Imagick → avifenc → GD | Imagick with AVIF delegate, or the avifenc binary |
apt install webp libavif-bin — or a host whose Imagick was built with the AVIF delegate. You can also override the engine per format in Settings. The dashboard shows a full engine table immediately after activation, so you always know what you are working with.PixSpeed installs like any WordPress plugin and needs no configuration before your first conversion. This guide walks you from a clean install to a verified, served WebP/AVIF image in five steps.
Step 0 — Check the requirements
- WordPress 5.8 or newer.
- PHP 7.4 or newer (PHP 8.x recommended).
- For WebP: PHP GD or Imagick — present on almost every host.
- For AVIF: Imagick with the AVIF delegate, GD with AVIF support, or the
avifencbinary. On your own VPS:apt install webp libavif-bin.
Not sure what your host offers? Don't guess — the plugin tells you in the next step.
Step 1 — Install and activate
- In your dashboard go to Plugins → Add New → Upload Plugin.
- Choose the
pixspeed.zipfile and click Install Now. - Click Activate.
Step 2 — Read the engine table
Step 3 — Convert your first image
- Go to Media → Library and switch to list view if needed.
- Look at the new WebP/AVIF column — it shows the status badge for each image.
- Hover a JPEG or PNG row and click Convert in the row actions.
- Reload — the badge now shows WebP (and AVIF where supported), and every generated size of that image got its own variants.
Your original file is still there, byte for byte. Only new sibling files were added next to it.
Step 4 — Verify that variants are actually served
Step 5 — Convert the rest
Reassuring detail: you can revert everything at any time — single images, selected batches, or the entire library — from the dashboard. Restoring deletes only the generated variants.
PixSpeed's defaults are tuned so most sites never need to open Settings. But when you do — quality tuning, engine overrides, switching serving mode — this guide explains every switch and what it actually affects.
Where the settings live
Formats — what gets converted
- Convert to WebP — master switch for WebP variants. On by default.
- Convert to AVIF — master switch for AVIF variants. On by default; PixSpeed simply skips AVIF automatically if no AVIF engine is detected.
.jpg.webp and .jpg.avif, for every size WordPress generates.Quality sliders
| Goal | WebP | AVIF |
|---|---|---|
| Maximum savings (screenshots, thumbnails-heavy sites) | 70 | 50 |
| Balanced (default) | 82 | 60 |
| Portfolio / photography sites | 90 | 70 |
Engines — who does the conversion
- WebP: GD → Imagick → cwebp binary
- AVIF: Imagick → avifenc binary → GD
Two dropdowns let you override this per format — useful when one engine produces better results on your specific images, or when a host has multiple options. The PixSpeed dashboard shows the full detection table, so you always know which engine actually runs.
Serving
- Serve next-gen images — master toggle for delivery. Off means: convert only, keep serving originals.
- Serving mode — Picture tag (default), Server rewrite, or URL swap. Full walkthrough in the serving modes guide.
- Prefer AVIF over WebP — when a browser accepts both, offer AVIF first (it is smaller). Leave this on unless you have a specific compatibility reason.
Bulk processing
wp wac convert all --limit=N — see the bulk conversion guide.Auto-convert on upload
Enabled by default. Every new image is converted the moment WordPress generates its sizes, so your bulk run stays a one-time backlog job. Disable it only if you want to review every conversion manually.
Integrations & maintenance
- FlynCache Purge — when active, a one-click purge button appears on the dashboard for after bulk runs (plugin guide).
- Recalculate stats — rebuilds the savings numbers after manual file changes.
- Restore all — removes every variant and keeps originals. Use before re-converting with new quality settings. variant files stay on disk if you later delete the plugin, unless you define
WAC_DELETE_FILESas true inwp-config.phpbeforehand.
One converted image proves the point — a full library pays the bandwidth bill. PixSpeed gives you three routes to get there, from a single dashboard button to a WP-CLI run you can schedule at 3 AM. All three convert every generated size of every image, skip what is already done, and leave your originals untouched.
Option 1 — The dashboard bulk converter (recommended)
- Open PixSpeed → Dashboard.
- Find the Bulk converter card and press Start Bulk Conversion.
- Watch the progress bar — PixSpeed processes a configurable number of images per batch (default 3) so the server stays responsive.
- The live log lists every file: converted, skipped or failed, with the reason.
- When it finishes, the stats cards update with files converted and space saved.
The run is resumable by design: if anything interrupts it, just press the button again — finished images are skipped automatically.
Option 2 — The media library bulk action
For targeted batches — say, one month of uploads:
- Go to Media → Library in list view.
- Select the checkboxes of the images you want.
- Choose Convert to WebP/AVIF from the bulk actions dropdown and hit Apply.
Option 3 — WP-CLI for large libraries
Thousands of images? Run it from the terminal — no browser timeouts, no PHP limits:
# See engines and current stats
wp wac status
# Convert everything, in chunks, skipping finished images
wp wac convert all --limit=50 --skip-existing
# Convert specific attachments only
wp wac convert 123 124 125
# Undo everything (deletes variants, keeps originals)
wp wac restore all --yes
wp wac convert all --limit=100 --skip-existing in a screen/tmux session or a nightly cron until it reports nothing left to do.After the run — purge your page cache
With the default Picture tag serving mode your HTML does not change, so purging is optional — the next render already wraps images correctly. But if you use the legacy URL swap mode, or simply want cached HTML refreshed everywhere immediately, purge your page cache after the bulk run.
What happens to new uploads?
Mode 1 — Picture tag (default, recommended)
<picture> element with AVIF and WebP <source> entries. The browser then picks the best format it supports, all by itself.- Works on every hosting — no server configuration at all.
- Cache-safe by design — the HTML is identical for every visitor, so page caches (FlynCache Purge, FastCGI cache, Cloudflare, hosts' built-in caches) never serve the wrong variant.
- Preserves alt text, width/height attributes, srcset and lazy loading.
This is the default for a reason: if you do not want to think about serving, stop reading and keep this mode.
Mode 2 — Server rewrite (fastest)
Accept header. Zero HTML processing, zero markup changes — the leanest possible page weight.# /etc/nginx/conf.d/wac-serve.conf
map $http_accept $wac_img_ext {
default '';
'~*image/avif' '.avif';
'~*image/webp' '.webp';
}
# inside each server { } block of your site:
location ~* ^(?<wac_img_path>/wp-content/uploads/.+)\.(jpe?g|png|gif)$ {
expires 30d;
access_log off;
add_header Vary Accept;
try_files $wac_img_path$wac_img_ext $uri =404;
}
nginx -t and reload nginx. The Vary: Accept header matters: it tells CDNs and caches that the response depends on the Accept header, which keeps variant delivery correct through proxies.Mode 3 — URL swap (legacy)
The oldest trick: PixSpeed rewrites image URLs inside your HTML to point directly at the variant files. It works everywhere and needs no server changes, but the HTML now differs per capability — and unless your cache is Accept-aware, a cached page can serve stale URLs after a bulk conversion. If you use this mode, purge your page cache after converting (the dashboard button handles FlynCache in one click). It is kept for compatibility; new sites should use Picture tag or Server rewrite.
Side-by-side comparison
| Picture tag | Server rewrite | URL swap | |
|---|---|---|---|
| Config needed | None | .htaccess (auto) / nginx snippet | None |
| Page-cache safe | Yes — HTML identical | Yes — HTML identical | Purge after bulk runs |
| HTML weight | Slightly larger (sources added) | Unchanged | Unchanged |
| Delivery | Browser picks format | Server picks format | URL rewritten |
| Best for | Everyone, managed hosts | VPS/dedicated, max speed | Legacy setups |
How to choose in 10 seconds
- Managed/shared hosting, no server access? → Picture tag. Done.
- Own the server (VPS/dedicated) and want maximum speed? → Server rewrite; use the nginx snippet or let Apache handle it automatically.
- Already running URL swap on an old setup? → It works, but plan a move to Picture tag when convenient.
Always verify after switching
PixSpeed is deliberately simple, but it lives in the real world — different hosts, different caches, different server software. Here are the seven issues that account for almost every support question, with the fastest fix for each.
| Symptom | Likely cause | Fastest fix |
|---|---|---|
| AVIF badge never appears | No AVIF engine on server | Fix #1 |
| Variants exist but originals are served | Serving config (nginx/cache) | Fix #2 or #3 |
| Old images still load after bulk run | Page cache | Fix #3 |
| GIF looks static | Expected behaviour | Fix #4 |
| Converted image looks worse | Quality setting | Fix #5 |
| Transparency lost | Source file, not the plugin | Fix #6 |
| Variant files left after uninstall | Safety default | Fix #7 |
Fix #1 — No AVIF engine detected
apt install webp libavif-bin
systemctl reload php8.3-fpm # your PHP version may differ
On shared hosting, ask the host to enable the Imagick AVIF delegate or install libavif-bin. Meanwhile WebP conversion keeps working — PixSpeed degrades gracefully, it never blocks the whole plugin because one format is unavailable.
Fix #2 — Variants exist but browsers get originals (nginx)
map $http_accept plus a location block with try_files. Copy it from serving modes explained, add it to your server config, then always validate before reloading:nginx -t && systemctl reload nginx
Fix #3 — Old images still loading after a bulk run
Your page cache is serving HTML (or image URLs) generated before the conversion. With the default Picture tag mode this is rare, because the HTML structure does not change. With URL swap mode it is guaranteed — always purge after bulk runs. Either way:
- Use the one-click purge button on the PixSpeed dashboard when FlynCache Purge is active.
- Otherwise run your cache plugin's normal purge — and purge CDN caches if your CDN caches HTML or images aggressively.
- Hard-refresh your browser (Ctrl+Shift+R) — sometimes the only stale copy is your own.
Fix #4 — Animated GIFs: what to expect
Fix #5 — A converted image looks worse than the original
Fix #6 — Transparency problems in PNGs
WebP and AVIF both support full alpha transparency, and PixSpeed preserves it — if a PNG's transparent background suddenly looks wrong, check the source: transparency flattened before upload cannot be recovered by any converter. Also verify the theme is not placing the image on a coloured background via CSS. If a specific file still misbehaves, restore that single image and re-convert it at higher quality — and if it persists, report it via digitalwasim.com with the original file attached.
Fix #7 — Variant files remain after uninstalling
define('WAC_DELETE_FILES', true); in wp-config.php before deleting the plugin, which tells the uninstaller to remove variant files as well.Still stuck?
Who develops PixSpeed?
Frequently asked questions
Is PixSpeed really free?
Yes. PixSpeed is free and open source under the GPLv2 or later license. There is no account, no subscription and no paid API behind it — all conversion happens on your own server.
Will PixSpeed slow down my site?
No. Variants are created when you upload or run a bulk conversion — never on page view. Visitors only receive the smaller pre-made files, which makes pages load faster.
Where are the converted files stored?
Right next to your originals, in the same uploads folder. A file called photo.jpg gets photo.jpg.webp and photo.jpg.avif siblings. Nothing is moved, renamed or replaced.
Can I undo the conversion later?
Yes. Restore any single image from the media library, or everything at once from the PixSpeed dashboard, or run wp wac restore all --yes over WP-CLI. Original files are never modified.
How do I know my host supports conversion?
Open the PixSpeed dashboard right after activation — the engine table shows exactly which engines were detected for WebP and AVIF. If at least one WebP engine shows yes, you can start converting.
How long does a bulk conversion take?
Roughly 1–3 seconds per image size on a typical host, depending on engine and image dimensions. A 500-image library with several sizes each usually finishes within minutes. The dashboard shows live progress, so you always know where you are.
Can I switch serving modes later?
Yes, any time, without re-converting anything. Serving mode only decides how variants are delivered — the generated .webp and .avif files are identical regardless of the mode.
Does the Picture tag mode hurt SEO?
No. Alt text, dimensions, srcset and lazy loading are preserved, and search engines index the original file exactly as before. Google explicitly documents the picture element as a valid way to serve next-gen formats.
Which mode is best on nginx hosting?
Server rewrite is the fastest if you can edit the server config — copy the map and location snippet from the Help tab into your nginx configuration, test with nginx -t and reload. If you cannot touch server config, Picture tag is the better pick: zero config, fully cache-safe.
Do quality changes re-convert existing images?
No. New settings apply to images converted from that point on. To apply new quality to existing images, restore them and run the bulk conversion again — everything gets fresh variants.
What quality values should I use?
The defaults (WebP 82, AVIF 60) are a sweet spot modelled on common optimizer presets: visually indistinguishable from the original in most photos, with big savings. Raise to WebP 90 / AVIF 70 for portfolio-grade crispness; lower to WebP 70 / AVIF 50 if bandwidth is your top priority.
Is it safe to delete the plugin to start over?
Deactivating and deleting removes PixSpeed's settings and database records but leaves variant files on disk by default. To also delete those files, define WAC_DELETE_FILES as true in wp-config.php before deleting — or restore everything first.
