{"id":370039,"date":"2026-09-23T13:11:18","date_gmt":"2026-09-23T13:11:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/flying-pigs-uploader\/"},"modified":"2026-09-24T09:11:03","modified_gmt":"2026-09-24T09:11:03","slug":"flying-pigs-uploader","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/flying-pigs-uploader\/","author":16759314,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.11.101","stable_tag":"0.11.101","tested":"7.1.2","requires":"6.5","requires_php":"7.4","requires_plugins":null,"header_name":"Flying Pigs Uploader","header_author":"48hmorris","header_description":"Bulk media uploads that fly. Every image job runs in your browser with WASM libvips \u2014 sub-sizes, EXIF, WebP\/AVIF companions \u2014 and lands on the server in packed ~25MB batches.","assets_banners_color":"e9e1e5","last_updated":"2026-09-24 09:11:03","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/flying-pigs.wpspeedmeup.com\/corn\/","header_plugin_uri":"https:\/\/flying-pigs.wpspeedmeup.com","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":52,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","faq","changelog"],"tags":{"0.11.101":{"tag":"0.11.101","author":"48hmorris","date":"2026-09-24 09:11:03","revision":3710929}},"upgrade_notice":{"0.11.91":"<p>First release in the WordPress.org plugin directory.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3709383,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3709383,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3709383,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3709383,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.11.101"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3709383,"resolution":"1","location":"assets","locale":"","width":1280,"height":690}},"screenshots":{"1":"The uploader: drop zone, run bar, and the Media, Sizes, Delivery and Advanced panels."}},"plugin_section":[],"plugin_tags":[194661,21756,233,259,15376],"plugin_category":[50],"plugin_contributors":[166418],"plugin_business_model":[],"class_list":["post-370039","plugin","type-plugin","status-publish","hentry","plugin_tags-avif","plugin_tags-bulk-upload","plugin_tags-media-library","plugin_tags-upload","plugin_tags-webp","plugin_category-media","plugin_contributors-48hmorris","plugin_committers-48hmorris"],"banners":{"banner":"https:\/\/ps.w.org\/flying-pigs-uploader\/assets\/banner-772x250.png?rev=3709383","banner_2x":"https:\/\/ps.w.org\/flying-pigs-uploader\/assets\/banner-1544x500.png?rev=3709383","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/flying-pigs-uploader\/assets\/icon-128x128.png?rev=3709383","icon_2x":"https:\/\/ps.w.org\/flying-pigs-uploader\/assets\/icon-256x256.png?rev=3709383","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/flying-pigs-uploader\/assets\/screenshot-1.png?rev=3709383","caption":"The uploader: drop zone, run bar, and the Media, Sizes, Delivery and Advanced panels."}],"raw_content":"<!--section=description-->\n<p>On the Media \u2192 Add New page WordPress uploads one file per request and makes every thumbnail on the server: two hundred photos means two hundred requests, two hundred rounds of server image work, and a host's rate limiter slowing the lot. WordPress 7.1 moves that work into the browser for block editor uploads, in Chrome and Edge only, and still sends every thumbnail as its own request. Flying Pigs does the image work in your browser for bulk uploads on the Media page, in every modern browser, and ships the results in a few large requests. The same 221 photos that take the Media page twelve minutes on a managed host, and twenty on a large shared host, take Flying Pigs Free two minutes and nineteen, and less again with Pro's turbo boost.<\/p>\n\n<p>Found under Media \u2192 Flying Pigs Uploader.<\/p>\n\n<h4>What is free and what is Pro<\/h4>\n\n<p>Everything an upload needs is free: the browser image engine, every size, WebP and AVIF, optimizing, folders, delivery, retries. Pro adds the power tools for big libraries and product catalogs.<\/p>\n\n<ul>\n<li><strong>Sizes made in the browser, no server work.<\/strong> Free: yes. Pro: yes.<\/li>\n<li><strong>Optimize original (auto rotate, remove metadata).<\/strong> Free: yes. Pro: yes.<\/li>\n<li><strong>Convert PNG to JPG.<\/strong> Free: yes. Pro: yes.<\/li>\n<li><strong>WebP and AVIF companions, quality and effort per format.<\/strong> Free: yes. Pro: yes.<\/li>\n<li><strong>Choose which sizes to make, and which get a companion.<\/strong> Free: yes. Pro: yes.<\/li>\n<li><strong>WebP\/AVIF delivery set up for you.<\/strong> Free: yes. Pro: yes.<\/li>\n<li><strong>AI Data Mining statement in every file.<\/strong> Free: yes. Pro: yes.<\/li>\n<li><strong>Media folders (FileBird and friends).<\/strong> Free: yes. Pro: yes.<\/li>\n<li><strong>Unlimited file size, packed batches.<\/strong> Free: yes. Pro: yes.<\/li>\n<li><strong>Retry, run recovery, throttling.<\/strong> Free: yes. Pro: yes.<\/li>\n<li><strong>Resize image before upload.<\/strong> Free: no. Pro: yes, 2560\u00d72560 by default.<\/li>\n<li><strong>WebP only (drop the JPEG\/PNG base).<\/strong> Free: no. Pro: yes, on by default.<\/li>\n<li><strong>Watermark, with a text and logo maker.<\/strong> Free: no. Pro: yes.<\/li>\n<li><strong>Turbo boost, up to six upload lanes.<\/strong> Free: one lane. Pro: yes.<\/li>\n<li><strong>Link check: your line and this host timed, lanes and first batch sized from it.<\/strong> Free: no. Pro: yes.<\/li>\n<li><strong>Overwrite in place, references repaired.<\/strong> Free: no. Pro: yes.<\/li>\n<li><strong>File date: the file's own date, or one you pick.<\/strong> Free: this month. Pro: yes.<\/li>\n<li><strong>Set post date apart from the file date.<\/strong> Free: no. Pro: yes.<\/li>\n<li><strong>Photos onto WooCommerce products by the SKU in their names, as they land.<\/strong> Free: no. Pro: yes.<\/li>\n<li><strong>Updates and support.<\/strong> Free: WordPress.org. Pro: the Pro update channel and the help desk.<\/li>\n<\/ul>\n\n<p>Free shows every Pro control in place, disabled and badged PRO, so you can see where it would sit. The Free plugin carries none of the Pro code.<\/p>\n\n<h4>Flying Pigs Free and the Media page, side by side<\/h4>\n\n<ul>\n<li><p><strong>Speed, 221 photos (209 MB), same files, same day.<\/strong> WebP-only, HTTP\/2, lean installs with no other plugin hooking uploads. The image work is in your browser, so the host's per-file resizing never enters the race.<\/p><\/li>\n<li><p><strong>A managed host.<\/strong> WP Media page: 12:20. Free, one lane: 2:19. Pro turbo, two lanes: 2:12.<\/p><\/li>\n<li><strong>A budget LiteSpeed host.<\/strong> WP Media page: 15:47. Free, one lane: 4:23. Pro turbo, two lanes: 2:55.<\/li>\n<li><p><strong>A large shared host, its optimizer off.<\/strong> WP Media page: 20:05. Free, one lane: 11:08. Pro turbo, two lanes: 6:09.<\/p><\/li>\n<li><p><strong>Ready the moment it lands.<\/strong> WordPress: uploads the original, then resizes on the server; optimizers finish later still, on a background job or the first visitor. Flying Pigs Free: every file lands already final, with nothing left to wait on.<\/p><\/li>\n<li><strong>Optimized originals.<\/strong> WordPress: the original is stored as it came off the camera. Flying Pigs Free: the original is optimized in the browser at its own dimensions, about 60% smaller, auto rotated, metadata removed, written in sRGB with no embedded profile; PNG to JPG is a tick away.<\/li>\n<li><strong>WebP and AVIF.<\/strong> WordPress: a separate plugin, server-side, after the upload. Flying Pigs Free: built in, made in the browser, quality and effort per format, a companion that came out larger discarded, and you choose which sizes get one. The Delivery panel tests your server and sets delivery up for you, or hands off to the delivery plugin you already run.<\/li>\n<li><strong>AI Data Mining.<\/strong> WordPress: nothing. Flying Pigs Free: the IPTC rights statement (\"No AI training, allow search indexing\" by default) written into every file the browser makes.<\/li>\n<li><strong>Media folders on upload.<\/strong> WordPress: whatever your folder plugin bolts on. Flying Pigs Free: pick the folder in the run options; FileBird, Real Media Library, CatFolders, Mediamatic, Folders by Premio, Wicked Folders, HappyFiles and any hierarchical media taxonomy, with subfolders shown as a tree.<\/li>\n<li><strong>File size.<\/strong> WordPress: capped by the host's upload limit. Flying Pigs Free: unlimited, chunked under the limit.<\/li>\n<li><strong>A failed upload.<\/strong> WordPress: failed. Flying Pigs Free: retried, and a run survives a dropped connection or an expired login.<\/li>\n<li><strong>Uploads that adapt to your line and your host.<\/strong> WordPress: no. Flying Pigs Free: batches sized to your line as the run goes.<\/li>\n<li><strong>Optimizer plugins.<\/strong> WordPress: every upload is handed to Smush, EWWW, ShortPixel or the host's optimizer to be done again on the server. Flying Pigs Free: its uploads are already optimized, so they are hidden from those plugins' on-upload hooks and land once.<\/li>\n<li><strong>Cost, limits, accounts.<\/strong> WordPress: free. Flying Pigs Free: free, no quota, no account, nothing leaves your site.<\/li>\n<\/ul>\n\n<h4>What Pro adds<\/h4>\n\n<ul>\n<li><strong>Resize image.<\/strong> Free optimizes the original at its own dimensions. Pro fits it within a width and height before upload (2560\u00d72560 by default, WordPress's own big-image threshold, never upscaled), so a 6,000-pixel camera file never reaches the server.<\/li>\n<li><strong>WebP only.<\/strong> Free keeps the JPEG or PNG and adds the WebP beside it. Pro, on by default, writes the base and every size as WebP and keeps no JPEG or PNG alongside (AVIF companions can still sit beside them). Half the files, so it saves disk and, more to the point, inodes, and browsers get the WebP directly with no delivery layer. Turn it off to keep the originals. On a slow host the smaller uploads win outright (a throttled shared host, 221 photos: WebP-only 2:34 vs JPEG 3:37).<\/li>\n<li><strong>Watermark.<\/strong> Bring your own, or build one on the fly in the what-you-see-is-what-you-get maker with your text and logo. Applied in the browser before upload, on every size, when Optimize original is on.<\/li>\n<li><strong>Turbo boost upload speed.<\/strong> Free: one upload lane. Pro: up to six parallel lanes. On a host that throttles each connection this is the whole game \u2014 one that holds every HTTP\/2 stream to about 0.25 MB\/s moves roughly six times as much on six lanes; on a fast uncapped link the gain is smaller.<\/li>\n<li><strong>Link check.<\/strong> Times your line against Cloudflare's nearest edge and one stream to this host, says which of the two sets the pace, and sizes the first batch and the lane count from it. Pro only, and only when you press the button (an automatic mode is a separate switch, off by default). Free makes no call outside your site.<\/li>\n<li><strong>Overwrite in place.<\/strong> Re-upload a file with the same name and it replaces the existing attachment at the same URLs, then the builder, gallery and cache references to the old size files are repaired: post content, post meta and options, Kadence and Spectra galleries, stale srcset lists, and the Elementor, Divi and Smart Slider 3 caches.<\/li>\n<li><strong>File date and post date.<\/strong> Free files every upload under this month's folder and lists it under today. Pro's File date picker lands the file in the month of its own date, or a date you choose; Set post date is a separate choice \u2014 now, the file's date, or another date \u2014 so a product line can be filed under its own directory on disk and still show as today's import in the library.<\/li>\n<li><strong>Updates and support.<\/strong> Pro updates arrive through WordPress's own Plugins screen from the Flying Pigs channel, and the help desk is a click away in the page.<\/li>\n<\/ul>\n\n<p><strong>What it does<\/strong><\/p>\n\n<ul>\n<li>Every registered image size is made in your browser, so the server does no image work at all. Every file is written in sRGB with no embedded profile: wide-gamut sources (Display P3, Adobe RGB) are converted first, so colours come out right.<\/li>\n<li>The original is optimized in the browser by default (about 60% smaller, auto rotated, metadata removed; turn it off to upload it as it is), and PNG to JPG conversion is a tick away.<\/li>\n<li>WebP and AVIF companions for the original and every size, with a quality and effort per format, and an option to discard a companion that came out larger. The Sizes panel picks which sizes are made and which get a WebP or an AVIF.<\/li>\n<li>Delivery: the companions use the standard sidecar name (photo.jpg.webp) that delivery plugins already understand; if one is active the panel says so. Otherwise \"Set up delivery for me\" tests the server and turns on a rewrite in the site .htaccess where the host honours it (WebP and AVIF, Vary: Accept) or a  wrap on the page everywhere else. Reversible any time.<\/li>\n<li>An AI Data Mining statement in every file the browser makes: the IPTC \"Data Mining\" rights statement (IPTC Photo Metadata Standard 2023.1), \"No AI training, allow search indexing\" by default.<\/li>\n<li>Packed batches: hundreds of chunks and items travel in one ~25 MB request, dozens of requests per thousand files instead of thousands, which is what keeps a host's rate limiting out of the way.<\/li>\n<li>Unlimited file size: files are chunked to fit under the host's upload limit, so a 1 GB file goes through a 2 MB limit.<\/li>\n<li>Retry on error: a failed request is re-sent, in smaller batches when the host refuses the size, and a run survives a dropped connection, a login that expires mid-run, or a lost response.<\/li>\n<li>Media folders on upload for FileBird, Real Media Library, CatFolders, Mediamatic, Folders by Premio, Wicked Folders, HappyFiles and any hierarchical media taxonomy, shown as a tree.<\/li>\n<li>A progress card that pops out into its own window, with MB\/s and files per second, and badges that list failed files and network errors as they happen.<\/li>\n<li>Throttling for shared hosts: upload rate, batch size, pause every N seconds, and a cap on image workers.<\/li>\n<\/ul>\n\n<p><strong>Free means free<\/strong><\/p>\n\n<p>There is no file limit, no monthly quota and no account. Your files go to your own site only.<\/p>\n\n<h3>Requirements<\/h3>\n\n<ul>\n<li>A browser with WebAssembly threads: Chrome, Edge, Brave, Safari 16.4 or later, and Firefox all run the engine (verified on a live site); the plugin's test suite runs in Chrome. iPad and iPhone browsers usually refuse the engine's memory and work in fallback mode (see the FAQ).<\/li>\n<li>HTTPS (or localhost). The engine needs SharedArrayBuffer, which browsers enable only in a secure, cross-origin-isolated page. Without it the page falls back to classic uploads with server-side thumbnails and says so in its header.<\/li>\n<li>No web-server configuration. The page fetches the engine's files once and starts every worker from blobs of them, so the files need no headers or MIME types of their own on Apache, LiteSpeed or nginx.<\/li>\n<li>No PHP limits to raise. Batches are capped at 25 MB, or 90% of the host's upload limit when that is lower, and sized down from there to your measured line; a file larger than a batch is sent in chunks.<\/li>\n<\/ul>\n\n<h3>External services<\/h3>\n\n<p>None. Flying Pigs Free makes no call to any outside service: the image work happens in your browser and the uploads go to this site's own REST API. Nothing is sent anywhere else, and nothing is collected. (The Pro version has a link check, a speed test against Cloudflare's speed-test endpoint that runs when its button is pressed; the free plugin carries none of that code.)<\/p>\n\n<h3>Source code<\/h3>\n\n<p>The image engine is wasm-vips, libvips compiled to WebAssembly by Kleis Auke Wolthuizen (MIT), from https:\/\/github.com\/kleisauke\/wasm-vips. The files under vendor\/wasm-vips (vips-es6.js, vips.wasm and vips-heif.wasm) are that project's published npm release 0.0.18, unmodified; vendor\/wasm-vips\/SOURCE.txt records the release, the SHA-256 of each file, and the build instructions. The two .wasm files are the engine itself: every size, WebP and AVIF file is made by them in the browser, and they are served from your own site because the plugin loads no code from anywhere else. The plugin's own worker, vendor\/wasm-vips\/fpig-vips-worker.js, and everything else in the plugin are plain source.<\/p>\n\n<p>Fonts: DSEG (SIL OFL 1.1) for the run timer and Fredoka (SIL OFL 1.1) for the wordmark, both under vendor\/ with their licenses.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20anything%20leave%20my%20site%3F\"><h3>Does anything leave my site?<\/h3><\/dt>\n<dd><p>No. Your files go from the browser to your own site, and the free plugin makes no request to any outside service; see External services. There is no account or key in the free plugin.<\/p><\/dd>\n<dt id=\"which%20browsers%20work%3F\"><h3>Which browsers work?<\/h3><\/dt>\n<dd><p>Any browser with WebAssembly threads: Chrome, Edge, Brave, Safari 16.4 or later, and Firefox. On a browser without them, and on most iPads and iPhones, the page still uploads, with WordPress making the sizes on the server as usual.<\/p><\/dd>\n<dt id=\"what%20is%20fallback%20mode%2C%20and%20what%20do%20i%20lose%20in%20it%3F\"><h3>What is fallback mode, and what do I lose in it?<\/h3><\/dt>\n<dd><p>The image work happens in a browser engine that needs a fixed 1 GB of memory per worker. Desktop browsers grant it; iPadOS and iOS (Safari and Chrome alike, the same engine underneath) often refuse it, and so does a page that is not cross-origin isolated. When you press Start, the page checks the engine first. If it cannot start, the run does not start: a notice says why, the header switches, and from then on that device works in fallback mode \u2014 the originals upload as they are and WordPress makes the sizes on the server, the way its own uploader does.<\/p>\n\n<p>What you lose in fallback is every job only the engine can do: optimizing the original (auto rotate, remove metadata, resize), PNG to JPG, the AI Data Mining statement, the WebP and AVIF effort settings, and in Pro the watermark and overwriting in place. HEIC and other formats the engine decodes but your host's PHP cannot land as they are. And the speed win: the host resizes every image again, so the run costs it CPU and takes longer. Those options disable on the page with the reason beside them, so what you see is what will run.<\/p>\n\n<p>Optimizer plugins such as Smush and EWWW tell WordPress 7.1 to turn its own browser-side processing off so that originals keep reaching them on the server. That does not put Flying Pigs in fallback: the page brings its own engine, its own isolation headers, and hides its uploads from those plugins. A site that really wants the server path can return false from the <code>fpig_client_side_possible<\/code> filter.<\/p>\n\n<p>What you keep is everything the server can honour: the upload machinery itself (packed batches, chunked large files, retries, run recovery, and Pro's turbo lanes), the Sizes panel, JPG quality, WebP and AVIF companions with their quality and discard-if-larger settings (where the host's image library writes them), media folders, file and post dates, delivery and throttling. WebP only (Pro) works too, in two steps: the JPEG or PNG uploads, the server makes its WebP, and the base is dropped before the file reaches the library.<\/p><\/dd>\n<dt id=\"do%20visitors%20actually%20get%20the%20webp%20and%20avif%20files%3F\"><h3>Do visitors actually get the WebP and AVIF files?<\/h3><\/dt>\n<dd><p>Only if something serves them, and the Delivery panel makes sure something does. If a delivery plugin is already active, the panel names it and leaves it in charge; the sidecar names Flying Pigs writes are the ones those plugins serve. If nothing is serving them, \"Set up delivery for me\" tests your server and turns on a rewrite in the site .htaccess (Apache and LiteSpeed; the panel reports whether WebP, AVIF and the Vary: Accept header came back from the test) or, where the host will not honour one, wraps your images in a  tag on the page. Both are reversible from the same panel. Pro's WebP only needs none of this: the uploads are WebP and are served as they are.<\/p><\/dd>\n<dt id=\"will%20my%20optimizer%20plugin%20compress%20the%20uploads%20again%3F\"><h3>Will my optimizer plugin compress the uploads again?<\/h3><\/dt>\n<dd><p>Not on upload. Smush, EWWW, ShortPixel, reSmush.it and the host's bundled optimizers take their turn from WordPress's upload hooks, and Flying Pigs lifts them off for its own writes, so a file optimized in the browser lands once and stays as the browser made it. A bulk or background optimizer that scans the library later can still touch the files; leave those off for the pig's uploads or exclude the folder.<\/p><\/dd>\n<dt id=\"can%20it%20tell%20ai%20crawlers%20to%20leave%20my%20photos%20alone%3F\"><h3>Can it tell AI crawlers to leave my photos alone?<\/h3><\/dt>\n<dd><p>It can say so, in the file. The Media panel's AI Data Mining option writes the IPTC \"Data Mining\" rights statement (IPTC Photo Metadata Standard 2023.1) as an XMP packet into every file the browser makes: the original when it is optimized, every size, every WebP and AVIF. Choose \"No AI training, allow search indexing\" (the default), \"No AI training, no search indexing\", \"Allow AI training\" or \"No statement\". With Remove metadata on it is the only metadata that travels (about 400 bytes); off, the original keeps its own metadata with the statement merged into its XMP packet, while sizes and companions carry the statement alone, as WordPress strips their metadata. It is a statement, not a lock: crawlers that read the standard honour it, and the rest do not. It is engine work, so fallback mode lands files without it. For a signal crawlers cannot miss, add robots.txt rules or an X-Robots-Tag header for your uploads folder as well.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20my%20folder%20plugin%3F\"><h3>Does it work with my folder plugin?<\/h3><\/dt>\n<dd><p>FileBird, Real Media Library, CatFolders, Mediamatic, Folders by Premio, Wicked Folders (once its media folders are switched on in its settings), HappyFiles, and any plugin that files media under a hierarchical taxonomy. Pick the folder in the run options, subfolders included, and every upload in the run lands in it. Media folders are virtual: they never change where the file sits on disk. That is the File date picker's job, in Pro.<\/p><\/dd>\n<dt id=\"what%20is%20in%20pro%3F\"><h3>What is in Pro?<\/h3><\/dt>\n<dd><p>Resize image before upload (2560\u00d72560 by default), WebP only (store only the WebP, with no JPEG or PNG kept), a watermark with a text and logo maker, turbo-boost multi-lane uploads with a link check that sizes them, overwriting existing files in place with builder and gallery references repaired, the File date picker (the file's own date, or one you choose, decides the uploads folder) and a separate Set post date, photos onto WooCommerce products by the SKU in their names, plus updates through WordPress's Plugins screen and the help desk. Optimizing, PNG to JPG, WebP and AVIF companions, choosing which sizes to make and which get a companion, delivery, the AI Data Mining statement and media folders are all free. See <a href=\"https:\/\/flying-pigs.wpspeedmeup.com\/\">flying-pigs.wpspeedmeup.com<\/a> for Pro.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.11.98<\/h4>\n\n<ul>\n<li>Upload complete reads like the desktop app's popup: a slate panel with the title in a pill, the entries line, then \"Optimizer Results - Average Savings\" in two rows: Base Image, Add WebP and Add AVIF, then the WebP and AVIF thumbnails, every one shown, n\/a when nothing was made. A saving is green; a negative one (a companion that came out larger, kept because discarding is off) is amber. The protocol and browser-processing readings follow in smaller type. A stopped run's card appears the moment Stop is pressed, with a line saying active uploads may take several seconds to finish, and the controls read WAIT until they have; the numbers settle then. A run the network monitor stopped is titled \"Upload Network Error\" in a red pill, with the reason and \"Please check your WordPress server and network configuration.\"<\/li>\n<li>Fix (Free): unticking a size in the Sizes panel's Base column snapped back to all sizes. Choosing which sizes to make is a Free feature, but the server-side save of that list was inside a Pro-only block, so the Free build dropped it and the save's reply put the old list back. Pro was unaffected.<\/li>\n<li>The Media panel's head reads \"WebP only\" when WebP only is on, instead of just \"WebP\".<\/li>\n<li>Fix: Advanced \u2192 Browser processing off had no effect until the page was reloaded, so flipping it and pressing Start still processed in the browser. The switch now takes effect on the next run, and the header says so at once.<\/li>\n<li>Upload complete: \"Main image\" is now \"Base Image\". In WebP only there is no base file, so Base Image reads n\/a and the saving of the WebP against the camera file shows under Add WebP.<\/li>\n<li>Pro needs an active license to upload. Without one Start is greyed with a note, the header badge reads Unlicensed, and the server refuses upload requests; the monthly trial allowance of 100 files is gone. The free plugin on WordPress.org is the trial.<\/li>\n<li>Photos to products: the Media Library's \"Uploaded to\" column names the product, and when photos land out of order the row that briefly held the product-image slot is corrected to \"gallery\".<\/li>\n<li>Photos to products (Pro, WooCommerce): a run option, \"Attach to WooCommerce products by SKU\" (shown with WooCommerce active). name each photo after the product's SKU: 10023.jpg becomes the product image of SKU 10023; 10023-1.jpg, 10023-2.jpg \u2026 fill its gallery in that order (10023.0.jpg, 10023.1.jpg \u2026 work too, the naming in WooCommerce.com's bulk product image guide); a variation's SKU sets the variation's image. On a product that already has an image, the photo named for the product image takes its place and the old image moves to the front of the gallery; the numbered photos join the gallery in order. Each row says what it attached to, and the Upload complete card counts photos, products and photos with no matching SKU. Free shows the option as a stand-in with the PRO badge when WooCommerce is active.<\/li>\n<\/ul>\n\n<h4>0.11.97<\/h4>\n\n<ul>\n<li>Browse folder: a button beside Browse opens the browser's folder chooser and stages every file under the folder you pick, subfolders included. For browsers where a dropped folder does not arrive (a Chromebook's Files app hands a page its files but not its folders) and for touch screens, where dragging a folder is awkward.<\/li>\n<\/ul>\n\n<h4>0.11.96<\/h4>\n\n<ul>\n<li>The secure-context check no longer calls str_ends_with(), so nothing in the plugin depends on a PHP 8 function (WordPress supplies that one on PHP 7.4, but the plugin should not lean on it).<\/li>\n<li>vendor\/wasm-vips\/SOURCE.txt names the bundled engine release, wasm-vips 0.0.18, with the SHA-256 of each file so the copies can be checked against the npm package.<\/li>\n<li>New artwork: the pig now flies a cargo plane.<\/li>\n<\/ul>\n\n<h4>0.11.95<\/h4>\n\n<ul>\n<li>The link check (a speed test against Cloudflare) is a Pro feature now: Free uploads on one lane, so the reading only ever sized the first batch there. Free makes no call outside your site at all; the Advanced panel shows the check in place, disabled and badged PRO.<\/li>\n<li>Non-image uploads load WordPress's admin media helpers only for audio and video, where its metadata reader needs them.<\/li>\n<\/ul>\n\n<h4>0.11.94<\/h4>\n\n<ul>\n<li>The panel's buttons are smaller and read in their own case: 29px tall with 11px sides instead of 32 and 14, and labels show as written (Start upload, Browse, Choose image\u2026) instead of all caps, so the setup controls no longer look like primary actions. A clicked button goes back to hollow once the pointer leaves it; it used to stay filled, because the fill followed focus, until something else took focus. Keyboard focus still fills it.<\/li>\n<\/ul>\n\n<h4>0.11.93<\/h4>\n\n<ul>\n<li>The engine's files (the worker script, the wasm-vips module and its two wasm binaries, 8.5 MB) are fetched once per page and every image worker starts from blobs of them. A worker spawned during a network blip used to die on its script fetch and fail the file it was for; a host that marks scripts no-store made every spawn refetch them; and the libvips threads refetched the module ten times per worker. Now nothing is fetched at spawn time, the files need no headers or MIME types on any host (Safari included; the PHP endpoint of 0.11.92 is gone), and the wasm streaming compile works everywhere because the blob carries its own type.<\/li>\n<li>A dropped request in the Network errors list says where it dropped \u2014 \"connection lost while sending the upload (12.3 of 25.0 MB sent)\" or \"connection lost while waiting for the server (upload finished in 29s)\" \u2014 instead of a bare \"network error\". The browser reports no status for these, so the phase is the useful fact: the first is the line, the second is the host.<\/li>\n<li>Both log levels default to Errors instead of Off, so a site always keeps the lines that explain a slow run \u2014 lane drops, a 503, a worker crash \u2014 without the verbose chatter. A factory reset lands there too.<\/li>\n<li>A failed engine check gets a second chance. A worker that died or never answered with no cause given (a blocked or slow first fetch of the engine scripts \u2014 seen once in Brave) used to mark the device engine-down for the life of the page, so every later Start uploaded the server way until a reload. Now the next Start probes once more, with a 20-second wait, and the page returns to browser processing if the engine comes up. A boot error with a cause (iPadOS refusing the heap) still stands.<\/li>\n<li>Server time is the upload handler alone, from entering the upload to leaving it. WordPress and the site's plugins booting for each request, seconds on a shared host, used to be counted as server time, so a run doing 0.2 s of plugin work per batch read as \"the server took 30% of batch time\" and lost its lanes. The boot now shows as its own figure (wp=) in the log, and the lane rule reads the handler time only.<\/li>\n<li>The Network errors list names the HTTP status when the server sent one: \"server answered 503 with an error page\" instead of \"bad response from server\", so a host pushing back (503, 429) is told apart from a PHP crash mid-answer.<\/li>\n<\/ul>\n\n<h4>0.11.92<\/h4>\n\n<ul>\n<li>Faster: an idle image worker used to be thrown away and rebooted after every 50 engine calls, a habit from an earlier engine build whose memory could grow. This build's heap is fixed, so the recycle only cost a boot every five or six photos \u2014 about a third of a run's engine time. Gone.<\/li>\n<li>The client log now records image-worker crashes (what killed the worker, how many answers it had given, how many workers remain and the pool cap for the rest of the run) and, at debug level, each worker start. A run that slowed because the browser killed workers under memory pressure used to explain itself only in the browser console.<\/li>\n<li>Start answers at once: the progress card appears on the click and reads \"Saving settings\", \"Checking the image engine\" and \"Clearing old sessions\" as each step runs, instead of the page sitting still for the seconds those take on a slow host. The engine is warmed when images are dropped, so Start usually finds it already up.<\/li>\n<li>Fix: Start upload disables the moment it is clicked. The steps before the status appears (saving settings, probing the engine, clearing old sessions) take a few seconds on a slow host, and a second click in that gap uploaded every file twice.<\/li>\n<li>Fix: Safari ran in fallback mode (\"Image engine could not start on this device: failed to start (no error details)\", the originals uploaded as they were and the server made the sizes) since 0.11.88 removed the header file beside the engine's scripts. WebKit, unlike Chrome and Firefox, checks the isolation header on every script a worker imports, not only on the worker's own blob. The two engine scripts now come from the plugin itself with the header on every host, Apache, LiteSpeed and nginx alike; the wasm files stay static.<\/li>\n<\/ul>\n\n<h4>0.11.91<\/h4>\n\n<ul>\n<li>First release in the WordPress.org plugin directory.<\/li>\n<\/ul>","raw_excerpt":"Bulk media uploads that fly: every size and every WebP\/AVIF companion is made in your browser, and the files land on the server in packed batches.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/370039","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=370039"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/48hmorris"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=370039"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=370039"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=370039"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=370039"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=370039"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=370039"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}