# How to Replace Cloudinary with AuraImage in 10 Minutes (https://auraimage.ai/blog/replace-cloudinary-with-auraimage)



If you are on Cloudinary and tired of the dashboard, the pricing model, or the enterprise-weight SDK — here is the fastest way out. Still comparing? The [three-way benchmark against Cloudinary and imgix](/blog/auraimage-vs-cloudinary-vs-imgix) has the numbers.

This guide is a migration, but the shift underneath it is bigger: Cloudinary belongs to the dashboard era, and [AI-native image infrastructure](/ai-native-image-infrastructure) is what comes after it.

## Before you start [#before-you-start]

You need:

* An AuraImage account and a project (create one at [auraimage.com](https://auraimage.com))
* The AuraImage CLI: `npm install -g aura`
* Your project's Secret Key (run `aura keys create --project <name>`)

The condensed reference version of this walkthrough lives in the [migration docs](/docs/migration).

## Step 1 — Replace serve URLs [#step-1--replace-serve-urls]

Cloudinary serve URLs look like this:

```
https://res.cloudinary.com/demo/image/upload/w_800,h_600,c_fill/avatar.jpg
```

AuraImage serve URLs look like this:

```
https://cdn.auraimage.ai/<project>/w=800,h=600,fit=cover/avatar
```

The [transformation syntax](/docs/url-api) maps nearly one-to-one:

| Cloudinary | AuraImage              |
| ---------- | ---------------------- |
| `w_800`    | `w=800`                |
| `h_600`    | `h=600`                |
| `c_fill`   | `fit=cover`            |
| `c_fit`    | `fit=contain`          |
| `q_auto`   | default (auto quality) |
| `f_webp`   | default (auto format)  |

No `f_auto` or `q_auto` needed — AuraImage auto-selects the best format and quality per browser.

## Step 2 — Replace the upload flow [#step-2--replace-the-upload-flow]

Cloudinary requires a signature server-side. AuraImage works the same way but with a smaller API surface.

```ts
// Before (Cloudinary)
const signature = cloudinary.utils.sign_request(params, { api_secret });

// After (AuraImage)
import { createUploadToken } from '@auraimage/sdk/server';
const token = await createUploadToken({ projectName: 'my-app' });
```

The [client upload](/docs/upload) is identical in shape — pass the file and the signed token.

## Step 3 — Replace the React component [#step-3--replace-the-react-component]

Cloudinary gives you `<AdvancedImage>`. AuraImage gives you `<AuraImage>`.

```tsx
// Before
<AdvancedImage cldImg={image} />

// After
<AuraImage src={img.mdUrl} alt='' width={800} height={600} fit='cover' />
```

The `mdUrl` comes from the upload response. It is the signed serve URL with the transform options baked into the path.

## Step 4 — Remove the Cloudinary dependency [#step-4--remove-the-cloudinary-dependency]

```bash
npm uninstall @cloudinary/url-gen @cloudinary/react
npm install @auraimage/sdk
```

That is it. Four steps, ten minutes. The hardest part is remembering to cancel your Cloudinary subscription.

Next: [How AuraImage's edge CDN works under the hood](/blog/how-auraimage-edge-cdn-works).
