{"id":382168,"date":"2026-10-11T11:13:48","date_gmt":"2026-10-11T11:13:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/emergentpixel-image-optimizer\/"},"modified":"2026-10-11T11:13:13","modified_gmt":"2026-10-11T11:13:13","slug":"emergentpixel-image-optimizer","status":"publish","type":"plugin","link":"https:\/\/arg.wordpress.org\/plugins\/emergentpixel-image-optimizer\/","author":23581243,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.1.3","requires":"6.9","requires_php":"7.4","requires_plugins":null,"header_name":"EmergentPixel Image Optimizer","header_author":"EmergentPixel","header_description":"Unlimited, local image optimization: compression, WebP and AVIF, lazy load, alt text, thumbnails, safe SVG and more. No credits, no API keys.","assets_banners_color":"454245","last_updated":"2026-10-11 11:13:13","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/emergentpixel-image-optimizer\/","header_author_uri":"https:\/\/emergentpixel.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":47,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"emergentpixel","date":"2026-10-11 11:13:13","revision":3739391}},"upgrade_notice":{"1.0.0":"<p>First release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3739391,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3739391,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3739391,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500-rtl.png":{"filename":"banner-1544x500-rtl.png","revision":3739391,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3739391,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250-rtl.png":{"filename":"banner-772x250-rtl.png","revision":3739391,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3739391,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3739391,"resolution":"1","location":"assets","locale":"","width":1440,"height":832},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3739391,"resolution":"2","location":"assets","locale":"","width":1440,"height":832},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3739391,"resolution":"3","location":"assets","locale":"","width":1440,"height":832},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3739391,"resolution":"4","location":"assets","locale":"","width":1440,"height":832},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3739391,"resolution":"5","location":"assets","locale":"","width":1440,"height":832},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3739391,"resolution":"6","location":"assets","locale":"","width":1440,"height":832},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3739391,"resolution":"7","location":"assets","locale":"","width":1440,"height":832}},"screenshots":{"1":"Dashboard: optimization score, library savings, bulk optimization and recent activity.","2":"Compression settings with backups and one-click restore.","3":"WebP and AVIF: keep originals or convert to WebP, optional AVIF copies, delivery mode, delivery test and Nginx snippet.","4":"Performance: lazy load, LCP priority, layout shift fix and video previews.","5":"Thumbnails: every image size with disk usage, custom sizes and regeneration with live results.","6":"Modules: every feature can be switched off.","7":"Alt text: fill missing alt text in bulk and edit alt text for every image in one list."}},"plugin_section":[],"plugin_tags":[56174,29161,4884,2904,15376],"plugin_category":[],"plugin_contributors":[285786,246446,261020],"plugin_business_model":[],"class_list":["post-382168","plugin","type-plugin","status-publish","hentry","plugin_tags-compress-images","plugin_tags-image-optimization","plugin_tags-lazy-load","plugin_tags-svg","plugin_tags-webp","plugin_contributors-emergentpixel","plugin_contributors-pcprajapat","plugin_contributors-phoolchandcms","plugin_committers-emergentpixel"],"banners":{"banner":"https:\/\/ps.w.org\/emergentpixel-image-optimizer\/assets\/banner-772x250.png?rev=3739391","banner_2x":"https:\/\/ps.w.org\/emergentpixel-image-optimizer\/assets\/banner-1544x500.png?rev=3739391","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/emergentpixel-image-optimizer\/assets\/icon.svg?rev=3739391","icon":"https:\/\/ps.w.org\/emergentpixel-image-optimizer\/assets\/icon.svg?rev=3739391","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/emergentpixel-image-optimizer\/assets\/screenshot-1.png?rev=3739391","caption":"Dashboard: optimization score, library savings, bulk optimization and recent activity."},{"src":"https:\/\/ps.w.org\/emergentpixel-image-optimizer\/assets\/screenshot-2.png?rev=3739391","caption":"Compression settings with backups and one-click restore."},{"src":"https:\/\/ps.w.org\/emergentpixel-image-optimizer\/assets\/screenshot-3.png?rev=3739391","caption":"WebP and AVIF: keep originals or convert to WebP, optional AVIF copies, delivery mode, delivery test and Nginx snippet."},{"src":"https:\/\/ps.w.org\/emergentpixel-image-optimizer\/assets\/screenshot-4.png?rev=3739391","caption":"Performance: lazy load, LCP priority, layout shift fix and video previews."},{"src":"https:\/\/ps.w.org\/emergentpixel-image-optimizer\/assets\/screenshot-5.png?rev=3739391","caption":"Thumbnails: every image size with disk usage, custom sizes and regeneration with live results."},{"src":"https:\/\/ps.w.org\/emergentpixel-image-optimizer\/assets\/screenshot-6.png?rev=3739391","caption":"Modules: every feature can be switched off."},{"src":"https:\/\/ps.w.org\/emergentpixel-image-optimizer\/assets\/screenshot-7.png?rev=3739391","caption":"Alt text: fill missing alt text in bulk and edit alt text for every image in one list."}],"raw_content":"<!--section=description-->\n<p>EmergentPixel Image Optimizer replaces the handful of image plugins most sites run with one modular plugin. Everything runs on your own server: your images never leave it, there are no credits, no monthly limits and no API keys.<\/p>\n\n<p><strong>Compression<\/strong><\/p>\n\n<ul>\n<li>Lossless, Smart (recommended) and Lossy levels, using Imagick when available and GD everywhere else.<\/li>\n<li>New uploads are compressed in the background; a bulk optimizer handles your existing library, even when you close the browser.<\/li>\n<li>Originals are backed up first. Restore any image with one click, or re-optimize it at another level.<\/li>\n<li>Camera data and GPS location are removed, colour profiles are kept.<\/li>\n<\/ul>\n\n<p><strong>WebP and AVIF<\/strong><\/p>\n\n<ul>\n<li>A WebP copy of every image and size, kept only when it is smaller. Optional AVIF copies too, usually even smaller, served with <code>&lt;picture&gt;<\/code> tags, rewrite rules or the Nginx snippet.<\/li>\n<li>Served by default as plain <code>&lt;img&gt;<\/code> tags whose <code>src<\/code> and <code>srcset<\/code> point at the .webp files, on any server, page cache and CDN, including images your theme or ACF fields output. Choose <code>&lt;picture&gt;<\/code> tags if you also want a JPEG fallback for very old browsers. Rewrite rules (Apache, LiteSpeed) and a ready-made Nginx snippet are available too. A \"Test delivery\" button checks that it works.<\/li>\n<li>Or turn on \"Convert to WebP\": uploads become real WebP files in the Media Library, existing images can be converted in the background with links updated, and originals are kept in a backup folder.<\/li>\n<\/ul>\n\n<p><strong>Faster pages (Core Web Vitals)<\/strong><\/p>\n\n<ul>\n<li>Lazy loading for images and iframes with plain HTML attributes. No JavaScript is added to your site.<\/li>\n<li>The first images and the featured image load right away; the main image gets <code>fetchpriority=\"high\"<\/code> (LCP).<\/li>\n<li>Missing width and height are added to stop layout shift (CLS).<\/li>\n<li>Optional YouTube and Vimeo previews that load the player only on click.<\/li>\n<\/ul>\n\n<p><strong>Media tools<\/strong><\/p>\n\n<ul>\n<li>Thumbnail manager: see every image size, who added it and how much space it uses; turn off sizes you do not need; regenerate all or only missing thumbnails.<\/li>\n<li>Alt text editor: see which images have no alt text, edit alt text for every image in one list, and fill missing alt text in bulk from the image title, the file name or the page the image belongs to. Alt text you wrote is never changed, and camera names like \"IMG_2034\" are skipped.<\/li>\n<li>Upload rules: resize huge uploads, clean file names (\"IMG_2034 Final (1).JPG\" becomes \"image-2034.jpg\"), add alt text from the file name.<\/li>\n<li>Safe SVG uploads for the roles you choose; every file is sanitized.<\/li>\n<li>Replace media: upload a new version and keep the same URL, or use the new name and update links.<\/li>\n<li>Attachment pages redirect to the post the image belongs to.<\/li>\n<\/ul>\n\n<p>Every feature is a module you can switch off. A switched-off module adds no code to your site.<\/p>\n\n<p><strong>Pro (planned)<\/strong><\/p>\n\n<p>A Pro add-on is planned. It will add blur placeholders, CSS background-image lazy loading, media cleanup and more. The free plugin is complete on its own and will never be limited.<\/p>\n\n<h3>External services<\/h3>\n\n<p>The plugin does not connect to any service by default.<\/p>\n\n<p><strong>YouTube thumbnails (optional).<\/strong> When you turn on \"YouTube and Vimeo preview\" in Performance, YouTube videos that are already embedded in your content show a preview image until the visitor clicks play. The preview image is loaded by the visitor's browser from YouTube (<code>https:\/\/i.ytimg.com\/vi\/&lt;video id&gt;\/hqdefault.jpg<\/code>); this sends the visitor's IP address and the video ID to YouTube. Nothing loads from YouTube or Vimeo before that, so this replaces the full player that would otherwise load on every page view. YouTube is provided by Google: <a href=\"https:\/\/www.youtube.com\/t\/terms\">Terms of Service<\/a>, <a href=\"https:\/\/policies.google.com\/privacy\">Privacy Policy<\/a>.<\/p>\n\n<h3>Source code<\/h3>\n\n<p>The admin screens are built with <code>@wordpress\/scripts<\/code>. The readable source is included in the plugin under <code>assets\/src\/<\/code>. To rebuild <code>assets\/build\/<\/code>, run <code>npm install<\/code> and <code>npm run build<\/code> in the plugin folder.<\/p>\n\n<h3>Third-party libraries<\/h3>\n\n<ul>\n<li>Action Scheduler (GPL-3.0-or-later) by Automattic \u2014 background processing. https:\/\/actionscheduler.org\/<\/li>\n<li>svg-sanitizer (GPL-2.0-or-later) by Daryll Doyle \u2014 SVG cleaning, bundled under the EPIM\\Vendor namespace. https:\/\/github.com\/darylldoyle\/svg-sanitizer<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the plugin from Plugins \u2192 Add New.<\/li>\n<li>Open <strong>EmergentPixel Image Optimizer<\/strong> in the admin menu and follow the three-step setup.<\/li>\n<li>New uploads are optimized automatically. Start the bulk optimizer to optimize existing images.<\/li>\n<\/ol>\n\n<p><strong>WebP delivery:<\/strong> WebP is served out of the box, on every server: image tags point at the .webp files. For server-side delivery on Nginx, copy the snippet from <strong>EmergentPixel Image Optimizer \u2192 WebP &amp; formats<\/strong> into your Nginx configuration.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20my%20images%20leave%20my%20server%3F\"><h3>Do my images leave my server?<\/h3><\/dt>\n<dd><p>No. All processing uses the image libraries already on your server (Imagick or GD). The plugin sends nothing to any external service. The only request it makes itself is the \"Test delivery\" check, which loads a test image from your own site when you click it. See \"External services\" below for the optional video preview.<\/p><\/dd>\n<dt id=\"is%20there%20a%20limit%20on%20the%20number%20of%20images%3F\"><h3>Is there a limit on the number of images?<\/h3><\/dt>\n<dd><p>No. There are no quotas, credits or file size plans.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20my%20original%20images%3F\"><h3>What happens to my original images?<\/h3><\/dt>\n<dd><p>Before the first optimization the original is copied to <code>wp-content\/uploads\/epim-backups\/<\/code>. You can restore any image, or delete all backups from the Compression screen once you are happy with the results.<\/p><\/dd>\n<dt id=\"my%20host%20only%20has%20gd.%20will%20it%20work%3F\"><h3>My host only has GD. Will it work?<\/h3><\/dt>\n<dd><p>Yes. The plugin works with GD on PHP 7.4 and uses Imagick automatically when it is available, for better results. The Dashboard shows what your server supports.<\/p><\/dd>\n<dt id=\"will%20it%20slow%20down%20my%20site%3F\"><h3>Will it slow down my site?<\/h3><\/dt>\n<dd><p>Optimization runs in the background in small batches. On the front end, the plugin adds no JavaScript or CSS by default, and processes a page with 200 images in a few milliseconds.<\/p><\/dd>\n<dt id=\"images%20stay%20%22waiting%22%20on%20my%20host.\"><h3>Images stay \"waiting\" on my host.<\/h3><\/dt>\n<dd><p>Background work runs through WP-Cron and a request from your site to itself. Some hosts block these. EmergentPixel Image Optimizer notices when jobs are not picked up and then runs them while you use the admin, so uploads and bulk optimization still finish. Tools &amp; logs \u2192 System status shows it under \"Background jobs\". To run jobs with no admin open, add a server cron job that calls <code>wp-cron.php<\/code> every few minutes.<\/p><\/dd>\n<dt id=\"i%20use%20a%20caching%20plugin%20or%20cdn.\"><h3>I use a caching plugin or CDN.<\/h3><\/dt>\n<dd><p>That works. The default delivery links the WebP files in the page itself, so it works with any page cache and CDN. If you switch to rewrite rules, your CDN must respect the \"Vary: Accept\" header. Clear your page cache and CDN cache after changing the delivery mode or replacing a file.<\/p><\/dd>\n<dt id=\"does%20it%20conflict%20with%20other%20image%20plugins%3F\"><h3>Does it conflict with other image plugins?<\/h3><\/dt>\n<dd><p>The Dashboard lists active plugins that do the same work (for example two lazy loaders) and lets you switch off the overlapping module with one click. EmergentPixel Image Optimizer never deactivates other plugins.<\/p><\/dd>\n<dt id=\"what%20is%20removed%20when%20i%20delete%20the%20plugin%3F\"><h3>What is removed when I delete the plugin?<\/h3><\/dt>\n<dd><p>Nothing, unless you turn on \"Remove all plugin data on delete\" in Tools. WebP copies and backups each have their own option, so your original images are never removed by accident.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First release: compression with backups, bulk optimization, upload rules, WebP and AVIF generation and delivery (or full conversion to WebP), lazy load and LCP, CLS fix, thumbnail manager, alt text editor with bulk fill, safe SVG uploads, replace media and attachment redirects.<\/li>\n<\/ul>","raw_excerpt":"Unlimited image optimization on your own server: compression, WebP and AVIF, lazy load, alt text, thumbnails and safe SVG. No credits or API keys.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/arg.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/382168","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/arg.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/arg.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/arg.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=382168"}],"author":[{"embeddable":true,"href":"https:\/\/arg.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/emergentpixel"}],"wp:attachment":[{"href":"https:\/\/arg.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=382168"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/arg.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=382168"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/arg.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=382168"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/arg.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=382168"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/arg.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=382168"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/arg.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=382168"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}