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 Mux to Transloadit

Mux focuses on video ingest, encoding, playback, and analytics. Transloadit is a broader media processing platform: you can upload or import files, generate multiple renditions, create HLS or MPEG-DASH outputs, produce thumbnails, add subtitles, transcribe audio, and store the results in your own storage.

This guide covers ingest, encoding, thumbnails, and storage. Player integration, analytics, access control, and transferring platform metadata need separate planning; an Assembly is not a drop-in replacement for a Mux asset and playback ID.

Migration map

Mux conceptTransloadit equivalent
Direct upload🤖/upload/handle through an SDK or Uppy
Asset creationA Transloadit Assembly
Encoding profile🤖/video/encode preset
Adaptive playback🤖/video/adaptive or 🤖/video/ondemand (beta)
Poster image🤖/video/thumbs
Captions/subtitles🤖/speech/transcribe can produce SRT or WebVTT; 🤖/video/subtitle can add those subtitles to video
Asset ready webhookAssembly Notification
Playback URLExported HLS manifest served by your storage/CDN, or a Smart CDN URL

Choose upfront or on-demand encoding

For predictable catalogs, encode variants up front with /video/encode and /video/adaptive. For large catalogs where only a fraction of videos are watched, evaluate /video/ondemand with Smart CDN so HLS assets are generated as viewers request them. This beta Robot needs a separate compatible Smart CDN Template whose response branch ends in /file/serve. Sign the URLs on your backend to protect your encoding budget from abuse. The upload-and-export Template below is for upfront encoding, not Smart CDN.

Example adaptive video Template

This Template receives a video, encodes three renditions, segments them, writes variant playlists and a multivariant playlist, creates a thumbnail, and stores the package on S3. Use one source video per Assembly for this example and choose renditions appropriate to its resolution; the three presets do not add missing detail to a low-resolution source:

{
  "steps": {
    ":original": {
      "robot": "/upload/handle"
    },
    "encoded_480p": {
      "use": ":original",
      "robot": "/video/encode",
      "preset": "hls/480p",
      "ffmpeg_stack": "v7"
    },
    "encoded_720p": {
      "use": ":original",
      "robot": "/video/encode",
      "preset": "hls/720p",
      "ffmpeg_stack": "v7"
    },
    "encoded_1080p": {
      "use": ":original",
      "robot": "/video/encode",
      "preset": "hls/1080p",
      "ffmpeg_stack": "v7"
    },
    "hls": {
      "use": {
        "steps": ["encoded_480p", "encoded_720p", "encoded_1080p"],
        "bundle_steps": true
      },
      "robot": "/video/adaptive",
      "technique": "hls",
      "playlist_name": "playlist.m3u8",
      "result": true
    },
    "poster": {
      "use": ":original",
      "robot": "/video/thumbs",
      "count": 1,
      "result": true
    },
    "exported_hls": {
      "use": "hls",
      "robot": "/s3/store",
      "credentials": "YOUR_AWS_CREDENTIALS",
      "path": "videos/${assembly.id}/${file.meta.relative_path}/${file.name}",
      "url_prefix": "https://cdn.example.com/",
      "acl": "bucket-default"
    },
    "exported_poster": {
      "use": "poster",
      "robot": "/s3/store",
      "credentials": "YOUR_AWS_CREDENTIALS",
      "path": "videos/${assembly.id}/posters/${file.url_name}",
      "url_prefix": "https://cdn.example.com/",
      "acl": "bucket-default"
    }
  }
}

/video/adaptive sets relative_path on its outputs. Preserve it in the export path so the playlist references resolve. Configure Third-party Credentials and a CDN that can read the bucket root; url_prefix does not configure delivery or grant access. acl: "bucket-default" sends no object ACL; configure access through your bucket policy and CDN origin access.

Set notify_url in your signed Assembly request, verify notification signatures, and require ASSEMBLY_COMPLETED. Export updates URLs under the producing Steps: results.hls lists the segments and playlists; select the entry named playlist.m3u8 with an empty meta.relative_path. Read the thumbnail from results.poster, checking is_temp_url: false before persisting them. Temporary Transloadit URLs expire after 24 hours and must not be used for playback; see saving conversion results. Test the exported manifest, variant playlists, and segments through your CDN in the intended HLS player before switching traffic.

Import existing Mux source files

If you still have source video files in S3, use 🤖/s3/import. If your application stores temporary HTTPS source URLs, use 🤖/http/import. Save a backfill variant of the Template: replace the :original upload Step with an import Step named imported, and change all four use: ":original" references (three encodes and the poster) to use: "imported". Configure that import Step with one authorized source URL or S3 key per Assembly. For /s3/import, configure its own source credentials and path; for /http/import, configure url. After a successful export and playback check, write the new playback URL to your database while retaining the source asset ID for reconciliation.

Checklist

  1. Decide whether videos should be encoded up front or on demand.
  2. Create a Template for your required renditions, thumbnails, captions, and exports.
  3. Configure storage credentials, CDN access, and CORS for HLS playback.
  4. Store exported storage URLs from Assembly Notifications.
  5. Run a backfill for existing source videos.
  6. Switch your player from Mux playback IDs to the exported manifest or Smart CDN URL.
Previous page ← Migrate from Uploadcare to TransloaditNext page Migrate from Filestack 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