{"id":364229,"date":"2026-09-21T02:52:48","date_gmt":"2026-09-21T02:52:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/perxel-image-optimizer\/"},"modified":"2026-09-21T02:52:21","modified_gmt":"2026-09-21T02:52:21","slug":"perxel-image-optimizer","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/perxel-image-optimizer\/","author":16171151,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.1","stable_tag":"1.0.1","tested":"7.1.2","requires":"6.5","requires_php":"7.4","requires_plugins":null,"header_name":"Perxel Image Optimizer","header_author":"Perxel","header_description":"Local WebP conversion for your media library. No third-party CDN or external service, free, and it runs in the background. Serves WebP via a managed .htaccess block with a picture-tag fallback.","assets_banners_color":"93acc9","last_updated":"2026-09-21 02:52:21","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/perxel\/wp-image-optimizer","header_author_uri":"https:\/\/perxel.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":60,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.1":{"tag":"1.0.1","author":"phucbm","date":"2026-09-21 02:52:21","revision":3704768}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3704768,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3704768,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3704768,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3704768,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3704768,"resolution":"1","location":"assets","locale":"","width":2626,"height":1634},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3704768,"resolution":"2","location":"assets","locale":"","width":2618,"height":1646}},"screenshots":{"1":"Optimization: the prepare screen shows the whole-library image count, an estimated time, and a choice of Background or Fast run.","2":"Settings: JPEG\/PNG quality, sizes to convert, serving, and completion-email options."}},"plugin_section":[],"plugin_tags":[249014,29161,233,15376,212453],"plugin_category":[],"plugin_contributors":[202847],"plugin_business_model":[],"class_list":["post-364229","plugin","type-plugin","status-publish","hentry","plugin_tags-convert-to-webp","plugin_tags-image-optimization","plugin_tags-media-library","plugin_tags-webp","plugin_tags-webp-images","plugin_contributors-phucbm","plugin_committers-phucbm"],"banners":{"banner":"https:\/\/ps.w.org\/perxel-image-optimizer\/assets\/banner-772x250.png?rev=3704768","banner_2x":"https:\/\/ps.w.org\/perxel-image-optimizer\/assets\/banner-1544x500.png?rev=3704768","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/perxel-image-optimizer\/assets\/icon-128x128.png?rev=3704768","icon_2x":"https:\/\/ps.w.org\/perxel-image-optimizer\/assets\/icon-256x256.png?rev=3704768","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/perxel-image-optimizer\/assets\/screenshot-1.png?rev=3704768","caption":"Optimization: the prepare screen shows the whole-library image count, an estimated time, and a choice of Background or Fast run."},{"src":"https:\/\/ps.w.org\/perxel-image-optimizer\/assets\/screenshot-2.png?rev=3704768","caption":"Settings: JPEG\/PNG quality, sizes to convert, serving, and completion-email options."}],"raw_content":"<!--section=description-->\n<p>Perxel Image Optimizer converts your WordPress media library to WebP <strong>locally<\/strong>,\non your own server, and serves it - entirely from an admin page, built for shared\nhosting.<\/p>\n\n<ul>\n<li><strong>No third party.<\/strong> Conversion runs in PHP via WP_Image_Editor (GD\/Imagick).\nNothing is uploaded to a CDN or an external optimization service, and there is\nno API key, account or paid tier. Your images never leave your host.<\/li>\n<li><strong>Free.<\/strong> The whole plugin, no upsell.<\/li>\n<li><strong>Runs in the background.<\/strong> A light scan estimates the work, then a background\njob (Action Scheduler) converts the library newest-to-oldest, one calendar\nmonth at a time. Pause, resume, cancel, close the tab - progress is durable.\nOptional email report when a run finishes.<\/li>\n<li><strong>Or run it Fast.<\/strong> An opt-in mode that drives the conversion from the open\nadmin tab, so the server works continuously - much quicker on shared hosting\nwith no cron. It throttles itself if the host pushes back, and stopping never\nloses work.<\/li>\n<li><strong>Originals are untouched.<\/strong> <code>foo.jpg<\/code> gets a <code>foo.jpg.webp<\/code> sibling; the\nsource file is never modified.<\/li>\n<li><strong>Serving<\/strong> through a managed <code>.htaccess<\/code> block on Apache\/LiteSpeed, with an\n   to <code>&lt;picture&gt;<\/code> fallback on nginx or when <code>.htaccess<\/code> is not writable.<\/li>\n<li>Per-attachment Convert \/ Reconvert \/ Remove buttons in the Media library.<\/li>\n<li>New uploads are converted automatically, shortly after upload.<\/li>\n<\/ul>\n\n<p>The admin area is two screens under Media &gt; Optimization: an <strong>Optimization<\/strong> page (scan\n\u2192 prepare \u2192 live monitor) and a separate <strong>Settings<\/strong> page (environment,\nconversion options, serving, notifications, cleanup).<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>perxel-image-optimizer<\/code> folder to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate the plugin through the Plugins screen.<\/li>\n<li>Go to Media &gt; Optimization.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20it%20modify%20my%20original%20images%3F\"><h3>Does it modify my original images?<\/h3><\/dt>\n<dd><p>No. Every converted file is written as a new <code>.webp<\/code> sibling next to the original.<\/p><\/dd>\n<dt id=\"what%20happens%20on%20nginx%3F\"><h3>What happens on nginx?<\/h3><\/dt>\n<dd><p>The <code>.htaccess<\/code> swap is Apache-only. On nginx the plugin rewrites <code>&lt;img&gt;<\/code> tags to\n     with a WebP source instead.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Tightened output-escaping suppressions in the admin views to per-file\ntargeted ignores, addressing the plugin review's escaping feedback.<\/li>\n<li>Media Library scripts\/styles now load only on the Media list and the\nsingle-attachment edit screen.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First public release.<\/li>\n<li>Local WebP conversion via WP_Image_Editor - no CDN, no external service, free.<\/li>\n<li>Month-scoped bulk run with two drivers: a background run on Action Scheduler\n(pause, resume, cancel, durable progress, optional completion email) and an\nopt-in Fast mode where the browser tab drives the encode loop directly, for\nshared hosting with no working WP-Cron loopback. Fast mode self-pauses when\nthe host throttles and resumes after an escalating cooldown; a live Gentle \/\nBalanced \/ Turbo control sits on the running monitor.<\/li>\n<li>Closing the tab, Stop, or Cancel never reverts converted files - the run\nparks and resumes from where it left off.<\/li>\n<li>Per-attachment Convert \/ Reconvert \/ Remove buttons in the Media library, and\nautomatic conversion of new uploads.<\/li>\n<li>Serving via a managed <code>.htaccess<\/code> block on Apache\/LiteSpeed, with an <code>&lt;img&gt;<\/code> to\n   fallback elsewhere.<\/li>\n<li>Two admin screens under Media &gt; Optimization - Optimization (prepare + live monitor)\nand Settings - in a shared sidebar layout, server-rendered.<\/li>\n<\/ul>","raw_excerpt":"Local WebP conversion for your media library. No third-party CDN or service, free, and it runs in the background.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/364229","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=364229"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/phucbm"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=364229"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=364229"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=364229"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=364229"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=364229"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=364229"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}