ZealDen Safe Media Offload
Safe Media Offload copies your media library to object storage and serves it from your own delivery domain or CDN. New uploads are copied as soon as WordPress has made every size, and their URLs, responsive images included, point at the bucket. Existing media moves in the background, and you can watch it, stop it or bring everything back.
Requirements
Section titled “Requirements”- WordPress 6.6 or later
- PHP 8.2 or later
- A bucket and an access key on one of these services: Cloudflare R2, Amazon S3, Backblaze B2, DigitalOcean Spaces, Hetzner, Scaleway, Akamai (Linode), Google Cloud Storage (HMAC keys), or MinIO and any other S3-compatible endpoint
What it checks
Section titled “What it checks”- Nothing moves until it works. Test connection reaches the bucket, writes a file, reads it back, fetches it through your delivery domain the way a visitor would, and deletes it, reporting each step. Offloading starts once the bucket steps pass; the delivery-domain fetch is reported but doesn’t hold it back, so you can offload with serving off while your domain is still being connected. Changing the provider, account, bucket or keys waits for a new test.
- Staging copies are safe. A copy of your database can serve production’s media from the bucket, but can never delete or overwrite production’s files.
- Local copies are kept by default. Deleting them frees disk space, and is only possible while media is served from the bucket.
- Failures are visible: each file’s offload status and last error, a failed-items count on the settings screen, files the bucket refused to delete with a Try again button, and Site Health checks.
Where to go next
Section titled “Where to go next”- Set it up
- Connect Cloudflare R2
- Amazon S3 and other providers
- Offload existing media
- Paid downloads
- WP-CLI
- What it doesn’t do, and FAQ
Checked against ZealDen Safe Media Offload 1.0.3 on main, 19 October 2026.