n8n-nodes-creatomate
v0.2.0
Published
n8n community node for Creatomate API - automated video and image generation
Maintainers
Readme
n8n-nodes-creatomate
An n8n community node for Creatomate, the cloud API for generating videos, images and GIFs from templates or from RenderScript JSON.
Design a template once in the Creatomate editor, then swap only the parts that change - text, images, video clips - to produce the same format over and over from an n8n workflow.
n8n is a fair-code licensed workflow automation platform.
Installation
In n8n, go to Settings -> Community Nodes -> Install and enter:
n8n-nodes-creatomateFor a self-hosted instance you can also install it directly:
npm install n8n-nodes-creatomateCredentials
- Open your Creatomate project settings and copy the API Key.
- In n8n, create a new Creatomate API credential and paste the key.
- Hit Test - it calls
GET /v2/templatesand confirms the key works before you build anything.
Operations
Render
| Operation | What it does | |---|---| | Create Render From Template | Renders an existing template with your modifications | | Create Render From RenderScript | Renders a full RenderScript JSON without a template | | Get Render Status | Looks up a render by ID |
Template
| Operation | What it does | |---|---| | Create | Adds a new template from RenderScript | | Get | Fetches one template including its RenderScript source | | Get Many | Lists templates, optionally filtered by tags | | Update | Changes a template's name, tags, or source | | Delete | Removes a template |
Modifications
Modifications say which parts of the template change in this render. There are two ways to write them.
Using fields (default)
Pick Add Modification and choose an element from the dropdown. The list is read from the template you selected, so you never have to retype an element name from the editor. Media elements appear as Photo.source because that is the key that actually swaps the file.
| Element Name or ID | Value |
|---|---|
| Title | Today's headline |
| Photo.source | https://example.com/photo.jpg |
Using JSON
Switch Specify Modifications to Using JSON when the whole object arrives from an earlier node:
{
"Title": "Hello World",
"Photo.source": "https://example.com/photo.jpg"
}Plain text and shape elements take the value directly. For images, video and audio, target the source property with a publicly reachable URL.
Getting the file out
By default the node returns the render's JSON, including a url once the render finishes.
Turn on Additional Options -> Download File and the node waits for the render, fetches the result, and puts it in the binary field named by Put Output File in Field (data by default). The next node - Google Drive, S3, Slack, Telegram - can then take the file directly, with no HTTP Request node in between.
Waiting for a render to finish
Creating a render is asynchronous. The API answers straight away with a status of planned, waiting, transcribing or rendering - the output URL is not usable yet.
Turn on Additional Options -> Wait for Completion and the node polls every 2 seconds until the render reaches succeeded or failed, then returns the finished render with its URL. Timeout (default 300 seconds) caps how long it waits.
Leave it off when you would rather not block the workflow. In that case either use Get Render Status on a schedule, or set Webhook URL so Creatomate calls you back.
Generating templates programmatically
The template operations cover the full REST surface, so you can treat an editor-built template as a starting point and derive others from it in code:
- Get the template you designed by hand and read its
source. - Transform that RenderScript in a Code node - resize it, swap a colour set, add a text slot.
- Create a new template from the transformed source.
This keeps the visual design work in the editor, where it belongs, while the repetitive variants are produced by the workflow.
Credits and cost
Creatomate bills in credits, where 1 credit equals 100 million pixels:
credits = width x height x fps x seconds / 100,000,000A 40-second 1080x1920 clip at 30 fps costs about 25 credits. One image is always 1 credit.
Development
pnpm install
pnpm build # compile TypeScript and copy the icon
pnpm lint # n8n community node rules
pnpm test # compile, then run the unit testsTo try it in a local n8n instance, build it and symlink the package where n8n looks for custom nodes, then restart n8n:
pnpm build
mkdir -p ~/.n8n/custom/node_modules
ln -sfn "$PWD" ~/.n8n/custom/node_modules/n8n-nodes-creatomateTwo things that will bite you on macOS: n8n does not install on Node 26 (isolated-vm fails to build, despite engines claiming >=22.22), and a pnpm global install cannot boot because sqlite3 is not resolvable from the isolated store. Use Node 22 and install n8n with npm.
Compatibility
Requires Node.js 20.15 or newer. Tested against the n8n community node API version 1, on n8n 2.33.7.
Upgrading to 0.2.0
Existing 0.1.x workflows keep working, and they keep their JSON modifications field.
The node now ships two versions. Nodes already in your workflows carry typeVersion 1 and default Specify Modifications to Using JSON, so the modifications they already store - including expressions like {{ $json.narration }} - keep being sent. Nodes you add from now on are typeVersion 2 and default to the fields UI.
Template ID was a plain text field and is now a Template resource locator. A stored plain-string ID is still read correctly at execution time and by the element dropdown, verified on n8n 2.33.7 against workflows carrying the old string form. When you next open such a node the picker shows the ID under By ID.
Two things the published API reference gets wrong, which this version handles:
- Creating a render answers
202with a single render object, not the array the official SDK's types describe. - Updating a template is PATCH;
PUTis rejected with a 404.
Changes in 0.2.0:
- Modifications can now be entered as fields, with element names loaded from the selected template. The JSON editor is still available under Specify Modifications.
- Added Download File, which waits for the render and returns the file as binary data.
- Template operations now call
/v2instead of the undocumented/v1path. - Added Create, Update and Delete for templates.
- Added Wait for Completion and Timeout options to both render operations.
- Added a tags filter, plus Return All / Limit, to Get Many.
- The credential now declares an authentication block and a Test request.
- Output items carry
pairedItem, so item lineage survives into downstream nodes.
