Mindket

Top 10 countdown videos made and uploaded to YouTube daily

Newversion 1 · updated

Overview

An n8n workflow that makes one top ten countdown video a day from a queue in Google Sheets. Models on OpenRouter write the subjects and the script, JSON2Video renders the video, and YouTube gets it as an unlisted upload.

Top 10 countdown videos made and uploaded to YouTube daily is an n8n workflow in the Marketing & SEO category, listed by Mindket. It is free. This is version 1, last updated on . Download it on this page or copy its JSON, then import it into an n8n canvas. Nothing runs until you activate it in n8n.

At a glance

Runs in
  • n8n Cloud: import the file, add four credentials, then publish
  • Your own n8n server: the same file and steps, with the hour in your server’s time zone
  • Google Sheets: one row for each subject, with its two statuses and the video’s address
  • YouTube: one unlisted upload a day, titled Top Ten: and the subject

Platform

Connects 5 apps

How it works

Trigger

Two daily schedules

It starts by itself at 10:00 every day, or by hand, with no form. The two schedules start:

  • The idea branch, which adds ten subjects to the sheet
  • The video branch, which takes the first subject marked To Do

Actions

  1. A model on OpenRouter writes ten evergreen subjects and appends them to Google Sheets
  2. The next To Do subject is read from the sheet
  3. GPT-4o writes the intro, the outro and ten ranked entries, each with an image prompt
  4. JSON2Video renders the countdown from a template, with a voice and a picture for each scene
  5. The video is downloaded and uploaded to YouTube as unlisted
  6. The sheet marks the subject Created and Unlisted, with the file’s address

Result

One unlisted top ten video on your channel each day, and a sheet that shows where every subject stands

Integrations

What you need before you start.

Google Sheets

Subject queue

Holds the subjects, takes new ideas as rows and records each video’s two statuses and file address.

NeedsA Google account to sign in with, and a sheet with four headers

OpenRouter

Language models

Runs the idea model and openai/gpt-4o, which writes the intro, the outro and the ranked entries.

NeedsOpenRouter API key with credit

JSON2Video

Video rendering

Renders the countdown from a template, with a voice and an AI picture for each scene, and reports its status.

NeedsJSON2Video API key, sent as x-api-key, and credits

ElevenLabs

Voice

Voices the script inside JSON2Video when your key is saved there under the connection ID the workflow sends.

NeedsAn ElevenLabs API key saved in JSON2Video, or none to use JSON2Video’s own key

YouTube

Upload

Uploads each finished video to your channel as unlisted, titled Top Ten and the subject.

NeedsA YouTube channel and a Google account to sign in with

Workflow check

Checked by Mindket on 13 Nov 2026

Steps
20 steps, starting by hand or on a schedule
AI
3 steps call an AI model: Intro & Outro, Ranker and AI Agent
Sign-ins
Signs in to: Google Sheets, JSON2Video, YouTube and OpenRouter
API keys
No API key is left in the file
Step types
Mindket’s checker reads all 10 of its step types

Read from the workflow’s file, not from a run.

About

What it is

This n8n workflow makes one top ten countdown video a day and uploads it to YouTube. A Google Sheet holds the queue. Each morning one branch asks a model on OpenRouter for ten new subjects and adds them as rows, while a second branch takes the first subject still marked To Do. GPT-4o writes a spoken intro, an outro and ten ranked entries for it, each with an image prompt. JSON2Video renders the video from a ready template, with an AI voice and a picture for every scene, and YouTube gets it as an unlisted upload. The sheet records each step. It has 31 nodes, six of them notes that name the stages.

  1. Two schedules fire every morning
  2. OpenRouter adds ten subjects to the sheet
  3. The next To Do subject gets an intro, outro and ten entries
  4. JSON2Video renders the countdown from a template
  5. YouTube takes it as an unlisted upload

Who it suits

Faceless channels and small media teams that want a steady run of list videos without writing or editing them. The subjects are evergreen by design, so foods, places and brands suit it. Skip it for news or for anything whose facts must be checked, because the model ranks from what it already knows and cites nothing. Nothing goes public by itself.

Who uses it, and how
IndustryWho uses itHow they use itExample
Faceless YouTubeSolo creatorsKeep a channel fed with one countdown a day while they work on longer videosA creator watches the week’s unlisted uploads on Sunday and makes the best three public.
Food and travel mediaSmall editorial teamsFill the sheet with their own subjects, such as regional dishesA travel site queues Beaches in Portugal and embeds the finished video in a post.
Marketing agenciesContent producersRun a test channel to learn which list topics hold viewersAn agency compares watch time across a month of subjects.
Social mediaShort-form editorsCut each countdown into clips for other networksAn editor trims the last three entries into a teaser for Instagram.

You need some n8n and four accounts, for OpenRouter, JSON2Video, YouTube and Google, and its author puts setup at about 18 minutes once they are ready.

Where to use it

Any n8n that can reach OpenRouter, JSON2Video, Google and YouTube runs it on its two schedules, and one sheet keeps the whole queue.

  • n8n Cloud: import the file, add four credentials, then publish
  • Your own n8n server: the same file and steps, with the hour in your server’s time zone
  • Google Sheets: one row for each subject, with its two statuses and the video’s address
  • YouTube: one unlisted upload a day, titled Top Ten: and the subject

Setup

Get it saves a zip with workflow.json and Mindket’s setup notes in your downloads folder. Make the sheet first.

What you need first
NeedDetail
n8nOn n8n Cloud or on a server of your own
OpenRouterAn API key with credit, for both chat models
JSON2VideoAn account and its API key. Renders on the free plan carry a watermark
YouTubeA channel, for a YouTube OAuth2 credential
GoogleAn account for a Google Sheets OAuth2 credential
ElevenLabsA key saved in JSON2Video’s Connections, or JSON2Video’s own voice key instead
A sheetA first tab named Sheet1 with four headers in row 1
The sheet’s headers
ColumnWhat goes in it
SubjectA topic of four words or fewer
Creation StatusTo Do until the video renders, then Created
Posting StatusTo Do until the upload, then Unlisted
Video URLThe rendered file’s address, or Error
  1. In n8n, create a workflow, open its menu, choose Import from File and pick workflow.json.
  2. Make the sheet and copy its ID: the long part of its address between /d/ and /edit.
  3. Add a Google Sheets OAuth2 credential, select it in the five sheet nodes and replace YOUR_SHEET_ID in each with the ID.
  4. Add an OpenRouter credential and select it in 4o-mini and 4o.
  5. Add an HTTP Header Auth credential with the header name x-api-key and your JSON2Video key as the value. Select it in Generate Video and Get Video.
  6. In JSON2Video’s Connections, save your ElevenLabs key under the ID my-elevenlabs-connection. Or set voice.ConnectionID in Generate Video to none to use JSON2Video’s own key.
  7. Add a YouTube OAuth2 credential for your channel and select it in YouTube.
  8. Save, type one subject into the sheet with both statuses at To Do, and run the workflow from its manual trigger. Press Publish once the row reads Created and Unlisted.

JSON2Video reads its key from a header named x-api-key. A connection ID it does not know fails the render, so step 6 matters even if you never use ElevenLabs yourself.

How to use it

Once published, both schedules run every morning. You can also type subjects in. Each day the first To Do subject becomes a video, and because a render takes a few minutes, the run keeps asking JSON2Video until the file is ready. Watch the unlisted upload in YouTube Studio and make it public yourself, and to skip a subject, change its Creation Status before the morning run.

What to change for a different result
To changeWhere
The subjectsThe system message in AI Agent, and the sample list in Structured Output Parser
The script’s tone and lengthThe system messages in Intro & Outro and Ranker
The models4o for the scripts, 4o-mini for the ideas
The voice and the picturesvoiceID, voiceModel and imageModel in the body of Generate Video
The uploadTitle, description, category and privacy in YouTube
The hourEach schedule trigger, ten in the morning in the file

Example

The idea branch has written a subject into the sheet.

The row before the run
ColumnValue
SubjectBoard games
Creation StatusTo Do
Posting StatusTo Do

Ranker returns ten entries in this shape, and one of them reads:

{
  "voiceoverText": "At number six, it’s Ticket to Ride. Routes, trains and a race for the longest line make it easy to teach.",
  "imagePrompt": "Colored train cars spread across a map of North America on a wooden table.",
  "lowerThirdText": "Ticket to Ride"
}

Once the render is done, YouTube has an unlisted video titled Top Ten: Board games, and the row reads like this:

The row after the run
ColumnValue
SubjectBoard games
Creation StatusCreated
Posting StatusUnlisted
Video URLThe JSON2Video address of the file, good for seven days

For newcomers and experts

If you are new. n8n draws a workflow as boxes joined by lines, and each box, a node, does one job. This one has two branches that never meet. One fills the sheet with ideas. The other turns one idea into a video. A credential is a key n8n keeps for you and hands to the node you pick it in. Type one subject by hand and run the manual trigger first. Each node then shows what it received and what it sent, which is where a refused key or a missing template turns up.

For experts. Three model calls write the script. JSON2Video does all the editing inside its template.

The model behind each step
StepModel or callWhat to know
AI Agent4o-mini, which sets no model, so n8n’s default openai/gpt-4.1-miniIts parser wants topTenSubjects, an array of ten strings
Intro & Outroopenai/gpt-4o on OpenRouterReturns two voice lines and two image prompts
Rankeropenai/gpt-4o on OpenRouterIts parser wants an array of ten objects, read as output[0] to output[9]
Generate VideoJSON2Video’s v2/movies, with the template named in its bodySends an elevenlabs voice, picked by its ElevenLabs ID, and flux-pro images as template variables
SwitchFour rules on movie.statusHas no rule for pending, so a queued render ends the run

Nothing in the scripts is escaped.

Good to know

Check two things first. The polling rule misses one of JSON2Video’s states, and both chat models have a shutdown date that falls within a few months.

  • Retired models: OpenAI shuts down GPT-4o and GPT-4.1 mini on 14 January 2027 and names gpt-6-luna as the replacement, openai/gpt-6-luna on OpenRouter. OpenRouter still lists both older models today. Change 4o, and set a model in 4o-mini, before then
  • A queued render: Switch tests preparing, a state JSON2Video does not list, and has no rule for pending. Change that value to pending, or a render still queued after two and a half minutes ends the run without an error
  • Quotes: a script line with a double quote in it breaks the body of Generate Video. Wrapping each value in JSON.stringify() fixes it
  • Repeats: Error leaves the subject at To Do, so it comes first again the next day
  • A growing queue: the idea branch adds ten subjects a day and the video branch uses one
  • No cap: a render stuck at running is polled forever. JSON2Video says to treat one still running after a quarter of an hour as failed
  • A short-lived file: JSON2Video deletes a render after seven days, and the sheet never gets the YouTube link
  • The template and the voice key: both live in JSON2Video. A template it cannot find, or a connection ID you never saved, fails the render
  • Costs: OpenRouter bills each model call and JSON2Video bills a credit per second of video. The original setup note priced a flux-pro image at extra credits, and a video asks for twelve images
  • Your data: the subjects and the scripts go to OpenRouter and JSON2Video, and the video goes to YouTube
  • Credentials: the JSON holds none, and nothing from its author’s sheet

README and files

README

Top 10 countdown videos made and uploaded to YouTube daily

An n8n workflow that turns a queue of subjects in Google Sheets into one top ten countdown video a day. Models on
OpenRouter fill the queue with ideas, then write an intro, an outro and ten ranked entries for the next subject.
JSON2Video renders the video from a template, with an AI voice and a picture for every scene, and YouTube gets it as an
unlisted upload. Nothing goes public by itself.

What is inside

  • workflow.json: the workflow as n8n exports it, 31 nodes. Six are sticky notes that only name the stages. It holds no
    credential.
  • README.md: these notes.

What we changed from the original copy

  • The author's sheet and its tab id are gone. Google Sheets, Add to Sheet, Created Video, Error and
    Update Sheet ask for YOUR_SHEET_ID and find the tab by the name Sheet1.
  • A setup note with the author's name, his channel, a link to his copy of the sheet and a referral link is gone. Its
    steps are below.
  • The OpenRouter, JSON2Video, Google Sheets and YouTube credentials are gone, along with the author's account names on
    them.
  • Nothing else changed. The JSON2Video template ID, the voice and the image model are as the author left them.

Before you start

  • An n8n instance, on n8n Cloud or your own server.
  • An OpenRouter API key with credit.
  • A JSON2Video account and its API key. Renders on the free plan carry a watermark.
  • A YouTube channel, and a Google account for the YouTube and Google Sheets credentials.
  • An ElevenLabs API key saved in JSON2Video, or the switch in step 6 to JSON2Video's own key.

Set it up

  1. In n8n, create a workflow, open its menu and choose Import from File. Pick workflow.json.
  2. Make a Google Sheet whose first tab is named Sheet1, with the four headers below in row 1. Copy its ID: the long
    part of its address between /d/ and /edit.
  3. Add a Google Sheets OAuth2 credential. Select it in the five sheet nodes and replace YOUR_SHEET_ID in each with the
    ID.
  4. Add an OpenRouter credential with your key and select it in 4o-mini and 4o.
  5. Add an HTTP Header Auth credential with the header name x-api-key and your JSON2Video key as the value. Select it
    in Generate Video and Get Video.
  6. Choose the key behind the voice. Generate Video sends voice.ConnectionID as my-elevenlabs-connection. In
    JSON2Video, open Dashboard, then Connections, and save your ElevenLabs key under exactly that ID. Or change the value
    to none, and JSON2Video voices it with its own key.
  7. Add a YouTube OAuth2 credential for your channel and select it in YouTube.
  8. Save. Type one subject into the sheet with both statuses at To Do, then run the workflow from
    When clicking ‘Test workflow’. Press Publish once the row reads Created and Unlisted.

The sheet

Row 1 of Sheet1 holds these four headers, spelled as here:

| Column | What goes in it |
|---|---|
| Subject | A topic of four words or fewer, such as Board games |
| Creation Status | To Do until the video renders, then Created |
| Posting Status | To Do until the upload, then Unlisted |
| Video URL | The rendered file's JSON2Video address, or Error |

How a run goes

Both schedules fire every day at 10:00.

  1. Schedule Trigger1 starts the idea branch. AI Agent asks 4o-mini for ten subjects that do not depend on the
    news. Split Out and Loop Over Items append each one as a row, with both statuses at To Do.
  2. Schedule Trigger, or the manual trigger, starts the video branch. Google Sheets reads the first row whose
    Creation Status is To Do. With no such row, the run ends there.
  3. Intro & Outro asks 4o, which runs openai/gpt-4o, for a spoken intro and outro and an image prompt for each.
  4. Ranker asks the same model for ten entries, from number 10 down to number 1. Each has a voice line of two or three
    sentences, an image prompt and a short label for the screen.
  5. Generate Video posts all of it to JSON2Video's v2/movies as variables of the template named in its body,
    with an ElevenLabs voice and flux-pro images.
  6. 150 Secs waits two and a half minutes. Get Video asks for the project's status and Switch routes it. On
    running or preparing, 10 Secs waits and the status is asked again.
  7. On done, Created Video marks the row Created and writes the file's address. Download Video fetches the file,
    and YouTube uploads it as unlisted, titled Top Ten: and the subject. Update Sheet sets Posting Status to
    Unlisted.
  8. On error, Error writes Error into Video URL and the run stops.

Change the style

  • The subjects: the system message in AI Agent and the sample list in Structured Output Parser.
  • The script's tone and length: the system messages in Intro & Outro and Ranker.
  • The models: 4o sets openai/gpt-4o. 4o-mini sets none, see Good to know.
  • The voice and the pictures: voiceID, voiceModel and imageModel in the body of Generate Video.
  • The upload: title, description, category, region and privacy in YouTube. Category 1 is Film & Animation.
  • The hour: each schedule trigger, in the time zone your n8n uses.

Good to know

  • Retired models: OpenAI shuts down GPT-4o and GPT-4.1 mini on 14 January 2027, and names gpt-6-luna as the
    replacement. OpenRouter lists it as openai/gpt-6-luna, and still lists both older models today. Change the model in
    4o, and set one in 4o-mini, before that date.
  • The idea model: 4o-mini names no model, so n8n uses the node's default. In current n8n that is
    openai/gpt-4.1-mini, whatever the node's name says.
  • A queued render ends the run: JSON2Video reports pending while a render waits for a worker, and Switch has no
    rule for it. Its fourth rule tests preparing, a value missing from JSON2Video's list of states. Change that value to
    pending and a queued render is polled like a running one. As shipped, the run stops without an error and the
    subject comes up again the next day.
  • Quotes break the body: the scripts go into the JSON of Generate Video between double quotes, with nothing escaped.
    A line the model writes with a double quote in it makes the body invalid, and the call fails. Wrapping each value in
    JSON.stringify() and dropping its outer quotes avoids that.
  • Failed renders repeat: Error leaves Creation Status at To Do, so the same subject is first in line again the
    next day. Change its status by hand to skip it.
  • The queue grows: the idea branch adds ten subjects a day and the video branch uses one. Set Schedule Trigger1 to
    weekly, or turn it off once the sheet holds enough.
  • No polling cap: a render that stays at running is asked about every ten seconds until it changes. JSON2Video says
    to treat a render still running after 15 minutes as failed.
  • A short-lived file: JSON2Video deletes a rendered video after 7 days, so the address in Video URL stops working
    then. The YouTube link is never written to the sheet.
  • The template lives in JSON2Video, not in the file. If JSON2Video answers that it cannot find it, copy a template that
    reads the same variables into your account and put its ID in template.
  • The voice key: a connection ID JSON2Video does not know fails the render. Save the key under
    my-elevenlabs-connection or send none.
  • Costs: OpenRouter bills three model calls for each video and one for each batch of ideas. JSON2Video bills one credit
    for each second of video. The original copy's setup note put a flux-pro image at 20 credits, against none for
    flux-schnell, and a video asks for twelve images. Check the current price in your JSON2Video dashboard before the
    schedule runs daily.
  • Your data: the subjects and the scripts go to OpenRouter and JSON2Video, and the video goes to YouTube. The sheet
    stays in your Google account.
  • Credentials: the JSON holds none, and nothing from its author's sheet.
Files
README.md  8 KB
workflow.json  38 KB

2 files, 45 KB, downloaded as a zip.

What’s new

  • Version 1 · 2026-11-03

Reviews

No ratings yet

Write a review

No reviews yet.

More from Mindket

See all from Mindket

Nanosaur2-670M

well9472 · Kit

Makes illustrations from text prompts with a small 670M-parameter diffusion model, run through ComfyUI. Built as a low-budget research model for people who wan…

New

Reads handwritten Arabic text from images and returns it as text. A fine-tuned PaddleOCR-VL model for people digitizing Arabic handwriting.

New

Makes video clips from a text prompt or an image plus text, at up to 720P and 24 frames per second, in the Diffusers format for a single consumer GPU.

New

Similar in Marketing & SEO

See all in Marketing & SEO

Flux.2-Klein-9B-MatchingPose

nhathoangfoto · Kit

A LoRA for FLUX.2 Klein 9B that puts a character into the pose shown by a mannequin reference while keeping the character's face and style. For artists and des…

New

Generates images from text on modest GPUs, using quantized Z-Image-Turbo files made for stable-diffusion.cpp. For people who run image models on their own comp…

New

HiDream-I1-Full

HiDream-ai · Kit

Generates images from text prompts with a 17B-parameter open model that scores at the top of the card's prompt-following tables. For designers, marketers and d…

New