{"id":297240,"date":"2026-04-17T19:45:01","date_gmt":"2026-04-17T19:45:01","guid":{"rendered":"https:\/\/es.wordpress.org\/plugins\/tso-image-master\/"},"modified":"2026-08-24T19:40:34","modified_gmt":"2026-08-24T19:40:34","slug":"tso-image-master","status":"publish","type":"plugin","link":"https:\/\/gl.wordpress.org\/plugins\/tso-image-master\/","author":9581708,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.9.5","stable_tag":"1.9.5","tested":"7.1","requires":"5.9","requires_php":"7.4","requires_plugins":null,"header_name":"TSO Image Master","header_author":"Tu Soporte Online","header_description":"Complete image optimization suite for WordPress: convert to WebP\/JPG, resize, compress PDFs, find orphaned images, scan rogue files, fix broken image URLs, and manage SEO fields. Requires PHP GD library.","assets_banners_color":"104463","last_updated":"2026-08-24 19:40:34","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/ko-fi.com\/deadko_cat","header_plugin_uri":"","header_author_uri":"https:\/\/www.tusoporteonline.es\/blog","rating":5,"author_block_rating":0,"active_installs":0,"downloads":976,"num_ratings":1,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.8.0":{"tag":"1.8.0","author":"deadko","date":"2026-06-20 13:17:42"},"1.9.0":{"tag":"1.9.0","author":"deadko","date":"2026-06-26 21:35:56"},"1.9.1":{"tag":"1.9.1","author":"deadko","date":"2026-07-08 18:36:21"},"1.9.5":{"tag":"1.9.5","author":"deadko","date":"2026-08-24 19:40:34"}},"upgrade_notice":{"1.9.5":"<p>Queue, backup retention, AVIF\/PNG output, duplicate scanner, Media Library integration, history SEO details, and related bug fixes.<\/p>","1.9.3":"<p>New Overview tab: health metrics plus bulk alt-text fill for images missing accessible alt.<\/p>","1.9.2":"<p>Compatibility update: tested with WordPress 7.1 (no code changes required).<\/p>","1.9.1":"<p>Cleans up empty backup folders under uploads\/tso-image-master after backup deletion; safer backup path validation.<\/p>","1.9.0":"<p>Major stability release: reliable image conversion, accurate backup detection, URL repair across posts and widgets, and safer rename\/revert flows.<\/p>"},"ratings":{"1":0,"2":0,"3":0,"4":0,"5":1},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3509244,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3509244,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x320.png":{"filename":"banner-1544x320.png","revision":3596049,"resolution":"1544x320","location":"assets","locale":"","width":1500,"height":371},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3596049,"resolution":"772x250","location":"assets","locale":"","width":800,"height":198}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.8.0","1.9.0","1.9.1","1.9.5"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3523836,"resolution":"1","location":"assets","locale":"","width":1707,"height":740},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3523836,"resolution":"2","location":"assets","locale":"","width":1679,"height":655},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3523836,"resolution":"3","location":"assets","locale":"","width":804,"height":499}},"screenshots":{"1":"<p>Image Optimizer tab with search, bulk actions, and format\/quality controls.<\/p>","2":"<p>Auto-Optimizer tab with upload automation settings and maintenance tools.<\/p>","3":"<p>Per-image Optimize modal with output format, resize, and replace-original options.<\/p>"}},"plugin_section":[],"plugin_tags":[194661,29161,233,260486,15376],"plugin_category":[55],"plugin_contributors":[260487],"plugin_business_model":[],"class_list":["post-297240","plugin","type-plugin","status-publish","hentry","plugin_tags-avif","plugin_tags-image-optimization","plugin_tags-media-library","plugin_tags-pdf-compression","plugin_tags-webp","plugin_category-seo-and-marketing","plugin_contributors-deadko","plugin_committers-deadko"],"banners":{"banner":"https:\/\/ps.w.org\/tso-image-master\/assets\/banner-772x250.png?rev=3596049","banner_2x":false,"banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/tso-image-master\/assets\/icon-128x128.png?rev=3509244","icon_2x":"https:\/\/ps.w.org\/tso-image-master\/assets\/icon-256x256.png?rev=3509244","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/tso-image-master\/assets\/screenshot-1.png?rev=3523836","caption":"<p>Image Optimizer tab with search, bulk actions, and format\/quality controls.<\/p>"},{"src":"https:\/\/ps.w.org\/tso-image-master\/assets\/screenshot-2.png?rev=3523836","caption":"<p>Auto-Optimizer tab with upload automation settings and maintenance tools.<\/p>"},{"src":"https:\/\/ps.w.org\/tso-image-master\/assets\/screenshot-3.png?rev=3523836","caption":"<p>Per-image Optimize modal with output format, resize, and replace-original options.<\/p>"}],"raw_content":"<!--section=description-->\n<p>TSO Image Master is a complete media management and image optimization plugin for WordPress. It provides the following features from a single admin screen:<\/p>\n\n<p><strong>Overview<\/strong> \u2014 Site health metrics (image count, missing alt, TSO backups, space saved, server engines). Bulk-fill missing or weak alt text. Scan for duplicate image files. Configure backup retention and watch the background optimize queue.<\/p>\n\n<p><strong>Image Optimizer<\/strong> \u2014 Convert images to WebP, AVIF (when GD supports it), JPG, or PNG. Set quality and dimensions, replace originals, and update content links. Bulk optimize runs in the background via WP-Cron (5 images per batch). Choose how many images to show per page (21\u2013105). Requires PHP GD (WebP strongly recommended).<\/p>\n\n<p><strong>Orphaned Image Finder<\/strong> \u2014 Detects Media Library images that are not referenced in posts, pages, widgets, meta, theme Customizer settings, FSE templates\/parts\/patterns, term meta, or menu items. Paginated batch scanning helps avoid timeouts on large sites.<\/p>\n\n<p><strong>Rogue File Scanner<\/strong> \u2014 Scans the uploads directory for physical files WordPress does not know about: double-extension files (e.g. image.jpg.webp), plugin backup files, temporary files, and other unregistered images that waste disk space.<\/p>\n\n<p><strong>SEO &amp; File Names<\/strong> \u2014 Edit title, alt text, caption, and description for any image. Rename files using SEO-friendly slugs (lowercase, no accents, hyphens instead of spaces). All internal links are updated automatically.<\/p>\n\n<p><strong>PDF Compressor<\/strong> \u2014 Reduce PDF file size in the Media Library using GhostScript (recommended) or the Imagick PHP extension as a fallback. The original URL never changes.<\/p>\n\n<p><strong>Auto-Optimizer<\/strong> \u2014 Automatically optimize new uploads with your chosen format and quality. Optional: skip already-small WebP\/AVIF files, and fill missing alt text on upload (even when auto-optimize is off). Each image is processed only once so regenerations do not re-trigger optimization.<\/p>\n\n<p><strong>Media Library<\/strong> \u2014 Row action and bulk action to queue images for background optimization, plus a short note on the attachment screen.<\/p>\n\n<p><strong>History<\/strong> \u2014 Audit log of optimizations, renames, SEO updates (with field details), PDF compressions, and related actions. Filter by action type, date range, and filename. Configurable automatic cleanup.<\/p>\n\n<p><strong>URL Fixer<\/strong> \u2014 Scans public content (posts, pages, and custom post types) for broken image URLs after format conversions (e.g. <code>.jpg<\/code> still referenced after conversion to <code>.webp<\/code>). Renders blocks and shortcodes when needed so embedded images are detected. Finds replacements and updates the database in one click; can also remove broken references when no fix exists.<\/p>\n\n<p><strong>Cache Compatibility<\/strong> \u2014 After operations that change file URLs or content, the plugin purges LiteSpeed Cache, WP Rocket, W3 Total Cache, WP Fastest Cache, Breeze, SiteGround Optimizer, and Autoptimize when they are active.<\/p>\n\n<h4>Requirements<\/h4>\n\n<ul>\n<li>PHP 7.4 or higher (tested up to 8.3)<\/li>\n<li>WordPress 5.9 or higher (tested up to 7.1)<\/li>\n<li>PHP GD library with JPEG, PNG, GIF, and WebP support (AVIF output needs GD with <code>imageavif()<\/code> \/ <code>imagecreatefromavif()<\/code>)<\/li>\n<li>GhostScript (optional, required for best PDF compression)<\/li>\n<li>Imagick PHP extension (optional, fallback for PDF compression)<\/li>\n<\/ul>\n\n<h4>Source Code<\/h4>\n\n<p>The source code for this plugin is entirely human-readable. The file <code>admin\/js\/admin.js<\/code> is unminified, unobfuscated source code. No build tools are required. All translation strings are passed from PHP via <code>wp_localize_script()<\/code>.<\/p>\n\n<h4>Translations<\/h4>\n\n<p>The plugin interface is already translated into the following languages (included in the plugin):<\/p>\n\n<ul>\n<li><strong>English<\/strong> \u2014 default<\/li>\n<li><strong>Catal\u00e0 (Catalan)<\/strong> \u2014 <code>ca<\/code><\/li>\n<li><strong>Espa\u00f1ol (Spanish)<\/strong> \u2014 <code>es_ES<\/code><\/li>\n<\/ul>\n\n<p>Bundled <code>.mo<\/code> files also translate the plugin name and description on the WordPress <strong>Plugins<\/strong> screen when your site language is Catalan or Spanish.<\/p>\n\n<p>If you would like to contribute a translation into another language, you can do so at <a href=\"https:\/\/translate.wordpress.org\/projects\/wp-plugins\/tso-image-master\/\">translate.wordpress.org<\/a>.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>tso-image-master<\/code> folder to the <code>\/wp-content\/plugins\/<\/code> directory, or install it directly from the WordPress plugin dashboard.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> screen in WordPress.<\/li>\n<li>Go to <strong>Image Master<\/strong> in the admin sidebar to start using the plugin.<\/li>\n<li>(Optional) To enable PDF compression, install GhostScript on your server. Ask your hosting provider for assistance if needed.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20the%20plugin%20modify%20original%20image%20files%3F\"><h3>Does the plugin modify original image files?<\/h3><\/dt>\n<dd><p>Only if you check the \"Replace original\" option. When replacing, the plugin saves a backup copy under <code>wp-content\/uploads\/tso-image-master\/<\/code> (mirroring your upload year\/month folders when applicable). Backup files use a <code>_tso_im_backup<\/code> name pattern. You can revert from the editor modal or delete backups to free disk space. Empty backup folders are removed automatically after deletion. Backups are never stored inside the plugin folder.<\/p><\/dd>\n<dt id=\"can%20backups%20be%20deleted%20automatically%3F\"><h3>Can backups be deleted automatically?<\/h3><\/dt>\n<dd><p>Yes. On the Overview tab you can set backup retention by maximum age (days) and\/or maximum total size (MB). A daily cron purges old or oversized TSO backups. Set both to <code>0<\/code> to disable automatic purge. You can also run <strong>Purge now<\/strong> from Overview.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20my%20images%20if%20i%20uninstall%20the%20plugin%3F\"><h3>What happens to my images if I uninstall the plugin?<\/h3><\/dt>\n<dd><p>Uninstalling the plugin removes the following data:<\/p>\n\n<ul>\n<li><strong>Database:<\/strong> plugin options, the custom history table (<code>wp_tso_im_history<\/code>), all plugin postmeta keys, and scheduled cron events.<\/li>\n<li><strong>Backup folder:<\/strong> the <code>wp-content\/uploads\/tso-image-master\/<\/code> folder and all backup copies inside it are deleted.<\/li>\n<li><strong>Original images:<\/strong> your actual image files in the uploads folder are <strong>never<\/strong> deleted. Only the plugin-created backup copies are removed.<\/li>\n<\/ul><\/dd>\n<dt id=\"which%20output%20formats%20are%20supported%3F\"><h3>Which output formats are supported?<\/h3><\/dt>\n<dd><p><strong>WebP<\/strong>, <strong>JPG<\/strong>, <strong>PNG<\/strong>, and <strong>keep original<\/strong>. <strong>AVIF<\/strong> appears when your PHP GD build supports AVIF read\/write. If AVIF or WebP is requested but unavailable, the plugin falls back to a supported format.<\/p><\/dd>\n<dt id=\"why%20is%20avif%20disabled%20or%20missing%3F\"><h3>Why is AVIF disabled or missing?<\/h3><\/dt>\n<dd><p>AVIF needs PHP GD compiled with AVIF support (<code>imageavif<\/code> \/ <code>imagecreatefromavif<\/code>). Many hosts still lack this. Check <strong>Overview \u2192 server engines<\/strong> (GD AVIF). WebP remains the recommended default for broad browser and host support.<\/p><\/dd>\n<dt id=\"how%20does%20bulk%20%2F%20media%20library%20optimize%20work%3F\"><h3>How does bulk \/ Media Library optimize work?<\/h3><\/dt>\n<dd><p>Selected images are added to a background queue processed by WP-Cron (about 5 images per batch). Progress appears on the Overview tab; you can cancel pending jobs. You can also queue from the Media Library row action or bulk actions.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20work%20with%20caching%20plugins%3F\"><h3>Does the plugin work with caching plugins?<\/h3><\/dt>\n<dd><p>Yes. After operations that modify content or file URLs, the plugin calls purge helpers for LiteSpeed Cache, WP Rocket, W3 Total Cache, WP Fastest Cache, Breeze, SiteGround Optimizer, and Autoptimize when they are installed and active.<\/p><\/dd>\n<dt id=\"can%20i%20use%20the%20plugin%20on%20a%20multisite%20installation%3F\"><h3>Can I use the plugin on a multisite installation?<\/h3><\/dt>\n<dd><p>The plugin has not been explicitly tested on multisite. It is designed for standard single-site WordPress installations.<\/p><\/dd>\n<dt id=\"the%20pdf%20compressor%20does%20not%20work.%20what%20should%20i%20do%3F\"><h3>The PDF compressor does not work. What should I do?<\/h3><\/dt>\n<dd><p>PDF compression requires GhostScript or the Imagick PHP extension on your server. The Overview and PDF areas indicate which engines are available. Contact your hosting provider to install GhostScript for best results.<\/p><\/dd>\n<dt id=\"i%20optimized%20an%20image%20and%20the%20new%20format%20weighs%20more%20than%20the%20original.%20what%20happened%3F\"><h3>I optimized an image and the new format weighs more than the original. What happened?<\/h3><\/dt>\n<dd><p>This can happen with images that are already well-optimized, very small images, or images with a lot of transparency or detail. The plugin will show a warning in this case. You can revert to the original using the backup. On Auto-Optimizer you can optionally skip WebP\/AVIF files already under a size threshold (KB).<\/p><\/dd>\n<dt id=\"how%20does%20fill%20missing%20alt%20text%20work%3F\"><h3>How does fill missing alt text work?<\/h3><\/dt>\n<dd><p>On Overview you can bulk-fill useful alt text for selected images (from title or humanized filename). On Auto-Optimizer you can enable fill-on-upload for new images that lack alt text. Fill-on-upload can run even when auto-optimize is disabled. Generic or weak alt values may be replaced when a better suggestion exists; humanized filename fills are treated as useful.<\/p><\/dd>\n<dt id=\"what%20does%20the%20duplicate%20scanner%20do%3F\"><h3>What does the duplicate scanner do?<\/h3><\/dt>\n<dd><p>On Overview, <strong>Scan duplicates<\/strong> groups Media Library files with the same MD5 hash so you can spot wasted space. It does not delete files automatically; review groups before removing anything.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<p>For the full release history, see CHANGELOG.txt in the plugin folder.<\/p>\n\n<h4>1.9.5<\/h4>\n\n<ul>\n<li>Added: Background job queue for bulk optimize (WP-Cron, 5 images per batch).<\/li>\n<li>Added: TSO backup retention (max age + max total size) with daily purge cron.<\/li>\n<li>Added: AVIF and PNG output formats (AVIF when GD supports <code>imageavif()<\/code>).<\/li>\n<li>Added: Duplicate image scanner (MD5 groups) on Overview tab.<\/li>\n<li>Added: Auto-upload options \u2014 skip small WebP\/AVIF files (WP 7.1) and fill missing alt on upload.<\/li>\n<li>Added: Media Library row action, bulk queue action, and attachment box note.<\/li>\n<li>Added: Per-page selector (21\/35\/49\/70\/105) on Optimize and SEO grids.<\/li>\n<li>Improved: History shows SEO field details (title\/alt\/caption\/description); History tab moved to end of nav.<\/li>\n<li>Improved: Orphan detection scans FSE templates\/parts\/patterns, term meta, and menu items.<\/li>\n<li>Improved: Cache purge also clears Breeze, SiteGround Optimizer, and Autoptimize when present.<\/li>\n<li>Fixed: Auto settings save persists fill-alt-on-upload and skip-small-file options.<\/li>\n<li>Fixed: Media Library bulk optimize hooks, image-only filtering, and upload-screen notice.<\/li>\n<li>Fixed: Queue status excludes cancelled jobs; skips duplicate pending attachment IDs.<\/li>\n<li>Fixed: AVIF load\/save fallback, backup delete verification, and deep-link opens Optimize tab.<\/li>\n<li>Improved: Dashboard alt filter and duplicate scan use fast reference checks (avoids timeouts).<\/li>\n<li>Improved: Queue polling on dashboard load; backup directory scan handles permission errors.<\/li>\n<li>Fixed: Queue lock + per-job status writes (no lost enqueue, no double-process, stuck reclaim).<\/li>\n<li>Fixed: Backup retention purge clears related attachment meta; purge-now no-op when retention is off.<\/li>\n<li>Fixed: AVIF thumbnail cleanup and truecolor encode; orphan-meta repair finds <code>.avif<\/code>.<\/li>\n<li>Fixed: Fill-alt-on-upload works without auto-optimize; weak-alt no longer fights humanized fills.<\/li>\n<li>Fixed: Uninstall removes all backup meta keys and queue lock option.<\/li>\n<li>Fixed: History no longer shows attachment title as SEO title on alt-only updates.<\/li>\n<li>Fixed: PNG compression level clamped to 0\u20139; invalid output formats normalized.<\/li>\n<\/ul>\n\n<h4>1.9.3<\/h4>\n\n<ul>\n<li>Added: Overview dashboard tab with site health metrics (images, missing alt, backups, space saved, engines).<\/li>\n<li>Added: Missing\/generic alt audit with bulk fill from suggested title or filename.<\/li>\n<\/ul>\n\n<h4>1.9.2<\/h4>\n\n<ul>\n<li>Improved: WordPress 7.1 compatibility (readme and tested declaration).<\/li>\n<li>Docs: older changelog entries moved to CHANGELOG.txt.<\/li>\n<\/ul>\n\n<h4>1.9.1<\/h4>\n\n<ul>\n<li>Improved: empty folders under <code>uploads\/tso-image-master\/<\/code> are removed automatically after a backup is deleted (manual delete, revert, attachment delete, rogue scanner).<\/li>\n<li>Fixed: orphan empty backup directories when backup creation failed or the file was already gone from disk.<\/li>\n<li>Fixed: delete-backup and attachment delete now validate backup paths before removal.<\/li>\n<\/ul>\n\n<h4>1.9.0<\/h4>\n\n<ul>\n<li>Added: URL Fixer \u2014 manually remove broken image references from content when no automatic fix is available (img tags, Gutenberg blocks, widgets).<\/li>\n<li>Improved: history auto-cleanup \u2014 separate retention days and check frequency (daily\/weekly\/monthly); save feedback fixed.<\/li>\n<li>Improved: clearer revert error when backup no longer matches after a file rename.<\/li>\n<li>Fixed: image\/PDF search matches filename prefix only (e.g. \"ar\" finds \"arbre\", not \"mar\").<\/li>\n<li>Added: PDF preview modal in the PDFs tab (iframe + open in new tab fallback).<\/li>\n<li>Improved: Rogue Scanner UI renamed to \u201cextra upload files\u201d; TSO backups shown as informational (not \u201cproblematic\u201d).<\/li>\n<li>Fixed: image rename failed with fatal error (private URL replace method now callable from Image Manager).<\/li>\n<li>Fixed: history filename search uses prefix match (consistent with image\/PDF search).<\/li>\n<li>Fixed: history retention accepts 1\u20133650 days (0 = disabled).<\/li>\n<li>Added: index.php in plugin subdirectories; upgrade hook reschedules history cron on version bump.<\/li>\n<\/ul>","raw_excerpt":"Complete image optimization suite: WebP\/AVIF\/JPG\/PNG, PDFs, orphans, SEO, queue, and URL repair.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/gl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/297240","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/gl.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/gl.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=297240"}],"author":[{"embeddable":true,"href":"https:\/\/gl.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/deadko"}],"wp:attachment":[{"href":"https:\/\/gl.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=297240"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/gl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=297240"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/gl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=297240"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/gl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=297240"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/gl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=297240"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/gl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=297240"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}