{"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-02T07:03:26","modified_gmt":"2026-09-02T07:03:26","slug":"indexlane-safe-webp-queue","status":"publish","type":"plugin","link":"https:\/\/bho.wordpress.org\/plugins\/indexlane-safe-webp-queue\/","author":23496573,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.1.5","stable_tag":"0.1.5","tested":"7.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-02 07:03:26","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":49,"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}},"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"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3677308,"resolution":"1","location":"assets","locale":"","width":1800,"height":1000},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3677308,"resolution":"2","location":"assets","locale":"","width":1800,"height":1000},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3677308,"resolution":"3","location":"assets","locale":"","width":1800,"height":1000},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3677308,"resolution":"4","location":"assets","locale":"","width":1800,"height":1000}},"screenshots":{"1":"Server checks and conservative queue settings.","2":"Media Library scan showing eligible files and a protected foreign-sidecar conflict.","3":"Conversion results with WebP size, savings, status, reason, and the conflict preserved.","4":"Optional frontend serving and new-upload settings."}},"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=3677308","caption":"Server checks and conservative queue settings."},{"src":"https:\/\/ps.w.org\/indexlane-safe-webp-queue\/assets\/screenshot-2.png?rev=3677308","caption":"Media Library scan showing eligible files and a protected foreign-sidecar conflict."},{"src":"https:\/\/ps.w.org\/indexlane-safe-webp-queue\/assets\/screenshot-3.png?rev=3677308","caption":"Conversion results with WebP size, savings, status, reason, and the conflict preserved."},{"src":"https:\/\/ps.w.org\/indexlane-safe-webp-queue\/assets\/screenshot-4.png?rev=3677308","caption":"Optional frontend serving and new-upload settings."}],"raw_content":"<!--section=description-->\n<p>IndexLane Safe WebP Queue converts JPEG and PNG media attachments and their generated image sizes to sibling <code>.webp<\/code> files from inside wp-admin.<\/p>\n\n<p>The plugin checks local server support, estimates memory risk, preserves original files, skips unsafe files, and reports which images converted, skipped, or failed.<\/p>\n\n<p>It is built for cautious local conversion, not cloud optimization or automatic original-file replacement.<\/p>\n\n<p>Learn more at <a href=\"https:\/\/indexlane.dev\/plugins\/safe-webp-queue\">IndexLane<\/a>.<\/p>\n\n<p>What it does:<\/p>\n\n<ul>\n<li>Scans JPEG and PNG attachments in the Media Library.<\/li>\n<li>Checks GD and Imagick WebP support.<\/li>\n<li>Estimates memory risk before conversion.<\/li>\n<li>Converts selected original images and generated attachment sizes to sibling <code>.webp<\/code> files.<\/li>\n<li>Keeps original files.<\/li>\n<li>Reports sibling WebP files not owned by this plugin as conflicts and leaves them unchanged.<\/li>\n<li>Skips files that are too large, unsupported, missing, or likely unsafe for the current server.<\/li>\n<li>Exports the visible report as CSV.<\/li>\n<li>Deletes WebP files generated by this plugin when explicitly requested.<\/li>\n<li>Optionally uses generated WebP files in normal WordPress image output where a matching generated file exists.<\/li>\n<li>Can optionally generate WebP files for new uploads after WordPress finishes creating attachment sizes.<\/li>\n<\/ul>\n\n<p>Limits:<\/p>\n\n<ul>\n<li>Does not rewrite post content.<\/li>\n<li>Does not replace attachment URLs.<\/li>\n<li>Does not delete original images.<\/li>\n<li>Does not convert GIF, SVG, AVIF, or existing WebP files.<\/li>\n<li>Does not crawl CSS, theme files, page builder fields, or hardcoded image URLs.<\/li>\n<li>Does not call an external API or optimization service.<\/li>\n<li>Frontend WebP serving is off by default and only affects normal WordPress image output when enabled.<\/li>\n<li>New-upload conversion is off by default.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>indexlane-safe-webp-queue<\/code> folder to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate the plugin in wp-admin.<\/li>\n<li>Go to Tools -&gt; IndexLane Safe WebP Queue.<\/li>\n<li>Run a scan before converting images.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20replace%20my%20jpeg%20or%20png%20files%3F\"><h3>Does this replace my JPEG or PNG files?<\/h3><\/dt>\n<dd><p>No. Original files are preserved. The plugin creates sibling <code>.webp<\/code> files beside original and generated attachment image files.<\/p><\/dd>\n<dt id=\"will%20my%20frontend%20automatically%20serve%20webp%20after%20conversion%3F\"><h3>Will my frontend automatically serve WebP after conversion?<\/h3><\/dt>\n<dd><p>No. Frontend serving is off by default. When enabled, the plugin uses generated WebP files in normal WordPress image output where a matching generated file exists. It does not rewrite post content, attachment URLs, or database content.<\/p><\/dd>\n<dt id=\"does%20this%20convert%20new%20uploads%20automatically%3F\"><h3>Does this convert new uploads automatically?<\/h3><\/dt>\n<dd><p>Not by default. Existing media can be scanned and converted from Tools -&gt; IndexLane Safe WebP Queue. Automatic WebP generation for new uploads can be enabled in settings.<\/p><\/dd>\n<dt id=\"does%20it%20use%20a%20cloud%20service%3F\"><h3>Does it use a cloud service?<\/h3><\/dt>\n<dd><p>No. Conversion runs locally through WordPress image editors, GD, or Imagick when WebP writing support is available.<\/p><\/dd>\n<dt id=\"why%20are%20large%20images%20skipped%3F\"><h3>Why are large images skipped?<\/h3><\/dt>\n<dd><p>Image conversion memory use depends on decoded pixels, not just compressed file size. The plugin estimates decoded memory as width x height x 5 and skips files that look risky for the current PHP memory limit.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\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 WordPress Media Library images and generated sizes to WebP locally, with originals kept and skip reasons shown.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/bho.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/361367","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bho.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/bho.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/bho.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=361367"}],"author":[{"embeddable":true,"href":"https:\/\/bho.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/wpfixpath"}],"wp:attachment":[{"href":"https:\/\/bho.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=361367"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/bho.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=361367"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/bho.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=361367"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/bho.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=361367"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/bho.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=361367"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/bho.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=361367"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}