{"id":356907,"date":"2026-09-07T16:26:18","date_gmt":"2026-09-07T16:26:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/smart-media-offloader\/"},"modified":"2026-09-20T09:22:55","modified_gmt":"2026-09-20T09:22:55","slug":"omnioffloader","status":"publish","type":"plugin","link":"https:\/\/mk.wordpress.org\/plugins\/omnioffloader\/","author":20983055,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.1.1","stable_tag":"0.1.1","tested":"7.1.1","requires":"6.6","requires_php":"8.1","requires_plugins":null,"header_name":"OmniOffloader \u2014 Multi-Cloud Media Offload & CDN","header_author":"Huzaifa Al Mesbah","header_description":"Offload WordPress media to any cloud storage (AWS S3, Cloudflare R2, DigitalOcean Spaces), deliver via CDN, and backup files to Google Drive with instant Bring Back restoration.","assets_banners_color":"557cc6","last_updated":"2026-09-20 09:22:55","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/omnioffloader\/","header_author_uri":"https:\/\/profiles.wordpress.org\/huzaifaalmesbah\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":124,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.1.0":{"tag":"0.1.0","author":"huzaifaalmesbah","date":"2026-09-07 17:17:02","revision":3685318},"0.1.1":{"tag":"0.1.1","author":"huzaifaalmesbah","date":"2026-09-20 09:22:55","revision":3704072}},"upgrade_notice":{"0.1.1":"<p>Adds presets for Amazon S3, DigitalOcean Spaces, Backblaze B2, and Wasabi; real-time Media Library live status badges, meta box, and bulk actions; multipart uploads for large files; and major background queue stability and performance improvements. Recommended for all users.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3685275,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3685275,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3685275,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3685275,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{"blueprint.json":{"filename":"blueprint.json","revision":3704072,"resolution":false,"location":"assets","locale":"","contents":"{\"$schema\":\"https:\\\/\\\/playground.wordpress.net\\\/blueprint-schema.json\",\"landingPage\":\"\\\/wp-admin\\\/admin.php?page=omnioffloader\",\"plugins\":[\"omnioffloader\"],\"login\":true,\"features\":{\"networking\":true},\"preferredVersions\":{\"php\":\"8.1\",\"wp\":\"latest\"},\"steps\":[{\"step\":\"setSiteOptions\",\"options\":{\"blogname\":\"Testing OmniOffloader\"}},{\"step\":\"installPlugin\",\"pluginData\":{\"resource\":\"wordpress.org\\\/plugins\",\"slug\":\"omnioffloader\"},\"options\":{\"activate\":true}}]}"}},"all_blocks":[],"tagged_versions":["0.1.0","0.1.1"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[3863,10725,233,46891,217],"plugin_category":[50,59],"plugin_contributors":[221881],"plugin_business_model":[],"class_list":["post-356907","plugin","type-plugin","status-publish","hentry","plugin_tags-cdn","plugin_tags-cloud-storage","plugin_tags-media-library","plugin_tags-offload","plugin_tags-s3","plugin_category-media","plugin_category-utilities-and-tools","plugin_contributors-huzaifaalmesbah","plugin_committers-huzaifaalmesbah"],"banners":{"banner":"https:\/\/ps.w.org\/omnioffloader\/assets\/banner-772x250.png?rev=3685275","banner_2x":"https:\/\/ps.w.org\/omnioffloader\/assets\/banner-1544x500.png?rev=3685275","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/omnioffloader\/assets\/icon-128x128.png?rev=3685275","icon_2x":"https:\/\/ps.w.org\/omnioffloader\/assets\/icon-256x256.png?rev=3685275","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Your media library is probably the biggest thing on your server. OmniOffloader moves it to cloud object storage, serves it from your own domain or CDN, and frees the disk space it was using \u2014 without changing a single URL in your content.<\/p>\n\n<p>Every upload is copied to the cloud automatically: the original, every generated thumbnail, scaled versions, and modern WebP\/AVIF sources. Image URLs and <code>srcset<\/code> attributes are rewritten on the fly, so your posts, pages and page builders keep working exactly as before.<\/p>\n\n<p>And because offloading should never be a one-way door, <strong>Bring Back<\/strong> downloads everything from the cloud to your server again \u2014 one file or the whole library \u2014 and hands your URLs back to local paths.<\/p>\n\n<h4>Supported cloud storage providers<\/h4>\n\n<ul>\n<li><strong>Amazon S3<\/strong><\/li>\n<li><strong>Cloudflare R2<\/strong><\/li>\n<li><strong>DigitalOcean Spaces<\/strong><\/li>\n<li><strong>Backblaze B2<\/strong><\/li>\n<li><strong>Wasabi<\/strong><\/li>\n<li><strong>Any S3-compatible storage<\/strong> \u2014 MinIO, Storj, Linode, Scaleway and others, via the generic option where you supply your own endpoint and region<\/li>\n<\/ul>\n\n<h4>Key features<\/h4>\n\n<ul>\n<li><strong>Automatic media offloading<\/strong> \u2014 new uploads go to the cloud on upload, including thumbnails, <code>-scaled<\/code> originals and WebP\/AVIF sources.<\/li>\n<li><strong>Content URL rewriting<\/strong> \u2014 rewrites images, videos, audio, and Gutenberg media blocks to cloud storage on the fly without altering post database content.<\/li>\n<li><strong>Serve from your CDN<\/strong> \u2014 media is delivered from your custom domain or CDN edge, not your origin server.<\/li>\n<li><strong>Three retention policies<\/strong> \u2014 keep every local copy, delete only generated thumbnails (smart cleanup), or move everything to the cloud and reclaim the full disk space.<\/li>\n<li><strong>Bring Back restore<\/strong> \u2014 pull media back from the cloud to your server, per file or in bulk, with a disk-space preflight so you know what it needs before it starts.<\/li>\n<li><strong>Bulk offload with live progress<\/strong> \u2014 background processing with a real-time activity log, cancel at any time, resumes safely if a request is interrupted.<\/li>\n<li><strong>Mirror deletion<\/strong> \u2014 deleting an attachment in WordPress removes its cloud objects too (optional, off by default).<\/li>\n<li><strong>Media library integration<\/strong> \u2014 real-time status column icon, dedicated meta box on the edit screen, grid view badges, bulk actions, and dynamic row actions.<\/li>\n<li><strong>WP-CLI commands<\/strong> \u2014 automate everything from the terminal or a scheduled job.<\/li>\n<li><strong>Credentials in wp-config<\/strong> \u2014 define keys as PHP constants instead of storing them in the database, and the UI locks those fields.<\/li>\n<\/ul>\n\n<h4>Works on any host, at any library size<\/h4>\n\n<p>Bulk jobs are built for a small shared plan as much as a dedicated server. Work is processed in the background, large files are uploaded in parts, transfers that a host cuts short are reported and skipped instead of retried forever, and a misconfigured connection stops the run early with an explanation rather than grinding through your whole library.<\/p>\n\n<h4>Why offload media to cloud storage?<\/h4>\n\n<ul>\n<li><strong>Reclaim disk space<\/strong> \u2014 media is usually the bulk of a WordPress install, and object storage costs a fraction of hosting disk.<\/li>\n<li><strong>Faster media delivery<\/strong> \u2014 files served from a CDN edge load closer to your visitors.<\/li>\n<li><strong>Lighter backups and migrations<\/strong> \u2014 a site without gigabytes of uploads is far quicker to back up and move.<\/li>\n<li><strong>No lock-in<\/strong> \u2014 Bring Back reverses the whole thing whenever you want.<\/li>\n<\/ul>\n\n<h4>Licensing note<\/h4>\n\n<p>This plugin bundles the AWS SDK for PHP (Apache-2.0), which is GPL-compatible under GPLv3 \u2014 covered by this plugin's \"GPL-2.0-or-later\" license.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>omnioffloader<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install it from the WordPress Plugins screen.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> menu.<\/li>\n<li>Go to <strong>OmniOffloader<\/strong> in the admin menu and open <strong>Settings<\/strong>.<\/li>\n<li>Pick your storage provider and enter its credentials (Access Key, Secret, Endpoint, Bucket) plus your Custom Domain \/ CDN URL, then click <strong>Test Connection<\/strong>.<\/li>\n<li>Choose a retention policy. Start with <strong>Retain Local Files<\/strong> \u2014 it keeps every local copy while you confirm everything serves correctly.<\/li>\n<li>Open the <strong>Offload<\/strong> page and start a bulk offload for your existing media.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"which%20cloud%20storage%20providers%20are%20supported%3F\"><h3>Which cloud storage providers are supported?<\/h3><\/dt>\n<dd><p>Amazon S3, Cloudflare R2, DigitalOcean Spaces, Backblaze B2 and Wasabi each have a dedicated setup preset. Anything else that speaks the S3 API \u2014 MinIO, Storj, Linode Object Storage, Scaleway and so on \u2014 works through the generic S3-Compatible option, where you supply the endpoint and region yourself.<\/p><\/dd>\n<dt id=\"how%20do%20i%20configure%20cloudflare%20r2%3F\"><h3>How do I configure Cloudflare R2?<\/h3><\/dt>\n<dd><ol>\n<li>In Cloudflare Dashboard, navigate to <strong>R2 &gt; Overview<\/strong> and create a bucket.<\/li>\n<li>Under your bucket settings, connect a <strong>Custom Domain<\/strong> (e.g., <code>https:\/\/media.yourdomain.com<\/code>) or enable the <code>r2.dev<\/code> public access subdomain so your files can be served publicly.<\/li>\n<li>On the R2 overview page, click <strong>Manage R2 API Tokens<\/strong>, create a token with <strong>Object Read &amp; Write<\/strong> permissions, and copy the Access Key ID and Secret Access Key.<\/li>\n<li>Note your <strong>Account ID<\/strong> from the right sidebar of the Cloudflare dashboard.<\/li>\n<li>In OmniOffloader Settings, select <strong>Cloudflare R2<\/strong>, enter your Account ID, Access Key, Secret Key, Bucket Name, and your Custom Domain \/ CDN URL, then click <strong>Test Connection<\/strong>.<\/li>\n<\/ol><\/dd>\n<dt id=\"how%20do%20i%20configure%20backblaze%20b2%3F\"><h3>How do I configure Backblaze B2?<\/h3><\/dt>\n<dd><ol>\n<li>In Backblaze B2 Console, create a bucket. Under <strong>Bucket Settings<\/strong>, set <strong>Files in Bucket are:<\/strong> to <strong>Public<\/strong> so uploaded media can be viewed in web browsers.<\/li>\n<li>Note your S3 Endpoint URL (e.g., <code>https:\/\/s3.us-east-005.backblazeb2.com<\/code>) and Region (e.g., <code>us-east-005<\/code>) from the bucket details.<\/li>\n<li>Go to <strong>Application Keys<\/strong>, click <strong>Add a New Application Key<\/strong>, allow access to your bucket with <strong>Read and Write<\/strong> permissions, and copy the <code>keyID<\/code> and <code>applicationKey<\/code>.<\/li>\n<li>In OmniOffloader Settings, select <strong>Backblaze B2<\/strong>, enter your Application Key ID, Application Key, Endpoint URL, Region, and Bucket Name. Leave the CDN URL blank to serve directly from Backblaze, or enter your Cloudflare CDN domain if configured.<\/li>\n<\/ol><\/dd>\n<dt id=\"how%20do%20i%20configure%20amazon%20s3%3F\"><h3>How do I configure Amazon S3?<\/h3><\/dt>\n<dd><ol>\n<li>In the AWS Management Console, create an S3 bucket in your preferred region.<\/li>\n<li>In the AWS IAM Console, create an IAM user with programmatic access and attach an S3 policy granting read\/write permissions (e.g., <code>AmazonS3FullAccess<\/code> or a scoped bucket policy). Create and copy the Access Key ID and Secret Access Key.<\/li>\n<li>To serve media publicly, configure a bucket policy granting <code>s3:GetObject<\/code> permission to <code>*<\/code>, or connect an <strong>Amazon CloudFront<\/strong> distribution pointing to your S3 bucket.<\/li>\n<li>In OmniOffloader Settings, select <strong>Amazon S3<\/strong>, enter your Access Key, Secret Key, Region (e.g., <code>us-east-1<\/code>), Bucket Name, and your CloudFront\/CDN URL (or leave blank to serve directly from AWS).<\/li>\n<\/ol><\/dd>\n<dt id=\"how%20do%20i%20configure%20storj%20%28or%20other%20s3-compatible%20storage%29%3F\"><h3>How do I configure Storj (or other S3-compatible storage)?<\/h3><\/dt>\n<dd><ol>\n<li>In the Storj Satellite console, create a bucket and navigate to <strong>Access &gt; Create S3 Credentials<\/strong>. Copy your S3 Access Key and Secret Key.<\/li>\n<li>In Storj, create a public access grant for your bucket via <strong>Objects &gt; [Your Bucket] &gt; Share<\/strong>, and copy the linksharing URL (e.g., <code>https:\/\/link.storjshare.io\/s\/&lt;KEY&gt;\/&lt;BUCKET&gt;<\/code>). Replace <code>\/s\/<\/code> with <code>\/raw\/<\/code> (e.g., <code>https:\/\/link.storjshare.io\/raw\/&lt;KEY&gt;\/&lt;BUCKET&gt;<\/code>).<\/li>\n<li>In OmniOffloader Settings, select <strong>Any S3-Compatible Storage<\/strong>.<\/li>\n<li>Set S3 Endpoint URL to <code>https:\/\/gateway.storjshare.io<\/code> (or <code>https:\/\/gateway.ap1.storjshare.io<\/code>), Region to <code>us-east-1<\/code>, check <strong>Use Path-Style Endpoint<\/strong>, enter your Access Key, Secret Key, Bucket Name, and paste your <code>https:\/\/link.storjshare.io\/raw\/...<\/code> URL in <strong>Custom Domain \/ CDN URL<\/strong>.<\/li>\n<\/ol><\/dd>\n<dt id=\"will%20offloading%20break%20my%20existing%20image%20urls%3F\"><h3>Will offloading break my existing image URLs?<\/h3><\/dt>\n<dd><p>No. URLs are rewritten as pages render, so your posts, pages, featured images and responsive <code>srcset<\/code> attributes all keep working. Nothing in your post content is edited, and no database search-replace is needed.<\/p><\/dd>\n<dt id=\"can%20i%20move%20my%20media%20back%20to%20my%20server%20later%3F\"><h3>Can I move my media back to my server later?<\/h3><\/dt>\n<dd><p>Yes \u2014 that is what <strong>Bring Back<\/strong> is for. It downloads your media from the cloud to its original paths on your server, verifies every file arrived, and then stops rewriting URLs so everything serves locally again. You can restore a single attachment or the entire library.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20my%20images%20if%20i%20deactivate%20the%20plugin%3F\"><h3>What happens to my images if I deactivate the plugin?<\/h3><\/dt>\n<dd><p>That depends on the retention policy you used. With <strong>Retain Local Files<\/strong>, every file is still on your server and nothing changes. With <strong>Smart Local Cleanup<\/strong> or <strong>Full Cloud Migration<\/strong>, some or all local files were deleted after being uploaded, so URLs would point at files that are no longer on disk. <strong>Run Bring Back before deactivating<\/strong> if you used either cleanup policy.<\/p><\/dd>\n<dt id=\"do%20i%20have%20to%20delete%20my%20local%20files%3F\"><h3>Do I have to delete my local files?<\/h3><\/dt>\n<dd><p>No. The default policy, <strong>Retain Local Files<\/strong>, deletes nothing \u2014 the cloud simply becomes a second copy. Choose <strong>Smart Local Cleanup<\/strong> to delete only generated thumbnails while keeping every original, or <strong>Full Cloud Migration<\/strong> to reclaim the most space. Local files are only ever removed after the upload has been verified in your bucket.<\/p><\/dd>\n<dt id=\"why%20do%20i%20need%20a%20custom%20domain%20or%20cdn%20url%3F\"><h3>Why do I need a custom domain or CDN URL?<\/h3><\/dt>\n<dd><p>Most storage buckets do not serve files publicly over HTTP by default, and Cloudflare R2 has no public URL at all until you connect one. Pointing a custom domain or CDN hostname at your bucket is what makes your media publicly reachable \u2014 and it is what lets the files be cached at the edge.<\/p><\/dd>\n<dt id=\"can%20i%20keep%20my%20access%20keys%20out%20of%20the%20database%3F\"><h3>Can I keep my access keys out of the database?<\/h3><\/dt>\n<dd><p>Yes. Define them as constants in <code>wp-config.php<\/code> \u2014 for example <code>OMNIOFFLOADER_CLOUDFLARE_R2_KEY<\/code> and <code>OMNIOFFLOADER_CLOUDFLARE_R2_SECRET<\/code>. The plugin prefers constants over stored values, and the settings screen marks those fields as locked. Secrets are never sent back to the browser in either case.<\/p><\/dd>\n<dt id=\"how%20long%20does%20a%20bulk%20offload%20take%2C%20and%20can%20i%20close%20the%20browser%20tab%3F\"><h3>How long does a bulk offload take, and can I close the browser tab?<\/h3><\/dt>\n<dd><p>Files are uploaded one at a time, so budget roughly one to four seconds per attachment depending on file size and your server's upload speed. Jobs run in the background and keep going after you close the tab. On hosts that block internal loopback requests, the admin screen drives the job instead \u2014 there, leave the Offload page open until it finishes.<\/p><\/dd>\n<dt id=\"can%20i%20run%20a%20bulk%20offload%20from%20wp-cli%3F\"><h3>Can I run a bulk offload from WP-CLI?<\/h3><\/dt>\n<dd><p>Yes:<\/p>\n\n<pre><code>wp omnioffloader offload --all\nwp omnioffloader offload --all --limit=500\nwp omnioffloader restore --all\nwp omnioffloader status\n<\/code><\/pre>\n\n<p>Every write command supports <code>--dry-run<\/code>, and destructive options ask for confirmation unless you pass <code>--yes<\/code>. The command refuses to run while a bulk job started from the admin screen is active, so the two can never touch the same files at once.<\/p><\/dd>\n<dt id=\"what%20about%20very%20large%20videos%20or%20files%3F\"><h3>What about very large videos or files?<\/h3><\/dt>\n<dd><p>Files above 64 MB are uploaded in parts, so a dropped connection costs one chunk rather than the whole transfer, and files larger than 5 GB are supported. If a transfer is still cut short by your host's time limit, that attachment is reported with an explanation and the job continues instead of getting stuck on it.<\/p><\/dd>\n<dt id=\"does%20this%20plugin%20work%20on%20multisite%3F\"><h3>Does this plugin work on multisite?<\/h3><\/dt>\n<dd><p>The plugin activates and runs per site. It has not been through a dedicated multisite test pass yet, so treat multisite as unverified for now.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.1.1<\/h4>\n\n<p><strong>New Features &amp; Enhancements<\/strong><\/p>\n\n<ul>\n<li>Multi-provider expansion: added dedicated provider presets for Amazon S3, DigitalOcean Spaces, Backblaze B2, and Wasabi, plus a generic S3-Compatible option for MinIO, Cloudflare R2, and custom endpoints.<\/li>\n<li>Dedicated OmniOffloader Meta Box on edit attachment screen (<code>post.php<\/code>) with cloud storage status, provider, bucket, offloaded date, CDN status, and one-click actions.<\/li>\n<li>Media Library live status integration: added minimal status icon column (cloud, spinner, warning, dash) in list view and live badges in grid view modals.<\/li>\n<li>Media Library bulk actions: added \"Offload to Cloud\" and \"Bring Back to Server\" to bulk action dropdowns with instant real-time UI updates.<\/li>\n<li>Dynamic row actions: attachment row actions beneath titles now dynamically reflect live states (\"Offloading...\", \"Restoring...\", \"Queued...\", \"Bring Back\", \"Offload now\", \"Retry Offload\").<\/li>\n<li>Non-blocking uploads: introduced <code>AsyncUploadProcessor<\/code> to offload new uploads in the background without delaying server responses.<\/li>\n<li>Content URL rewriting expansion: rewrites media URLs inside Gutenberg blocks (Video, Audio, File, Media &amp; Text, Cover), Classic Editor HTML media tags, and WordPress audio\/video shortcodes.<\/li>\n<li>Added multipart uploads for files above 64 MB, supporting large transfers beyond 5 GB without memory exhaustion.<\/li>\n<li>Added <code>--limit=&lt;number&gt;<\/code> to <code>wp omnioffloader offload<\/code> for running bulk jobs in manageable chunks.<\/li>\n<\/ul>\n\n<p><strong>Reliability &amp; Fixes<\/strong><\/p>\n\n<ul>\n<li>Hardened bulk queue worker (<code>AbstractBulkProcessor<\/code>): claims items before processing so a worker killed by host time limits drops the item instead of getting stuck in an infinite retry loop.<\/li>\n<li>Extended queue process lock from 60 seconds to 10 minutes (renewed after each item) to prevent duplicate workers from running on small hosting pools.<\/li>\n<li>Consecutive failure circuit breaker: bulk jobs halt gracefully with clear error logging after 10 consecutive failures instead of grinding through the whole library.<\/li>\n<li>Fixed Bring Back restore logic: verified files are completely restored on disk before updating metadata or pruning cloud copies.<\/li>\n<li>Prevented stale activity logs from flashing previous runs when starting a new Offload or Bring Back operation.<\/li>\n<li>Fixed Cancel button not taking effect on hosts with blocked internal loopback requests.<\/li>\n<li>Fixed stranded queue rows remaining in the database upon deactivation\/uninstall.<\/li>\n<li>Added connection timeouts to all storage requests to prevent hanging PHP-FPM processes.<\/li>\n<\/ul>\n\n<p><strong>Performance &amp; Optimizations<\/strong><\/p>\n\n<ul>\n<li>Optimized status polling with delta responses, slashing payload size by ~94% and avoiding unnecessary DOM re-renders.<\/li>\n<li>Integrated Page Visibility API (<code>document.hidden<\/code>) to pause polling and conserve resources when browser tabs are inactive.<\/li>\n<li>Throttled database writes on thumbnail generation during bulk transfers.<\/li>\n<li>Cached media library statistics once per bulk run instead of querying on every single item.<\/li>\n<li>Fixed Bring Back disk preflight query to run efficiently on large media libraries.<\/li>\n<li>Bulk jobs now skip trashed attachments and entries with no file on disk.<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Initial release of OmniOffloader.<\/li>\n<li>Multi-cloud offload engine with Cloudflare R2 provider support.<\/li>\n<li>Modern React-based settings and control dashboard.<\/li>\n<li>Background bulk offload and bulk restore with real-time progress indicators.<\/li>\n<li>URL rewriting for post content, attachment URLs, and responsive srcset attributes.<\/li>\n<li>Media library filters and individual attachment action controls.<\/li>\n<li>Complete WP-CLI commands: <code>wp omnioffloader offload<\/code>, <code>wp omnioffloader restore<\/code>, and <code>wp omnioffloader status<\/code>.<\/li>\n<\/ul>","raw_excerpt":"Offload media to Amazon S3, Cloudflare R2, Wasabi or any S3 storage, serve it from a CDN, and restore it anytime with Bring Back.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/mk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/356907","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/mk.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/mk.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=356907"}],"author":[{"embeddable":true,"href":"https:\/\/mk.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/huzaifaalmesbah"}],"wp:attachment":[{"href":"https:\/\/mk.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=356907"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/mk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=356907"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/mk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=356907"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/mk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=356907"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/mk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=356907"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/mk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=356907"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}