npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

n8n-nodes-creatomate

v0.2.0

Published

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

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