{"id":361367,"date":"2026-09-02T07:03:48","date_gmt":"2026-09-02T07:03:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/indexlane-safe-webp-queue\/"},"modified":"2026-09-19T05:53:57","modified_gmt":"2026-09-19T05:53:57","slug":"indexlane-safe-webp-queue","status":"publish","type":"plugin","link":"https:\/\/da.wordpress.org\/plugins\/indexlane-safe-webp-queue\/","author":23496573,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.1","stable_tag":"1.0.1","tested":"7.1.1","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"IndexLane Safe WebP Queue","header_author":"IndexLane","header_description":"Convert selected WordPress media images to local WebP copies in small, safety-first batches.","assets_banners_color":"bfc2c4","last_updated":"2026-09-19 05:53:57","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/indexlane.dev\/plugins\/safe-webp-queue","header_author_uri":"https:\/\/indexlane.dev","rating":0,"author_block_rating":0,"active_installs":0,"downloads":221,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.1.5":{"tag":"0.1.5","author":"wpfixpath","date":"2026-09-02 07:03:26","revision":3677308},"0.2.0":{"tag":"0.2.0","author":"wpfixpath","date":"2026-09-04 01:17:30","revision":3680541},"0.2.1":{"tag":"0.2.1","author":"wpfixpath","date":"2026-09-08 04:42:08","revision":3685882},"0.3.0":{"tag":"0.3.0","author":"wpfixpath","date":"2026-09-15 02:26:10","revision":3696104},"1.0.1":{"tag":"1.0.1","author":"wpfixpath","date":"2026-09-19 05:53:57","revision":3702975}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3677308,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3677308,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3677308,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3677308,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.1.5","0.2.0","0.2.1","0.3.0","1.0.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3702975,"resolution":"1","location":"assets","locale":"","width":1800,"height":1000},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3702975,"resolution":"2","location":"assets","locale":"","width":1800,"height":1000},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3702975,"resolution":"3","location":"assets","locale":"","width":1800,"height":1000},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3702975,"resolution":"4","location":"assets","locale":"","width":1800,"height":1000},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3702975,"resolution":"5","location":"assets","locale":"","width":1800,"height":1000},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3702975,"resolution":"6","location":"assets","locale":"","width":1800,"height":1000}},"screenshots":{"1":"Check your hosting's WebP support and choose whether to convert on the server or in your browser.","2":"Scan your Media Library, select images, and see which files need conversion or have a conflict.","3":"Convert selected images and their generated sizes in the browser, with progress and a result for each file.","4":"Review completed conversions, the method used, file sizes, and savings.","5":"Manage WebP status and exclusions from the Media Library list.","6":"See the completed browser run, including the files saved and any copies skipped because they were not smaller."}},"plugin_section":[],"plugin_tags":[29161,163,233,247,15376],"plugin_category":[50,54],"plugin_contributors":[277870],"plugin_business_model":[],"class_list":["post-361367","plugin","type-plugin","status-publish","hentry","plugin_tags-image-optimization","plugin_tags-images","plugin_tags-media-library","plugin_tags-performance","plugin_tags-webp","plugin_category-media","plugin_category-security-and-spam-protection","plugin_contributors-wpfixpath","plugin_committers-wpfixpath"],"banners":{"banner":"https:\/\/ps.w.org\/indexlane-safe-webp-queue\/assets\/banner-772x250.png?rev=3677308","banner_2x":"https:\/\/ps.w.org\/indexlane-safe-webp-queue\/assets\/banner-1544x500.png?rev=3677308","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/indexlane-safe-webp-queue\/assets\/icon-128x128.png?rev=3677308","icon_2x":"https:\/\/ps.w.org\/indexlane-safe-webp-queue\/assets\/icon-256x256.png?rev=3677308","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/indexlane-safe-webp-queue\/assets\/screenshot-1.png?rev=3702975","caption":"Check your hosting's WebP support and choose whether to convert on the server or in your browser."},{"src":"https:\/\/ps.w.org\/indexlane-safe-webp-queue\/assets\/screenshot-2.png?rev=3702975","caption":"Scan your Media Library, select images, and see which files need conversion or have a conflict."},{"src":"https:\/\/ps.w.org\/indexlane-safe-webp-queue\/assets\/screenshot-3.png?rev=3702975","caption":"Convert selected images and their generated sizes in the browser, with progress and a result for each file."},{"src":"https:\/\/ps.w.org\/indexlane-safe-webp-queue\/assets\/screenshot-4.png?rev=3702975","caption":"Review completed conversions, the method used, file sizes, and savings."},{"src":"https:\/\/ps.w.org\/indexlane-safe-webp-queue\/assets\/screenshot-5.png?rev=3702975","caption":"Manage WebP status and exclusions from the Media Library list."},{"src":"https:\/\/ps.w.org\/indexlane-safe-webp-queue\/assets\/screenshot-6.png?rev=3702975","caption":"See the completed browser run, including the files saved and any copies skipped because they were not smaller."}],"raw_content":"<!--section=description-->\n<p><strong>WebP conversion, even when your hosting can't do it.<\/strong><\/p>\n\n<p>Some WordPress hosts can serve WebP images but don't have the tools to create them. Safe WebP Queue lets your own computer do the conversion, inside WordPress admin.<\/p>\n\n<p>The plugin includes a WebP encoder that runs in your browser. It downloads an image from your site, converts it, and uploads the finished copy back to WordPress. Your original JPEGs and PNGs stay where they are.<\/p>\n\n<p>No subscription, conversion credits, API key, or external conversion service. If your hosting already supports WebP, you can let it do the work in background batches instead.<\/p>\n\n<h4>Convert in your browser<\/h4>\n\n<p>Enable <strong>Convert images in the browser<\/strong>, scan your Media Library, select a few images, and click <strong>Convert Selected in Browser<\/strong>.<\/p>\n\n<p>The bundled encoder uses WebAssembly to run on your computer. There's no desktop app or browser extension to install. Keep the plugin page open while it processes each file, including existing thumbnails and other WordPress sizes. You'll see progress and a result for each one.<\/p>\n\n<p>You can stop a run and return later. Completed copies stay saved; a new scan shows what remains.<\/p>\n\n<p>The panel checks browser support before enabling conversion. You need HTTPS and enough memory on your computer. Browser conversion works with images served from the same origin as your admin; the FAQ explains file limits and restrictions for separately hosted media.<\/p>\n\n<h4>Or let your hosting work in the background<\/h4>\n\n<p>When WordPress has GD or Imagick with WebP support, use <strong>Convert Selected<\/strong> or <strong>Convert Entire Library<\/strong>. Jobs run in small batches, save progress, and let you pause, resume, cancel pending work, or retry failures.<\/p>\n\n<p>You can close the browser during a server job. Background progress uses WP-Cron, so it depends on site visits or a configured cron runner. Automatic conversion for future uploads is also available on supported hosts.<\/p>\n\n<p>Browser conversion remains available if you prefer it. Whole-library background jobs and automatic uploads need server conversion.<\/p>\n\n<h4>Review the results<\/h4>\n\n<p>See original and WebP sizes, savings, the conversion method, and reasons for skipped or failed files. Search and filter the report, or export matching rows as CSV. JPEG and PNG quality can be adjusted separately.<\/p>\n\n<p>By default, a new WebP is skipped if it's the same size or larger than its source. Files created by other tools are left alone: an existing WebP the plugin doesn't own is reported as a conflict.<\/p>\n\n<p>The Media Library shows status and savings too. You can exclude images from conversion and serving, or use <strong>Delete Generated WebPs<\/strong> to remove this plugin's copies while keeping your originals.<\/p>\n\n<h4>Choose when visitors receive WebP<\/h4>\n\n<p><strong>Serve WebP on the front end<\/strong> starts off. Review your conversions, then enable it to use matching copies in normal WordPress image output. Images without a matching copy keep their existing format.<\/p>\n\n<p>The plugin doesn't rewrite saved posts, attachment URLs, CSS backgrounds, page builder fields, theme files, or hardcoded image markup. It converts JPEG and PNG attachments and their generated sizes.<\/p>\n\n<p>Smaller copies reduce image downloads when your site serves them. Keeping both formats takes more disk space.<\/p>\n\n<h4>Four files, measured on my Mac<\/h4>\n\n<p>I tested version 1.0.0 with JPEG and PNG quality both set to 80. Browser conversion, GD, and Imagick all ran locally on the same Apple M1 Pro Mac with 32 GB RAM.<\/p>\n\n<p>The large JPEG and PNG contain the same 3000 x 1348 photo. The small JPEG is a 600 x 270 version of it; the small PNG is a 600 x 400 transparent graphic.<\/p>\n\n<p><strong>File sizes in KB, with the percentage saved in brackets.<\/strong> The server column covers GD and Imagick, which produced the same sizes in this test.<\/p>\n\n<pre>\nImage       Original  Browser WebP   Server WebP\n----------  --------  -------------  -------------\nLarge JPEG    1077.5  566.4 (47.4%)  566.4 (47.4%)\nSmall JPEG      51.4  28.0 (45.5%)   28.0 (45.5%)\nLarge PNG     6105.9  544.7 (91.1%)  544.7 (91.1%)\nSmall PNG        2.6  2.3 (11.6%)    2.3 (11.8%)\n<\/pre>\n\n<p><strong>Time to convert and save one file:<\/strong><\/p>\n\n<pre>\nImage       Browser   GD        Imagick\n----------  --------  --------  --------\nLarge JPEG  0.63 s    0.36 s    0.37 s\nSmall JPEG  0.10 s    0.04 s    0.04 s\nLarge PNG   0.74 s    0.41 s    0.41 s\nSmall PNG   0.09 s    0.04 s    0.04 s\n<\/pre>\n\n<p>The JPEG examples shrank by about 45-47%; the large PNG by 91%. The already-small transparent graphic saved about 12%. Your images and quality settings will give different results.<\/p>\n\n<p>GD and Imagick were faster in this local test. The useful part of browser conversion is being able to do the job when your host can't.<\/p>\n\n<p><strong>Test details:<\/strong> macOS 26.6.2, WordPress 7.1.1, PHP 8.4.23 and Chrome 153.0.8010.52. Each time is the median of five fresh conversions after one warm-up. Times include conversion, validation, saving and local requests; they exclude queue waiting and the first encoder download. Your hosting, computer and connection affect the time, including the browser's image download and WebP upload. KB means 1,000 bytes. Full-size files were measured individually; generated sizes add more work.<\/p>\n\n<p>Photo: <a href=\"https:\/\/commons.wikimedia.org\/wiki\/File:Fronalpstock_big.jpg\">Fronalpstock by Hannes R\u00f6st<\/a>, <a href=\"https:\/\/creativecommons.org\/licenses\/by-sa\/3.0\/\">CC BY-SA 3.0<\/a>, resized for these tests.<\/p>\n\n<h4>Start with a few images<\/h4>\n\n<p>Open <strong>Tools -&gt; IndexLane Safe WebP Queue<\/strong>, scan your library, and try a few images. Check the results before enabling frontend serving or converting more. Command-line users can also manage server jobs and reports through WP-CLI; see the FAQ.<\/p>\n\n<p><a href=\"https:\/\/indexlane.dev\/plugins\/safe-webp-queue\">Plugin details and documentation<\/a>.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate IndexLane Safe WebP Queue from Plugins in WordPress, or upload the plugin folder to \/wp-content\/plugins\/.<\/li>\n<li>Open <strong>Tools -&gt; IndexLane Safe WebP Queue<\/strong> and check the server support panel. To use your computer for conversion, enable <strong>Convert images in the browser<\/strong> in Queue Settings.<\/li>\n<li>Click <strong>Scan Media Library<\/strong> and select a few eligible images.<\/li>\n<li>Choose <strong>Convert Selected<\/strong> for server conversion, or <strong>Convert Selected in Browser<\/strong> for browser conversion. Keep the page open during a browser run.<\/li>\n<li>Review the file sizes, savings, and any skip reasons. Enable <strong>Serve WebP on the front end<\/strong> in Settings when you're ready to use matching copies on your site.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"can%20i%20try%20webp%20without%20losing%20my%20original%20images%3F\"><h3>Can I try WebP without losing my original images?<\/h3><\/dt>\n<dd><p>Yes. The plugin saves WebP copies beside your JPEGs and PNGs, including generated attachment sizes. Your originals remain available. You can use <strong>Delete Generated WebPs<\/strong> to remove copies owned by this plugin; files created by other tools are left alone.<\/p><\/dd>\n<dt id=\"will%20my%20site%20use%20webp%20as%20soon%20as%20i%20convert%20an%20image%3F\"><h3>Will my site use WebP as soon as I convert an image?<\/h3><\/dt>\n<dd><p>You choose when. Frontend serving starts off. Enable it in Settings to use matching WebP copies where your theme or plugin requests images through normal WordPress image output. Images with no matching copy continue to use their existing format. Saved post content, attachment URLs, CSS backgrounds, and hardcoded image markup are not rewritten.<\/p><\/dd>\n<dt id=\"will%20every%20image%20be%20smaller%3F\"><h3>Will every image be smaller?<\/h3><\/dt>\n<dd><p>Results vary by image and quality setting. The report shows actual file sizes and savings so you can judge the result. By default, the plugin skips newly converted files that are larger than their source. Keeping both formats uses additional disk space; this plugin does not free space by deleting originals.<\/p><\/dd>\n<dt id=\"do%20i%20need%20an%20account%2C%20api%20key%2C%20or%20cloud%20service%3F\"><h3>Do I need an account, API key, or cloud service?<\/h3><\/dt>\n<dd><p>No. Conversion runs on your hosting or on your computer, depending on the method you choose. Browser conversion exchanges images only with your own WordPress site. The plugin does not use an external optimization API, account, or credit system.<\/p><\/dd>\n<dt id=\"what%20if%20my%20server%20cannot%20create%20webp%20files%3F\"><h3>What if my server cannot create WebP files?<\/h3><\/dt>\n<dd><p>Turn on <strong>Convert images in the browser<\/strong> in Queue Settings. The WebP encoder that ships with the plugin then runs inside your own browser, so the image data never goes to another server and nothing has to be installed on your computer or your host. Your browser sends the finished WebP file back to your WordPress site, where it is stored beside the original exactly like a server conversion.<\/p>\n\n<p>This mode is attended work: keep the plugin page open while it runs. Whole-library jobs and automatic new-upload conversion still need a server WebP writer, because those run in the background.<\/p><\/dd>\n<dt id=\"do%20i%20need%20anything%20installed%20for%20browser%20conversion%3F\"><h3>Do I need anything installed for browser conversion?<\/h3><\/dt>\n<dd><p>No desktop software or browser extension is needed. The WebAssembly encoder comes with the plugin and runs in a supported browser on macOS, Windows, or Linux. It doesn't use image tools installed on your computer.<\/p>\n\n<p>Use a current Chrome, Edge, Firefox, or Safari browser. The admin page must use HTTPS (localhost also works for development), and the site must allow the bundled scripts, module workers, and WebAssembly encoder to load. The panel tests these capabilities on your site before enabling conversion. Older browsers can lack a required feature even if they can display WebP images.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20use%20cwebp%20on%20my%20hosting%3F\"><h3>Does the plugin use cwebp on my hosting?<\/h3><\/dt>\n<dd><p>Server conversion uses the WordPress image editor through GD or Imagick with WebP support. This version does not call the standalone <code>cwebp<\/code> command, so having that command installed by itself is not enough. If WordPress cannot write WebP, use browser conversion instead; its libwebp encoder is included in the plugin.<\/p><\/dd>\n<dt id=\"are%20there%20limits%20to%20browser%20conversion%3F\"><h3>Are there limits to browser conversion?<\/h3><\/dt>\n<dd><p>Each source file must be at most 20 MiB, at most 8,192 pixels along either edge, and at most 16 million pixels in total. Your configured maximum pixel limit also applies. The browser processes one file at a time, and very large images may still exceed your device's memory or the conversion time limit.<\/p>\n\n<p>Source images and the conversion endpoints must be available on the same origin as your WordPress admin (the same protocol, host, and port). Offloaded images, CDN-only uploads, or a separate media domain are not supported by browser conversion. Your hosting must also accept the finished file upload; its upload-size limits still apply. Animated PNGs are not supported by the browser encoder.<\/p><\/dd>\n<dt id=\"does%20browser%20conversion%20put%20less%20load%20on%20my%20server%3F\"><h3>Does browser conversion put less load on my server?<\/h3><\/dt>\n<dd><p>It moves the image encoding to your computer. That can help when PHP cannot spare enough memory for an image, provided the file fits the browser's limits. Your server still serves the source file, receives and validates the WebP upload, saves it, and updates the conversion records. Browser conversion reduces the encoding work on your hosting; it doesn't remove all server work.<\/p><\/dd>\n<dt id=\"is%20browser%20conversion%20a%20replacement%20for%20the%20queue%3F\"><h3>Is browser conversion a replacement for the queue?<\/h3><\/dt>\n<dd><p>Use the server queue for background work when your hosting has a WebP writer. Browser conversion gives you a way to convert selected images when it doesn't, and can also help with files that exceed the server's memory estimate. The browser run needs the plugin page to stay open.<\/p><\/dd>\n<dt id=\"what%20about%20photos%20with%20rotation%20data%3F\"><h3>What about photos with rotation data?<\/h3><\/dt>\n<dd><p>WordPress normally creates an upright version when it processes a photo with EXIF rotation data. Those images convert normally. Older uploads or images that WordPress could not rotate may still depend on a rotation or mirror tag. Browser conversion rejects those files before encoding, including rotations that leave the dimensions unchanged. Save an upright copy without that tag and upload it again.<\/p><\/dd>\n<dt id=\"can%20i%20close%20the%20page%20while%20a%20conversion%20runs%3F\"><h3>Can I close the page while a conversion runs?<\/h3><\/dt>\n<dd><p>For <strong>server conversion<\/strong>, yes. Conversion progress is saved, and WP-Cron can continue the queue when your site receives traffic. If traffic is low or WP-Cron is disabled, work may wait until you reopen the plugin page or your configured cron runner runs. You can pause, resume, cancel pending work, or retry failures from the queue controls. If a whole-library job has more than 10,000 failures, retry rescans the library and reuses valid existing WebP files. For <strong>browser conversion<\/strong>, keep the tab open: closing it stops the remaining work, while files already saved stay in place.<\/p><\/dd>\n<dt id=\"how%20do%20i%20convert%20my%20whole%20media%20library%3F\"><h3>How do I convert my whole Media Library?<\/h3><\/dt>\n<dd><p>On a host with a working WebP writer, choose <strong>Convert Entire Library<\/strong>. The plugin counts eligible images and processes them in small batches, saving progress as it goes. The queue panel shows progress and failures. WP-Cron can continue the job between visits, depending on site traffic or your cron runner. If your host cannot write WebP, use selected browser conversions and keep the page open instead.<\/p><\/dd>\n<dt id=\"can%20i%20keep%20an%20image%20out%20of%20webp%20conversion%3F\"><h3>Can I keep an image out of WebP conversion?<\/h3><\/dt>\n<dd><p>Yes. Use <strong>Exclude from WebP<\/strong> in the Media Library row actions, or the exclude bulk action for several images at once. Excluded images are skipped by every conversion job, are not regenerated when you change quality settings, and are not served as WebP. Existing copies generated earlier stay on disk until you delete them, and you can include an image again at any time.<\/p><\/dd>\n<dt id=\"where%20do%20the%20savings%20numbers%20come%20from%3F\"><h3>Where do the savings numbers come from?<\/h3><\/dt>\n<dd><p>The plugin records the original and WebP byte size of every file it generates, so the totals on the plugin page reflect real files rather than estimates. Totals are adjusted when files are regenerated or deleted. If you converted images with an earlier version, press <strong>Recalculate<\/strong> once to rebuild the totals from the metadata stored on your attachments.<\/p><\/dd>\n<dt id=\"can%20i%20use%20wp-cli%3F\"><h3>Can I use WP-CLI?<\/h3><\/dt>\n<dd><p>Yes. <code>wp ilswq status<\/code> reports server support, settings, queue state, and stored savings; <code>wp ilswq scan<\/code> lists images with their status; <code>wp ilswq convert<\/code> converts specific IDs, a dry run, or the whole library with <code>--all<\/code>; <code>wp ilswq totals<\/code> shows or rebuilds the savings; <code>wp ilswq queue<\/code> inspects or controls the queue; and <code>wp ilswq cleanup<\/code> removes generated WebP files.<\/p><\/dd>\n<dt id=\"can%20new%20uploads%20be%20converted%20automatically%3F\"><h3>Can new uploads be converted automatically?<\/h3><\/dt>\n<dd><p>Yes, if your server has a WebP writer and you enable automatic new-upload conversion in Settings. It starts off. Once enabled, new uploads are queued after WordPress finishes creating their image sizes. Conversion runs in the background and follows the same server checks and conversion settings.<\/p><\/dd>\n<dt id=\"how%20do%20i%20find%20or%20export%20a%20particular%20image%3F\"><h3>How do I find or export a particular image?<\/h3><\/dt>\n<dd><p>Run a scan, then search the report by filename, attachment title, or ID. Search works together with the status filters. <strong>Export CSV<\/strong> downloads only matching rows, and <strong>Convert Selected<\/strong> queues only selected eligible images in that view. Clear the search and choose <strong>All<\/strong> to see the full report again.<\/p><\/dd>\n<dt id=\"why%20was%20an%20image%20skipped%20or%20marked%20as%20a%20conflict%3F\"><h3>Why was an image skipped or marked as a conflict?<\/h3><\/dt>\n<dd><p>Check the Reason column for that attachment. A file may be missing, unsupported, above your pixel limit, or likely to need more memory than your server can spare. A small file on disk can still require substantial memory when decoded. A conflict means a WebP already exists that this plugin does not own, so it is left unchanged.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20i%20edit%20an%20image%20or%20regenerate%20thumbnails%3F\"><h3>What happens if I edit an image or regenerate thumbnails?<\/h3><\/dt>\n<dd><p>The plugin detects source-file and quality-setting changes before regenerating its WebP output. It also reconciles its copies when attachment sizes change and cleans them up when an attachment is deleted. Run a fresh scan to review which images need conversion after making changes.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Detected ImageMagick builds that ignore WebP quality and used GD or browser conversion instead, with a clearer server capability check.<\/li>\n<li>Corrected the WordPress.org \"Tested up to\" header to 7.1; compatibility testing still uses WordPress 7.1.1.<\/li>\n<li>Explicitly sanitized Media Library row-action IDs before normalizing them, resolving the Plugin Check input warning.<\/li>\n<li>Updated release metadata and packaging checks for 1.0.1.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Added browser (WebAssembly) conversion: a copy of the WebP encoder ships with the plugin and can create WebP files on your own computer, so images can still be converted on hosts whose image tools cannot write WebP.<\/li>\n<li>Added a browser conversion panel with a capability report, per-file progress, a running result log, a stop control, and the same report, savings, and serving updates as server conversion.<\/li>\n<li>Added a \"Convert images in the browser\" setting, off by default, and a report reason that names the files only the browser can convert.<\/li>\n<li>Wrote every browser conversion through the same install, ownership, conflict, totals, and generated-map path as the local image editor backends.<\/li>\n<li>Kept the server queue from accepting work it cannot perform on a host without a WebP writer, and skipped browser-only files instead of reporting them as failures.<\/li>\n<li><p>Added an integration test for the browser backend that covers routing, the REST handshake, container validation, trust boundaries, stored metadata, and frontend serving.<\/p><\/li>\n<li><p>Fixed server conversion ignoring the selected quality when WordPress changes the output format to WebP.<\/p><\/li>\n<li>Fixed stale browser results after quality changes, damaged outputs, or a replaced attachment source; browser saves recheck the current source and settings.<\/li>\n<li>Serialized cleanup, totals recalculation, and browser saves with the server queue, kept conflicting controls disabled during a browser run, and allowed conversion after a server job is paused.<\/li>\n<li>Added a real worker\/codec capability probe, useful server error messages, bounded uploads, and EXIF rotation\/mirror rejection before decoding.<\/li>\n<li>Corrected encoder labels and savings for partially converted attachments, and applied memory limits to regeneration too.<\/li>\n<li>Stopped automatic uploads from retrying browser-only images.<\/li>\n<li>Verified WordPress 7.1.1 with GD, Imagick, WP-CLI, and the browser backend regressions; updated the CI matrix.<\/li>\n<li>Added measured size and speed comparisons for large\/small JPEG and PNG files using Chrome, GD, and Imagick at quality 80.<\/li>\n<li>Rewrote the description for shared-hosting users and refreshed six screenshots, including a live WebAssembly conversion.<\/li>\n<li>Tested browser WebAssembly conversion in Google Chrome 153.0.8010.52 on WordPress 7.1.1 and real Safari 26.6.2 on WordPress 7.1 (macOS), covering JPEGs, transparent PNGs, generated sizes, saved results, and larger-output skips.<\/li>\n<\/ul>\n\n<h4>0.3.0<\/h4>\n\n<ul>\n<li>Added whole-library background conversion with bounded batches, stable attachment cursors, and existing queue controls.<\/li>\n<li>Added Media Library WebP status, savings, conversion actions, and per-image exclusions for conversion and serving.<\/li>\n<li>Added stored savings totals and a bounded rebuild for images converted by earlier versions.<\/li>\n<li>Added WP-CLI commands for status, scanning, conversion, queue controls, savings, and cleanup.<\/li>\n<li>Kept exclusions effective after queuing and corrected savings accounting for partial cleanup and orphan retries.<\/li>\n<li>Validated real WP-CLI formatting, automatic queue draining, and cleanup conflict checks.<\/li>\n<\/ul>\n\n<h4>0.2.1<\/h4>\n\n<ul>\n<li>Added report search by filename, attachment title, and ID with matching result counts.<\/li>\n<li>Made CSV exports and conversion selection respect the active search and status filter.<\/li>\n<li>Added a clear-search control, a no-results message, and accessible status-filter states.<\/li>\n<\/ul>\n\n<h4>0.2.0<\/h4>\n\n<ul>\n<li>Added persistent, resumable conversion jobs with progress, pause, resume, cancel, and failed-item retry controls.<\/li>\n<li>Added bounded queue workers with duplicate-worker locking and WP-Cron continuation.<\/li>\n<li>Moved automatic new-upload conversion out of the upload request and into retryable background work.<\/li>\n<li>Added generation fingerprints to detect source-file and quality-setting changes before safe regeneration.<\/li>\n<li>Reconciled plugin-owned WebP files when attachment sizes change or attachments are deleted.<\/li>\n<li>Retained failed attachment cleanup for safe background retries.<\/li>\n<\/ul>\n\n<h4>0.1.5<\/h4>\n\n<ul>\n<li>Renamed the plugin to IndexLane Safe WebP Queue and aligned WordPress.org release metadata.<\/li>\n<li>Protected unrelated sibling WebP files as conflicts instead of replacing or deleting them.<\/li>\n<li>Generated and validated WebP output in a temporary file before installing it at the final path.<\/li>\n<li>Made statuses, browser request errors, CSV headers, selection labels, and result summaries translation-ready.<\/li>\n<li>Added a root GPL license, dated project changelog, repeatable release packaging, and exact-package checks.<\/li>\n<li>Declared testing through WordPress 7.1 with GD and Imagick coverage.<\/li>\n<\/ul>\n\n<h4>0.1.4<\/h4>\n\n<ul>\n<li>Fixed cleanup pagination restarting when a page contains no generated files.<\/li>\n<li>Preserved generated-file ownership metadata when physical deletion fails so cleanup can be retried safely.<\/li>\n<li>Neutralized formula-like values in CSV exports to prevent spreadsheet formula injection.<\/li>\n<li>Validated every stored WebP file across the current report instead of stopping after the first valid file.<\/li>\n<li>Cached frontend generated-file inspection once per attachment and request.<\/li>\n<li>Added regression coverage for admin cleanup, CSV export, complete validation, and failed cleanup retries.<\/li>\n<\/ul>\n\n<h4>0.1.3<\/h4>\n\n<ul>\n<li>Renamed the generated-file check from Delivery Check to Validate WebP.<\/li>\n<li>Added Mac\/archive ZIP ignores to the repository.<\/li>\n<li>Refreshed screenshots with safety defaults visible and the Reason column readable.<\/li>\n<li>Widened the screenshot capture viewport for public plugin assets.<\/li>\n<\/ul>\n\n<h4>0.1.2<\/h4>\n\n<ul>\n<li>Added generated attachment size conversion.<\/li>\n<li>Added stored WebP file map per attachment.<\/li>\n<li>Added optional frontend serving for normal WordPress image output.<\/li>\n<li>Added optional WebP generation for new uploads.<\/li>\n<li>Added pause, stop, resume, result filters, and WebP validation controls.<\/li>\n<li>Added generated WebP output validation.<\/li>\n<li>Added stale and invalid existing WebP detection.<\/li>\n<li>Stored new WebP maps with uploads-relative paths.<\/li>\n<li>Hardened uploads-directory validation before scan and conversion.<\/li>\n<li>Hardened cleanup path validation.<\/li>\n<li>Hardened AJAX settings and ID handling.<\/li>\n<li>Added clean Plugin Check CI build handling and ignored IDE\/build artifacts.<\/li>\n<li>Removed full server paths from admin AJAX rows.<\/li>\n<li>Lowered the max pixel setting ceiling.<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<li>Added server capability checks.<\/li>\n<li>Added Media Library dry-run scan.<\/li>\n<li>Added small-batch selected conversion.<\/li>\n<li>Added sibling WebP output with originals preserved.<\/li>\n<li>Added skip reasons and CSV export.<\/li>\n<li>Added explicit cleanup for generated WebP files.<\/li>\n<\/ul>","raw_excerpt":"Convert images to WebP on your hosting or in your browser. Keep your originals. No cloud service, API key, or conversion credits.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/da.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/361367","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/da.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/da.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/da.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=361367"}],"author":[{"embeddable":true,"href":"https:\/\/da.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/wpfixpath"}],"wp:attachment":[{"href":"https:\/\/da.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=361367"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/da.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=361367"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/da.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=361367"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/da.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=361367"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/da.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=361367"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/da.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=361367"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}