# Cloudinary Setup: Transfer Media Assets

> How to connect Blober to Cloudinary. Browse, upload, download, and transfer images, videos, and raw files from Cloudinary's media platform.

Cloudinary is a cloud-based media management platform for images, videos, and raw files. Blober connects using your Cloud Name, API Key, and API Secret.

Path format:

```plaintext
folder/subfolder/filename.ext
```

## Capabilities

* ✅ Browse folders and assets
* ✅ Upload files (streaming, any size)
* ✅ Download files
* ✅ Delete assets
* ✅ View file metadata (size, dates, format)
* ✅ Automatic detection of images, videos, and raw files on upload
* ✅ Mixed-type listing of images, videos, and raw files
* ✅ Pre-generate derived versions at upload time (Eager Transformation)
* ✅ Apply Eager Transformations to existing assets without re-uploading
* ✅ Server-side pagination

## Prerequisites

* A [Cloudinary account](https://cloudinary.com/users/register_free) (free tier available)
* An API Key and API Secret from your Console

## Required Credentials

[]()

### Cloud Name

* **Format:** alphanumeric characters, hyphens, underscores
* **Example:** `my-cloud`

Found on your [Cloudinary Console](https://console.cloudinary.com/app) under "Product Environment" on the [Dashboard](https://console.cloudinary.com/app/home/dashboard). It is also the value that appears after the `@` symbol in your `CLOUDINARY_URL` environment variable.

[]()

### API Key

* **Format:** numeric string
* **Example:** `123456789012345`

[]()

### API Secret

* **Format:** alphanumeric characters, hyphens, underscores
* **Example:** `abcdefghijklmnopqrstuvwxyz12`

## Optional Settings

[]()

### Eager Transformation (destination only)

* **Default:** empty (none)
* **Example:** `w_300,c_fill,f_auto,q_auto`

A [Cloudinary transformation](https://cloudinary.com/documentation/image_transformations) string applied at upload time to pre-generate a derived asset. Only used when Cloudinary is the destination of your workflow.

[]()

### Unique Filename (destination only)

* **Default:** off (keep original filename)

When off, files keep their original name. When on, Cloudinary appends random characters to the filename (e.g. `photo_a1b2c3.jpg`) to avoid collisions with existing assets.

[]()

### Apply Eager Transformation (mutate action)

* **Required** when running the mutate action
* **Example:** `w_300,c_fill,f_auto,q_auto`

A transformation string applied to existing assets. Select files in Blober and run this mutation to pre-generate derived versions of the originals without re-uploading them.

## Setup Guide

### 1. Create a Cloudinary Account

1. Go to [cloudinary.com](https://cloudinary.com/users/register_free)
2. Sign up for a free account (25 credits/month included)
3. After signing up, you'll land on the Dashboard

### 2. Get Your Credentials

1. Open the [Cloudinary Console](https://console.cloudinary.com/app). Your **Cloud Name** is shown under "Product Environment" on the Dashboard.
2. Open **Settings**, then **API Keys**. You can also jump straight to the [API Keys page](https://console.cloudinary.com/app/settings/api-keys).
3. Copy your **API Key** and **API Secret**.

> **Tip**
>
> Your `CLOUDINARY_URL` environment variable contains all three values in one string:
>
> ```plaintext
> cloudinary://API_KEY:API_SECRET@CLOUD_NAME
> ```

### 3. Configure in Blober

1. In Blober, open **Workflows**, then click **New Workflow**.
2. Select **Cloudinary** as source or destination.
3. Enter your Cloud Name, API Key, and API Secret.
4. Credentials are verified on save. Blober makes a test API call to confirm access.

## File Organization

Cloudinary organizes assets using:

* **Asset folders** are the visual hierarchy shown in the Media Library.
* **Public IDs** are the path Cloudinary uses internally to reference each asset.

Blober maps both: uploads land in the correct Media Library folder, and the original filename is preserved.

Assets at the root level have no folder prefix. Subfolders are supported to any depth:

```plaintext
samples/cloudinary-icon.png
products/shoes/sneaker.jpg
```

Cloudinary limits the internal asset path to 255 characters. Files with paths exceeding this limit fail with a validation error before any upload starts.

## How Uploads Work

* Files are sent directly to Cloudinary, so file size is not a bottleneck.
* Cloudinary automatically detects whether each file is an image, video, or raw file.
* The original filename (with extension) is preserved.
* Existing assets are never silently replaced. Uploading a duplicate returns the existing asset.
* Files land in the right folder whether your account is on the newer dynamic folder mode or the legacy fixed folder mode.
* If you set an Eager Transformation, the derived version is generated at upload time.

## How Deletion Works

* Deletions go through Cloudinary's Upload API, which is not rate-limited.
* Deletes never count against your hourly Admin API quota.

## How Listing Works

* Listing returns all asset types (images, videos, raw files) in a single paginated call.
* Sub-folders are loaded as you browse into them.
* Pagination uses Cloudinary's native server-side cursors, so even very large folders load smoothly.

## Rate Limiting

* The **Upload API** is not rate-limited. Uploads, deletions, and mutations are unaffected.

* The **Admin API** (used for listing, browsing, and metadata) is rate-limited:

  * Free plan: 500 requests/hour
  * Paid plans: 2,000+ requests/hour

## Troubleshooting

### "cloud\_name mismatch" error

* Verify your Cloud Name matches exactly what's shown on the Dashboard
* Cloud names are case-sensitive

### "Authorization required" (401) error

* Double-check your API Key and API Secret.
* Make sure the key hasn't been revoked. Open **Settings**, then **API Keys** in the [Cloudinary Console](https://console.cloudinary.com/app/settings/api-keys) to confirm.
* If you recently regenerated the secret, update it in Blober.

### Assets not appearing in listing

* Blober lists assets by their Media Library folder.
* Assets that were uploaded outside the Media Library (for example, directly via the Cloudinary API without an asset folder) may not appear in the browse view. Move them into a Media Library folder so they show up.

### Path validation error

* Cloudinary limits the internal asset path to 255 characters.
* Deeply nested folder structures can exceed this limit.
* Blober checks the path length before uploading and fails immediately without making a network call.

### Rate limit (420) errors

* You've hit the Admin API hourly limit
* Wait for the rate limit to reset (shown in the error) or upgrade your plan
* Uploads, deletions, and mutations use the Upload API and are not affected

## Best Practices

* Cloudinary's free plan includes 25 credits/month covering storage, transformations, and bandwidth

> **Terms Compliance**
>
> Your use of Cloudinary through Blober is subject to [Cloudinary's Terms of Service](https://cloudinary.com/tos). See our [Terms of Service](/kb/docs/terms-and-privacy/terms-of-service/) for details.

## External References

* [Cloudinary Console](https://console.cloudinary.com/app)
* [API Keys page](https://console.cloudinary.com/app/settings/api-keys)
* [Cloudinary Documentation](https://cloudinary.com/documentation)
* [Cloudinary Pricing](https://cloudinary.com/pricing)
* [Migration guide](https://cloudinary.com/documentation/migration)