How to Automatically Add Subtitles to Videos with n8n

27 September 2026 (updated) | 17 min read
Laura van Sinderen

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:

The animated subtitles as generated by the speech-to-text AI.
Video courtesy of Ryan Holiday of The Daily Stoic podcast.

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.

What is n8n subtitle automation?

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:

  • Burned-in subtitles, also called open captions, are rendered directly into the video. They cannot be turned off, but they preserve the chosen font, position, colors, and animations on every platform.
  • Subtitle files, such as SRT or VTT, contain caption text and timing information separately. A compatible video player or publishing platform displays them on top of the video.

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:

  • Podcast clips: turn interview highlights into captioned social media videos.
  • Talking-head videos: add readable captions to tips, announcements, or educational content.
  • Product demos: caption spoken explanations so the message also works without sound.
  • Customer stories: apply the same branded subtitle style to every testimonial.
  • AI videos: generate a voiceover, assemble the visuals, and add synchronized captions automatically.
  • Internal or educational videos: make spoken instructions easier to follow and review.

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.

How to add subtitles to videos automatically with n8n

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:

n8n workflow with a Manual Trigger, Edit Fields, Creatomate Create a render, and Download Video nodes.

Let's get started!

1. Import the subtitle template

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:

Template used in this tutorial
Highlighted Subtitles
A copy lands in your project, ready to edit.
Import template

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.

Video source marked as dynamic in a Creatomate subtitle template so n8n can replace it.

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:

Creatomate subtitle element connected to a video source for automatic transcription.

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:

  • Split: whether the effect is applied by line, word, or letter;
  • Max. length: the maximum number of characters shown at once;
  • Placement: how the words are revealed and arranged;
  • Color: the accent color used by the effect.

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:

Creatomate caption animation settings for customizable word-by-word subtitles.

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.

2. Add the sample video to n8n

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

Edit Fields node containing the source video URL for automatic subtitle generation.

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:

Sample video URL returned by the Edit Fields node in n8n.

Now we'll send this video to Creatomate.

3. Generate the subtitled video with the Creatomate node

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:

Creatomate node details in n8n showing the Install node button.

Then choose Create a render under Render actions:

Create a render action available after installing the Creatomate node.

Connect your Creatomate account

Under Credential, click Connect to Creatomate:

Creatomate node settings showing the Connect to Creatomate credential button.

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:

Creatomate API credential configured in n8n.

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:

Highlighted Subtitles template selected in the Creatomate node in n8n.

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:

  • Video-DHM -> {{ $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.

Input video URL mapped to the dynamic video element in the Creatomate n8n node.

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:

Successful subtitled video render returned to n8n with its final MP4 URL.

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.

Creatomate API Log showing the status and processing details of a subtitled video.

4. Download the subtitled video

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:

  • Method: GET
  • URL: {{ $json.url }}
  • Under Options, add Response
  • Set Response Format to File
  • Leave Put Output in Field set to data

No authentication is needed because the completed video is served from its public output URL.

HTTP Request node configured to download the finished subtitled MP4 from Creatomate.

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:

Finished video with animated subtitles downloaded as an MP4 file in n8n.

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.

Turn this into a real subtitle automation

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:

  • on a schedule;
  • when a video record is added to Airtable or Google Sheets;
  • when someone submits a form;
  • when a video becomes available in your CMS or database;
  • when your application calls an n8n webhook;
  • after an editing or approval process produces a new clip;
  • after an AI service generates a video or voiceover.

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:

  • font and text size;
  • caption position;
  • fill, outline, and background colors;
  • words per caption;
  • word-highlighting effect;
  • entrance and exit animation;
  • logo and other brand elements.

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:

  • save the MP4 to Google Drive, Dropbox, or Amazon S3;
  • send it to a review or approval workflow;
  • write the video URL back to Airtable or Google Sheets;
  • send it to a social media management platform;
  • publish it as a YouTube Short;
  • return it to your own application through a webhook;
  • continue with a dedicated publishing workflow.

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.

What's next for subtitle automation with n8n

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.

Common questions

Can I automatically add subtitles to videos with n8n?

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.

Does this workflow create an SRT file?

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.

Can I customize the subtitle style?

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.

Can I use an audio file instead of a 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.

How long does it take to generate the subtitled video?

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.

How accurate are automatic subtitles?

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.

What happens if transcription or rendering fails?

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.

Can n8n publish the subtitled video automatically?

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.

Related articles

Whether you prefer code or no-code, we have a wide range of guides on video automation.

Start automating today

Start with a full-featured trial with 50 credits, no credit card required.

Get started for free โ†’