Transloadit is one service I would recommend without hesitation. Their product and customer support is outstanding. I heartily recommend using this service!
Dave Perrett
CTO at Shuttlerock
The world’s most advanced file uploading and processing service
Developers integrate with us to handle file uploads, resize, crop and watermark images, make GIFs, transcode videos, extract thumbnails, generate audio waveforms, process documents, and so much more. In short, our API is a Swiss Army Knife for your users' files.
These companies trust us with their media processing
How we can help you
-
Upload & Import
We accept file uploads and imports from various sources, including mobile apps, web browsers, URLs, S3, Cloud Files, Azure, FTP, Facebook, Dropbox 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
-
Save Resources
Outsourcing file processing will cut costs, save your team many headaches and get your app into production faster.
-
Boost Performance
Keep your app servers running fast by isolating them from loadspikes related to media processing.
-
Easy Workflows
String together multiple processing steps in order to handle complex workflows and tasks with ease
-
Fantastic Support
We pride ourselves in providing outstanding and timely support to all of our users. You will have direct access to our developers.
What our customers are saying
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 weeks of development. Being able to concentrate on our product instead of reinventing the wheel cannot be understated.
Matt Sumner
Developer at thoughtbot
A swiss army knife for your files
Video & Audio encoding
- Rotate, resize and encode into various formats
- 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 SFTP, FTP, HTTP, S3, Azure, Cloud Files, Softlayer, etc.
We regularly add more features. We would love to hear your suggestions.
Easy Integration
{
"steps": {
"thumb": {
"use": ":original",
"robot": "/image/resize",
"width": 75,
"height": 75,
"resize_strategy": "fit"
}
}
}RestAPI Example
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 the '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.
Check out our Raw Template integration// Add 'Transloadit' to your Podfile, run `pod install`, add credentials to `Info.plist`
import Arcane
import TransloaditKit
// Assembly Steps
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 TestAssembly: Assembly = Assembly(steps: AssemblySteps, andNumberOfFiles: 1)
// Add files to upload
TestAssembly.addFile("./chameleon.jpg") // Add the file)
// Create the Assembly
Transloadit.createAssembly(TestAssembly)
// Fires after your Assembly has completed
transloadit.assemblyStatusBlock = {(_ completionDictionary: [AnyHashable: Any]) -> Void in
print("\(completionDictionary.description)")
}iOS & macOS Example
It's very easy to start using Transloadit for Objective-C and Swift using CocoaPods. This way can add file uploading & encoding to macOS and iOS apps.
Check out our TransloaditKit integration<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,
params: {
auth: {
// Secure via: https://transloadit.com/docs/api-docs/#authentication
key: 'YOUR_TRANSLOADIT_KEY',
},
// It's often better to use a `template_id` than to
// inline encoding instructions here:
steps: {
thumb: {
use: ':original',
robot: '/image/resize',
width: 75,
height: 75,
resize_strategy: 'fit'
}
}
}
});
});
</script>
</body>jQuery Example
By using our jQuery SDK, you can bring the power of Transloadit directly to your HTML forms. It will even display a stylish upload progress bar.
Enjoy ample customization options for design and behavior and make use of the many event callbacks to tailor its behavior to your needs.
We have a great new JavaScript uploader in the works called Uppy and you are welcome to give that a shot, but for now, the following example uses our jQuery SDK and it is still the recommended way to integrate Transloadit into web browsers.
Check out our jQuery SDK integration<link href="https://unpkg.com/uppy/dist/uppy.min.css" rel="stylesheet">
<script src="https://unpkg.com/uppy/dist/uppy.min.js"></script>
<button id="uppy-open-modal">Select Files</button>
<script>
const uppy = Uppy.Core({ debug: true, autoProceed: false })
.use(Uppy.Tus10, { resume: false })
.use(Uppy.Transloadit, {
params: {
auth: {
key: 'YOUR_TRANSLOADIT_KEY',
},
steps: {
thumb: {
use: ':original',
robot: '/image/resize',
width: 75,
height: 75,
resize_strategy: 'fit'
}
}
},
waitForEncoding: true,
})
.use(Uppy.Dashboard, {
trigger: '#uppy-open-modal',
target: 'body'
})
.use(Uppy.Webcam, { target: Dashboard })
.on('transloadit:result', (stepName, result) => {
// use transloadit encoding result here.
console.log('Result here ====>', stepName, result)
})
.run()
</script>// npm install transloadit --save
const TransloaditClient = require('transloadit')
const transloadit = new TransloaditClient({
authKey: 'YOUR_TRANSLOADIT_KEY',
authSecret: 'YOUR_TRANSLOADIT_SECRET'
})
transloadit.addFile('myfile_1', './chameleon.jpg')
const options = {
params: {
steps: {
thumb: {
use: ':original',
robot: '/image/resize',
width: 75,
height: 75,
resize_strategy: 'fit'
}
}
}
}
transloadit.createAssembly(options, (err, result) => {
if (err) {
throw err
}
console.log({result})
})Node.js Example
We have a fully featured software development kit for Node.js, so you can easily integrate it into your node apps.
Check out our Node SDK integrationnpm install transloadify -g
echo '{
"thumb": {
"use": ":original",
"robot": "/image/resize",
"width": 75,
"height": 75,
"resize_strategy": "fit"
}
}' > ./steps.json
export TRANSLOADIT_KEY="YOUR_TRANSLOADIT_KEY"
export TRANSLOADIT_SECRET="YOUR_TRANSLOADIT_SECRET"
transloadify \
--input ./lolcat.jpg \
--output ./resized-lolcat.jpg \
--steps ./steps.jsonCLI Example
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.
Check out our Transloadify integration// Install "transloadit/php-sdk"
// via Composer (https://getcomposer.org)
use transloadit\Transloadit;
$transloadit = new Transloadit([
"key" => "YOUR_TRANSLOADIT_KEY",
"secret" => "YOUR_TRANSLOADIT_SECRET",
]);
$files = [];
array_push($files, "./chameleon.jpg");
$response = $transloadit->createAssembly([
"files" => $files,
"params" => [
"steps" => [
"thumb" => [
"use" => ":original",
"robot" => "/image/resize",
"width" => 75,
"height" => 75,
"resize_strategy" => "fit",
],
],
],
]);PHP 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.
Check out our PHP SDK integration# gem install transloadit
transloadit = Transloadit.new(
:key => "YOUR_TRANSLOADIT_KEY",
:secret => "YOUR_TRANSLOADIT_SECRET"
)
thumb = transloadit.step "thumb", "/image/resize",
:use => ":original",
:width => 75,
:height => 75,
:resize_strategy => "fit"
)
assembly = transloadit.assembly(
:steps => [ thumb ]
)
files = []
files.push("./chameleon.jpg")
response = assembly.create! *files
until response.finished?
sleep 1; response.reload!
end
if !response.error?
# handle success
endRuby Example
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.
Check out our Ruby SDK integration# pip install pytransloadit
from transloadit import client
tl = client.Transloadit('YOUR_TRANSLOADIT_KEY', 'YOUR_TRANSLOADIT_SECRET')
assembly = tl.new_assembly()
# Add files to upload
assembly.add_file(open('./chameleon.jpg', 'rb'))
# Add instructions, e.g. resize image, or encode video
assembly.add_step('thumb', {
'use': ':original',
'robot': '/image/resize',
'width': 75,
'height': 75,
'resize_strategy': 'fit'
})
# Start the Assembly
assembly_response = assembly.create(retries=5, wait=True)
print assembly_response.data.get('assembly_id')
# or
print assembly_response.data['assembly_id']Python Example
Check out our Python SDK integration// go get gopkg.in/transloadit/go-sdk.v1
options := transloadit.DefaultConfig
options.AuthKey = "YOUR_TRANSLOADIT_KEY"
options.AuthSecret = "YOUR_TRANSLOADIT_SECRET"
client := transloadit.NewClient(options)
// Initialize new assembly
assembly := transloadit.NewAssembly()
// Add files to upload
assembly.AddFile("myfile_1", "./chameleon.jpg")
// Add instructions, e.g. resize image, or encode video
assembly.AddStep("thumb", map[string]interface{}{
"use": ":original",
"robot": "/image/resize",
"width": 75,
"height": 75,
"resize_strategy": "fit"
})
// 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 view the result at: %s\n", info.Results["resize"][0].SSLURL)Go Example
We have a powerful Go client that makes using Transloadit easy.
Check out our Go SDK integration// compile 'com.transloadit.sdk:transloadit:0.0.3'
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) {
Transloadit transloadit = new Transloadit("YOUR_TRANSLOADIT_KEY", "YOUR_TRANSLOADIT_SECRET");
Assembly assembly = transloadit.newAssembly();
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);
assembly.addFile(new File("./chameleon.jpg"));
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
}
}
}Java Example
Check out our Java SDK integrationTry it now
Cropping Images
This demo resizes and crops uploaded images to 100x100 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 Recognition
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:





