creatomate

n8n community node for Creatomate API - automated video and image generation

Package Information

Released: 2 mo ago
Downloads: 5 weekly / 46 monthly
Latest Version: 0.2.0

Documentation

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-creatomate

For a self-hosted instance you can also install it directly:

npm install n8n-nodes-creatomate

Credentials

  1. Open your Creatomate project settings and copy the API Key.
  2. In n8n, create a new Creatomate API credential and paste the key.
  3. Hit Test - it calls GET /v2/templates and 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:

  1. Get the template you designed by hand and read its source.
  2. Transform that RenderScript in a Code node - resize it, swap a colour set, add a text slot.
  3. 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,000

A 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 tests

To 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-creatomate

Two 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 202 with a single render object, not the array the official SDK's types describe.
  • Updating a template is PATCH; PUT is 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 /v2 instead of the undocumented /v1 path.
  • 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.

Resources

License

MIT

Discussion