
Learn how to automate YouTube Shorts with n8n and Creatomate, from generating vertical videos with subtitles to uploading them to your channel.
Creating YouTube Shorts regularly involves a lot of repetitive work. You have to assemble the content, apply a consistent design, add subtitles, render the video, and upload it with the right title and description.
In this tutorial, we'll automate that process. An n8n workflow will send the content to Creatomate, where it is turned into a branded vertical video with animated subtitles. Once the video is ready, n8n will download the MP4 and upload it to YouTube.
You can use this setup for many repeatable formats, including educational tips, quizzes, list videos, motivational content, news summaries, product updates, and faceless videos.
Here's the YouTube Short we'll create:
We'll use existing media files so we can focus on the core workflow: creating, downloading, and publishing the video. Once that works, you can adapt the workflow to your own content.
The video design is fully customizable in Creatomate. You can change the scenes, fonts, colors, subtitle style, animations, and branding once, then reuse the same template for every new Short.
Want to generate the content with AI too?
This tutorial starts with ready-made voiceovers and images. You can also generate voiceovers with ElevenLabs and n8n, create visuals with GPT Image, or build faceless Shorts from a topic with ChatGPT. Those workflows can feed their results into the same Creatomate and YouTube steps used here.
We'll use the following tools:
The sample images, voiceovers, title, and description are provided in this tutorial, so you don't need to prepare your own content before getting started.
YouTube Shorts automation with n8n means connecting the steps required to create and publish short-form videos, so you don't have to assemble and upload every video manually.
In this workflow, n8n passes the images and voiceovers to Creatomate, which renders a vertical video with synchronized subtitles. Once the MP4 is ready, n8n downloads it and sends the video, title, and description to YouTube.
The sample uses fixed content so the workflow is easy to build and test. Later, we'll explore ways to adapt it to your own content process.
We'll begin by importing a reusable video template in Creatomate. It contains four scenes, each with a dynamic image, voiceover, and subtitles generated from the spoken audio.
In n8n, a Manual Trigger starts the example workflow, while an Edit Fields node provides the media URLs and YouTube metadata, such as the title and description. The Creatomate node maps the media URLs to the template and generates the finished Short.
Once the video is ready, the Download Video node retrieves the MP4. The YouTube node then uploads the file with its title and description.
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 YouTube Shorts Automation template in the 9:16 Vertical format. Click the banner below to add a copy directly to your Creatomate project:

Once imported, the template opens in the editor. It contains four scenes, each with an image, a voiceover, and a subtitle element:

This template has already been prepared for the workflow. The image and voiceover elements are dynamic, allowing n8n to replace their sources whenever the workflow runs. The voiceover elements are configured to accept direct MP3 URLs passed in through n8n, so no additional audio setup is required.
How the subtitles are generated
Select Subtitles-1. In the Properties panel, its Source is set to Voiceover-1. This tells Creatomate which audio element to transcribe. The subtitle elements in the other scenes are connected to their matching voiceovers in the same way.
The subtitle text shown in the editor is only a preview. When the video is rendered, Creatomate transcribes the actual voiceover and generates synchronized subtitles automatically.
You can use the remaining properties to customize the font, size, spacing, alignment, fill, stroke, and background:

To change how the captions appear as the words are spoken, open the Animation panel and select Caption. The editor shows a live preview of each caption effect, so you can try different styles and immediately see how they change the subtitles before rendering the video. The template uses the Highlight effect with Word selected under Split. Max. length is currently set to 35, meaning each caption can contain up to 35 characters. For a one-word-at-a-time style, change it to 1:

If you change the subtitle styling or animation, apply the same settings to the subtitle elements in the other scenes to keep the video consistent.
The image elements are already dynamic, so you don't need to change their settings. This allows n8n to replace Image-1, Image-2, Image-3, and Image-4 with new image URLs whenever the workflow runs. We'll map these elements in step 3.
You can use the template as it is or customize the scenes and branding first. Future renders will reuse the updated design automatically. For more information about editing the timeline and scenes, see the Creatomate template editor documentation.
The template is ready. Let's add the sample content 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 in the field, and replace it with the following:
{
"Image-1": "https://cdn.creatomate.com/demo/better-sleep-1.jpg",
"Voiceover-1": "https://cdn.creatomate.com/demo/voiceover-1.mp3",
"Image-2": "https://cdn.creatomate.com/demo/better-sleep-2.jpg",
"Voiceover-2": "https://cdn.creatomate.com/demo/voiceover-2.mp3",
"Image-3": "https://cdn.creatomate.com/demo/better-sleep-3.jpg",
"Voiceover-3": "https://cdn.creatomate.com/demo/voiceover-3.mp3",
"Image-4": "https://cdn.creatomate.com/demo/better-sleep-4.jpg",
"Voiceover-4": "https://cdn.creatomate.com/demo/voiceover-4.mp3",
"Title": "How to Sleep Better Tonight 🌙💤",
"Description": "Struggling to get quality sleep? Discover these 3 simple tips that can help you improve your sleep routine. From relaxing bedtime activities to staying active during the day, these strategies will help you wake up feeling refreshed! 🌙💤 #SleepTips #BetterSleep #HealthyLiving"
}
The image and voiceover fields provide the content for the four template scenes. The title and description will be used later by the YouTube node.
The media files need to be available through direct, publicly accessible URLs so Creatomate can retrieve them during rendering. A link to a page that displays an image or audio player is not the same as a direct media URL.
Click Execute step. The output should show all ten fields and their values:

Now we'll map this content to the Creatomate template.
Click the + after the Edit Fields node and search for Creatomate.
If you haven't used the node before, open its details and click Install node. n8n installs the verified Creatomate node into your workspace:

After installation, 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 API 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 use multiple projects, create a separate n8n credential for each one.
Select the video template
Return to the Creatomate node. Under Template, leave From list selected and choose the YouTube Shorts Automation template imported in step 1.
n8n automatically loads the template's dynamic elements under Values to Send:

Map the images and voiceovers
Under Mapping Column Mode, leave Map Each Column Manually selected. Map each template element to the corresponding field from the Edit Fields node:
{{ $json['Image-1'] }}{{ $json['Voiceover-1'] }}{{ $json['Image-2'] }}{{ $json['Voiceover-2'] }}{{ $json['Image-3'] }}{{ $json['Voiceover-3'] }}{{ $json['Image-4'] }}{{ $json['Voiceover-4'] }}The easiest method is to drag each item from the input panel into its matching field. n8n creates the expressions automatically. Check the preview below every expression to make sure it resolves to the expected image or MP3 URL.

Tip: Because the input field names exactly match the template's dynamic element names, you can use Map Automatically instead. Matching is case-sensitive.
Generate the video
Click Execute step. Creatomate will assemble the scenes, transcribe the voiceovers, add the animated subtitles, and render the finished MP4.
Processing time depends on the length of the voiceovers, video resolution, template complexity, and subtitle transcription. A short video may finish quickly, while a longer or more complex render can take several minutes.
Once it is ready, the node output should show a successful render and include a public URL for the finished MP4:

Open the URL to watch the finished video. It should contain all four images and voiceovers, with animated subtitles synchronized to the speech:
You can also find the render on the API Log page in Creatomate. It shows the render status, processing time, output format, resolution, and any error details:

The Creatomate node returns a public URL for the completed video. The YouTube node needs the actual MP4 file, so we'll download it into n8n as binary data first.
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 required 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 Creatomate.
Click Execute step. The output now contains the video in a binary field named data. You can click View to preview it or Download to save it manually:

Now we can send the file to YouTube.
Click the + after Download Video, search for YouTube, and choose the Upload a video action.
Connect your YouTube channel
Under Credential, select an existing credential or create a new one. Follow the n8n YouTube credential documentation to connect the Google account that manages your YouTube channel.
Once the connection is set up, return to the YouTube node and select the credential.
Configure the upload
Configure the node as follows:
data
Add the title and description
For Title, switch the input panel to Schema, then select Edit Fields → Title. This creates the following expression:
{{ $('Edit Fields').item.json.Title }}
Under Options, click Add option, select Description, and map Edit Fields → Description. The expression should be:
{{ $('Edit Fields').item.json.Description }}

Choose the privacy status
For your first test, click Add option, select Privacy Status, and choose Unlisted or Private. This lets you review the video before making it public:

After you have checked the video, subtitles, title, and description, you can change the setting to Public.
The 9:16 video generated by the template is automatically recognized as a YouTube Short as long as it is no longer than three minutes. You don't need a separate Shorts upload action.
Click Execute step to upload the video.
When the node succeeds, open YouTube Studio and check the channel's content page. The new video should appear there with the privacy status you selected:

That's it! The workflow has taken a set of images and voiceovers, generated a vertical video with animated subtitles, downloaded the finished MP4, and uploaded it to YouTube.
Our example uses a Manual Trigger and fixed media URLs so the workflow is easy to reproduce. In a real automation, you can replace these with the trigger and content sources that fit your channel.
Choose what starts the workflow
For example, the workflow could start:
The content does not need to be AI-generated. You can use the same workflow for editorial content, educational videos, product updates, list videos, motivational clips, quizzes, news summaries, and other recurring formats.
Replace the sample content
The Edit Fields node is a convenient way to test the workflow. In a real automation, the images, voiceovers, title, and description can come from any preceding nodes.
The image and audio files must be available through direct, publicly accessible URLs so Creatomate can retrieve them. If your source provides private files or binary data, upload them to accessible storage before passing their URLs to Creatomate.
The title and description can come from the same content source as the media or from a separate editorial step. Keeping them in separate fields makes them easy to review and map to YouTube.
Reuse and update the video design
Because the layout lives in a Creatomate template, every Short can reuse the same scenes, subtitle style, colors, logo, and animations.
You can update the design in Creatomate without rebuilding the entire n8n workflow. If you rename, remove, or add dynamic elements, remember to update their mappings in the Creatomate node.
Optionally generate content with AI
You can also connect this workflow to other automations that generate some or all of the content:
You can reuse the relevant parts of those workflows to supply new images, voiceovers, or scripts while keeping the Creatomate and YouTube steps from this tutorial.
You now know the core pattern for creating and publishing YouTube Shorts automatically: provide the content, map it to a reusable Creatomate template, render the vertical video, download the MP4, and upload it through the YouTube node.
From here, you can decide how much of the content process you want to automate. You might keep scripts and visuals editorially controlled, generate only the voiceovers with AI, or connect this workflow to a separate system that prepares every asset.
Whatever content source you choose, the reusable template keeps the videos visually consistent and n8n handles the handoff between each step.
Once you have connected your real input source and selected the appropriate YouTube privacy status, activate the workflow to process new Shorts automatically.
Yes. n8n connects the content source, video creation, download, and publishing steps. Creatomate assembles and renders the vertical video, while the YouTube node uploads the finished MP4 to your channel.
YouTube classifies square or vertical videos of up to three minutes as Shorts. The template used in this tutorial produces a 9:16 vertical MP4, so YouTube recognizes it as a Short when it is uploaded. You don't need a separate Shorts-specific upload action.
No. YouTube uses the video's aspect ratio and duration to determine whether it qualifies as a Short. You can still add #Shorts or other relevant hashtags to the title or description, but this isn't required for the video to be classified as a Short.
Yes, but AI-generated content is optional. You can use existing images and voiceover files, as demonstrated in this tutorial, or connect n8n to services such as ElevenLabs and GPT Image to generate them automatically. Another workflow can prepare the assets before sending them to Creatomate.
Yes. You can use a different Creatomate template and customize its scenes, branding, animations, and subtitle styling. Make sure the elements you want to replace are dynamic and map them to the corresponding fields in the Creatomate node. To create a YouTube Short, use a square or vertical format and keep the finished video within YouTube's duration limit.
Processing time depends on the total voiceover duration, resolution, template complexity, and subtitle transcription. Short videos may finish quickly, while longer or more complex renders can take several minutes. Creatomate handles the rendering process, and the workflow continues once the finished MP4 is ready.
First, confirm that the Download Video node returned the MP4 in the data binary field and that the YouTube node uses data as its Input Binary Field. Then check that your YouTube credential is still connected and that the selected Google account can upload videos to the channel. Open the error details in the n8n execution for more information about the failed upload.
Start with a full-featured trial with 50 credits, no credit card required.
Get started for free →