Description
@ffhub/n8n-nodes-ffhub
> npm package name: @ffhub/n8n-nodes-ffhub (scoped — enter it exactly like this in n8n)
English | 中文
This is an n8n community node for FFHub – a cloud-based FFmpeg transcoding service.
FFHub lets you run FFmpeg commands in the cloud without managing servers. Simply submit your FFmpeg command and get the output files via URL.
n8n is a fair-code licensed workflow automation platform.
Installation
Follow the installation guide in the n8n community nodes documentation.
In n8n, go to Settings → Community Nodes → Install and enter the full scoped package name:
@ffhub/n8n-nodes-ffhub
Or install it manually:
npm install @ffhub/n8n-nodes-ffhub
Operations
This node supports the following operations:
| Operation | Description |
|———–|————-|
| Create Task | Submit a new FFmpeg transcoding task |
| Get Task | Get status and result of a specific task |
| List Tasks | List all your tasks with optional filters |
| Wait for Completion | Poll until a task completes or fails |
Create Task Options
Create Task has an Options collection (click Add Option) with two entries:
| Option | Sent as | Description |
|——–|———|————-|
| Webhook URL | webhook | URL that receives a callback when the task finishes. This is the only way to skip polling. |
| Include Metadata | with_metadata | Include ffprobe metadata for each output file |
#### Webhook callback body
When the task reaches a terminal state, FFHub sends a POST with a JSON body to your Webhook URL.
The task fields live under data, not at the top level:
{
"event_id": "01J8X...",
"type": "task.succeeded",
"created_at": "2026-01-01T12:00:05Z",
"data": {
"task_id": "01J8X...",
"status": "succeeded",
"progress": 100,
"outputs": [
{ "url": "https://storage.ffhub.io/...", "filename": "output.mp4", "size": 1048576 }
],
"error": "",
"created_at": "2026-01-01T12:00:00Z",
"finished_at": "2026-01-01T12:00:05Z"
}
}
typeis eithertask.succeededortask.failed- On failure,
data.errorholds the reason anddata.outputsis[] - In n8n, read the output URL with an expression like
{{ $json.body.data.outputs[0].url }}
Credentials
To use this node, you need an FFHub API key:
1. Sign up at ffhub.io
2. Go to Dashboard → API Keys
3. Create a new API key
4. Use this key in your n8n credentials
Usage Examples
Basic Video Compression
FFmpeg Command:
ffmpeg -i https://example.com/input.mp4 -c:v libx264 -crf 23 output.mp4
Convert to Different Format
FFmpeg Command:
ffmpeg -i https://example.com/input.mov -c:v libx264 -c:a aac output.mp4
Extract Audio
FFmpeg Command:
ffmpeg -i https://example.com/video.mp4 -vn -c:a libmp3lame audio.mp3
Create Thumbnail
FFmpeg Command:
ffmpeg -i https://example.com/video.mp4 -ss 00:00:05 -vframes 1 thumbnail.jpg
Typical Workflow
#### A. Polling (single workflow)
1. Create Task – Submit your FFmpeg command
2. Wait for Completion – Wait until the task finishes
3. Use Output – The output contains URLs to your processed files
The workflow execution stays alive while polling, so this is best for short jobs.
#### B. Webhook (no polling)
Long jobs are better split into two workflows, so nothing sits and waits:
1. Workflow B: add a Webhook node (n8n core, method POST) and copy its Production URL
2. Workflow A: FFHub → Create Task, set Options → Webhook URL to that URL — the
workflow ends right away, no waiting
3. Workflow B runs when FFHub calls back: branch on {{ $json.body.type }}
(task.succeeded / task.failed) and read the files from {{ $json.body.data.outputs }}
Note that the n8n Webhook URL must be reachable from the public internet.


