
In this step-by-step tutorial, you'll learn how to automatically transcribe videos and add animated, word-by-word subtitles using n8n and Creatomate.
Adding subtitles by hand takes time. You have to transcribe the speech, synchronize every caption, style the text, and export the video again. That becomes especially repetitive when processing podcast clips, interviews, talking-head videos, or other recurring content.
In this tutorial, an n8n workflow sends a video to Creatomate, where its audio is transcribed and turned into animated captions. The result is a finished MP4 with subtitles burned into the video, so their styling and animation look the same wherever it is viewed. You don't need to install FFmpeg or create and synchronize SRT or VTT files yourself.
Here's the subtitled video we'll create:
When we look at captions on social media, we see a wide variety of styles. Creatomate's visual editor gives you control over how the captions look. You can change the font, colors, position, outline, animation, and the number of words shown at once, then reuse that design for every new video.
๐ก AI tip: Starting with a voiceover
In this tutorial, we'll add subtitles to an existing video clip. Creatomate can also generate animated captions from an AI-generated voiceover. Follow our ElevenLabs and n8n tutorial to learn how to generate the voiceover and turn it into a finished video.
n8n subtitle automation means taking a video or audio file, transcribing its speech, and producing a finished video with synchronized captions without editing each video manually.
n8n manages the workflow and provides the input file. Creatomate transcribes the audio, applies the subtitle design, and renders the finished video. n8n can then download, store, review, or publish the result.
Burned-in subtitles versus SRT files
There are two common outputs from subtitle workflows:
This tutorial creates the first type: a new MP4 with animated subtitles burned into the picture. This works especially well for short-form and social media videos, where the caption design is part of the content.
What kinds of videos can you caption automatically?
You can use this workflow for any recurring video format that contains speech, such as:
In this tutorial, we'll use one sample video and a ready-made subtitle template. Once the workflow works, you can connect your own source of videos and decide where each finished file should go.
We'll begin in Creatomate by importing a ready-made template. It contains a dynamic video element and a subtitle element that uses the video's audio as its transcription source.
In n8n, a Manual Trigger starts the example workflow and an Edit Fields node provides the sample video URL. We'll select the imported template in the Creatomate node and map the input video to its dynamic element.
Once the subtitled video is ready, the Creatomate node returns its public URL. In this tutorial, we'll use an HTTP Request node to download the finished MP4. In your own workflow, you can use the URL or file however you like โ for example, to save the video to cloud storage, send it for review, or pass it to a social media publishing step.
The example workflow we'll build looks like this:

Let's get started!
Log in to your Creatomate account or sign up for free if you don't have one yet.
For this tutorial, we'll use the Highlighted Subtitles template. Click the banner below to add a copy directly to your Creatomate project:

Once imported, the template opens in the editor. On the left, you'll see the elements that make up the design. These include the Video, the Subtitles, and an outro containing a Logo.
Select the Video element. At the top of the Properties panel, its Source property is marked as dynamic. This allows n8n to replace the sample footage with a different video URL each time the workflow runs.
Creatomate automatically gives the element a unique name, such as Video-DHM, so it can be referenced in automation workflows. Keep the name as shown; we'll see the same dynamic element when configuring the Creatomate node in step 3.

Next, select the Subtitles element. The text shown on the canvas is only a placeholder: the actual speech is transcribed and turned into captions when the video is rendered.
Under Subtitles in the Properties panel, the Source is set to the Video element. This tells Creatomate which media file to transcribe and keeps the generated captions synchronized with its speech:

The subtitle design is fully customizable. Under Properties, you can change the font, size, spacing, alignment, fill, stroke, and background just like you would for another text element.
To change how the captions behave as words are spoken, open the Animation tab and select the Caption filter. Choose an effect from the live previews, such as Color, Karaoke, Highlight, Fade, Enlarge, Bounce, or Slide.
The controls below the previews let you adjust:
The template currently uses the Highlight effect with Word selected under Split. Max. length is currently set to 14. If you prefer the one-word-at-a-time style often used in Shorts, Reels, and TikTok videos, change it to 1:

You can customize the template now or return to it later. Changes to the font, colors, layout, logo, and caption animation are reused automatically for future videos generated from this template. For a detailed explanation of all the options, see the auto-generated subtitles guide.
To keep the tutorial focused on the automation, we'll use the template as it is. The template is ready, so let's build the n8n workflow.
If you're new to n8n, set up an n8n workspace first. You can use n8n Cloud or a self-hosted instance. In your n8n dashboard, click Create workflow.
Click Add first step... and choose Trigger manually. The trigger appears on the canvas as When clicking 'Execute workflow'.
Next, click the + on the right of the trigger and add the Edit Fields (Set) node.
Set Mode to JSON, select the example content already shown in the field, and replace it with the following:
{
ย ย "Input Video": "https://cdn.creatomate.com/demo/the-daily-stoic-podcast.mp4"
}

This field provides the video that Creatomate will transcribe. You can replace the example with your own video, but make sure the file is available from a direct, publicly accessible URL so Creatomate can retrieve it during rendering. A link to a web page that displays a video is not the same as a direct media URL.
Click Execute step. The output should show the Input Video field and its URL:

Now we'll send this video to Creatomate.
Click the + after the Edit Fields node and search for Creatomate. If you haven't used the node before, click Install node; n8n installs it automatically:

Then choose Create a render under Render actions:

Connect your Creatomate account
Under Credential, click Connect to Creatomate:

In a separate browser tab, return to Creatomate. Click your project in the top-left corner and choose Project Settings. Open the API section and copy the key for this project:
Back in n8n, paste the key into the Creatomate credential and click Save:

An API key belongs to one Creatomate project. If you work with multiple projects, create a separate n8n credential for each one.
Select the imported template
Return to the Creatomate node. Under Template, leave From list selected and choose the Highlighted Subtitles template you imported in step 1. n8n automatically loads a template's dynamic elements:

Map the input video
Under Mapping Column Mode, leave the default Map Each Column Manually selected. The template's dynamic Video element appears under Values to Send. In this example, it is called Video-DHM:
Map it to the video URL from the Edit Fields node:
{{ $json['Input Video'] }}You can drag Input Video from the input panel into the Video-DHM field. n8n will create the expression for you. Or paste the expression above, switch the field to Expression if needed, and check its preview. It should resolve to the sample MP4 URL rather than displaying the expression itself.

Tip: If your incoming field name exactly matches the template's dynamic element name, you can use Map Automatically instead. Matching is case-sensitive.
Wait for transcription and rendering to finish
Make sure Wait for Completion is enabled. It is on by default.
With this option enabled, the Creatomate node waits for the video to be transcribed and rendered before n8n continues to the next step.
The processing time depends on the duration and resolution of the input video, the template complexity, and the clarity of the audio. A short clip may finish quickly, while a longer video can take several minutes.
Click Execute step to generate the video.
Once it is ready, the node output should show a successful render and include a public url for the finished MP4:

Open the URL in your browser to watch the completed video. The spoken words should now appear as animated captions using the style defined by the template:
You can also find the render on the API Log page in your Creatomate dashboard. It shows whether the render succeeded, how long it took, and any error details. If the render fails, the n8n workflow stops by default; check the API Log to see what went wrong before running it again.

The Creatomate node returns a public URL for the completed video. We'll use an HTTP Request node to download that MP4 into n8n as binary data. This lets you preview the file, download it manually, or pass it to another node later.
Click the + after the Creatomate node and add an HTTP Request node. Rename it Download Video, then configure it as follows:
{{ $json.url }}dataNo authentication is needed because the completed video is served from its public output URL.

Before running the node, check that the URL preview resolves to the actual MP4 URL returned by the Creatomate node.
Click Execute step. The output now contains the finished MP4 in a binary field named data. Click View to preview it, or Download to save the file:

That's it! The workflow has taken a video URL, transcribed its speech, applied animated subtitles, waited for the render to finish, and returned the completed MP4.
Our example uses a Manual Trigger and one fixed video URL so the workflow is easy to test. In a real automation, replace those parts with the apps and content sources you already use.
Choose what starts the workflow
For example, you could start the workflow:
The source needs to provide a direct, publicly accessible media URL that Creatomate can retrieve. If your source only provides a private file or binary data, add a step that uploads it to accessible storage before sending it to Creatomate.
Reuse your subtitle design
The automation data only replaces the dynamic media element. The subtitle design remains in the Creatomate template, so every new video can use the same:
You can update the template without rebuilding the n8n workflow. Future renders will use the revised design as long as the dynamic element names remain compatible with the mapping.
Choose what happens to the finished video
The Creatomate node returns the finished video's public URL, while the HTTP Request node downloads the actual MP4 file. Which one you use depends on the next app in your workflow.
You could:
If the next node accepts a public URL, use the url from the Creatomate output and skip the download. If it requires a file, pass it the data binary field from the HTTP Request node.
You now know the basic pattern for automatically adding subtitles with n8n: provide a video URL, map it to a Creatomate subtitle template, wait for transcription and rendering, and download the finished MP4.
From here, you can expand the workflow based on the content you create:
๐ Create videos with AI voiceovers using ElevenLabs and n8n
๐ Automatically create and upload YouTube Shorts with n8n
๐ Turn a topic into a faceless Short with ChatGPT and n8n
๐ Create AI-generated Shorts with GPT Image and n8n
๐ Learn the basic pattern for creating videos with n8n
Once you've connected your real input source and chosen a destination, activate the workflow to let it process new videos automatically.
Yes. n8n connects the steps in the workflow and sends the input video to Creatomate. Creatomate transcribes the speech, generates the animated subtitles, and renders them into the video. Once the video is ready, n8n receives its URL and can download, store, publish, or process it in the next step.
No. You donโt need to create or upload an SRT file for this workflow. Creatomate transcribes the speech directly from the input video and renders the animated subtitles into a new MP4. Because the subtitles are burned into the video, their styling and animation remain visible wherever the video is viewed.
Yes. The Creatomate template controls the font, text size, position, colors, outline, animation, word highlighting, and the amount of text displayed at once. Once the design is set up, it is reused automatically for every new video.
Yes. Creatomate can generate subtitles from either a video or audio element. This also works with AI-generated voiceovers. When starting with audio, the template needs other visual content, such as images, footage, or a branded background. See our tutorial on creating AI voiceover videos with ElevenLabs and n8n for a complete example.
Processing time depends on the duration and resolution of the input video, the template complexity, and the audio quality. Short clips may finish quickly, while longer videos can take several minutes. You donโt need to estimate the processing time or add separate waiting and status-checking steps. Creatomate handles the transcription and rendering, while the Creatomate node keeps the workflow at this step until the finished video is ready when Wait for Completion is enabled.
Creatomate uses an advanced AI speech-to-text engine to automatically generate and synchronize the subtitles. With clear audio, it generally produces accurate results without requiring you to transcribe, time, or adjust every caption manually โ which is the purpose of automating the process. Accuracy can vary with background noise, overlapping speakers, strong accents, or specialized terminology, so itโs still a good idea to review important videos before publishing them.
The Creatomate node stops the workflow by default and reports an error in the n8n execution. Check the Creatomate API Log for more information about the failed render.
Yes. The finished video URL or downloaded MP4 can be passed to another node for storage, review, or publishing. For an end-to-end publishing example, see our YouTube Shorts tutorial.
Start with a full-featured trial with 50 credits, no credit card required.
Get started for free โ