Transloadit
Pricing
  • File Uploads
  • File Importing
  • Video Encoding
  • Audio Encoding
  • Image Processing
  • Document Processing
  • Artificial Intelligence
  • File Filtering & Security
  • Media Cataloging
  • File Compression
  • Code Evaluation
  • File Exporting
  • Smart CDN
  • View all services
  • Explore integrations
  • Explore live demos
  • Uppy
  • TransloaditKit
  • Android SDK
  • Node SDK
  • Python SDK
  • Ruby SDK
  • Go SDK
  • Java SDK
  • PHP SDK
  • Zapier
  • MCP Server
  • Terraform
  • Essentials
  • Best Practices
  • FAQ
  • Robots
  • API
  • Formats
  • Build your first app
  • About
  • Comparisons
  • Open Source
  • Testimonials
  • Jobs
  • Security
  • Posts
  • DevTimes
  • DevTips
  • Press
  • Research
  • Case Studies
  • Solutions
  • Guides
  • Glossary
  • Legal
  • Tools
  • Helping Coursera bring education to millions around the world
  • Transloadit Support
  • Open Source Support
  • Service level agreement
EssentialsRobotsFAQAPIFormatsBest Practices
Getting started
  • Overview
  • My first App
  • Saving result files
Topics
  • Assembly Instructions
  • Assembly Variables
  • Dynamic Evaluation
  • Templates
  • Webhooks
  • Third party Credentials
  • Builtin Templates
  • Resize Strategies
  • Assembly Execution Progress
  • Workspaces
  • AI Agents
  • Advanced use Parameter
  • The ignore_errors Parameter
Software Development Kits
  • Overview
  • Android SDK
  • Browsers
  • Convex
  • cURL
  • Go SDK
  • Java SDK
  • MCP Server
  • Multipart Form
  • Node.js SDK
  • PHP SDK
  • Python SDK
  • Ruby SDK
  • Terraform
  • TransloaditKit
  • Zapier Integration
Migration
  • Migrate from Cloudinary to Transloadit
  • Migrate from Uploadcare to Transloadit
  • Migrate from Mux to Transloadit
  • Migrate from Filestack to Transloadit

Migrate from Cloudinary to Transloadit

Cloudinary centers media processing around upload presets, transformation URLs, and its asset library. Transloadit centers processing around Assembly Instructions: explicit workflows that run Robots for uploading, importing, transforming, optimizing, storing, and serving files.

This guide shows how to translate common Cloudinary patterns into Transloadit Templates.

Migration map

Cloudinary conceptTransloadit equivalent
Upload presetSaved Template referenced by template_id
Transformation URLAn Assembly request, or Smart CDN with compatible Robots and a final /file/serve Step
Eager transformationRun Template Steps at upload time instead of on demand
Image resize/crop🤖/image/resize
Image optimization🤖/image/optimize
Video transcode🤖/video/encode
Adaptive video🤖/video/adaptive or 🤖/video/ondemand (beta)
Asset storage🤖/s3/store or another export Robot
Delivery URLsYour storage/CDN URLs, or Smart CDN with a final 🤖/file/serve Step
WebhooksAssembly Notifications

Start with the workflow, not the URL

Cloudinary URLs often encode the transformation inline. In Transloadit, put that transformation into a Template and call it from your app. That keeps processing rules in one server-side place. Keep Template definitions in your own version control alongside your application code.

For example, a Cloudinary image URL that crops, resizes, converts, and optimizes can become this Template:

{
  "steps": {
    ":original": {
      "robot": "/upload/handle"
    },
    "hero": {
      "use": ":original",
      "robot": "/image/resize",
      "width": 1600,
      "height": 900,
      "resize_strategy": "fillcrop",
      "format": "webp"
    },
    "optimized": {
      "use": "hero",
      "robot": "/image/optimize",
      "result": true
    },
    "exported": {
      "use": "optimized",
      "robot": "/s3/store",
      "credentials": "YOUR_AWS_CREDENTIALS",
      "path": "media/${unique_prefix}/${file.url_name}",
      "url_prefix": "https://cdn.example.com/",
      "acl": "bucket-default"
    }
  }
}

Replace YOUR_AWS_CREDENTIALS with saved Third-party Credentials. This example assumes your CDN serves the bucket root and has permission to read its objects; url_prefix only changes returned URLs, not CDN configuration or access permissions. acl: "bucket-default" sends no object ACL; configure access through your bucket policy and CDN origin access.

Your backend creates a signed Assembly request with the saved template_id and a notify_url for Assembly Notifications. Verify the notification signature and require ASSEMBLY_COMPLETED before switching application records. In this example, read the exported files from results.optimized: the storage Step updates the producing Step’s URLs. Persist only results with is_temp_url: false; temporary Transloadit URLs expire after 24 hours and are not delivery URLs. See saving conversion results.

Replace dynamic image URLs

If your app relies on dynamic transformation URLs, there are two common migration paths:

  1. Use a Template per transformation family, then trigger an Assembly when the asset is created or changed.
  2. Use Smart CDN with signed URLs for on-demand transformations that should be cached at the edge.

For high-traffic pages, prefer generating and storing canonical variants up front. For very large asset libraries with long-tail access patterns, Smart CDN can reduce pre-processing work.

Smart CDN needs a separate Template made only of compatible Robots, with a response branch ending in /file/serve. For example, import an image, resize it, and serve that output. /video/encode and /video/adaptive are not Smart CDN-compatible; generate signed Smart CDN URLs on your backend.

Import existing Cloudinary assets

If existing media is available through HTTPS URLs, use 🤖/http/import instead of uploading it again:

{
  "steps": {
    "imported": {
      "robot": "/http/import",
      "url": "${fields.cloudinary_url}"
    },
    "thumbnail": {
      "use": "imported",
      "robot": "/image/resize",
      "width": 400,
      "height": 400,
      "resize_strategy": "fillcrop",
      "result": true
    },
    "exported": {
      "use": ["imported", "thumbnail"],
      "robot": "/s3/store",
      "credentials": "YOUR_AWS_CREDENTIALS",
      "path": "cloudinary-import/${unique_prefix}/${file.url_name}",
      "acl": "bucket-default"
    }
  }
}

Pass an authorized source URL as the Assembly field cloudinary_url, selected by your backend from your asset inventory. A transformed Cloudinary URL imports that rendition, not automatically the original. Keep the old asset ID and URL until the completed export is accessible through your intended delivery path and its dimensions and quality meet your requirements. This import Template returns exported files under results.imported and results.thumbnail. A private S3 object still needs an authorized download or your configured CDN.

Checklist

  1. List the Cloudinary transformations your application actually uses.
  2. Group similar transformations into Transloadit Templates.
  3. Create Third-party Credentials for your target storage provider.
  4. Add Assembly Notifications so your app can store the exported storage URLs.
  5. Backfill existing assets with /http/import in bounded batches; its url parameter also accepts an array.
  6. Update delivery code to read from your storage/CDN or Smart CDN.
Previous page ← List of ProjectsNext page Migrate from Uploadcare to Transloadit →
TransloaditChecking status…

Product

  • Services
  • Pricing
  • Demos
  • Tools
  • Security
  • Support

Company

  • About/Press
  • Blog/Jobs
  • Comparisons/Compliance matrix
  • Research
  • Open source
  • Solutions

Docs

  • Getting started
  • Transcoding
  • FAQ
  • API
  • Guides/DevTips
  • Supported formats

More

  • Platform status⁠
  • Community forum⁠
  • StackOverflow⁠
  • Uppy
  • tus⁠

© 2009–2026 Transloadit-II GmbH

PrivacyTermsImprint