Official n8n node for JSON2Video — create and render videos programmatically from JSON or templates. Fill a template's variables from any workflow data, wait for the render, and get back a video URL you can publish, email or store.
Official node — built and maintained by the JSON2Video team.
n8n is a fair-code licensed workflow automation platform.
Installation · Credentials · Operations · Usage · Use with AI Agents · Example workflows · Compatibility · Resources
Search for JSON2Video in the nodes panel and select Install. Verified community nodes install without leaving the editor.
Follow the community node installation guide, or install from the UI:
- Go to Settings → Community Nodes.
- Select Install.
- Enter
n8n-nodes-json2video. - Agree to the risks and select Install.
The node authenticates with a JSON2Video API key.
- Sign up or log in at json2video.com.
- Open the dashboard and go to API Keys — https://json2video.com/dashboard/apikeys. See the API keys guide for what each key role can do.
- Copy an existing key or create a new one. The Render role is enough to render movies and use the Drive; Editor is needed to create, update or delete templates.
- In n8n, create a JSON2Video API credential and paste the key into the API Key field.
The key is sent as the x-api-key header on every request. It is stored encrypted by n8n, is never logged, and is never echoed back in error messages.
22 operations across three resources.
| Operation | Description |
|---|---|
| Create | Submit a render job and return immediately with a 16-character project ID |
| Render and Wait | Submit a render job and poll until it finishes, then return the video URL |
| Get Status | Get the status of one movie by project ID, including the URL once it is done |
| Get Many | List the movies rendered by the account within a date range |
| Delete | Delete a rendered video file before its automatic 7-day expiry |
Both Create and Render and Wait accept either a saved template plus variables or a full Movie JSON document, and can override resolution, quality, frame rate, cache, client data and the webhook destination.
| Operation | Description |
|---|---|
| Create | Save a new template from a Movie JSON document with {{variable}} placeholders |
| Get | Get one template, including its stored Movie JSON or a JSON Schema of its variables |
| Get Many | List the account's own templates, optionally filtered by tag |
| Get Library | List the public template gallery published by JSON2Video |
| Get Variables | List the variables a template declares, one item per variable, with its type, default and (for select and array/collection variables) its choices or sub-fields |
| Duplicate | Copy a template — your own or one from the library — into the account |
| Update | Change the name, Movie JSON, tags or AI prompt of a template |
| Delete | Delete a template |
Get Variables is what lets a workflow — or an AI Agent using this node as a tool — discover a template's {{placeholder}} inputs at runtime instead of having them hard-coded: pick a template and get back its variable names, types, defaults and (for select variables) allowed values, without opening the template editor first.
Storage operations work against the JSON2Video Drive, the file storage attached to the account. (The resource's internal parameter value is media, matching the /v2/media/* endpoints — only the label reads Storage.)
| Operation | Description |
|---|---|
| Upload File | Upload binary data from a previous node and return its public URL |
| Get File | Get one file by path, with its URL, size in bytes and upload status |
| List Folder | List the files in one folder, filtered by media type or name |
| Get Folder Tree | List every folder with its file count and total size in bytes |
| Move File | Move a file to another folder |
| Delete File | Delete one file |
| Create Folder | Create a folder, nested paths included |
| Delete Folder | Delete an empty folder |
| Get Storage Usage | Get bytes used, the free allowance and whether uploads are blocked |
The common case is a saved template whose {{placeholders}} are filled from workflow data. Create the template once in the dashboard or with Template → Create:
{
"resolution": "instagram-story",
"scenes": [
{
"elements": [
{ "type": "image", "src": "{{background_image}}", "duration": -1 },
{ "type": "text", "text": "{{quote_text}}", "style": "003", "duration": -1 }
]
}
]
}Then configure the node:
- Resource: Movie · Operation: Render and Wait
- Input Mode: Template · Template: pick it from the list
- Variables: one labelled input per variable, filled in below
Pick a template and the Variables section renders itself from that template — one input per variable it declares, labelled and typed the way the template author defined it:
Quote text: [ Ship it ]
Background image: [ https://example.com/bg.jpg ]
Render mode: [ Final video (avatar video) ▾ ]
Title weight: [ 600 ]
Flip vertically: [ off ]
Scenes: [ { "voiceoverText": "Hello" } ] (JSON editor)
Text variables get a text box, numbers a numeric box, select variables a dropdown of their allowed values, booleans a toggle, and array / collection variables a JSON editor. Each input is pre-filled with the template's own default, and every one of them accepts an expression, so {{ $json.quote }} works anywhere. Changing the selected template reloads the list.
Two extra controls come with the section:
- Map Automatically fills every variable from the incoming item's field of the same name — handy when an upstream Set node already produces
quote_text,background_imageand so on. - The + Add variable / refresh menu re-reads the template if you edited it in another tab.
Switch Specify Variables to Using JSON for the cases the fields cannot express: a whole variables object built by one expression, values for variables the template does not declare, or an intentionally empty string.
{ "quote_text": "Ship it", "scenes": [{ "voiceoverText": "Hello" }] }The node submits the render, polls until it finishes, and emits the movie object:
{
"project": "JkGxEoPRF9EgRb32",
"status": "done",
"url": "https://assets.json2video.com/clients/.../rendered.mp4",
"duration": 12.4,
"width": 1080,
"height": 1920,
"size": 2847193,
"remaining_quota": { "time": 3412 }
}duration is in seconds, size is in bytes. Rendered files are deleted automatically after 7 days, so download or forward the URL within the workflow.
If the render fails, the node throws with the API's own message — JSON2Video error messages name the scene and element at fault, for example "Scene #1 Element #2: The element type 'video' requires a 'src' property." Turn off Wait Options → Fail On Render Error to receive the failed movie object instead and branch on status yourself.
Render and Wait holds the n8n execution open for the whole render. Its default timeout is 600 seconds, adjustable from 30 to 3600 under Wait Options → Timeout. Polling starts at 5 seconds (the minimum the API allows) and backs off gradually to 30 seconds, so a long render costs far fewer requests than a fixed interval.
Two execution ceilings apply and neither is set by this node:
- n8n Cloud enforces a maximum execution time per plan.
- Self-hosted n8n applies
EXECUTIONS_TIMEOUT, unlimited by default.
If a render outlives that limit, the execution is killed — the render still completes and is still billed, but the workflow loses the result. For renders that regularly run long, use Movie → Create with the Webhook URL option pointed at an n8n Webhook node, and handle the callback in a second flow. Example 04 below shows both halves, and the webhooks reference documents the callback payload.
If a Render and Wait times out, the node fails with the project ID in the error message: the render keeps going server-side and Movie → Get Status retrieves it later.
Storage → Upload File takes binary data from a previous node (an HTTP Request download, a Google Drive node, a form upload) and returns a public url you can drop straight into an element's src. Files up to 500 MB are supported, and the bytes are streamed from memory — the node never writes to disk.
This node is available as a tool for n8n's AI Agent node. Every operation and parameter description states its units, formats and ID semantics, so an agent can drive it without extra prompting.
An agent connected to this tool can render a video from a template it picks from your library, fill the template's variables from the conversation, check on a render it started earlier, or upload a file to the Drive and use it in the next movie. Template → Get Variables is built for this: the agent can ask the node what inputs a template accepts before rendering it, instead of relying on hard-coded knowledge of the template.
Give the agent a key with the narrowest role that covers the job — Render is enough unless the agent is meant to modify templates.
Importable workflow JSONs live in examples/:
| Workflow | What it shows |
|---|---|
| 01 — Render a template and get the video URL | The shortest useful workflow: variables in, video URL out |
| 02 — Turn the newest RSS item into a social reel | Scheduled rendering, JSON variables mode, client data |
| 03 — Upload an asset, then use it in a movie | Storage upload feeding a Movie JSON render |
| 04 — Long render with a webhook callback | Create plus a Webhook trigger, for renders longer than the execution limit |
See examples/README.md for import instructions.
- n8n
1.x(tested against recent releases) - Node.js
>=20.15 - Zero runtime dependencies — all HTTP goes through n8n's own request helpers
- JSON2Video documentation
- Movie JSON syntax reference
- Webhooks reference
- API keys guide
- n8n community nodes documentation
- Questions and bug reports: GitHub issues
- Product support: support@json2video.com