Title: Zinn® Media Offload
Author: Zinn Digital®
Published: <strong>27. sept 2026</strong>
Last modified: 27. sept 2026

---

Search plugins

![](https://ps.w.org/zinn-offload/assets/banner-772x250.png?rev=3715440)

![](https://ps.w.org/zinn-offload/assets/icon-256x256.png?rev=3715440)

# Zinn® Media Offload

 By [Zinn Digital®](https://profiles.wordpress.org/zinndigital/)

[Download](https://downloads.wordpress.org/plugin/zinn-offload.1.2.10.zip)

 * [Details](https://et.wordpress.org/plugins/zinn-offload/#description)
 * [Reviews](https://et.wordpress.org/plugins/zinn-offload/#reviews)
 *  [Installation](https://et.wordpress.org/plugins/zinn-offload/#installation)
 * [Development](https://et.wordpress.org/plugins/zinn-offload/#developers)

 [Support](https://wordpress.org/support/plugin/zinn-offload/)

## Description

Images and video are usually the largest thing a WordPress site serves, and the 
slowest. This plugin moves your media library to object storage and serves it from
a CDN, so your web server stops sending the bytes and your pages get faster everywhere
in the world.

**You never enter an access key.** Your storage keys are never saved in WordPress,
so they are not in your database, your migration exports or your backups.

You turn media offload on in your Zinn Digital® dashboard, paste a short pairing
code here once, and this plugin holds a token that works for **this site’s folder
and nothing else**. Before each upload it asks Zinn Digital® for a one-time signed
link, and the file goes straight from your web server to storage. If the token is
ever exposed, you revoke it from your dashboard in one click.

#### What it does

 * Uploads new media — the original **and every thumbnail size WordPress generates**—
   to your Zinn® storage.
 * Rewrites image URLs, including `srcset` responsive images, to your CDN address.
 * Moves your existing media library in the background, a few files at a time, picking
   up where it left off.
 * Optionally removes the local copies once every size has uploaded successfully.

#### What it does not do

 * It adds no REST endpoint, no shortcode, no script and no stylesheet.
 * The one thing it does change on a public page is the **address** of an image 
   or file that has
    been offloaded: `wp_get_attachment_url` and `wp_calculate_image_srcset`
   are filtered so the markup points at your bucket instead of this server. Nothing
   is added to the page, and while **Serve from Zinn® storage** is off the addresses
   are left exactly as WordPress wrote them.
 * It never deletes anything from storage. Retention is decided in your dashboard.
 * It does not delete local files after a partial upload — if any size fails, every
   local copy stays.
 * It never asks for a storage key or a bucket name. Which bucket this site uses
   is decided in your Zinn Digital® dashboard. Whether addresses are rewritten and
   whether local copies are removed start as your dashboard’s choices when you pair,
   and you can change them afterwards on the plugin’s **How media is served** tab.

#### What it needs

 * A Zinn Digital® account with object storage enabled for this site.
 * Outbound HTTPS from your web server.

### External services

This plugin moves your media library to Zinn® object storage and serves it from 
a CDN. It
 requires a Zinn Digital® account and does nothing without one.

**What is sent, and when**

 * **Pairing (once, from your Zinn® dashboard).** The plugin calls
    https://api.
   zinndigital.com/v1/media-offload/claim to obtain its own scoped credential. **
   No access key is ever typed into WordPress or stored in your database in plain
   form.
 * **Uploads (when you add media).** Files you upload to the media library are transmitted
   to
    Zinn® object storage via `/v1/media-offload/uploads`, and their public URLs
   are rewritten to the CDN. This is the plugin’s purpose; the files are your own
   media.
 * **Reporting.** `/v1/media-offload/report` returns offload status and storage 
   usage for the
    dashboard.

**No post content, user accounts or visitor data are transmitted.** Until the site
is paired the
 plugin makes no outbound requests.

Service terms: https://zinndigital.com/legal/terms
 Privacy policy: https://zinndigital.
com/legal/privacy

 * **Support diagnostics (only when you press send).** If you ask us for help, the
   plugin can send
    a support report to `https://api.zinndigital.com/v1/connector/
   diagnostics`. **You are shown the exact payload first, already redacted, and 
   nothing leaves your site until you press send. Credentials are excluded by declaration
   rather than by matching key names, and render as [not sent — credential]. The
   plugin never sends this on its own initiative.

### Translations

**Every string this plugin adds to your admin is translated into 57 languages** —
labels, notices,
 errors and settings, not a subset. The catalogues are bundled 
in the plugin, so they work as soon as you set your site language; there is no separate
language pack to install.

Every user-visible string is complete in every one of the 53 languages WordPress
can serve
 today:

Amharic (am), Arabic (ar), Azerbaijani (az), Bulgarian (bg_BG), Bengali (Bangladesh)
(
bn_BD), Czech (cs_CZ), German (de_DE), Greek (el), Spanish (Spain) (es_ES), Persian(
fa_IR), French (France) (fr_FR), Gujarati (gu), Hebrew (he_IL), Hindi (hi_IN), Croatian(
hr), Hungarian (hu_HU), Armenian (hy), Indonesian (id_ID), Italian (it_IT), Japanese(
ja), Georgian (ka_GE), Kazakh (kk), Khmer (km), Kannada (kn), Korean (ko_KR), Lao(
lo), Malayalam (ml_IN), Mongolian (mn), Marathi (mr), Malay (ms_MY), Myanmar (Burmese)(
my_MM), Nepali (ne_NP), Dutch (nl_NL), Panjabi (India) (pa_IN), Polish (pl_PL), 
Pashto (ps), Portuguese (Brazil) (pt_BR), Romanian (ro_RO), Russian (ru_RU), Sinhala(
si_LK), Albanian (sq), Serbian (sr_RS), Swahili (sw), Tamil (ta_IN), Telugu (te),
Thai (th), Tagalog (tl), Turkish (tr_TR), Ukrainian (uk), Urdu (ur), Uzbek (uz_UZ),
Vietnamese (vi), Chinese (China) (zh_CN)

A further 4 ship complete in the plugin — Hausa (ha), Somali (so_SO), Tajik (tg),
Yoruba (yo) — but
 WordPress core does not currently provide a locale for them, 
so WordPress cannot load them.

#### Right-to-left

Arabic, Persian, Hebrew, Pashto and Urdu are right-to-left. Every screen this plugin
adds was
 rendered in a real WordPress install in each of those languages and checked,
not assumed.

#### For translators

    ```
    languages/ holds the `.pot` template plus a `.po`, `.mo` and `.l10n.php` for every language, so
    ```

corrections and new languages can be contributed directly.

## Screenshots

[⌊The Connection tab before pairing: the status panel says plainly that nothing 
is wrong yet, and the only thing to enter is the pairing code from your Zinn Digital
® dashboard — never a storage key.⌉⌊The Connection tab before pairing: the status
panel says plainly that nothing is wrong yet, and the only thing to enter is the
pairing code from your Zinn Digital® dashboard — never a storage key.⌉[

The Connection tab before pairing: the status panel says plainly that nothing is
wrong yet, and the only thing to enter is the pairing code from your Zinn Digital
® dashboard — never a storage key.

[⌊What gets moved: new uploads, the existing library in the background, how many
files each hourly pass moves, a size floor, and file types that must stay on this
server.⌉⌊What gets moved: new uploads, the existing library in the background, how
many files each hourly pass moves, a size floor, and file types that must stay on
this server.⌉[

What gets moved: new uploads, the existing library in the background, how many files
each hourly pass moves, a size floor, and file types that must stay on this server.

[⌊Every screen is translated — here the Connection tab in Arabic, right to left.⌉⌊
Every screen is translated — here the Connection tab in Arabic, right to left.⌉[

Every screen is translated — here the Connection tab in Arabic, right to left.

## Installation

 1. Install and activate the plugin.
 2. In your Zinn Digital® dashboard, open the site, choose **Files & databases**, turn
    on **Images & video CDN**, and press **Get a pairing code**.
 3. In WordPress go to **Zinn Digital®  Media Offload**, paste the code on the **Connection**
    tab, and press **Connect this site**.

New uploads move immediately. Your existing library moves in the background over
the following hours.

## FAQ

### What happens to my images if I deactivate the plugin?

Media that has already moved keeps working — its address does not change, because
it is served from the CDN and the CDN is still there. New uploads stay on your web
server.

### What happens if Zinn Digital® is unreachable when I upload something?

The upload succeeds and the file stays on your server, exactly as it would without
this plugin. The settings screen shows what went wrong, and the background pass 
picks the file up later.

### Will it delete my local files?

Only if you switch that on in your Zinn Digital® dashboard, and only for an attachment
where **every** size uploaded successfully. A partial upload never removes anything,
because there would then be thumbnails in neither place and no original to regenerate
them from.

### Does it work with responsive images?

Yes. It rewrites `srcset` and sized-image requests as well as the plain attachment
URL. A plugin that only rewrote the plain URL would serve your full-size images 
from the CDN and every responsive candidate from your server — which looks correct
on a desktop and is wrong on a phone.

### Can I use my own bucket?

Yes. Attach your own S3-compatible bucket in your Zinn Digital® dashboard; the plugin
works the same way and still never holds the key.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“Zinn® Media Offload” is open source software. The following people have contributed
to this plugin.

Contributors

 *   [ Zinn Digital® ](https://profiles.wordpress.org/zinndigital/)

“Zinn® Media Offload” has been translated into 3 locales. Thank you to [the translators](https://translate.wordpress.org/projects/wp-plugins/zinn-offload/contributors)
for their contributions.

[Translate “Zinn® Media Offload” into your language.](https://translate.wordpress.org/projects/wp-plugins/zinn-offload)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/zinn-offload/), check
out the [SVN repository](https://plugins.svn.wordpress.org/zinn-offload/), or subscribe
to the [development log](https://plugins.trac.wordpress.org/log/zinn-offload/) by
[RSS](https://plugins.trac.wordpress.org/log/zinn-offload/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 1.2.10

 * The Connection tab now names the dashboard screens as they really are: open your
   site, then Files & databases, then Get a pairing code under Images & video CDN.
   The installation steps say the same and name the plugin’s own screen, Zinn Digital
   ®  Media Offload, and the description no longer says the plugin has no settings
   of its own. The WordPress.org listing gains three screenshots.

#### 1.2.9

 * Readme: clearer description of how the plugin works.

#### 1.2.8

 * Translations: a word written in the wrong alphabet (for example a Korean word
   inside a Malayalam sentence, or an Urdu word ending a Punjabi one) is corrected
   in every language that had one. Each affected string was translated again and
   checked.

#### 1.2.7

 * Tested up to: 7.1 — the major version only, as WordPress.org’s Plugin Check requires(
   7.1.1 was refused as invalid_tested_upto_minor).

#### 1.2.6

 * Tested up to WordPress 7.1.1.

#### 1.2.5

 * In a right-to-left admin language, the Zinn Digital® menu entry showed its trademark
   symbol on the wrong side of the name. The name is now isolated so it reads correctly
   in Arabic, Hebrew, Persian, Pashto and Urdu.
 * Number fields on the settings screen are now wide enough to show the whole value;
   a long value was cut off to its first few digits.

#### 1.2.4

 * The admin screens’ styles and scripts are now enqueued through WordPress rather
   than printed into the page, so they can be dequeued, deferred or optimised by
   your site like any other asset — and they still work on a site whose security
   policy forbids inline code.

#### 1.2.3

 * Translations: every string this plugin’s admin shows is now translated in every
   bundled language. A few strings the machine translator refused were shipping 
   in English; they are now translated by hand.
 * The file-type list on the settings screen now comes from WordPress’s own cached
   answer instead of a direct database query.

#### 1.2.2

 * Fixed (first shipped in 1.2.1): offloading a file no longer fails with a fatal
   error. The class that streams uploads was shipped and never loaded.
 * Hardening: a settings rule can no longer be mistaken for a PHP function with 
   the same name. The same shared settings code is what stopped Zinn® Translate 
   saving its settings. Nothing about how this plugin behaves changes.

#### 1.2.0

Everything about offloading is now yours to set: whether new uploads move, whether
the existing library keeps moving and how fast, a minimum file size, file types 
to leave alone, and whether media is served from storage and the local copy deleted.

#### 1.1.3

 * Fixed: uploading a large media file could exhaust PHP’s memory. Files are now
   streamed to storage rather than read into memory first.
 * Corrected the description: the plugin does rewrite media addresses on public 
   pages when you switch rewriting on, which the readme previously denied.

#### 1.1.2

#### 1.1.0

 * Added the Zinn® panel: links to Zinn Digital® hosting, the Zinn® marketplace,
   Zinn Hub® and this plugin’s user guide, from inside the WordPress admin.

#### 1.0.0

 * First release.

## Meta

 *  Version **1.2.10**
 *  Last updated **1 päev ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.6 or higher **
 *  Tested up to **7.1.2**
 *  PHP version ** 8.2 or higher **
 *  Languages
 * [Czech](https://cs.wordpress.org/plugins/zinn-offload/), [English (US)](https://wordpress.org/plugins/zinn-offload/),
   [Russian](https://ru.wordpress.org/plugins/zinn-offload/) ja [Serbian](https://sr.wordpress.org/plugins/zinn-offload/).
 *  [Translate into your language](https://translate.wordpress.org/projects/wp-plugins/zinn-offload)
 * Tags
 * [cdn](https://et.wordpress.org/plugins/tags/cdn/)[images](https://et.wordpress.org/plugins/tags/images/)
   [media](https://et.wordpress.org/plugins/tags/media/)[offload](https://et.wordpress.org/plugins/tags/offload/)
   [storage](https://et.wordpress.org/plugins/tags/storage/)
 *  [Advanced View](https://et.wordpress.org/plugins/zinn-offload/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/zinn-offload/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/zinn-offload/reviews/)

## Contributors

 *   [ Zinn Digital® ](https://profiles.wordpress.org/zinndigital/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/zinn-offload/)