n8n Thumbnail Automation Workflow — Step by Step
I've built this exact workflow twice now, once for a faceless history channel I help run and once for a client who publishes three explainer videos a week. The job is simple: a new video title shows up somewhere (a Sheet, a webhook, a form), and a finished YouTube thumbnail should land in Drive without anyone opening Photoshop, Canva, or anything else.
n8n is what I reach for here because the pipeline is mostly glue between services, and writing that glue in Node would mean managing a server I don't want to manage. By the end of this guide you'll have a workflow you can trigger manually for testing, then promote to a Schedule or Sheets trigger when you're ready.
What the Workflow Does
- Receives a video title as input (from a form, webhook, spreadsheet, or manual trigger)
- Sends a POST request to the ThumbAPI generate endpoint
- Decodes the base64 image response
- Saves the thumbnail to disk or uploads it to a destination of your choice (Google Drive, S3, YouTube)
- Logs the result
The whole flow runs in under 30 seconds.
Prerequisites
- n8n instance (self-hosted or cloud at n8n.io)
- ThumbAPI API key (get one free here)
- Basic familiarity with n8n nodes
Step 1 — Create a New Workflow
In your n8n dashboard, click New Workflow and give it a name like YouTube Thumbnail Generator.
Step 2 — Add a Trigger Node
For manual testing, use a Manual Trigger node. For production, replace this with:
- Schedule Trigger, to run at a fixed time (e.g., every morning to process the day's videos)
- Webhook, to trigger from an external CMS or publishing tool
- Google Sheets Trigger, to fire when a new row is added to a spreadsheet of video titles
Step 3 — Add a Set Node (Define Your Input)
Add a Set node after the trigger to define the video title you want to process. In production, this value would come from a spreadsheet row, a form submission, or a previous node in your pipeline.
Step 4 — Add an HTTP Request Node (Call ThumbAPI)
This is the core step. Add an HTTP Request node and configure it:
Method: POST
URL: https://api.thumbapi.dev/v1/generate
Headers:
x-api-key: YOUR_API_KEY
Content-Type: application/json
Body (JSON):
{
"title": "={{ $json.title }}",
"format": "youtube",
"imageStyle": "faceless",
"outputFormat": "webp"
}
To use a custom asset dataset for brand consistency, add the customAssetsId field:
{
"title": "={{ $json.title }}",
"format": "youtube",
"imageStyle": "faceless",
"outputFormat": "webp",
"customAssetsId": "m6XhjtZNdF0N2AFXUOiq"
}
Step 5 — Add a Code Node (Decode the Base64 Image)
The API returns a base64-encoded image. Add a Code node to decode it:
// Decode base64 thumbnail from ThumbAPI response
const imageDataUri = $input.first().json.image;
const base64Data = imageDataUri.split(",")[1];
const binaryBuffer = Buffer.from(base64Data, "base64");
return [
{
json: {
filename: "thumbnail.webp",
format: $input.first().json.format,
width: $input.first().json.dimensions.width,
height: $input.first().json.dimensions.height
},
binary: {
thumbnail: await this.helpers.prepareBinaryData(
binaryBuffer,
"thumbnail.webp",
"image/webp"
)
}
}
];
Step 6 — Save or Upload the Thumbnail
Connect one of these nodes after the Code node depending on where you want the thumbnail to go:
Option A — Save to Google Drive
Add a Google Drive node with Operation: Upload, File Name from the json output, and Binary Property set to thumbnail.
Option B — Save to Local Disk
Add a Read/Write Files from Disk node (Operation: Write File to Disk) with the output path and Binary Property set to thumbnail.
Option C — Upload Directly to YouTube
Add an HTTP Request node calling the YouTube Data API thumbnails.set endpoint with the binary data. Requires YouTube OAuth credentials configured in n8n.
Step 7 — Add an Error Handler
Connect an Error Trigger node to catch failures and notify you via Slack, email, or any other channel. Configure it to log the video title that failed, the HTTP status code, and a timestamp.
Processing Multiple Titles from a Spreadsheet
To process a batch of titles from Google Sheets:
- Replace the Manual Trigger with a Google Sheets node (Operation: Read Rows)
- Add a Split In Batches node to process one row at a time
- Connect to the HTTP Request node — use
={{ $json["Title"] }}to reference the sheet column - Add a Wait node (2 seconds) between iterations to respect rate limits
Your spreadsheet becomes the content queue. Add a row, the workflow processes it automatically.
Full Workflow Summary
Manual Trigger (or Schedule / Webhook / Google Sheets)
↓
Set Node — define title
↓
HTTP Request — POST to ThumbAPI
↓
Code Node — decode base64 image
↓
Google Drive / Read-Write Files from Disk / YouTube Upload
↓
(optional) Slack/Email notification
Total nodes: 5–7. Setup time: under 30 minutes.
Triggering from Other Workflows
If you already have an n8n workflow for content scheduling, you can call this thumbnail workflow as a sub-workflow using the Execute Workflow node. Pass the video title as an input parameter and receive the thumbnail binary as output.
This keeps your pipeline modular: the thumbnail generator becomes one reusable component in a larger automation system, and you can swap its trigger or destination without touching the rest.
Cost Per Thumbnail
At $49/month for the Pro plan (200 generations), each thumbnail costs about $0.25. For a channel publishing three videos per week, that's roughly $3/month in thumbnail costs.
Compare that to the hourly rate of a designer or the 45 minutes per thumbnail a creator would otherwise spend in Canva or Photoshop.

Written by
Aldin KozicaFull-stack developer from Bosnia and Herzegovina. I built ThumbAPI because I kept watching content teams waste hours on thumbnail design when the patterns are predictable enough to automate. The API is the tool I wished existed when building content pipelines for my own projects.
Continue Reading
Build an n8n workflow that detects new YouTube uploads, generates a thumbnail with ThumbAPI, and saves it to Drive — fully automated, with batch and multi-platform patterns.
How to Use Custom Asset Datasets for Brand-Consistent ThumbnailsUpload reference images once, then every thumbnail the API generates matches your channel's visual identity. Step-by-step guide with cURL, Python, and JavaScript examples.
Generate YouTube Thumbnails with JavaScript and Node.jsComplete guide to integrating ThumbAPI into JavaScript and Node.js projects. Covers single requests, batch generation, TypeScript types, and integration patterns.
Batch Thumbnail Generation for 100 Videos with PythonBuild a Python script that processes a CSV of video titles and generates production-ready thumbnails for all of them in a single run using ThumbAPI.
Generate Thumbnails With an API
Try ThumbAPI free. 5 thumbnail generations per month, no credit card required. One API call, production-ready output.