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.
A simple API to handle any file in your app.
Receive, transform, or deliver any file with our API without owning or managing infrastructure.
✓ No credit card required



Read Case Studies
How can Transloadit boost your file handling?
Handle user uploads.
Serverless
Combine
Uppy.io with
Transloadit and
offer file handling like never before.
-
Pick locally or from Dropbox & friends
-
Resumes after bad Wi-Fi & crashes
-
Crop & resize in-browser
-
Easier on batteries & data plans
-
Open source and Free forever
-
Reject viruses
-
Optimize and store in your S3 bucket
-
Own your data
Try it: Upload any photo and we will recognize if there’s a face
on it.
Excellent for cropping profile pictures!
Learn more ›
$ npm i @uppy/core @uppy/dashboard @uppy/remote-sources @uppy/transloadit |
import Uppy from '@uppy/core'
import Dashboard from '@uppy/dashboard'
import RemoteSources from '@uppy/remote-sources'
import Transloadit, { COMPANION_URL } from '@uppy/transloadit'
const uppy = new Uppy()
.use(Dashboard)
.use(RemoteSources, { companionUrl: COMPANION_URL })
.use(Transloadit, {
waitForEncoding: true,
alwaysRunAssembly: true,
assemblyOptions: {
params: {
template_id: 'YOUR_TEMPLATE_ID',
auth: {
key: 'YOUR_TRANSLOADIT_KEY',
},
},
},
})
Deliver images faster. Transform on the fly
Transloadit can serve files from a data center close to your user, wherever that may be.
-
Up to 20x faster image delivery
-
Instant URL-based transformations
-
Short and secure URLs
-
Works with existing storage
-
Complex transforms via Templates
-
No code — save time and budget
-
Avoid abuse with Signatures
Automate processing
millions of files
Have large media asset libraries that need to be transcoded? Transloadit makes light work of this with our highly scalable platform.
-
Import from any cloud bucket
-
Convert and optimize files in parallel
-
Export to any cloud bucket
-
Integrates with any programming language
-
Command-line tool available
-
Leverage AI to make media searchable
-
50 more features available
-
01241126.jpgEncodingDone
-
01241126.webpEncodingDone
-
01241125.mp4EncodingDone
-
01241126.jpgEncodingDone
-
01241126.jpgEncodingDone
-
01241126.jpgEncodingDone
Why use Transloadit?
-
Free up development & server capacity
Encoding platforms require ongoing investment to deal with encoding, scaling, and stack headaches. We let you free up development & server capacity.
-
Automate your media workflows
Combine 65 features (Robots) to create workflows unique to your business. An elegant declarative JSON language makes this fool- and bullet proof.
-
Globally distributed, uptime 99.99%
Globally distributed, highly available, and scales to match any traffic. For 14 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.
Don't take our word for it
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.
Using Transloadit saves development and maintenance. Being able to focus on our product instead of reinventing the wheel cannot be understated.
Powerful file processing
Video Encoding
Choose from a variety of video encoding features to maximize file compatibility across platforms, as well as enrich video with effects, loops, watermarks, and more, to get the most out of your video content.
-
Resize and encode into various formats
-
Auto-correct badly rotated videos
-
Extract thumbnails
-
Watermark videos or surround them with a frame
-
+50 other video encoding features
Image Manipulation
Tailor your image content to fit your specific needs by making use of our various image manipulation features. Transloadit can convert, resize and crop images, and much more.
-
Convert images into various formats
-
Apply effects and watermarks to images
-
Crop, rotate and resizes images via smart strategies
-
Optimize images, reducing size by up to 80% without quality loss
-
+ Many other image manipulation features
Document Processing
Processing documents can be a tedious and time-consuming task, so why not let us take care of that? Transloadit offers a wide array of features to automate your document processing needs, saving you both time and money.
-
Convert document files into PDF format
-
Make screenshots of URLs and HTML files
-
Convert PDF pages into images
-
Overlay videos with dynamic artwork, generated with HTML & JS
-
+ Many other document processing features
Audio Encoding
Utilize a versatile toolkit of audio encoding features to maximize file compatibility across platforms, and enrich audio tracks with effects, loops, overlays, and more, to get the most out of your audio content.
-
Loop audio tracks
-
Generate waveform images from audio files
-
Concatenate two audio files
-
Normalize loudness on an audio track
-
+ Many other audio encoding options
There’s more...
Easy integration
Platforms
RestAPI
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.
{
"steps": {
"thumb": {
"use": ":original",
"robot": "/image/resize",
"width": 75,
"height": 75,
"resize_strategy": "fit"
}
}
}
cURL
Read docs: cURLWe would not recommend to use the cURL integration for production, but it can be convenient for a quick test when you don't have an SDK lying around.
# Prerequisites: brew install curl jq || sudo apt install curl jq
# To avoid tampering, use Signature Authentication
echo '{
"template_id": undefined,
"auth": {
"key": "YOUR_TRANSLOADIT_KEY"
},
"steps": {
"thumb": {
"use": ":original",
"robot": "/image/resize",
"width": 75,
"height": 75,
"resize_strategy": "fit"
}
}
}' |curl \
--request POST \
--form 'params=<-' \
--form myfile1=@./chameleon.jpg \
https://api2.transloadit.com/assemblies \
|jq
iOS & macOS
Read docs: TransloaditKit
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.
// Install via Swift Package Manager:
// dependencies: [
// .package(url: "https://github.com/transloadit/TransloaditKit", .upToNextMajor(from: "3.0.0"))
// ]
// Or via CocoaPods:
// pod 'Transloadit', '~> 3.0.0'
// Auth
let credentials = Credentials(key: "YOUR_TRANSLOADIT_KEY")
// Init
let transloadit = Transloadit(credentials: credentials, session: "URLSession.shared")
// Add files to upload
let filesToUpload: [URL] = ...
// Execute
let assembly = transloadit.assembly(steps: [thumbStep], andUpload: filesToUpload) { result in
switch result {
case .success(let assembly):
print("Retrieved (assembly)")
case .failure(let error):
print("Assembly error (error)")
}
}.pollAssemblyStatus { result in
switch result {
case .success(let assemblyStatus):
print("Received assemblystatus (assemblyStatus)")
case .failure(let error):
print("Caught polling error (error)")
}
jQuery
Read docs: jQuery SDKUntil 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.
<body>
<form action="/uploads" enctype="multipart/form-data" method="POST">
<input type="file" name="my_file" multiple="multiple" />
</form>
<script src="//ajax.googleapis.com/ajax/libs/jquery/3.2.0/jquery.min.js"></script>
<script src="//assets.transloadit.com/js/jquery.transloadit2-v3-latest.js"></script>
<script type="text/javascript">
$(function () {
$('form').transloadit({
wait: true,
triggerUploadOnFileSelection: true,
// To avoid tampering, use Signature Authentication:
// https://transloadit.com/docs/topics/signature-authentication/
auth: {
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',
},
},
})
})
</script>
</body>
Uppy is an open source file uploader for web browsers by Transloadit. With over 24,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 -->
<!-- For smaller self-hosted bundles, install Uppy and plugins manually: -->
<!-- npm i --save @uppy/core @uppy/dashboard @uppy/remote-sources @uppy/transloadit ... -->
<link
href="https://releases.transloadit.com/uppy/v3.16.0/uppy.min.css"
rel="stylesheet"
/>
<button id="browse">Select Files</button>
<script type="module">
import {
Uppy,
Dashboard,
ImageEditor,
RemoteSources,
Transloadit,
} from 'https://releases.transloadit.com/uppy/v3.16.0/uppy.min.mjs'
const uppy = new Uppy()
.use(Transloadit, {
waitForEncoding: true,
alwaysRunAssembly: true,
assemblyOptions: {
params: {
// To avoid tampering, use Signature Authentication:
// https://transloadit.com/docs/topics/signature-authentication/
auth: {
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',
},
},
},
},
})
.use(Dashboard, { trigger: '#browse' })
.use(ImageEditor, { target: Dashboard })
.use(RemoteSources, {
companionUrl: 'https://api2.transloadit.com/companion',
})
.on('complete', ({ transloadit }) => {
// Due to `waitForEncoding:true` this is fired after encoding is done.
// Alternatively, set `waitForEncoding` to `false` and provide a `notify_url`
console.log(transloadit) // Array of Assembly Statuses
transloadit.forEach((assembly) => {
console.log(assembly.results) // Array of all encoding results
})
})
.on('error', (error) => {
console.error(error)
})
</script>
Node.js
Read docs: Node SDKWe have a fully featured software development kit for Node.js, to make it easy to talk to the Transloadit REST API from your Node apps.
// yarn add transloadit || npm i transloadit
// Import
const Transloadit = require('transloadit')
// Init
const transloadit = new Transloadit({
authKey: 'YOUR_TRANSLOADIT_KEY',
authSecret: 'MY_TRANSLOADIT_SECRET',
})
// Set Encoding Instructions
const options = {
files: {
myfile_1: './chameleon.jpg',
},
params: {
steps: {
thumb: {
use: ':original',
robot: '/image/resize',
width: 75,
height: 75,
resize_strategy: 'fit',
},
},
},
}
// Execute
const result = await transloadit.createAssembly(options)
// Show results
console.log({ result })
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.
# [sudo] npm install transloadify -g
# Auth
export TRANSLOADIT_KEY="YOUR_TRANSLOADIT_KEY"
# Save Encoding Instructions
echo '{
"steps": {
"thumb": {
"use": ":original",
"robot": "/image/resize",
"width": 75,
"height": 75,
"resize_strategy": "fit"
}
}
}' > ./steps.json
# Execute
transloadify \
--input "chameleon.jpg" \
--steps "./steps.json" \
--output "./output.example"
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([
"key" => "YOUR_TRANSLOADIT_KEY",
"secret" => "MY_TRANSLOADIT_SECRET",
]);
// Start the Assembly
$response = $transloadit->createAssembly([
"files" => ["chameleon.jpg"],
"params" => [
"steps" => [
"thumb" => [
"use" => ":original",
"robot" => "/image/resize",
"width" => 75,
"height" => 75,
"resize_strategy" => "fit",
],
],
],
]);
Ruby
Read docs: Ruby SDKOur 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
# $ irb -rubygems
# >> require 'transloadit'
# => true
transloadit = Transloadit.new([
:key => "YOUR_TRANSLOADIT_KEY",
])
# Set Encoding Instructions
thumb = transloadit.step("thumb", "/image/resize", [
:use => ":original",
:width => 75,
:height => 75,
:resize_strategy => "fit"
])
transloadit.assembly([
:steps => [thumb]
])
# Add files to upload
files = []
files.push("chameleon.jpg")
# Start the Assembly
response = assembly.create! *files
until response.finished?
sleep 1; response.reload!
end
if !response.error?
# handle success
end
Python
Read docs: Python SDK# pip install pytransloadit
from transloadit import client
tl = client.Transloadit('YOUR_TRANSLOADIT_KEY', 'MY_TRANSLOADIT_SECRET')
assembly = tl.new_assembly()
# Set Encoding Instructions
assembly.add_step("thumb", "/image/resize", {
'use': ':original',
'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)
print(assembly_response.data.get('assembly_ssl_url'))
# or:
print(assembly_response.data['assembly_ssl_url'])
We have a powerful Go client that makes using Transloadit easy.
// go get gopkg.in/transloadit/go-sdk.v1
package main
import (
"context"
"fmt"
"github.com/transloadit/go-sdk"
)
func main() {
// Create client
options := transloadit.DefaultConfig
options.AuthKey = "YOUR_TRANSLOADIT_KEY"
options.AuthSecret = "MY_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("chameleon.jpg"))
// Start the Assembly
info, err := client.StartAssembly(context.Background(), assembly)
if err != nil {
panic(err)
}
// 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 {
panic(err)
}
fmt.Printf("You can check some results at: ")
fmt.Printf(" - %s\n", info.Results["thumb"][0].SSLURL)
}
Java
Read docs: Java SDK// implementation 'com.transloadit.sdk:transloadit:1.0.0
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.io.File;
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) {
// Initialize the Transloadit client
Transloadit transloadit = new Transloadit("YOUR_TRANSLOADIT_KEY", "MY_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 = assembly.save();
// Wait for Assembly to finish executing
while (!response.isFinished()) {
response = transloadit.getAssemblyByUrl(response.getSslUrl());
}
System.out.println(response.getId());
System.out.println(response.getUrl());
System.out.println(response.json());
} catch (RequestException | LocalOperationException e) {
// Handle exception here
}
}
}
We make the web better for everyone
Our team continues to advance the state of the art, releasing building blocks that carry an ecosystem.
-
#1 to run Node.js in production
Our founders are early contributors to Node.js and helped pave the path and shape an ecosystem that millions of teams around the world rely on today. -
#1 in open source file handling solutions
-
#1 Node modules
Whether you're dealing with file uploads, MySQL databases or networked/unreliable systems, our Node modules are the industry standard. -
#1 GitHub partner offering encoding to students
We're the first cloud encoder GitHub has partnered with to offer 10GB of free encoding credit to teachers and students who have enrolled in the GitHub Student Pack and GitHub Teacher Toolbox.
-
+ 2,000,000Depending on our modules
-
+ 24,000Uppy stargazers on GitHub
-
92%Recommend Transloadit
-
80%Revenue to open source