PHPackages                             acb-studio/kirby-cloudinary-sync - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [File &amp; Storage](/categories/file-storage)
4. /
5. acb-studio/kirby-cloudinary-sync

ActiveKirby-plugin[File &amp; Storage](/categories/file-storage)

acb-studio/kirby-cloudinary-sync
================================

Kirby -&gt; Cloudinary media sync plugin

1.4.2(2w ago)55531MITPHP

Since Oct 18Pushed 2w ago4 watchersCompare

[ Source](https://github.com/acb-studio/kirby-cloudinary-sync)[ Packagist](https://packagist.org/packages/acb-studio/kirby-cloudinary-sync)[ RSS](/packages/acb-studio-kirby-cloudinary-sync/feed)WikiDiscussions main Synced today

READMEChangelog (9)Dependencies (4)Versions (11)Used By (0)

Kirby CMS → Cloudinary sync plugin
==================================

[](#kirby-cms--cloudinary-sync-plugin)

[![License: MIT](https://camo.githubusercontent.com/784362b26e4b3546254f1893e778ba64616e362bd6ac791991d2c9e880a3a64e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d677265656e2e737667)](https://opensource.org/licenses/MIT) [![Kirby-4-compatible](https://camo.githubusercontent.com/178aae908ca38a3ea6ece74d37269a84e5a71d4fa582d199b29f011aa1ed46bf/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4b697262792d342d626c61636b2e737667)](https://camo.githubusercontent.com/178aae908ca38a3ea6ece74d37269a84e5a71d4fa582d199b29f011aa1ed46bf/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4b697262792d342d626c61636b2e737667) [![Kirby-5-compatible](https://camo.githubusercontent.com/89607758cbcd8c50ac3e45e9cd39d497e8addb148898f3256b03bcc346cb219c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4b697262792d352d626c61636b2e737667)](https://camo.githubusercontent.com/89607758cbcd8c50ac3e45e9cd39d497e8addb148898f3256b03bcc346cb219c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4b697262792d352d626c61636b2e737667)

[![Logo: Kirby → Cloudinary sync plugin](logo.png)](https://acb.studio/)

What is this?
-------------

[](#what-is-this)

This [Kirby](https://getkirby.com/) [plugin](https://plugins.getkirby.com/) allows you to automatically push your media assets to [Cloudinary](https://cloudinary.com/) when you upload them in Kirby. Instead of serving the assets from your Kirby server, they will be served by Cloudinary (the files' `url` will automatically point to Cloudinary).

Who are we?
-----------

[](#who-are-we)

We ([acb.studio](https://acb.studio/)) are your partner for *sustainable* digital products and products. We are a [Certified Kirby Partner](https://getkirby.com/partners/acb-studio).

First steps
-----------

[](#first-steps)

### Step 1: Install the plugin

[](#step-1-install-the-plugin)

```
$ composer require acb-studio/kirby-cloudinary-sync
```

### Step 2: Get Cloudinary API credentials

[](#step-2-get-cloudinary-api-credentials)

Head over to  and generate a new API key.

You will need three things to use this plugin:

- API key: You will see this right after generating your new API key
- API secret: In the column next to the API key, click on the "eye" icon to reveal your API secret
- Cloud name: It's printed on the top of the page

### Step 3: Configure the plugin

[](#step-3-configure-the-plugin)

Open your Kirby `site/config/config.php` and add the configuration to it. See below for examples.

#### Step 3 - Example A: Minimal configuration

[](#step-3---example-a-minimal-configuration)

In this example, you just want to sync your image files with Cloudinary. A copy of your assets should be kept on your local machine as a backup. It is most likely a bad idea though to hard-code your Cloudinary API secrets in your `config.php`, so this is mainly suitable for local testing - see below for a more comprehensive configuration using environment variables.

Add this to your `site/config/config.php`:

```
// ... your other configuration ...
'acb' => [
    'cloudinary' => [
        'key' => 'MY_CLOUDINARY_KEY',
        'secret' => 'CLOUDINARY_SECRET',
        'cloud' => 'CLOUDINARY_CLOUD_NAME',
        'assetTypes' => ['image'],
    ],
],
// ... your other configuration ...
```

#### Step 3 - Example B: Comprehensive configuration

[](#step-3---example-b-comprehensive-configuration)

- In this example, you make use of the [Kirby DotEnv plugin](https://plugins.getkirby.com/bnomei/dotenv) (optional). In your production environment (server), you use global environment variables and for local development, you prefer a (git-ignored) `.env` file. → `key`, `secret` and `cloud` options can be defined as a function
- You want to upload your images, videos and PDF files to Cloudinary. → `assetTypes` option
- You have a lot of images and some bigger videos - to save space on your local disk (and to not push all these files to git), you want your local files to be automatically replaced with empty placeholder files once they were uploaded to Cloudinary. → `removeAssetsLocally` option
- You want an admin area (accessible in the panel as admin from the left sidebar) allowing you to bulk-push all files that were not uploaded to Cloudinary, yet. You may also want an option to bulk-pull all files from Cloudinary (this will download the files from Cloudinary and replace your local empty placeholder files with the original ones, then delete (!) the assets on Cloudinary) → `adminArea` option
- You already want to optimize your images ahead of time (eager transformations) so they are available quicker the first time they are requested. → `eagerTransformations` option
- If nothing else was specified, you want to serve your images as webp with automatic "eco" quality setting → `imageTransformationDefaults` option
- You want to customize the file naming (public ID) schema on Cloudinary. → `publicId` option
- You use a media proxy (e.g. due to intranet/firewall restrictions) → `baseUrl` option

```
// ... your other configuration ...
'acb' => [
    'cloudinary' => [
        'key' => fn() => getenv('CLOUDINARY_KEY') ?: env('CLOUDINARY_KEY'),
        'secret' => fn() => getenv('CLOUDINARY_SECRET') ?: env('CLOUDINARY_SECRET'),
        'cloud' => fn() => getenv('CLOUDINARY_CLOUD_NAME') ?: env('CLOUDINARY_CLOUD_NAME'),
        'assetTypes' => ['image', 'video', 'pdf'],
        'removeAssetsLocally' => true,
        'adminArea' => true,
        'eagerTransformations' => fn() => [
            ['format' => 'webp', 'quality' => 'auto:eco'],
            ['format' => 'avif', 'quality' => 'auto:eco'],
        ],
        'imageTransformationDefaults' => [
            'format' => 'webp',
            'quality' => 'auto:eco'
        ],
        'publicId' => fn($file) => implode('.', array_slice(explode('.', $file->id()), 0, -1)),
        'baseUrl' => 'https://media.my.domain'
    ],
],
// ... your other configuration ...
```

### Step 4: Add file blueprint

[](#step-4-add-file-blueprint)

To have more control over your assets, you may want to add a Cloudinary [file blueprint](https://getkirby.com/docs/reference/panel/blueprints/file). Have a look at `cloudinary-file.yml` as an example how such a blueprint can look like. You can either copy-paste the fields into your own file blueprint or you can use the automatically registered `cloudinary` blueprint for your files (in your `files` field, set `template: cloudinary`). Some of the fields make use of the [Kirby k3-whenquery plugin](https://github.com/rasteiner/k3-whenquery). It is optional to add that plugin to your project, it just hides fields that are not relevant for more convenience.

### Step 5: Previously uploaded files

[](#step-5-previously-uploaded-files)

Files added to Kirby prior to installing the plugin are not automatically synced to Cloudinary. They can be manually pushed by opening the file in the panel (after doing step 4 first so that the blueprint contains the action) and then clicking the corresponding button to push the file, or by opening the "Cloudinary Admin" area on the left side (if enabled) and selecting "Push all files to Cloudinary" (depending on the number and size of assets this can take a long time and even fail based on the PHP timeout settings - in that case, you can always click the button again because it will only push files that were not already pushed, yet).

Contribute
----------

[](#contribute)

Feedback and contributions are welcome!

For commit messages we're following the [gitmoji](https://gitmoji.dev/) guide. 😃 Below you can find an example commit message for fixing a bug:

🐛 fix eager transformations

Please post all bug reports in our issue tracker.

###  Health Score

46

—

FairBetter than 92% of packages

Maintenance96

Actively maintained with recent releases

Popularity22

Limited adoption so far

Community10

Small or concentrated contributor base

Maturity46

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~75 days

Recently: every ~52 days

Total

9

Last Release

18d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/dc23ff9aadf85db14a69427c05486d96ed87a2157279625ac0e24c9cde0ba745?d=identicon)[acb-studio](/maintainers/acb-studio)

---

Top Contributors

[![jonathan-reisdorf](https://avatars.githubusercontent.com/u/8958624?v=4)](https://github.com/jonathan-reisdorf "jonathan-reisdorf (11 commits)")

### Embed Badge

![Health badge](/badges/acb-studio-kirby-cloudinary-sync/health.svg)

```
[![Health](https://phpackages.com/badges/acb-studio-kirby-cloudinary-sync/health.svg)](https://phpackages.com/packages/acb-studio-kirby-cloudinary-sync)
```

###  Alternatives

[getkirby/cms

The Kirby core

1.5k584.8k473](/packages/getkirby-cms)[cloudinary-labs/cloudinary-laravel

A Laravel Cloudinary Package

3321.4M5](/packages/cloudinary-labs-cloudinary-laravel)[cloudinary/cloudinary-magento2

Cloudinary Magento 2 Integration.

16162.0k](/packages/cloudinary-cloudinary-magento2)[carlosocarvalho/flysystem-cloudinary

Flysystem adapter for Cloudinary

22159.2k5](/packages/carlosocarvalho-flysystem-cloudinary)[medienbaecker/kirby-modules

Easily add modules to your pages

895.5k1](/packages/medienbaecker-kirby-modules)[codebar-ag/laravel-flysystem-cloudinary

Cloudinary Flysystem 3 integration with Laravel

1229.3k3](/packages/codebar-ag-laravel-flysystem-cloudinary)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
