Atlas Media Offloader moves your WordPress uploads to S3-compatible object storage, rewrites the URLs so visitors are served from the bucket (or a CDN in front of it), and can pull everything back to local disk on demand.
It was written for libraries measured in gigabytes, where the interesting question is not “can it upload a file” but “what happens when the upload is interrupted”. Every transfer is resumable, every deletion is preceded by a verification, and the whole thing is safe to interrupt at any point.
srcset entries, image sizes, and the media modal are all rewritten.wp atlasmo verify re-reads every recorded object out of the bucket and compares its size; --repair re-uploads anything missing or truncated.wp atlasmo offload, wp atlasmo download, wp atlasmo verify, wp atlasmo status, wp atlasmo test.Fully translation-ready, and ships with Spanish, French and German translations of the main interface. Anything not yet translated falls back to English.
Moving a lot of media through PHP means the work will be interrupted and this plugin is designed around that rather than in spite of it:
The plugin talks to S3 directly. It implements AWS Signature V4 itself, uses the WordPress HTTP API for transport, and WP_Filesystem for file access. There is no AWS SDK, no Guzzle, no Action Scheduler, and no build step. The whole plugin is plain PHP and a little vanilla JavaScript.
This is the recommended setup. Anything defined here overrides the settings screen, is shown read-only, and never touches the database:
define( 'ATLASMO_PROVIDER', 'aws' );
define( 'ATLASMO_ACCESS_KEY', '...' );
define( 'ATLASMO_SECRET_KEY', '...' );
define( 'ATLASMO_BUCKET', 'my-bucket' );
define( 'ATLASMO_REGION', 'us-east-1' );
Optional: ATLASMO_ENDPOINT, ATLASMO_PATH_STYLE, ATLASMO_CDN_DOMAIN, ATLASMO_PRIVATE.
If you enter the secret key in the settings screen instead, it is encrypted with AES-256-GCM using your site’s security salts before being stored, and is never rendered back to the page. Rotating AUTH_KEY or SECURE_AUTH_KEY will invalidate it, and the plugin will tell you so rather than silently failing.
The plugin needs exactly five actions. Do not grant it more:
s3:PutObject, `s3:GetObject`, `s3:DeleteObject`, `s3:ListBucket`, `s3:AbortMultipartUpload`
atlasmo_extra_files — add sibling files (WebP/AVIF conversions, etc.) to an attachment’s upload set.atlasmo_skip_auto_offload — skip automatic offload for a particular attachment.atlasmo_keep_remote_on_delete — keep the objects in the bucket when an attachment is deleted.openssl extension (only needed if you store the secret key in the database rather than in wp-config.php).This plugin is a client for third-party object storage. Its entire purpose is to transfer your media to a storage provider that you choose and configure. It does not contact any service until you enter your own storage credentials, and it never sends anything to the plugin author. There is no telemetry, tracking, or analytics of any kind.
Which service is contacted depends entirely on the provider you select on the Connection screen.
Used only if you select “Amazon S3” as your provider. The plugin connects to the Amazon S3 REST API at your chosen region’s endpoint (for example, s3.eu-west-1.amazonaws.com) in order to store, read, verify and delete your media files.
What is sent, and when:
Service provided by Amazon Web Services, Inc.
Terms: https://aws.amazon.com/service-terms/
Privacy policy: https://aws.amazon.com/privacy/
Used only if you select “DigitalOcean Spaces” as your provider. The plugin connects to the Spaces API at your chosen datacenter endpoint (for example, nyc3.digitaloceanspaces.com). The data sent, and the circumstances under which it is sent, are identical to the Amazon S3 list above, using your Spaces access key and signature.
Service provided by DigitalOcean, LLC.
Terms: https://www.digitalocean.com/legal/terms-of-service-agreement
Privacy policy: https://www.digitalocean.com/legal/privacy-policy
If you select “Other S3-compatible” you supply the endpoint URL yourself, and the plugin talks only to that host. This is intended for providers such as Cloudflare R2, Wasabi, Backblaze B2, or a self-hosted MinIO server. The data sent is the same as above. Because you choose the host, you are responsible for reviewing that provider’s own terms and privacy policy.
Once media is offloaded, the URLs on your site point at your storage bucket (or at a CDN hostname, if you configure one). Visitors’ browsers therefore request those files directly from your chosen provider, and that provider will see the visitor’s IP address and user agent, as it would for any file hosted there.
Found a bug, or something behaved in a way this readme did not predict? Get in touch at https://AtlasGondal.com/contact-me/?utm_source=self&utm_medium=wp&utm_campaign=atlas-media-offloader&utm_term=plugin-description