n8n + reelsdk
Render videos from one n8n HTTP Request node
n8n Cloud has no Execute Command node, and self-hosted n8n 2.0 switches it off by default. reelsdk renders over HTTP instead: one HTTP Request node posts a topic, waits up to 280 s and gets back a finished faceless short, about 100 s of rendering at $0.25 up to 60 s. Captions and slideshows cost $0.02 per output minute, raw ffmpeg $0.01 per compute minute.
- Works on n8n Cloud and self-hosted
- Import the curl, set Timeout to 290000
- No custom Docker image to maintain
Unrecognized node type: n8n-nodes-base.executeCommand
sh: apk: not found
Sources: n8n node type loader, n8n Community: images without apk
The same job as one call to reelsdk
curl -X POST "https://api.reelsdk.com/v1/shorts?wait=280" \
-H "Authorization: Bearer rk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"topic": "why octopuses have three hearts",
"duration_s": 45,
"style": "cinematic"
}'
Why ffmpeg breaks here
Execute Command is off by default, and so is apk
n8n Cloud doesn't offer the Execute Command node at all. Self-hosted n8n 2.0 ships with it switched off: NODES_EXCLUDE now defaults to ["n8n-nodes-base.executeCommand", "n8n-nodes-base.localFileTrigger"], and a workflow that still uses the node fails with Unrecognized node type: n8n-nodes-base.executeCommand. Setting NODES_EXCLUDE="[]" brings it back, but the official image has no ffmpeg to call.
The usual next step was apk add ffmpeg in a custom Dockerfile. Users report that the official image has shipped without apk since 2.1.0 because it is now a hardened build, so the install fails with sh: apk: not found until you restore apk or build your own image. Even then, every encode runs in the same container as n8n and competes with your other executions.
ffmpeg inside n8n next to reelsdk
| Topic | ffmpeg inside n8n | reelsdk |
|---|---|---|
| Availability | Not on n8n Cloud, off by default when self-hosted from 2.0 | One HTTP Request node, on Cloud and self-hosted |
| Installing ffmpeg | Custom image, apk missing from the official one since 2.1.0 | ffmpeg 8.1 already on every render machine |
| Waiting | Execute Command blocks until ffmpeg exits | ?wait=280 with a 290000 ms Timeout, or ?wait=0 plus a webhook |
| Captions | Bring your own transcription and subtitle styling | Transcription and word-by-word captions in one call |
| Load | Encodes share the n8n container | Separate machines, 3 jobs at once and 500 a day per key |
n8n limits from n8n Execute Command node, checked October 2026.
Set it up
One node per video, a second workflow for batches
You need a reelsdk key. For one video at a time, a single HTTP Request node does the whole job. For batches, start each render with ?wait=0 and let a second workflow collect the results.
Save the key as a credential
Create a key in the reelsdk dashboard. In the HTTP Request node choose Generic Credential Type, then Header Auth, and create a credential with the header below. Every node that calls reelsdk can reuse it.
Header Auth credential - Name
- Authorization
- Value
- Bearer rk_live_...
Render in one node
Paste the curl from the top of this page into Import cURL on the node's Parameters tab, switch Authentication to your credential and map your topic into the JSON body. reelsdk holds the request for up to 280 s and answers 200 with the finished job, so the next node reads the mp4 link from
{{ $json.job.outputs.video }}. A render still running at 280 s answers 202 with the job instead.HTTP Request node - Method
- POST
- URL
- https://api.reelsdk.com/v1/shorts?wait=280
- Authentication
- Generic Credential Type, Header Auth
- Send Body
- On, JSON, Using JSON
- Options > Timeout
- 290000
JSON body { "topic": "{{ $json.topic }}", "duration_s": 45, "aspect": "9:16", "style": "cinematic", "language": "en" }Catch batches with a webhook
For many videos, send
?wait=0with awebhook_urlso the loop moves on at once. The second workflow starts with a Webhook node, POST and Respond Immediately, whose Production URL goes intowebhook_url; it goes live when you publish the workflow. Then fetchGET /v1/jobs/{{ $json.body.id }}with the same credential and use that answer. reelsdk only returns jobs that belong to your key, so a forged call to your webhook gets a 404, not a video.Second workflow - Webhook node
- POST, Respond Immediately
- HTTP Request node
- GET https://api.reelsdk.com/v1/jobs/{{ $json.body.id }}
- Authentication
- The same Header Auth credential
JSON body, ?wait=0 { "topic": "{{ $json.topic }}", "duration_s": 45, "style": "cinematic", "webhook_url": "https://your-n8n.example.com/webhook/reelsdk-done" }
FAQ
Video on n8n, answered
Can I still use the Execute Command node for ffmpeg in n8n?
Only on self-hosted n8n. Set NODES_EXCLUDE to an empty list to load the node again, and build an image that contains ffmpeg, since the official image has none and users report it has shipped without apk since 2.1.0. n8n Cloud doesn't offer the node. An HTTP Request node calling reelsdk works on both.
How do I run my own ffmpeg command from n8n?
POST the arguments as a JSON array to /v1/ffmpeg, with input files mapped to URLs. reelsdk runs ffmpeg 8.1 without a shell for up to 10 minutes per job, at $0.01 per compute minute. With ?wait=280 and a node Timeout of 290000 ms, the output links come back in the same node.
How do I send a binary file from n8n to reelsdk?
POST it to /v1/uploads?filename=clip.mp4 with Body Content Type set to n8n Binary File, which sends the file as the whole request body. Uploads can be up to 100 MB and the response is a URL you can use as any input for 7 days. Files you can already reach by URL can be up to 500 MB each.
How many videos can one workflow render at once?
Each key runs 3 jobs at once and up to 500 a day. A fourth job gets 429 RATE_LIMITED with Retry-After: 10, so put the HTTP Request node inside Loop Over Items with a batch size of 3, or turn on Retry On Fail with 10 seconds between tries.
How do I add word-by-word captions to a video in n8n?
POST the video URL to /v1/captions with a style such as karaoke. Transcription is included, a 30 s clip takes 30 to 43 s, and it costs $0.02 per output minute. You get the burned-in mp4 plus srt, vtt and ass files and a JSON transcript, all kept for 7 days.
The same fix on other platforms
All integrationsReady to build?
Ship video from your app today
Your first $1 of renders is free, and one key covers every endpoint.
