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…
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.
Two daily schedules
It starts by itself at 10:00 every day, or by hand, with no form. The two schedules start:
One unlisted top ten video on your channel each day, and a sheet that shows where every subject stands
What you need before you start.
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
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
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
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
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
Checked by Mindket on 13 Nov 2026
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.
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.
| Industry | Who uses it | How they use it | Example |
|---|---|---|---|
| Faceless YouTube | Solo creators | Keep a channel fed with one countdown a day while they work on longer videos | A creator watches the week’s unlisted uploads on Sunday and makes the best three public. |
| Food and travel media | Small editorial teams | Fill the sheet with their own subjects, such as regional dishes | A travel site queues Beaches in Portugal and embeds the finished video in a post. |
| Marketing agencies | Content producers | Run a test channel to learn which list topics hold viewers | An agency compares watch time across a month of subjects. |
| Social media | Short-form editors | Cut each countdown into clips for other networks | An 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.
Any n8n that can reach OpenRouter, JSON2Video, Google and YouTube runs it on its two schedules, and one sheet keeps the whole queue.
Top Ten: and the subjectGet it saves a zip with workflow.json and Mindket’s setup notes in your downloads folder. Make the sheet first.
| Need | Detail |
|---|---|
| n8n | On n8n Cloud or on a server of your own |
| OpenRouter | An API key with credit, for both chat models |
| JSON2Video | An account and its API key. Renders on the free plan carry a watermark |
| YouTube | A channel, for a YouTube OAuth2 credential |
| An account for a Google Sheets OAuth2 credential | |
| ElevenLabs | A key saved in JSON2Video’s Connections, or JSON2Video’s own voice key instead |
| A sheet | A first tab named Sheet1 with four headers in row 1 |
| Column | What goes in it |
|---|---|
Subject | A topic of four words or fewer |
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 address, or Error |
workflow.json./d/ and /edit.YOUR_SHEET_ID in each with the ID.4o-mini and 4o.x-api-key and your JSON2Video key as the value. Select it in Generate Video and Get Video.my-elevenlabs-connection. Or set voice.ConnectionID in Generate Video to none to use JSON2Video’s own key.YouTube.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.
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.
| To change | Where |
|---|---|
| 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 for the scripts, 4o-mini for the ideas |
| The voice and the pictures | voiceID, voiceModel and imageModel in the body of Generate Video |
| The upload | Title, description, category and privacy in YouTube |
| The hour | Each schedule trigger, ten in the morning in the file |
The idea branch has written a subject into the sheet.
| Column | Value |
|---|---|
| Subject | Board games |
| Creation Status | To Do |
| Posting Status | To 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:
| Column | Value |
|---|---|
| Subject | Board games |
| Creation Status | Created |
| Posting Status | Unlisted |
| Video URL | The JSON2Video address of the file, good for seven days |
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.
| Step | Model or call | What to know |
|---|---|---|
AI Agent | 4o-mini, which sets no model, so n8n’s default openai/gpt-4.1-mini | Its parser wants topTenSubjects, an array of ten strings |
Intro & Outro | openai/gpt-4o on OpenRouter | Returns two voice lines and two image prompts |
Ranker | openai/gpt-4o on OpenRouter | Its parser wants an array of ten objects, read as output[0] to output[9] |
Generate Video | JSON2Video’s v2/movies, with the template named in its body | Sends an elevenlabs voice, picked by its ElevenLabs ID, and flux-pro images as template variables |
Switch | Four rules on movie.status | Has no rule for pending, so a queued render ends the run |
Nothing in the scripts is escaped.
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.
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 thenSwitch 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 errorGenerate Video. Wrapping each value in JSON.stringify() fixes itError leaves the subject at To Do, so it comes first again the next dayrunning is polled forever. JSON2Video says to treat one still running after a quarter of an hour as failedflux-pro image at extra credits, and a video asks for twelve imagesAn 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.
workflow.json: the workflow as n8n exports it, 31 nodes. Six are sticky notes that only name the stages. It holds noREADME.md: these notes.Google Sheets, Add to Sheet, Created Video, Error andUpdate Sheet ask for YOUR_SHEET_ID and find the tab by the name Sheet1.workflow.json.Sheet1, with the four headers below in row 1. Copy its ID: the long/d/ and /edit.YOUR_SHEET_ID in each with the4o-mini and 4o.x-api-key and your JSON2Video key as the value. Select itGenerate Video and Get Video.Generate Video sends voice.ConnectionID as my-elevenlabs-connection. Innone, and JSON2Video voices it with its own key.YouTube.To Do, then run the workflow fromWhen clicking ‘Test workflow’. Press Publish once the row reads Created and Unlisted.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 |
Both schedules fire every day at 10:00.
Schedule Trigger1 starts the idea branch. AI Agent asks 4o-mini for ten subjects that do not depend on theSplit Out and Loop Over Items append each one as a row, with both statuses at To Do.Schedule Trigger, or the manual trigger, starts the video branch. Google Sheets reads the first row whoseCreation Status is To Do. With no such row, the run ends there.Intro & Outro asks 4o, which runs openai/gpt-4o, for a spoken intro and outro and an image prompt for each.Ranker asks the same model for ten entries, from number 10 down to number 1. Each has a voice line of two or threeGenerate Video posts all of it to JSON2Video's v2/movies as variables of the template named in its body,flux-pro images.150 Secs waits two and a half minutes. Get Video asks for the project's status and Switch routes it. Onrunning or preparing, 10 Secs waits and the status is asked again.done, Created Video marks the row Created and writes the file's address. Download Video fetches the file,YouTube uploads it as unlisted, titled Top Ten: and the subject. Update Sheet sets Posting Status toUnlisted.error, Error writes Error into Video URL and the run stops.AI Agent and the sample list in Structured Output Parser.Intro & Outro and Ranker.4o sets openai/gpt-4o. 4o-mini sets none, see Good to know.voiceID, voiceModel and imageModel in the body of Generate Video.YouTube. Category 1 is Film & Animation.gpt-6-luna as theopenai/gpt-6-luna, and still lists both older models today. Change the model in4o, and set one in 4o-mini, before that date.4o-mini names no model, so n8n uses the node's default. In current n8n that isopenai/gpt-4.1-mini, whatever the node's name says.pending while a render waits for a worker, and Switch has nopreparing, a value missing from JSON2Video's list of states. Change that value topending and a queued render is polled like a running one. As shipped, the run stops without an error and theGenerate Video between double quotes, with nothing escaped.JSON.stringify() and dropping its outer quotes avoids that.Error leaves Creation Status at To Do, so the same subject is first in line again theSchedule Trigger1 torunning is asked about every ten seconds until it changes. JSON2Video saysVideo URL stops workingtemplate.my-elevenlabs-connection or send none.flux-pro image at 20 credits, against none forflux-schnell, and a video asks for twelve images. Check the current price in your JSON2Video dashboard before theREADME.md 8 KB workflow.json 38 KB
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…
Waqf-AI · Kit
Reads handwritten Arabic text from images and returns it as text. A fine-tuned PaddleOCR-VL model for people digitizing Arabic handwriting.
Wan-AI · Kit
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.
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…
leejet · Kit
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…
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…