← All posts

FFHub vs Transloadit — A Developer's Comparison

Comparing FFHub and Transloadit for cloud media processing. Covers API design, pricing models, FFmpeg support, learning curve, and best use cases.

FFHub·2026-05-11
FFHub vs Transloadit — A Developer's Comparison

Transloadit and FFHub both process media in the cloud, but their approaches couldn't be more different. Transloadit is a full-featured file processing platform with its own Assembly language and Robot system. FFHub is a focused cloud FFmpeg API where you send FFmpeg commands and get results. This comparison breaks down the key differences to help you choose.

Quick Overview

Transloadit is a media processing platform built around the concept of "Assemblies" and "Robots." You define processing pipelines using a JSON-based DSL (domain-specific language), where each step is handled by a specialized Robot — one for video encoding, another for image resizing, another for file importing, etc.

FFHub is a cloud FFmpeg API. You send a standard FFmpeg command via REST API, FFHub executes it, and you get the result. One concept, one endpoint.

Comparison Table

FeatureFFHubTransloadit
API modelREST API — send FFmpeg commandAssembly DSL with Robots
Processing scopeVideo/audio (FFmpeg)Video, audio, images, documents
FFmpeg compatibility100%Partial — exposed through Robot parameters
Learning curveKnow FFmpeg = know FFHubLearn Assembly syntax + Robot catalog
Pricing modelPer-second processing timePer-GB of output + monthly plans
File upload widgetNoYes — Uppy (open source)
Input sourcesURL, local file uploadURL, S3, GCS, Azure, direct upload
Image processingVia FFmpeg (limited)Full-featured (ImageMagick-based)
Document processingNoYes (PDF, Office docs)
Pipeline orchestrationSequential FFmpeg commandsAssembly steps with dependencies
WebhookYesYes (notify Robot)
Client librariesNode.js, Python, CLINode.js, Ruby, Python, PHP, Java, Go
Vendor lock-inNone — standard FFmpegHigh — proprietary Assembly DSL

API Design: FFmpeg Command vs Assembly DSL

This is the fundamental difference between the two services.

FFHub: One Command

curl -X POST https://api.ffhub.io/v1/tasks \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "command": "ffmpeg -i https://example.com/input.mp4 -c:v libx264 -crf 23 -vf scale=1280:720 -c:a aac -b:a 128k output.mp4"
  }'

If you've used FFmpeg before, you can read this immediately. The command is the same as what you'd run on your local machine.

Transloadit: Assembly with Robots

{
  "steps": {
    "imported": {
      ":robot": "/http/import",
      "url": "https://example.com/input.mp4"
    },
    "encoded": {
      ":robot": "/video/encode",
      "use": "imported",
      "preset": "iphone-high",
      "width": 1280,
      "height": 720,
      "ffmpeg_stack": "v6.0.0",
      "ffmpeg": {
        "crf": 23,
        "b:a": "128k"
      }
    },
    "exported": {
      ":robot": "/s3/store",
      "use": "encoded",
      "bucket": "my-bucket",
      "key": "output/${file.id}.mp4",
      "credentials": "my_aws_creds"
    }
  }
}

Transloadit's Assembly syntax is more verbose but structured. Each "step" uses a "Robot" that performs a specific action. Robots are chained together with the use keyword.

The Learning Curve

With FFHub, the learning curve is essentially zero if you know FFmpeg. You write the same command you'd run locally.

With Transloadit, you need to learn:

  • The Assembly JSON structure
  • The Robot catalog (50+ Robots)
  • How to chain Robots with use directives
  • Robot-specific parameters (which differ from FFmpeg flags)
  • Template syntax for reusable Assemblies

The Transloadit documentation is extensive, but it's a new mental model to absorb.

FFmpeg Flexibility

FFHub: Unrestricted Access

FFHub runs your FFmpeg command as-is. This means you get access to every feature FFmpeg supports:

# Complex filter graph with multiple inputs
ffmpeg -i video.mp4 -i overlay.png -i audio.mp3 \
  -filter_complex \
  "[0:v][1:v]overlay=10:10[bg]; \
   [bg]drawtext=text='%{pts\:hms}':fontsize=20:fontcolor=white:x=10:y=H-th-10[v]" \
  -map "[v]" -map 2:a \
  -c:v libx264 -crf 22 -c:a aac output.mp4

# Two-pass encoding for precise bitrate control
ffmpeg -i input.mp4 -c:v libx264 -b:v 4M -pass 1 -f null /dev/null
ffmpeg -i input.mp4 -c:v libx264 -b:v 4M -pass 2 output.mp4

# Generate animated GIF with palette optimization
ffmpeg -i input.mp4 -vf "fps=10,scale=480:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" output.gif

# Extract audio, normalize, and convert to Opus
ffmpeg -i input.mp4 -vn -af "loudnorm=I=-16:TP=-1.5:LRA=11" -c:a libopus -b:a 128k output.opus

Transloadit: Robot Parameters

Transloadit exposes some FFmpeg options through Robot parameters, but not all:

{
  "steps": {
    "encoded": {
      ":robot": "/video/encode",
      "use": "imported",
      "preset": "empty",
      "ffmpeg_stack": "v6.0.0",
      "width": 1280,
      "height": 720,
      "ffmpeg": {
        "crf": 23,
        "b:a": "128k",
        "vf": "drawtext=text='Hello':fontsize=24:fontcolor=white:x=10:y=10"
      }
    }
  }
}

The ffmpeg object inside Robot steps lets you pass some FFmpeg flags, but complex filter graphs, multi-input operations, and many advanced features aren't directly supported. You're limited to what the Robot system exposes.

What you can't easily do in Transloadit:

  • Multi-input filter graphs (combining multiple video sources)
  • Two-pass encoding
  • Arbitrary stream mapping
  • Some exotic codecs and output formats
  • Custom frame extraction logic with complex conditions

Pricing Comparison

FFHub Pricing

Simple and transparent:

  • Per-second of actual processing time
  • $0.005/second (standard tier)
  • Free temporary storage for 24 hours
  • Data transfer included

Transloadit Pricing

Based on monthly plans and output volume:

PlanMonthly CostIncluded GBOverage per GB
Startup$49/month10 GB$4.00/GB
Growth$149/month50 GB$3.00/GB
Business$449/month200 GB$2.25/GB
EnterpriseCustomCustomCustom

Transloadit charges based on output file size (GB), not processing time. This means:

  • A 1GB output file costs the same whether it took 10 seconds or 10 minutes to process
  • Generating multiple outputs from one input multiplies the cost
  • Audio-only outputs (small file size) are relatively cheap
  • High-resolution or high-bitrate outputs (large file size) are expensive

Cost Calculator: Real Scenarios

Scenario 1: 1,000 videos, 5 min each, H.264 720p output (~150MB each)

FFHubTransloadit
Calculation30s avg × 1,000 × $0.005150GB output × $3.00/GB (Growth plan)
Processing cost$150$450
Monthly plan$0$149
Total$150$599

Scenario 2: 200 videos, 2 min each, multi-bitrate (1080p + 720p + 480p, ~300MB total per video)

FFHubTransloadit
Calculation60s avg × 200 × $0.00560GB output × $4.00/GB (Startup plan)
Processing cost$60$240
Monthly plan$0$49
Total$60$289

Scenario 3: 10,000 audio extractions, ~5MB each output

FFHubTransloadit
Calculation3s avg × 10,000 × $0.00550GB output × $3.00/GB (Growth plan)
Processing cost$150$150
Monthly plan$0$149
Total$150$299

FFHub's per-second model tends to be more predictable and often cheaper, especially when generating large output files. Transloadit's per-GB model can be more economical for tasks that produce small outputs from long processing times. For a similar pricing breakdown, see our comparison with AWS MediaConvert.

File Upload: Uppy vs Direct API

Transloadit: Uppy Upload Widget

One of Transloadit's standout features is Uppy, their open-source file upload widget:

<script>
  import Uppy from '@uppy/core'
  import Transloadit from '@uppy/transloadit'

  const uppy = new Uppy()
    .use(Transloadit, {
      assemblyOptions: {
        params: {
          auth: { key: 'YOUR_TRANSLOADIT_KEY' },
          steps: {
            encoded: {
              robot: '/video/encode',
              preset: 'iphone-high'
            }
          }
        }
      }
    })
</script>

Uppy provides drag-and-drop, progress bars, resumable uploads, and webcam capture out of the box. If you're building a user-facing upload experience, this is genuinely valuable.

FFHub: API and CLI

FFHub handles file upload through the API and CLI:

# CLI upload
ffhub upload video.mp4 --command "ffmpeg -i video.mp4 -c:v libx264 output.mp4"

# API upload
curl -X POST https://api.ffhub.io/v1/tasks \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "[email protected]" \
  -F 'command=ffmpeg -i video.mp4 -c:v libx264 -crf 23 output.mp4'

FFHub doesn't offer a frontend upload widget. For user-facing uploads, you'd need to build your own or use a third-party solution.

Beyond Video: Transloadit's Broader Scope

Transloadit processes more than just video. Its Robot catalog includes:

  • Image processing: Resize, crop, watermark, face detection, smart cropping
  • Document processing: PDF generation, Office document conversion
  • Audio processing: Waveform generation, speech-to-text
  • File management: Import from / export to S3, GCS, Azure, FTP, SFTP

If your application needs a single service for all file processing (not just video), Transloadit's breadth is a significant advantage.

FFHub is laser-focused on FFmpeg. It excels at video and audio processing but doesn't handle images (beyond what FFmpeg can do) or documents.

Pipeline Orchestration

Transloadit: Assembly Steps

Transloadit's Assembly system lets you chain multiple Robots into a pipeline:

{
  "steps": {
    "imported": {
      ":robot": "/http/import",
      "url": "https://example.com/input.mp4"
    },
    "thumbnails": {
      ":robot": "/video/thumbs",
      "use": "imported",
      "count": 5
    },
    "encoded_hd": {
      ":robot": "/video/encode",
      "use": "imported",
      "preset": "iphone-high",
      "width": 1920,
      "height": 1080
    },
    "encoded_sd": {
      ":robot": "/video/encode",
      "use": "imported",
      "preset": "iphone",
      "width": 854,
      "height": 480
    },
    "stored": {
      ":robot": "/s3/store",
      "use": ["thumbnails", "encoded_hd", "encoded_sd"],
      "bucket": "my-bucket"
    }
  }
}

Steps that don't depend on each other run in parallel automatically. This is powerful for complex media pipelines.

FFHub: Sequential or Parallel Tasks

FFHub handles pipelines through multiple API calls or compound FFmpeg commands:

# Single command with multiple outputs
ffmpeg -i input.mp4 \
  -vf scale=1920:1080 -c:v libx264 -crf 22 output_hd.mp4 \
  -vf scale=854:480 -c:v libx264 -crf 24 output_sd.mp4 \
  -vf "fps=1/60" -q:v 2 thumb_%02d.jpg

For more complex pipelines, you submit multiple tasks and handle orchestration in your application code. This gives you full control but requires more implementation work.

Where Transloadit Wins

1. Uppy Upload Widget

For user-facing file uploads, Uppy is excellent — drag-and-drop, resumable uploads, webcam, progress bars, all open source.

2. Broad File Processing

Image resizing, document conversion, and non-video tasks are handled by a single service.

3. Assembly Pipelines

For complex multi-step workflows, Transloadit's Assembly system with automatic parallelization is powerful.

4. Client Libraries

Official SDKs in 7+ languages with deep integration into the Assembly system.

5. Template System

Reusable Assembly templates let you define processing pipelines once and invoke them by name, making production deployments cleaner.

Where FFHub Wins

1. FFmpeg-Native

Write real FFmpeg commands. No translation layer, no Robot parameters to learn. Your FFmpeg knowledge applies directly.

2. Simpler Pricing

Per-second of processing time. No monthly plans, no per-GB calculations, no overage surprises.

3. Full FFmpeg Flexibility

Complex filter graphs, two-pass encoding, arbitrary codecs, custom stream mapping — everything FFmpeg can do.

4. Lower Learning Curve

If you know FFmpeg, you can start in minutes. No Assembly DSL or Robot catalog to study.

5. No Vendor Lock-In

Standard FFmpeg commands work everywhere. Migrating away from FFHub means running the same commands on your own server.

6. Transparent Processing

You see exactly what's being executed — your FFmpeg command. No black-box Robots with undocumented behavior.

When to Choose Which

Choose FFHub if:

  • You need full FFmpeg command flexibility
  • Your processing is video/audio focused
  • You want simple, per-second pricing
  • You value zero vendor lock-in
  • Your team already knows FFmpeg
  • You need complex filter chains or encoding options

Choose Transloadit if:

  • You need a user-facing file upload widget (Uppy)
  • Your application processes images and documents in addition to video
  • You want managed multi-step pipelines with Assembly
  • You prefer a higher-level abstraction over raw FFmpeg commands
  • You need the breadth of 50+ specialized Robots

Getting Started with FFHub

If FFmpeg flexibility and pricing simplicity are what you need, FFHub.io gets you up and running in minutes:

# Install the CLI
npm install -g ffhub

# Run any FFmpeg command in the cloud
ffhub run "ffmpeg -i https://example.com/input.mp4 -c:v libx264 -crf 23 -vf scale=1280:720 output.mp4"

# Upload a local file
ffhub upload video.mp4 --command "ffmpeg -i video.mp4 -c:v libx265 -crf 28 output.mp4"

No Assembly syntax. No Robot catalog. Just FFmpeg.

Conclusion

Transloadit and FFHub serve overlapping but distinct markets. Transloadit is a comprehensive file processing platform — if you need image resizing, document conversion, and video encoding under one roof with a sophisticated pipeline system, it's a strong choice. FFHub is purpose-built for developers who want the full power of FFmpeg in the cloud with minimal abstraction and transparent pricing.

For pure video and audio processing with maximum flexibility, FFHub's FFmpeg-native approach is hard to beat. For broader file processing needs with managed orchestration, Transloadit offers more out of the box. Pick the tool that matches your primary use case. If you're evaluating FFHub for a SaaS product or batch transcoding workflow, those guides dive deeper into integration patterns.

Related Articles

FFHub vs Transloadit — A Developer's Comparison