File Uploading and Processing.
Most advanced in the world.

We obsess over files so you don’t have to. Transform

  • Images
  • ,
  • Video
  • ,
  • Audio   & 
  • Documents.

Import, capture, filter, convert, resize, merge,
and so much more.

Our API is a Swiss army knife for developers.

We converted tenth petabyte of media since 2009. That’s ten million gigabytes.

These companies trust us with their media processing

Check out the Case Studies

How we can help you

  • Upload & Import

    We accept file uploads and imports from mobile apps, web browsers, URLs, S3, Google, Facebook, Digitalocean, Dropbox, FTP and more!

  • Convert & Encode

    We offer a variety of file conversions for all sorts of media, including images, videos, audio, and documents.

  • Export & Save

    Export uploads and encoded results to the services of your choice, then save the URLs to your database for later use.

  • Display & Enjoy

    Embed the file URLs into your app, so users can enjoy media files with the best possible quality for their device.

Benefits of using our service

  • Cut Costs

    Encoding platforms require ongoing investment to deal with encoding, scaling, and stack headaches. Transloadit lets you free up development & server capacity and decimates time to market.

  • Custom Workflows

    Combine 52 features (Robots) to create workflows unique to your business. An elegant declarative JSON language makes this fool- and bullet proof.

  • Rock Solid

    Our platform is globally distributed, highly available, and scales to match any traffic. For 10 years in a row, that has paid off in an uptime of > 99.99%. See Server Status

  • Fantastic Support

    We pride ourselves in providing outstanding and timely support right from our developers, to all of our customers.

What our customers are saying

I'm not usually one for fanboy-ism but Transloadit is one service I would recommend without hesitation. Their product and customer support is outstanding.

Dave Perrett

Having a solution for both uploading and transcoding has been a godsend for the current scale that we are at five years after first choosing Transloadit.

Jon Wong
Engineer at Coursera

Using Transloadit saves development and maintenance. Being able to focus on our product instead of reinventing the wheel cannot be understated.

Matt Sumner
Developer at thoughtbot

A Swiss army knife for files

Video & Audio encoding
  • Resize and encode into various formats
  • Auto-correct badly rotated videos
  • Extract thumbnails
  • Create a new video from a set of images and add an audio track
  • Create video segments and adaptive playlists (HTTP Live Streaming)
  • Watermark videos or surround them with a frame
  • Merge video and audio files
  • Replace the audio track of a video
  • Insert and extract audio cover artwork images
  • Generate audio waveform images (similar to SoundCloud)
Image & Document Conversion
  • Crop, rotate and resize via smart strategies
  • Apply effects and watermarks
  • Optimize images, reducing size by up to 80% without quality loss
  • Make screenshots of URLs and HTML files
  • Convert PDF pages into images
And more
  • Scan files for viruses and other threats
  • Import and export via S3, Google Storage, Dropbox, (S)FTP, HTTP, Digitalocean, Azure, Rackspace,, Wasabi, Openstack, etc.
  • Support for even the most obscure file formats and codecs
All of this can be automated by integrating with Transloadit. We regularly add more features and would love to hear your suggestion.

Easy integration


Instead of sending Assembly Instructions directly to Transloadit, you can also save them in a secured way as a Template. You can then refer to the template_id in your requests, making sure that secrets and Instructions no longer have to be transmitted, which is a security risk in many cases.

Here is a 'raw' Template, in case you would like to save these Instructions safely in your account, or use these Instructions to talk directly to our REST API without using any SDK.

  "thumb": {
    "use": ":original",
    "robot": "/image/resize",
    "width": 75,
    "height": 75,
    "resize_strategy": "fit"

It's easy to start using Transloadit in Objective-C and Swift using CocoaPods or Carthage and leverage file uploading & encoding in macOS and iOS apps.

// Add 'Transloadit' to your Podfile, run 'pod install', add credentials to 'Info.plist'
import Arcane
import TransloaditKit

// Set Encoding Instructions
var AssemblySteps: Array = Array<Step>() // An array to hold the Steps

var Step1 = Step (key: "thumb") // Create a Step object
Step1?.setValue(":original", forOption: "use") // Add the details
Step1?.setValue("/image/resize", forOption: "robot") // Add the details
Step1?.setValue(75, forOption: "width") // Add the details
Step1?.setValue(75, forOption: "height") // Add the details
Step1?.setValue("fit", forOption: "resize_strategy") // Add the details
AssemblySteps.append(Step1) // Add the Step to the array

// We then create an Assembly Object with the Steps and files
var MyAssembly: Assembly = Assembly(steps: AssemblySteps, andNumberOfFiles: 1)

// Add files to upload

// Start the Assembly

// Fires after your Assembly has completed
transloadit.assemblyStatusBlock = {(_ completionDictionary: [AnyHashable: Any]) -> Void in

Until Uppy reached 1.0, our jQuery SDK was the recommended way to integrate Transloadit with web browsers. This is no longer the case and we'd now like everybody to use Uppy instead. The form method of the Robodog Plugin offers a very easy migration for jQuery SDK users.

  <form action="/uploads" enctype="multipart/form-data" method="POST">
    <input type="file" name="my_file" multiple="multiple" />

  <script src="//"></script>
  <script src="//"></script>
  <script type="text/javascript">
  $(function() {
      wait: true,
      triggerUploadOnFileSelection: true,
      params: {
        auth: {
          // To avoid tampering use signatures:
          key: 'YOUR_TRANSLOADIT_KEY',
        // It's often better store encoding instructions in your account
        // and use a `template_id` instead of adding these steps inline
        steps: {
          thumb: {
            use: ':original',
            robot: '/image/resize',
            width: 75,
            height: 75,
            resize_strategy: 'fit'

Uppy is an open source file uploader for web browsers by Transloadit. With over 21,000 stargazers on GitHub it is the #1 file uploader in the world. Uploads can survive network hiccups, browser crashes, and accidental navigate-aways thanks to Tus support built-in, and it is the recommended way to integrate Transloadit with web browsers.

<!-- This pulls Uppy from our CDN. Alternatively use `npm i @uppy/robodog --save` -->
<!-- if you want smaller self-hosted bundles and/or to use modern JavaScript -->
<link href="//" rel="stylesheet">
<script src="//"></script>
<button id="browse">Select Files</button>
  document.getElementById('browse').addEventListener('click', function () {
    var uppy = window.Robodog.pick({
      providers: [ 'instagram', 'url', 'webcam', 'dropbox', 'google-drive', 'facebook', 'onedrive' ],
      waitForEncoding: true,
      params: {
        // To avoid tampering, use Signature Authentication
        auth: { key: 'YOUR_TRANSLOADIT_KEY' },
        // To hide your `steps`, use a `template_id` instead
        steps: {
          thumb: {
            use: ':original',
            robot: '/image/resize',
            width: 75,
            height: 75,
            resize_strategy: 'fit'
    }).then(function (bundle) {
      // Due to `waitForEncoding: true` this is fired after encoding is done.
      // Alternatively, set `waitForEncoding` to `false` and provide a `notify_url`
      // for Async Mode where your back-end receives the encoding results
      // so that your user can be on their way as soon as the upload completes.
      console.log(bundle.transloadit) // Array of Assembly Statuses
      console.log(bundle.results)     // Array of all encoding results

We have a fully featured software development kit for Node.js, so you can easily integrate it into your node apps.

// yarn add transloadit || npm i transloadit --save-exact
const Transloadit = require('transloadit')

const transloadit = new Transloadit({

// Set Encoding Instructions
const options = {
  params: {
    steps: {
      thumb: {
        use: ':original',
        robot: '/image/resize',
        width: 75,
        height: 75,
        resize_strategy: 'fit',

// Add files to upload
transloadit.addFile('myfile_1', './chameleon.jpg')

// Start the Assembly
transloadit.createAssembly(options, (err, result) => {
  if (err) {
    throw err


Don't feel like coding? Use our command line tool to watch an ./input/ directory for incoming files and automatically convert them through instructions that you saved locally in: ./steps.json.

The results will be saved in the ./output/ directory.

You can optionally automatically remove successfully processed input files.

npm install transloadify -g


# Save Encoding Instructions
echo '{
  "thumb": {
    "use": ":original",
    "robot": "/image/resize",
    "width": 75,
    "height": 75,
    "resize_strategy": "fit"
}' > ./steps.json

transloadify \
  --input "./chameleon.jpg" \ 
  --output "./output.example" \
  --steps "./steps.json"

Our PHP SDK allows you to automate the uploading of files through the Transloadit REST API using PHP.

It can be installed via composer.

// composer require transloadit/php-sdk
use transloadit\Transloadit;
$transloadit = new Transloadit([

// Add files to upload
$files = [];
array_push($files, "./chameleon.jpg")

// Start the Assembly
$response = $transloadit->createAssembly([
  "files" => $files, 
  "params" => [
    "steps" => [
      "thumb" => [
        "use" => ":original",
        "robot" => "/image/resize",
        "width" => 75,
        "height" => 75,
        "resize_strategy" => "fit",

Our Ruby Gem allows you to automate the uploading of files through the Transloadit REST API.

If you run Ruby on Rails and are instead looking to integrate with the browser to handle file uploads, then we also have a Ruby on Rails SDK ready for you to use.

# gem install transloadit
transloadit =

# Set Encoding Instructions
thumb = transloadit.step "thumb", "/image/resize",
  :use => ":original",
  :width => 75,
  :height => 75,
  :resize_strategy => "fit"

assembly = transloadit.assembly(
  :steps => [ thumb ]

# Add files to upload
files = []

# Start the Assembly
response = assembly.create! *files

until response.finished?
  sleep 1; response.reload!

if !response.error?
  # handle success
# pip install pytransloadit
from transloadit import client

assembly = tl.new_assembly()

# Set Encoding Instructions
assembly.add_step('thumb', {
  'use': ':original',
  'robot': '/image/resize',
  'width': 75,
  'height': 75,
  'resize_strategy': 'fit'
# Add files to upload
assembly.add_file(open('./chameleon.jpg', 'rb'))

# Start the Assembly
assembly_response = assembly.create(retries=5, wait=True)


# or

We have a powerful Go client that makes using Transloadit easy.

// go get
options := transloadit.DefaultConfig
options.AuthKey = "YOUR_TRANSLOADIT_KEY"
options.AuthSecret = "YOUR_TRANSLOADIT_SECRET"
client := transloadit.NewClient(options)

// Initialize new Assembly
assembly := transloadit.NewAssembly()

// Set Encoding Instructions
assembly.AddStep("thumb", map[string]interface{}{
  "use": ":original",
  "robot": "/image/resize",
  "width": 75,
  "height": 75,
  "resize_strategy": "fit"

// Add files to upload
assembly.AddFile("myfile_1", "./chameleon.jpg")

// Start the Assembly
info, err := client.StartAssembly(context.Background(), assembly)
if err != nil {

// All files have now been uploaded and the Assembly has started but no
// results are available yet since the conversion has not finished.
// WaitForAssembly provides functionality for polling until the Assembly
// has ended.
info, err = client.WaitForAssembly(context.Background(), info)
if err != nil {

fmt.Printf("You can view the result at: %s\n", info.Results["resize"][0].SSLURL)
// compile 'com.transloadit.sdk:transloadit:0.1.5'
import com.transloadit.sdk.Assembly;
import com.transloadit.sdk.Transloadit;
import com.transloadit.sdk.exceptions.LocalOperationException;
import com.transloadit.sdk.exceptions.RequestException;
import com.transloadit.sdk.response.AssemblyResponse;

import java.util.HashMap;
import java.util.Map;

public class Main {
  public static void main(String[] args) {
    Transloadit transloadit = new Transloadit("YOUR_TRANSLOADIT_KEY", "YOUR_TRANSLOADIT_SECRET");
    Assembly assembly = transloadit.newAssembly();
    // Set Encoding Instructions
    Map<String Object> thumbStepOptions = new HashMap();
    thumbStepOptions.put("use", ":original");
    thumbStepOptions.put("width", 75);
    thumbStepOptions.put("height", 75);
    thumbStepOptions.put("resize_strategy", "fit");
    assembly.addStep("thumb", "/image/resize", thumbStepOptions);
    // Add files to upload
    assembly.addFile(new File("./chameleon.jpg"));
    // Start the Assembly
    try {
      AssemblyResponse response =;
      // Wait for Assembly to finish executing
      while (!response.isFinished()) {
        response = transloadit.getAssemblyByUrl(response.getSslUrl());
    } catch (RequestException | LocalOperationException e) {
      // Handle exception here

To use Transloadit with Heroku, add our Addon via their web interface or the the Heroku CLI like so:

# yarn global add heroku
# heroku create your-sample-app-123
$ heroku addons:create transloadit --app=your-sample-app-123
-----> Adding transloadit to your-sample-app-123... done, v18 (free)

Once Transloadit has been added the TRANSLOADIT_AUTH_KEY and TRANSLOADIT_SECRET_KEY settings will be available in the app configuration and will contain the credentials needed to authenticate to the Transloadit API. This can be confirmed using the heroku config:get command.

$ heroku config:get TRANSLOADIT_AUTH_KEY

Now you're ready to start using Transloadit in your Heroku app using an SDK for any programming language that Heroku supports.

When you're ready to use a paid plan, you can upgrade like so:

$ heroku addons:upgrade transloadit:enterprise
-----> Upgrading transloadit:enterprise to your-sample-app-123... done, v18 ($299/mo)
       Your plan has been updated to: transloadit:enterprise

Note that Heroku does not support overages, meaning the service will stop when you reach your plan limit.

You can configure your Zapier integration by creating a Template that holds Encoding Instructions, and then using the Zapier web interface to have those Instructions executed on files coming from Dropbox, Gmail, Slack, and thousands of other places that Zapier supports.

For example, we wrote a detailed tutorial on how to automatically burn logos into videos as they are added to a Google Drive.

Try it now

Cropping Images

This demo resizes and crops uploaded images to 100×100 pixels. Drop files to the left, or select files using the device's native file browser. See the Demos page for the Assembly Instructions used.

Zip Archive

Transloadit can assemble multiple files into a single result, or a single file into multiple results. This demo archives all uploaded files into a single .zip file. See the Demos page for the Assembly Instructions used.

Face Detection

With the Uppy Transloadit integration, users can upload photos from their webcam straight to Transloadit. Excellent for capturing profile pictures! See the Demos page for the Assembly Instructions used.

Virus Scanning

Scan uploaded files and reject virus-infected ones before they ever reach your servers. See the Demos page for the Assembly Instructions used.

Image Optimization

Save bandwidth and storage space by losslessly optimizing images, reducing file sizes by up to 80%. See the Demos page for the Assembly Instructions used.

By engineers who set the standard

Being pioneers of Node.js meant that we had to “invent a few wheels”. With those wheels we have helped to put the world in motion.

Here are some of our more ambitious open source projects:

As seen on