{"id":4064,"date":"2025-02-16T00:52:03","date_gmt":"2025-02-16T00:52:03","guid":{"rendered":"https:\/\/s-o-s.net\/s3-image-optimizer\/"},"modified":"2025-02-16T00:52:03","modified_gmt":"2025-02-16T00:52:03","slug":"s3-image-optimizer","status":"publish","type":"post","link":"https:\/\/s-o-s.net\/en_gb\/s3-image-optimizer\/","title":{"rendered":"S3 Image Optimizer"},"content":{"rendered":"<p> <br \/>\n<\/p>\n<article id=\"post-142687\" class=\"alignwide post-142687 plugin type-plugin status-publish hentry plugin_tags-compression plugin_tags-image plugin_tags-optimize plugin_tags-s3 plugin_tags-wp-cli plugin_category-ecommerce plugin_category-media plugin_category-utilities-and-tools plugin_contributors-nosilver4u plugin_business_model-community plugin_committers-nosilver4u plugin_support_reps-adamewww\">\n<div class=\"plugin-banner\" id=\"plugin-banner-s3-image-optimizer\"><\/div>\n<header class=\"plugin-header\">\n<div class=\"entry-heading-container\">\n<div>\n<div class=\"entry-thumbnail\">\n\t\t\t\t\t<img decoding=\"async\" class=\"plugin-icon\" srcset=\"https:\/\/ps.w.org\/s3-image-optimizer\/assets\/icon-128x128.jpg?rev=2816100, https:\/\/ps.w.org\/s3-image-optimizer\/assets\/icon-256x256.jpg?rev=2816100 2x\" src=\"https:\/\/ps.w.org\/s3-image-optimizer\/assets\/icon-256x256.jpg?rev=2816100\" alt=\"\">\t\t\t\t<\/div>\n<div>\n<h1 class=\"plugin-title\">S3 Image Optimizer<\/h1>\n<p>\t\t\t\t\t<span class=\"byline\">By <span class=\"author vcard\"><a target=\"_blank\" class=\"url fn n\" href=\"https:\/\/profiles.wordpress.org\/nosilver4u\/\" rel=\"noopener\">nosilver4u<\/a><\/span><\/span>\n\t\t\t\t<\/div>\n<\/p><\/div>\n<div class=\"plugin-actions\">\n<div class=\"wp-block-button is-small plugin-download download-button\"><a target=\"_blank\" class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/downloads.wordpress.org\/plugin\/s3-image-optimizer.2.6.1.zip\" rel=\"noopener\">Download<\/a><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/header>\n<p><!-- .entry-header --><\/p>\n<p>\t<span id=\"description\"><\/span><br \/>\n\t<span id=\"reviews\"><\/span><br \/>\n\t<span id=\"installation\"><\/span><br \/>\n\t<span id=\"developers\"><\/span><br \/>\n\t<span id=\"advanced\" class=\"\"><\/span><br \/>\n\t<span id=\"section-links\"><\/p>\n<ul class=\"tabs clear\">\n<li id=\"tablink-description\"><a target=\"_blank\" href=\"https:\/\/wordpress.org\/plugins\/s3-image-optimizer\/#description\" rel=\"noopener\">Details<\/a><\/li>\n<li id=\"tablink-reviews\"><a target=\"_blank\" href=\"https:\/\/wordpress.org\/plugins\/s3-image-optimizer\/#reviews\" rel=\"noopener\">Reviews<\/a><\/li>\n<li id=\"tablink-installation\">\n\t\t\t\t<a target=\"_blank\" href=\"https:\/\/wordpress.org\/plugins\/s3-image-optimizer\/#installation\" rel=\"noopener\">Installation<\/a>\n\t\t\t<\/li>\n<li id=\"tablink-developers\"><a target=\"_blank\" href=\"https:\/\/wordpress.org\/plugins\/s3-image-optimizer\/#developers\" rel=\"noopener\">Development<\/a><\/li>\n<\/ul>\n<div id=\"link-support\">\n\t\t\t<a target=\"_blank\" href=\"https:\/\/wordpress.org\/support\/plugin\/s3-image-optimizer\/\" rel=\"noopener\">Support<\/a>\n\t\t<\/div>\n<p>\t<\/span><br \/>\n\t<script type=\"text\/javascript\">if ( '#changelog' == window.location.hash ) { window.setTimeout( function() { window.location.hash=\"#developers\"; }, 10 ); }<\/script><\/p>\n<div class=\"entry-content\">\n<div id=\"tab-description\" class=\"plugin-description section\">\n<h2 id=\"description-header\">Description<\/h2>\n<p>The S3 Image Optimizer will optimize all your images in 1-1,000+ Amazon S3 buckets using the EWWW Image Optimizer. Since EWWW IO integrates directly with plugins like WP Offload Media, S3 IO is generally for folks who use a solution other than WP Offload Media to put their images on S3. But, if you have 20 sites sharing an S3 bucket, or have lots of buckets, and you would want to optimize them all from one place instead of 20 different sites, this is the plugin for you.<\/p>\n<p>S3 IO features a web-based bulk optimization process, and a WP-CLI interface for massive buckets. S3 IO works with any S3-compatible storage service including Linode, Backblaze B2 and Digital Ocean Spaces.<\/p>\n<p>You may report security issues through our Patchstack Vulnerability Disclosure Program. The Patchstack team helps validate, triage and handle any security vulnerabilities. <a target=\"_blank\" href=\"https:\/\/patchstack.com\/database\/vdp\/s3-image-optimizer\" rel=\"nofollow ugc noopener\">Report a security vulnerability.<\/a><\/p>\n<\/div>\n<div id=\"tab-installation\" class=\"plugin-installation section\">\n<h2 id=\"installation-header\">Installation<\/h2>\n<p>First, it is worth noting that S3 IO is \u201csite agnostic\u201d. For example, if you have images for http:\/\/www.example.com in your S3 bucket, you do NOT have to run S3 IO on the WordPress install for example.com. You could install it at test.com, or myfuzzybunnies.com, or any site you manage. In fact, you may even create a dedicated WordPress install just for running S3 Image Optimizer, with no other plugins needed except EWWW IO and S3 IO.<\/p>\n<h4>Setup<\/h4>\n<p>Now that we have that cleared up, let\u2019s get down to business. You need 2 plugins to make this work:  S3 Image Optimizer, and the <a target=\"_blank\" href=\"https:\/\/wordpress.org\/plugins\/ewww-image-optimizer\/\" rel=\"ugc noopener\">EWWW Image Optimizer<\/a>. Then\u2026<\/p>\n<ul>\n<li>Make sure you have configured EWWW IO with the settings you want to use.<\/li>\n<li><a target=\"_blank\" href=\"https:\/\/docs.ewww.io\/article\/61-creating-an-amazon-web-services-aws-user\" rel=\"nofollow ugc noopener\">Setup your AWS access keys<\/a>, and then enter your access keys on the S3 IO settings page and save to confirm them.<\/li>\n<li>Enter the buckets you wish to optimize in the appropriate text area. Leave it empty to have the plugin optimize all your buckets.<\/li>\n<li>\n<p>You may also define constants to restrict S3 IO to a specific bucket and\/or sub-folder: S3_IMAGE_OPTIMIZER_BUCKET and S3_IMAGE_OPTIMIZER_FOLDER. These override the bucket list on the settings page, and will look like this (note the lack of leading\/trailing slashes on the folder setting):<\/p>\n<p>define( \u2018S3_IMAGE_OPTIMIZER_BUCKET\u2019, \u2018my-amazing-bucket-name\u2019 );<br \/>\ndefine( \u2018S3_IMAGE_OPTIMIZER_FOLDER\u2019, \u2018wp-content\/uploads\u2019 );<\/p>\n<\/li>\n<li>\n<p>If your IAM user does not have access to list all buckets, you will generally also need to configure the region, something like this:<\/p>\n<p>define( \u2018S3_IMAGE_OPTIMIZER_REGION\u2019, \u2018eu-west-1\u2019 );<\/p>\n<\/li>\n<li>\n<p>If you are using an S3-compatible provider other than Amazon, you can define the region and endpoint constants:<\/p>\n<p>define(\u2018S3_IMAGE_OPTIMIZER_REGION\u2019, \u2018us-west-004\u2019);<br \/>\ndefine(\u2018S3_IMAGE_OPTIMIZER_ENDPOINT\u2019, \u2018https:\/\/s3.us-west-004.backblazeb2.com\u2019);<\/p>\n<\/li>\n<li>\n<p>Likewise, you may need to force the usage of path-style endpoints with some providers:<\/p>\n<p>define( \u2018S3_IMAGE_OPTIMIZER_PATH_STYLE\u2019, true );<\/p>\n<\/li>\n<\/ul>\n<p><a target=\"_blank\" href=\"https:\/\/docs.aws.amazon.com\/general\/latest\/gr\/rande.html#regional-endpoints\" rel=\"nofollow ugc noopener\">View the full list of region names.<\/a><\/p>\n<h4>Usage<\/h4>\n<ul>\n<li>Go to Media-&gt;S3 Bulk Optimizer to start optimizing your bucket(s).<\/li>\n<li>Use Media-&gt;S3 URL Optimizer to optimize specific images by their url\/address.<\/li>\n<li>Use WP-CLI to optimize your buckets from the command line, especially useful for large buckets or scheduling bulk optimization: <code>wp-cli help s3io optimize<\/code><\/li>\n<\/ul>\n<\/div>\n<div id=\"faq\" class=\"plugin-faq section\">\n<h2 id=\"faq-header\">FAQ<\/h2>\n<dl>\n<dt id=\"what%20happens%20if%20i%20have%20so%20many%20images%20that%20the%20s3%20bulk%20optimizer%20keeps%20timing%20out%3F\">\n<h3>What happens if I have so many images that the S3 Bulk Optimizer keeps timing out?<\/h3>\n<\/dt>\n<dd>\n<p>If you have configured S3 IO to optimize all your buckets, try a single bucket to see if that will work. If that still doesn\u2019t work, use the S3_IMAGE_OPTIMIZER_FOLDER setting above to restrict optimization to a specific folder. This way you can optimize a single bucket by configuring each folder within the bucket, running the S3 Bulk Optimizer, and then moving to the next folder.<\/p>\n<p>If the last option has you groaning, see if your web host supports WP-CLI. Using WP-CLI allows you to avoid any timeouts, and solves a whole host of issues with long-running processes. The <code>wp-cli help s3io optimize<\/code> command should get you going.<\/p>\n<p>If you\u2019ve tried everything, and WP-CLI isn\u2019t an option with your web host, find a web host that DOES support WP-CLI. It\u2019s pretty easy to find a cheap host that supports WP-CLI, like GoDaddy. While I wouldn\u2019t recommend GoDaddy for hosting, if you want a cheap solution to run WP-CLI, it works. Remember that S3 IO is site agnostic, so you can run it from a site completely separate from the site(s) that your S3 images belong to. You could also fire up a Digital Ocean droplet with WordPress pre-installed for $5 and put WP-CLI on there. When you\u2019re done, you can make a backup image of the droplet and destroy it so that you aren\u2019t paying for usage all the time.<\/p>\n<\/dd>\n<dt id=\"what%20about%20x%2C%20or%20y%2C%20or%20maybe%20even%20z%3F\">\n<h3>What about X, or Y, or maybe even Z?<\/h3>\n<\/dt>\n<dd>\n<p>Most problems we\u2019ve seen are either permissions-related, or covered by the timeout stuff above. If you have a question, <a target=\"_blank\" href=\"https:\/\/ewww.io\/contact-us\/\" rel=\"nofollow ugc noopener\">shoot us an email<\/a>!<\/p>\n<\/dd>\n<\/dl>\n<\/div>\n<div id=\"tab-reviews\" class=\"plugin-reviews section\">\n<h2 id=\"reviews-header\">Reviews<\/h2>\n<div class=\"plugin-reviews\">\n<article class=\"plugin-review\">\n<div class=\"review-avatar\">\n\t\t\t\t\t\t<img decoding=\"async\" alt=\"\" src=\"https:\/\/secure.gravatar.com\/avatar\/54c56ef9c4f28bea85c7c868324842f2fb6c806d7d2ddcb82e1f18f5dd786b6d?s=60&amp;d=retro&amp;r=g\" srcset=\"https:\/\/secure.gravatar.com\/avatar\/54c56ef9c4f28bea85c7c868324842f2fb6c806d7d2ddcb82e1f18f5dd786b6d?s=120&amp;d=retro&amp;r=g 2x\" class=\"avatar avatar-60 photo\" height=\"60\" width=\"60\">\t\t\t\t\t<\/div>\n<div class=\"review\">\n<header>\n<div class=\"header-top\">\n<div class=\"wporg-ratings\" aria-label=\"5 out of 5 stars\" data-title-template=\"%s out of 5 stars\" data-rating=\"5\" style=\"color:#ffb900;\"><span class=\"dashicons dashicons-star-filled\"><\/span><span class=\"dashicons dashicons-star-filled\"><\/span><span class=\"dashicons dashicons-star-filled\"><\/span><span class=\"dashicons dashicons-star-filled\"><\/span><span class=\"dashicons dashicons-star-filled\"><\/span><\/div>\n<h3 class=\"review-title\"><a target=\"_blank\" class=\"url\" href=\"https:\/\/wordpress.org\/support\/topic\/very-good-plugin-2441\/\" rel=\"noopener\">Very good plugin<\/a><\/h3>\n<\/p><\/div>\n<div class=\"header-bottom\">\n\t\t\t\t\t\t\t\t<span class=\"review-author author vcard\"><a target=\"_blank\" href=\"https:\/\/profiles.wordpress.org\/ercogx\/\" title=\"Posts by ercogx\" rel=\"author noopener\">ercogx<\/a><\/span><br \/>\n\t\t\t\t\t\t\t\t<span class=\"review-date\">April 28, 2022<\/span><br \/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"review-replies\">1 reply<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n<\/header>\n<div class=\"review-content\">Thanks the plugin helped a lot. If I set a limit on the folder S3_IMAGE_OPTIMIZER_FOLDER it would be cool to show it in the UI, because it is not clear whether it was applied or not<\/div>\n<\/p><\/div>\n<\/article><\/div>\n<p>\t\t<a target=\"_blank\" class=\"reviews-link\" href=\"https:\/\/wordpress.org\/support\/plugin\/s3-image-optimizer\/reviews\/\" rel=\"noopener\"><br \/>\n\t\t\tRead all 1 review\t\t<\/a><\/div>\n<div id=\"tab-developers\" class=\"plugin-developers section\">\n<h2 id=\"developers-header\">Contributors &amp; Developers<\/h2>\n<div class=\"plugin-contributors\">\n<p>\u201cS3 Image Optimizer\u201d is open source software. The following people have contributed to this plugin.<\/p>\n<p><span class=\"screen-reader-text\">Contributors<\/span><\/p>\n<ul id=\"contributors-list\" class=\"contributors-list\">\n<li>\n\t\t\t\t<img decoding=\"async\" alt=\"\" src=\"https:\/\/secure.gravatar.com\/avatar\/591c39f8101beaf38f818256c9cac460dd878b11aa6de3a815de1ac04eb60960?s=32&amp;d=mm&amp;r=g\" srcset=\"https:\/\/secure.gravatar.com\/avatar\/591c39f8101beaf38f818256c9cac460dd878b11aa6de3a815de1ac04eb60960?s=64&amp;d=mm&amp;r=g 2x\" class=\"avatar avatar-32 photo\" height=\"32\" width=\"32\">\t\t\t\t<a target=\"_blank\" href=\"https:\/\/profiles.wordpress.org\/nosilver4u\/\" rel=\"noopener\"><br \/>\n\t\t\t\t\tnosilver4u\t\t\t\t<\/a>\n\t\t\t<\/li>\n<\/ul><\/div>\n<div class=\"plugin-development\">\n<p>\u201cS3 Image Optimizer\u201d has been translated into 1 locale. Thank you to <a target=\"_blank\" href=\"https:\/\/translate.wordpress.org\/projects\/wp-plugins\/s3-image-optimizer\/contributors\" rel=\"noopener\">the translators<\/a> for their contributions.<\/p>\n<p><a target=\"_blank\" href=\"https:\/\/translate.wordpress.org\/projects\/wp-plugins\/s3-image-optimizer\" rel=\"noopener\">Translate \u201cS3 Image Optimizer\u201d into your language.<\/a><\/p>\n<h3>Interested in development?<\/h3>\n<p><a target=\"_blank\" href=\"https:\/\/plugins.trac.wordpress.org\/browser\/s3-image-optimizer\/\" rel=\"noopener\" class=\"broken_link\">Browse the code<\/a>, check out the <a target=\"_blank\" href=\"https:\/\/plugins.svn.wordpress.org\/s3-image-optimizer\/\" rel=\"noopener\">SVN repository<\/a>, or subscribe to the <a target=\"_blank\" href=\"https:\/\/plugins.trac.wordpress.org\/log\/s3-image-optimizer\/\" rel=\"noopener\" class=\"broken_link\">development log<\/a> by <a target=\"_blank\" href=\"https:\/\/plugins.trac.wordpress.org\/log\/s3-image-optimizer\/?limit=100&amp;mode=stop_on_copy&amp;format=rss\" rel=\"noopener\" class=\"broken_link\">RSS<\/a>.<\/p>\n<\/div>\n<\/div>\n<div id=\"tab-changelog\" class=\"plugin-changelog section\">\n<h2 id=\"changelog-header\">Changelog<\/h2>\n<h4>2.6.1<\/h4>\n<ul>\n<li>added: override auto-detected object ownership enforcement via S3IO_OBJECT_OWNERSHIP_ENFORCED constant or s3io_object_ownership_enforced filter: set either to true to disable per-object acls<\/li>\n<li>fixed: optimize by URL incorrectly overwrites previous optimization results if multiple buckets have objects with identical paths<\/li>\n<\/ul>\n<h4>2.6.0<\/h4>\n<ul>\n<li>added: support for buckets with object ownership enforced<\/li>\n<li>added: force usage of path-style endpoint with S3_IMAGE_OPTIMIZER_PATH_STYLE<\/li>\n<li>changed: improved error handling for optimize by URL<\/li>\n<li>changed: bumped minimum WP and PHP versions<\/li>\n<li>fixed: malformed image size information in optimization table<\/li>\n<\/ul>\n<h4>2.5.1<\/h4>\n<ul>\n<li>changed: use updated WP coding standards<\/li>\n<li>changed: cleanup AWS SDK folder<\/li>\n<\/ul>\n<h4>2.5.0<\/h4>\n<ul>\n<li>added: compatibility with EWWW Image Optimizer 7+ and better future-proofing to detect compatibility errors<\/li>\n<li>updated: AWS SDK to latest version<\/li>\n<li>updated: improved PHP 8.2 compatibility, though there are still (non-critical) deprecation notices from the AWS SDK<\/li>\n<\/ul>\n<h4>2.4.3<\/h4>\n<ul>\n<li>changed: display the values of any constants defined for endpoint, region, or folder restriction<\/li>\n<li>fixed: check if the bucket list is an array before sanitizing<\/li>\n<\/ul>\n<h4>2.4.2<\/h4>\n<ul>\n<li>added: define custom endpoint for any S3-compatible storage via S3_IMAGE_OPTIMIZER_ENDPOINT<\/li>\n<li>fixed: cleanup of WebP copies using incorrect path<\/li>\n<\/ul>\n<h4>2.4.1<\/h4>\n<ul>\n<li>fixed: PHP notice when updating db records<\/li>\n<li>removed EDD_SL_Updater file\/class<\/li>\n<\/ul>\n<h4>2.4.0<\/h4>\n<ul>\n<li>fixed: failure in creating s3io\/ working directory silently breaks bulk tools<\/li>\n<li>fixed: sanitation for error messages was too aggressive<\/li>\n<li>fixed: listBuckets error displayed even when S3_IMAGE_OPTIMIZER_BUCKET is defined<\/li>\n<\/ul>\n<h4>2.3<\/h4>\n<ul>\n<li>fixed: conflict getting local uploads directory when S3 Uploads plugin is active<\/li>\n<\/ul>\n<h4>2.2<\/h4>\n<ul>\n<li>added: generate and upload WebP version of your images in accordance with EWWW IO settings (WebP Conversion and Force WebP)<\/li>\n<li>fixed bulk toggle-arrow styling<\/li>\n<li>additional sanitizing and escaping for better security<\/li>\n<\/ul>\n<h4>2.1<\/h4>\n<ul>\n<li>updated AWS SDK to v3, let us know if you encounter errors<\/li>\n<li>catch errors when defined region is incorrect<\/li>\n<li>added ability to remove license key (e.g. if you entered it wrong)<\/li>\n<li>rewrote bucket scanning to use AJAX in order to avoid timeouts<\/li>\n<li>fixed delay not working for WP-CLI<\/li>\n<li>display configuration errors when run from WP-CLI<\/li>\n<li>fixed S3IO_DOSPACES constant not working<\/li>\n<li>fixed scanner broken on objects with apostrophes<\/li>\n<li>fixed URL optimizer with url-encoded characters (like spaces = %20)<\/li>\n<\/ul>\n<h4>2.0<\/h4>\n<ul>\n<li>added compatibility with Digital Ocean Spaces<\/li>\n<li>lots of code cleanup and sanitation<\/li>\n<\/ul>\n<\/div><\/div>\n<p><!-- .entry-content --><\/p>\n<p>\t<!-- .entry-meta --><br \/>\n<\/article>\n<p><br \/>\n<br \/><a href=\"https:\/\/wordpress.org\/plugins\/s3-image-optimizer\/\" target=\"_blank\" rel=\"noopener\">Source link <\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>S3 Image Optimizer By nosilver4u Download Details Reviews Installation Development Support Description The S3 Image Optimizer will optimize all your images in 1-1,000+ Amazon S3 buckets using the EWWW Image Optimizer. Since EWWW IO integrates directly with plugins like WP Offload Media, S3 IO is generally for folks who use a solution other than WP [&hellip;]<\/p>","protected":false},"author":33,"featured_media":4065,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"give_campaign_id":0,"footnotes":""},"categories":[1933,39,40],"tags":[1975,2054],"class_list":["post-4064","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-community-plugin","category-lite-version","category-wp-plugin-solution","tag-image","tag-optimizer"],"acf":[],"fifu_image_url":"https:\/\/ps.w.org\/s3-image-optimizer\/assets\/banner-772x250.jpg?rev=2816100","_links":{"self":[{"href":"https:\/\/s-o-s.net\/en_gb\/wp-json\/wp\/v2\/posts\/4064","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/s-o-s.net\/en_gb\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/s-o-s.net\/en_gb\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/s-o-s.net\/en_gb\/wp-json\/wp\/v2\/users\/33"}],"replies":[{"embeddable":true,"href":"https:\/\/s-o-s.net\/en_gb\/wp-json\/wp\/v2\/comments?post=4064"}],"version-history":[{"count":0,"href":"https:\/\/s-o-s.net\/en_gb\/wp-json\/wp\/v2\/posts\/4064\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/s-o-s.net\/en_gb\/wp-json\/wp\/v2\/media\/4065"}],"wp:attachment":[{"href":"https:\/\/s-o-s.net\/en_gb\/wp-json\/wp\/v2\/media?parent=4064"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/s-o-s.net\/en_gb\/wp-json\/wp\/v2\/categories?post=4064"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/s-o-s.net\/en_gb\/wp-json\/wp\/v2\/tags?post=4064"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}