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
What self-hosted n8n shows when a workflow reaches for ffmpeg

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"
  }'
200 with job.outputs.video after about 100 s, in the same node

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

ffmpeg inside n8n next to reelsdk
Topicffmpeg inside n8nreelsdk
AvailabilityNot on n8n Cloud, off by default when self-hosted from 2.0One HTTP Request node, on Cloud and self-hosted
Installing ffmpegCustom image, apk missing from the official one since 2.1.0ffmpeg 8.1 already on every render machine
WaitingExecute Command blocks until ffmpeg exits?wait=280 with a 290000 ms Timeout, or ?wait=0 plus a webhook
CaptionsBring your own transcription and subtitle stylingTranscription and word-by-word captions in one call
LoadEncodes share the n8n containerSeparate 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.

  1. 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_...
  2. 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"
    }
    
  3. Catch batches with a webhook

    For many videos, send ?wait=0 with a webhook_url so the loop moves on at once. The second workflow starts with a Webhook node, POST and Respond Immediately, whose Production URL goes into webhook_url; it goes live when you publish the workflow. Then fetch GET /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.

All integrations

Ready to build?

Ship video from your app today

Your first $1 of renders is free, and one key covers every endpoint.

Moonlit lake with a lit cabin under the mountains