walid@portfolio:~/lab/faceless-channel-scanner$
cd../lab
02ideaOct 2026

Finding the small YouTube channels that are breaking out

A free script, a YouTube API key and Claude Code scan the last ten days of YouTube for small faceless channels whose videos beat their own numbers, then the same tools help you make one. The scanner, reviewed and hosted here, the eleven channels it found, the toolbox, the steps and the 30-day plan, checked against YouTube’s own rules, the channels’ public numbers and the tools’ licences

A 5 KB script, a free YouTube API key and Claude Code scan the last ten days of YouTube for small channels whose new video beat their usual numbers many times over. The guide adds a toolbox, the steps to make a narrated documentary of your own and a 30-day plan. The scanner works, and a reviewed copy is on this page. Much of what the guide builds on it didn’t hold up. The free API now allows 100 searches a day, and the headline “27x” outlier is really 270x. The eleven “faceless” channels include an on-camera host posting four videos a day, unlabelled AI footage and reused documentaries. YouTube’s monetization rules name animal-peril series as unmonetizable, and ElevenLabs’ free voices can’t go on a monetized channel. All of that is marked below.

YouTubeClaude CodeYouTube Data APIFaceless channelsNode.jsNarrationThe scanner, reviewed copy (zip, 6 KB) ↗YouTube Data API: getting started ↗YouTube API quota costs ↗YouTube monetization policies ↗YouTube: disclosing AI content ↗YouTube Partner Program ↗Node.js ↗Claude Code docs ↗yt-dlp ↗Whisper ↗Kokoro-82M ↗Dia ↗ClearerVoice-Studio ↗Wan2GP ↗Wan 2.2 model card ↗ElevenLabs pricing ↗Gemini (Nano Banana) ↗Google Flow (Veo 3.1) ↗Seedance 2.5 (ByteDance) ↗Wikimedia Commons licensing ↗NOAA Ocean Exploration media ↗NASA media guidelines ↗Pexels licence ↗Pixabay licence ↗Internet Archive rights ↗Free AI video with Wan2GP, in the Lab ↗An AI studio for full YouTube videos, in the Lab ↗
i
What this is

A method for finding YouTube topics that are working right now, and for making videos on them without appearing on camera. A small Node.js script asks YouTube’s free API for recent videos in a set of keywords, then ranks each one by how far it beat its own channel’s recent uploads. Claude Code reads the results and helps you write, voice and cut a narrated documentary. The original guide was a set of slides; it is all here, with the scanner read line by line, tested, and hosted as a reviewed download. Download the scanner, read the rest once, then run the 30-day checklist at the end. The guide’s own scan saw 1,283 videos in under four minutes. Where the guide got something wrong, it’s fixed and marked where it applies.

Checked, not copied

What held up, on 21 October 2026

Checked against Google’s YouTube Data API reference and developer policies, YouTube’s help centre, each of the eleven channels’ public feeds and video pages, the tools’ own repositories and licences, the footage sites’ licence pages, and Anthropic’s Claude Code docs. The scanner was read in full and run offline against fake data.

ClaimWhat the sources say
“10,000 units a day; one full scan uses about 3,500”Out of date since 1 June 2026. Searches now have their own allowance of 100 a day, and everything else shares 10,000 units. A long scan makes 32 searches (16 keywords, two each), so you get about three scans a day.
“27.4x”, the guide’s example outlierA slip: the scanner’s own data says 270x, and the channel’s public numbers agree. The comparison is with the channel’s 10 newest uploads, which on a channel posting four videos a day are only hours or days old.
“Views per day tells you it’s still climbing”It’s the average since upload, so it can’t show momentum. Compare two scans a few days apart.
“11 channels, nobody on camera”, and “the six things all 11 share”Only the dramatic titles hold for all 11. The Titanic video, the guide’s lead example, has an on-camera host, on an 85.7k-subscriber channel posting about four videos a day with partner channels. Lengths run from 61 seconds to 69 minutes, and most of the channels post four or more times a week, not two or three.
“Stock + AI footage”No channel credits stock footage. Several use unlabelled AI scenes, some reuse other people’s documentary footage under “respective owners” disclaimers, one copies another’s thumbnail, and none carries YouTube’s AI label.
Making money from itThe guide never mentions YouTube’s monetization rules on inauthentic content (renamed July 2025) and on unsatisfying content, which name mass-produced AI templates and “repetitive scenarios of animals in exaggerated distress or peril” as unmonetizable. The thresholds for ads also double for new channels on 1 February 2027.
“ElevenLabs (free tier, 10 min/month)”The minutes are right, but the free plan can’t be used commercially, must credit ElevenLabs in the title, and upgrading later doesn’t clear old files. Starter, $6 a month, is the cheapest plan with a commercial licence; Kokoro is free and Apache 2.0.
yt-dlp to “feed a winning video’s transcript to Claude”Downloading other people’s YouTube videos, captions or thumbnails breaks YouTube’s Terms of Service, and re-voicing someone else’s script is reused content YouTube won’t pay for.
“₹0 to start”The API key, Kokoro, Whisper and public-domain footage are free. Claude Code needs a paid Claude plan or a pay-as-you-go Console account.
The footage sourcesPexels and Pixabay are free, with credit optional; NASA and NOAA are public domain, with credit requested. Internet Archive isn’t one licence: rights vary item by item, and many are non-commercial. The “Ifremer CC BY 4.0” Titanic clip couldn’t be found on Wikimedia Commons.
The toolboxAll eight tools exist; six are free and two have free tiers (the guide says seven are free). Veo is now 3.1, the Gemini app has moved to Gemini Omni, and Gemini’s images carry watermarks a prompt can’t remove.
The scanner itselfRead line by line and run offline against fake data on Node 18 and 22: it works, talks only to Google’s API and writes one file. One bug is fixed in the copy here: a live stream or a video a day or longer crashed the whole run.
Before you start

What you need

1

To scan: Claude Code

In your terminal or in the Claude desktop app’s Code tab. It writes, runs and edits the scanner for you. It needs a paid Claude plan or a pay-as-you-go Console account. (The guide links claude.ai/code, which is the web version: it runs in the cloud and can’t see a folder on your computer.)

2

To scan: Node.js

The LTS version from nodejs.org. The scanner is one file with no installs. It runs on Node 18 and up, but 18 and 20 no longer get security fixes. (The guide says Node 18+.)

3

To scan: a Google account

For the free YouTube Data API key: 100 searches a day, plus 10,000 units for everything else. One long scan uses 32 of the searches. (The guide says 10,000 units a day, about 3,500 per scan.)

4

To make one: a voice

ElevenLabs on a paid plan (its free tier, 10 minutes a month, can’t go on a monetized channel; the guide suggests the free tier), or Kokoro-82M on your own laptop, free, no GPU needed, and fine for commercial use.

5

To make one: footage

Public-domain and free-licence video from the sources in Step 3. No camera.

6

A GPU only for local AI

You need a graphics card only to generate footage yourself with Wan2GP (NVIDIA works best) or to run Dia, which needs NVIDIA. Whisper’s largest model wants about 10 GB of graphics memory; on a laptop use turbo or small. Otherwise any laptop. (The guide names only Wan2GP.)

The time it takes, in the guide’s estimate: the API key and a first scan, 20 minutes, once. After that a scan takes 4 minutes, a 60-second documentary clip about an hour, and a 20-minute video a weekend. (The guide adds that the channels post two to three of those a week; most post more.)

Step 1

Connect Claude to YouTube: one free key

YouTube’s Data API v3 reads public numbers for any channel: views, upload dates, and subscriber counts rounded to three digits (some channels hide theirs). A key you create in Google Cloud is the only extra thing Claude needs. Get it (about 5 minutes):

1

Create a project

Open console.cloud.google.com and create a project, any name.

2

Enable the API

APIs & Services → Library → search YouTube Data API v3 → Enable.

3

Create the key

APIs & Services → Credentials → Create credentials → API key. Google now asks for an API restriction first: choose YouTube Data API v3, create the key and copy it. No billing needed; the API runs on a free daily quota. (The guide says “Copy it. That’s it”, without the restriction.)

The same from a terminal, with Google’s gcloud tool. (The guide refers to two gcloud lines in its download. They need a signed-in gcloud and a project first, and the key line needs the API restriction to work; all of that is fixed here, and the last two lines print the key.)

gcloud-api-key6 lines
gcloud auth login
gcloud projects create YOUR-PROJECT-ID --set-as-default
gcloud services enable youtube.googleapis.com
gcloud services api-keys create --display-name=youtube-scanner --api-target=service=youtube.googleapis.com
gcloud services api-keys list
gcloud services api-keys get-key-string KEY_ID

Download the scanner

The reviewed copy is the first link at the top: a 6 KB zip holding scan.js, a README, a key template and the guide’s 11-channel list. Unzip it anywhere, paste your key into youtube_key.json in place of the placeholder text (keep the quotes), and open Claude Code in that folder. (The guide links its own download. This copy makes two changes to the script: its first comment line no longer carries the author’s branding, and a live stream or a video a day or longer no longer crashes the run. The README is rewritten with the corrections on this page.)

youtube_key.json1 lines
{ "apiKey": "PASTE-YOUR-YOUTUBE-DATA-API-KEY-HERE" }

The whole script, as in the download. It only talks to Google’s API and writes one JSON file next to itself.

scan.js51 lines
// Outlier scan: viral outliers in the last N days for a keyword set, US-biased, small channels.
//   node scan.js [days=10] [maxSubs=300000]
// outlier = views / channel median views of its last 10 uploads (fallback views/subscribers)
const fs = require('fs');
const KEY = JSON.parse(fs.readFileSync(require('path').join(__dirname, 'youtube_key.json'))).apiKey;
const DAYS = +(process.argv[2] || 10), MAXSUBS = +(process.argv[3] || 300000);
const LONG = process.argv.includes('long');
const KW = LONG ? ['youtube automation', 'faceless youtube channel', 'claude ai', 'claude code', 'chatgpt', 'ai tools', 'ai agents', 'ai video', 'motion graphics', 'motion design', 'after effects', 'explainer', 'documentary', 'video essay', 'ai side hustle', 'make money with ai']
 : ['youtube automation', 'faceless youtube channel', 'claude ai', 'claude code', 'chatgpt', 'ai tools', 'ai agents', 'ai video generator',
  'veo 3', 'sora 2', 'motion graphics', 'motion design', 'after effects', 'explainer video', 'documentary', 'video essay', 'ai side hustle', 'n8n automation', 'make money with ai', 'ai news'];
const API = 'https://www.googleapis.com/youtube/v3/';
const get = async (ep, p) => { const u = API + ep + '?' + new URLSearchParams({ ...p, key: KEY }); const j = await (await fetch(u)).json(); if (j.error) throw new Error(ep + ': ' + j.error.message); return j; };
const iso = d => d.toISOString();
const dur = s => { const m = s.match(/P(?:(\d+)D)?(?:T(?:(\d+)H)?(?:(\d+)M)?(?:(\d+)S)?)?/) || []; return (+m[1] || 0) * 86400 + (+m[2] || 0) * 3600 + (+m[3] || 0) * 60 + (+m[4] || 0); };
(async () => {
  const after = iso(new Date(Date.now() - DAYS * 864e5));
  const ids = new Map();
  for (const q of KW) {
    for (const [order, videoDuration] of (LONG ? [['viewCount', 'medium'], ['viewCount', 'long']] : [['viewCount', 'any'], ['relevance', 'any']])) {
      const r = await get('search', { part: 'snippet', q, type: 'video', order, videoDuration, publishedAfter: after, regionCode: 'US', relevanceLanguage: 'en', maxResults: 50 });
      for (const it of r.items) ids.set(it.id.videoId, q);
    }
  }
  console.error('candidates', ids.size);
  const vids = [];
  const idl = [...ids.keys()];
  for (let i = 0; i < idl.length; i += 50) {
    const r = await get('videos', { part: 'snippet,statistics,contentDetails', id: idl.slice(i, i + 50).join(',') });
    for (const v of r.items) vids.push({ id: v.id, title: v.snippet.title, ch: v.snippet.channelTitle, chId: v.snippet.channelId, pub: v.snippet.publishedAt,
      lang: v.snippet.defaultAudioLanguage || v.snippet.defaultLanguage || '', views: +v.statistics.viewCount || 0, likes: +v.statistics.likeCount || 0, comments: +v.statistics.commentCount || 0,
      secs: dur(v.contentDetails.duration), q: ids.get(v.id) });
  }
  const chIds = [...new Set(vids.map(v => v.chId))]; const ch = {};
  for (let i = 0; i < chIds.length; i += 50) {
    const r = await get('channels', { part: 'snippet,statistics,contentDetails', id: chIds.slice(i, i + 50).join(',') });
    for (const c of r.items) ch[c.id] = { subs: +c.statistics.subscriberCount || 0, videos: +c.statistics.videoCount || 0, country: c.snippet.country || '', uploads: c.contentDetails.relatedPlaylists.uploads, title: c.snippet.title };
  }
  let cand = vids.filter(v => ch[v.chId] && ch[v.chId].subs <= MAXSUBS && v.views >= 30000 && (!v.lang || v.lang.startsWith('en')) && (!LONG || v.secs >= 240));
  cand.forEach(v => { v.subs = ch[v.chId].subs; v.country = ch[v.chId].country; v.days = Math.max(0.3, (Date.now() - Date.parse(v.pub)) / 864e5); v.vpd = Math.round(v.views / v.days); v.ratio = v.subs ? v.views / v.subs : 99; });
  cand.sort((a, b) => b.ratio - a.ratio); cand = cand.slice(0, 60);
  // channel median of last 10 uploads for accuracy
  for (const v of cand) {
    try { const pl = await get('playlistItems', { part: 'contentDetails', playlistId: ch[v.chId].uploads, maxResults: 12 });
      const vidIds = pl.items.map(i => i.contentDetails.videoId).filter(x => x !== v.id).slice(0, 10);
      if (vidIds.length) { const r = await get('videos', { part: 'statistics', id: vidIds.join(',') }); const vs = r.items.map(x => +x.statistics.viewCount || 0).sort((a, b) => a - b);
        v.chMedian = vs[Math.floor(vs.length / 2)]; v.outlier = v.chMedian ? +(v.views / v.chMedian).toFixed(1) : null; } } catch (e) { v.outlier = null; }
  }
  cand.sort((a, b) => (b.outlier || b.ratio) - (a.outlier || a.ratio));
  fs.writeFileSync(require('path').join(__dirname, LONG ? 'last_scan_long.json' : 'last_scan.json'), JSON.stringify({ at: new Date().toISOString(), days: DAYS, cand }, null, 1));
  for (const v of cand.slice(0, 40)) console.log(`${(v.outlier ?? '?')}x | ${v.views.toLocaleString()} views | ${v.vpd.toLocaleString()}/day | ${v.subs.toLocaleString()} subs ${v.country || '--'} | ${v.secs < 61 ? 'SHORT' : Math.round(v.secs / 60) + 'min'} | ${v.pub.slice(0, 10)} | ${v.ch} | ${v.title.slice(0, 70)} | https://youtu.be/${v.id} | q=${v.q}`);
})().catch(e => { console.error('ERR', e.message); process.exit(1); });

Or let Claude build its own

Paste this into Claude Code. (Changed from the guide, which pastes the key itself into the prompt: that sends it to Anthropic and saves it in Claude Code’s local history, and Claude would likely write it into the script. Before starting Claude Code, set it in the terminal you’ll start it from: on a Mac or Linux run read -rs YOUTUBE_API_KEY && export YOUTUBE_API_KEY, paste the key and press Enter (it isn’t shown or saved in your shell history); in PowerShell run $env:YOUTUBE_API_KEY = Read-Host, paste the key and press Enter. Then run claude in that same window. The desktop app’s Code tab can’t see a variable set this way, so use the terminal for this prompt. The 4-minute floor and the search cap are added too: “long-form” is ambiguous now that Shorts run to 3 minutes, and a script that pages through results can use up the day’s 100 searches in one run.)

build-your-own-prompt8 lines
My YouTube Data API key is in the YOUTUBE_API_KEY environment variable;
read it from there and never print it or write it into a file. Write a Node
script that searches YouTube for these keywords: [your niche keywords],
videos published in the last 10 days, US region, English, videos 4 minutes
or longer, using no more than 30 search calls per run. For each video pull
views, length, channel subscribers and the median views of that channel's
last 10 uploads. Rank by views divided by that median. Print the top 40 as a
table and save everything as JSON.
!
Keep the key private

Never paste it in a comment, a screenshot or a public repository. If it leaks, delete it in the console and make a new one; it costs nothing. Keep it restricted to YouTube Data API v3.

Step 2

Run the scan, read the numbers

Three arguments, in this order: days back (10), the most subscribers a channel may have (300,000: small channels, not Netflix), and long for videos of 4 minutes and up. Leave long off to include Shorts; that mode uses its own keyword list and 40 searches. Always give the two numbers before long: “node scan.js 10 long” prints no rows, still uses 32 searches, and replaces last_scan_long.json with an empty one (not in the guide). A long run makes 32 searches, sees up to 1,600 videos and takes a few minutes. (The guide says 16 keyword searches, about 1,300 videos, under 4 minutes.)

run-the-scan1 lines
node scan.js 10 300000 long

What a row means

One row of the output, for the guide’s lead example. (The guide shows it as 27.4x and leaves out the date, the link and the keyword that found it.)

scan-output-row1 lines
270x | 4,002,933 views | 400,293/day | 85,700 subs US | 21min | 2026-10-10 | Ambrose Discovery | Underwater Drone Entered the Titanic — What It Captured Was Beyond Ter | https://youtu.be/v0G9my0lyas | q=documentary
FieldWhat it tells you
270x, the outlier numberThis video’s views divided by the median of the channel’s 10 newest other uploads: about 270 times. On channels that post daily, those uploads are only days old, so the number runs high. “?x” means no median was available. The guide calls anything over 10x a breakout; that’s its rule of thumb, not YouTube’s. A high number on a small channel suggests the topic is pulling rather than the audience, and that, says the guide, is what you copy. Check how the video was spread first: this one was co-published with three partner channels.
400,293/dayViews divided by days since upload, an average over the video’s whole life. It can’t tell you a video is still climbing. (The guide says 400k a day means it is, that a 4M video at 5k a day is finished, and that one with 400k views at 120k a day is the one to move on this week. A 4M video at 5k a day would be over two years old, too old for a ten-day scan.) Compare two scans a few days apart instead.
85,700 subs USSubscribers, rounded by YouTube, and the country the channel declares, not where its viewers are. “0 subs” means the channel hides its count: skip that row.
21min, the date, the link, q=Length (only clips under 61 seconds are labelled SHORT, though Shorts run to 3 minutes), the upload date, the video, and the keyword that found it.
What it leaves outOnly videos with 30,000+ views, in English or with no declared language, from the top 60 by views per subscriber, are scored. The search returns up to 50 videos per call, so the scan samples rather than sweeps.
!
When it goes wrong

“ERR search: … exceeded your quota”: you’ve used today’s 100 searches; they reset at midnight Pacific Time. “API key not valid”: check youtube_key.json. “candidates 0” and no rows: nothing matched, so widen the days or the keywords. ENOENT or SyntaxError at the start: the key file is missing or no longer valid JSON. Not in the guide.

Then ask Claude the question that matters

The guide says its version of this prompt found the 11 channels below, though a long scan can’t return Twig by Twig’s 61-second Short, so that one came from another run. (Changed from the guide in two places. The scan file holds no upload history and nothing that shows a presenter, so the prompt now has Claude fetch each channel’s public feed, and marks “no presenter” as a guess to check. And the guide’s “the six things all of them have in common” is now “what most of them have in common”: see the next section.)

group-by-channel-prompt9 lines
Read last_scan_long.json. Group the top 40 by channel. Fetch each
channel's recent uploads from its public feed
(https://www.youtube.com/feeds/videos.xml?channel_id=CHANNEL_ID) to measure
how often it posts. For every channel that looks like it has no presenter
(documentary / wildlife / history narration over footage), tell me:
subscribers, total views in the last 10 days, video length, how often they
upload, and the title formula they use; mark "no presenter" as a guess I
still need to check by watching. Then list what most of them have in
common.

Make it yours

Open scan.js and replace the keyword list on line 8 with your niche (“true crime documentary”, “space documentary”, “history explained”); that’s the list long mode uses, and lines 9 and 10 hold the default mode’s. For another market, change regionCode and relevanceLanguage on line 20 and the language filter on line 38, and translate the keywords. Run it every Monday; a long scan uses 32 of the 100 daily searches. (The guide mentions only line 8 and regionCode.)

YouTube’s developer policies don’t allow keeping statistics such as subscriber counts for more than 30 days, or creating new metrics from API data, which an outlier score is, without Google’s approval. Treat the scan as your own research and delete scan files older than 30 days. Not in the guide.

Or paste scan.js into Claude Code with this. The script already fetches each video’s comment count, so it’s a one-line change.

adapt-the-scanner-prompt2 lines
Adapt this scanner to [my niche] and add a column for comments per 1,000
views.
The list

Eleven channels, 14.2M views, found on 20 October 2026

Views on each channel’s breakout video at scan time, with 21 October in brackets. Subscribers at scan time. The guide shortens and re-cases some titles. Eight of the 11 channels are under a year old; three are old accounts that switched to this format.

ChannelBreakout videoNumbersWhat the check found
Twig by TwigBreakout videoThis Giant Bird Builds a Fortress From Sticks Over a LakeNumbers10.1k subs · 61-second Short · 4.35M (4.63M)What the check foundA Short, on a channel opened days earlier that posts several a day. It says “real birds”; the pace suggests generated footage, but the frames can’t confirm it.
Ambrose DiscoveryBreakout videoUnderwater Drone Entered the Titanic — What It Captured Was Beyond TerrifyingNumbers85.7k subs · 21 min · 4.00M (4.05M)What the check foundNot faceless: an on-camera host. Posts about four 20 to 28-minute videos a day, each co-published with partner channels, one with 100k subscribers. A recap of the 1986 to 2023 Titanic expeditions, not a new drone dive, under a fabricated thumbnail.
Primal BuzzBreakout videoSnow Leopard’s Silent Ambush in the MountainsNumbers16.4k · 34 min · 2.11M (2.21M)What the check foundReal wildlife footage credited to “its respective owners”, and an AI thumbnail. Posts every two days; an account from 2008.
Natural WildlifeBreakout videoWild Peru: APEX PREDATORS of the AmazonNumbers5.2k · 24 min · 1.27M (1.33M)What the check foundReal camera footage of uncredited origin and an AI thumbnail. Posts every two days.
One DocumentaryBreakout videoThe Lisbon Tragedy: Europe’s Richest City, Gone in a Single MorningNumbers5.8k · 52 min · 463k (470k)What the check foundHistory, not wildlife: AI-generated 18th-century scenes, and an AI thumbnail with modern cars in 1755. No AI label. About 4.5 a week.
Edge of InstinctBreakout videoWild Mindanao: Why the Highest Branch Is Not the SafestNumbers3.1k · 30 min · 426k (429k)What the check foundReal-looking footage, but a thumbnail of an African baboon and a leopard cub on a Philippine film. Changed niche a month earlier. The only one posting two to three a week.
Bird Survival StoriesBreakout videoSnow Leopard vs Wolf Pack: A Brutal Battle for SurvivalNumbers13.6k · 31 min · 385k (423k)What the check foundNo wolf pack: the snow leopard fills the first four minutes, then other animals. Other people’s footage under a fair-use disclaimer, and a thumbnail copied from Primal Buzz’s. A cautionary example.
Into Unseen WorldBreakout videoThe Biggest Tree On Earth Is Bigger Than You ImagineNumbers19.5k · 64 min · 380k (464k)What the check foundA travel and nature list video of uncredited real footage, with an AI thumbnail. About four a week; an account from 2008.
WildBrinkBreakout videoMother Goat Carries Baby to Escape Snow LeopardNumbers263 · 8 min · 352k (420k)What the check foundPlainly AI: a North American mountain goat fleeing a snow leopard, two species that never meet. Eight of its nine videos are a goat escaping danger. Daily, no AI label.
Discover Animal DocumentaryBreakout videoWild Amazon – Mysteries of the Rainforest’s Deadliest Hidden PredatorsNumbers4.5k · 69 min · 330k (389k)What the check foundReal footage of uncredited origin, including a Madagascar chameleon in an Amazon film, and an AI thumbnail. About 4.5 a week.
Pulso Salvaje HHBreakout videoRock Python vs White-Throated Monitor: Fight for SurvivalNumbers5.6k · 13 min · 120k (120.5k)What the check foundIts description says some scenes are AI recreations, but it carries no YouTube AI label. Daily; views have stalled.

The eleven breakout videos; each video page links its channel. (The guide links every name and title.)

the-11-breakout-videos11 lines
Twig by Twig                 https://youtu.be/_TGXzzf_PAk
Ambrose Discovery            https://youtu.be/v0G9my0lyas
Primal Buzz                  https://youtu.be/5HYrZL8XZSo
Natural Wildlife             https://youtu.be/rKVw0h1LdHk
One Documentary              https://youtu.be/kjgOoCvmyOQ
Edge of Instinct             https://youtu.be/cLchwdlDkBc
Bird Survival Stories        https://youtu.be/EVjvQIkjosM
Into Unseen World            https://youtu.be/-jXJBhEp3GY
WildBrink                    https://youtu.be/COKCbFPrgEI
Discover Animal Documentary  https://youtu.be/-5o21cSIDBM
Pulso Salvaje HH             https://youtu.be/hax6cZqiVXA

What the 11 actually share

(The guide calls these the six things all 11 share. Only the titles hold for every one.)

The guide saysThe data shows
1 · No presenter. Narration over footage, start to finish.Ten of 11. The Titanic video has an on-camera host.
2 · 20 to 60 minutes. Long videos, not Shorts (the one Short is the exception that proves it).Ten are long-form, 8 to 69 minutes, six of them within 20 to 60. One is a 61-second Short.
3 · Dramatic titles: “…What It Captured Was Beyond Terrifying”.Holds for all 11. Eight end with a “| … Documentary” tag, and two use “X vs Y”.
4 · Stock + AI footage. Nothing filmed by the channel.AI scenes, other people’s footage, or both. None credits stock footage, and none carries YouTube’s AI label.
5 · 2 to 3 uploads a week. Batch-written, batch-rendered.Only one channel posts two to three a week. The median is 4.5 a week; two post daily and two several times a day. Nothing shows whether they batch.
6 · Tiny channels. 263 to 20k subs, millions of views. The topic carries it.Ten had under 20k (263 to 19.5k); the Titanic channel had 85.7k plus partner channels. Four breakouts passed a million views; the other seven had 120k to 463k.
!
Before you copy the formula

YouTube’s monetization rules exclude “inauthentic content” (the old “repetitious content” rule, renamed on 15 July 2025; YouTube says it was always ineligible): channels where videos feel interchangeable, and AI made with generic templates that look mass-produced. A separate rule on unsatisfying or off-putting content adds “a series showing repetitive scenarios of animals in exaggerated distress or peril”, stitched-together AI clips meant to shock, and realistic fake disasters. Reused content earns nothing either: other people’s footage without real commentary, or readings of text you didn’t write. What YouTube allows is AI used to edit your scripts or make a unique background. Realistic AI scenes must be marked “AI use” under Attributes when you upload; that doesn’t cut reach or pay, while skipping it repeatedly can cost the channel. AI scripts and thumbnails need no label. Thumbnails and titles that promise what the video doesn’t show count as spam. Several of the 11 above fit these exclusions. Not in the guide.

The toolbox

Eight tools

(The guide says 8 tools, 7 free. Six are free and two have free tiers.)

ToolWhat it doesCostChecked
yt-dlpWhat it doesDownloads videos, their caption files and thumbnails from thousands of sites.CostFree (Unlicense)CheckedUsing it on other people’s YouTube videos breaks YouTube’s Terms. To study a winning video’s structure, watch it on YouTube and take notes; never reuse its text, clips or thumbnail. (The guide says to feed a winning video’s downloaded transcript to Claude.)
Whisper large-v3What it doesOpenAI’s speech-to-text. It can time-stamp every word of your narration, so captions land on the beat.CostFree (MIT)CheckedWord timing is off by default and marked experimental. large-v3 wants about 10 GB of graphics memory; on a laptop use turbo (about 6 GB) or small. Command in Step 3.
Kokoro-82MWhat it doesA narrator voice that runs on a laptop: no GPU, no account. The free alternative to ElevenLabs.CostFree (Apache 2.0)CheckedConfirmed, and fine for a monetized channel. Needs Python 3.10 to 3.12 and espeak-ng. Install it with pip (the official package) or from GitHub or Hugging Face; websites with “kokoro” in their domain aren’t affiliated. Command in Step 3.
Dia-1.6BWhat it doesTwo-voice dialogue speech, for “two scientists argue” scripts.CostFree (Apache 2.0)CheckedEnglish only, and it needs an NVIDIA card (about 4.4 GB). Tag the lines [S1] and [S2]. Its successor, Dia2, is out.
ClearerVoiceWhat it doesCleans a voice track.CostFree (Apache 2.0)CheckedIt removes background noise; it claims nothing about echo. For a thin-sounding text-to-speech voice, its speech super-resolution (up to 48 kHz) is the part that helps. (The guide says it removes room noise, hiss and echo.)
Wan2GPWhat it doesAI video on your own PC in a browser window: Wan 2.1 and 2.2, LTX, Hunyuan and more.CostFree, source-availableCheckedSelect models run on 6 GB of graphics memory; bigger ones need 10 to 16 GB or more. Best on NVIDIA, with AMD on Windows and early Mac support. (The guide says it needs an NVIDIA GPU with 6 GB and up.)
ElevenLabsWhat it doesNarration voices; pick one from the Voice Library’s Narration category.CostFree tier, non-commercialCheckedFree audio can’t go on a monetized channel and must credit ElevenLabs in the title. Starter ($6 a month, 30 minutes) adds a commercial licence; one 20-minute video a week needs Creator (100 minutes); the two a week in the 30-day plan need Pro (500). v3 is now the previous model, behind v4. (The guide says every channel above sounds like it; nothing shows which voices they use.)
Nano BananaWhat it doesGoogle’s image model in Gemini, for the thumbnail and for stills.CostFree tier, with limitsCheckedFree Gemini users get Nano Banana 2; paid plans get 2.1 and Pro. Every image carries an invisible SynthID mark, and in India a visible one too unless you’re on AI Ultra.

The models behind the footage

Rupee prices from Google’s India plans; dollars at the European Central Bank rate on 21 October 2026, ₹94.47 to $1. (The guide says “4 models” and about ₹20 to 35 for an 8-second Veo 3 or Seedance clip on a paid plan; that covers only Veo 3.1 Lite.)

ModelWhat it makesWhere, and the cost
Veo 3.1What it makesCinematic clips of 4, 6 or 8 seconds, with sound.Where, and the costIn Google Flow (flow.google.com) on Google AI Plus, Pro or Ultra credits. Per 8-second clip on Pro: about ₹20 ($0.21) with Lite, ₹39 ($0.41) with Fast, ₹195 ($2.06) with Quality. The Gemini app now uses Gemini Omni instead. (The guide says Veo 3, in Flow or Gemini.)
Seedance 2.5What it makesClips up to 30 seconds, with sound.Where, and the costOn Dreamina or Higgsfield, for paid credits; no official per-clip price. Wildlife and nature are the guide’s suggestion, not ByteDance’s.
Wan 2.2What it makesSilent clips of about 5 seconds.Where, and the costFree on your own graphics card through Wan2GP: no fee per clip, only the card, power and time. Add the sound afterwards.
Nano BananaWhat it makesStills, not video: the thumbnail, and first frames to animate with any of the three.Where, and the costGemini’s free tier.
Step 3

Make one: A · the script

Swap the topic for the breakout video from Step 2. For 20 minutes, about 2,800 words, ask for a 12-chapter outline first, then one chapter at a time, as the guide says. Do it in one interactive Claude Code session or chained with claude -p --continue, because each plain -p call starts with no memory of the outline (not in the guide). The “> script.txt” at the end is added so the file the cut needs exists; on Windows, run this line in Command Prompt, not PowerShell: Windows PowerShell 5.1’s > saves the file as UTF-16, which Kokoro reads as noise. About 140 words makes a minute; time the first take.

write-the-script1 lines
claude --model opus -p "Write a 60-second YouTube documentary narration in the style of a faceless wildlife channel, about the underwater drone footage of the Titanic. First line must be a hook. Short sentences. 140 words. Plain text only." > script.txt

B · the voice

ElevenLabs: in the Voice Library, pick a voice from the Narration category and add it to your voices. Then paste the script into Text to Speech, raise Stability for a steady read, and download the MP3. Speed 0.9 is only available on the older Multilingual v2 and Flash models; v3 and v4 have no speed slider. Use a paid plan for a monetized channel. (The guide says a voice tagged Narration, stability high, speed 0.9.)

Free alternative: Kokoro-82M, voice am_michael (American) or bm_george (British), with the commands below. It needs espeak-ng: brew install espeak-ng on a Mac, sudo apt-get install espeak-ng on Debian or Ubuntu, the installer from espeak-ng’s GitHub releases on Windows. If the voice sounds thin, run it through ClearerVoice’s speech super-resolution. (The guide says ClearerVoice, without naming the part.)

Install and narrate. Kokoro needs Python 3.10 to 3.12, so this makes its own Python 3.12 environment; the version pin makes pip stop with an error on a newer Python instead of quietly installing an old Kokoro with no command-line tool. On a Mac run brew install python@3.12 first; on Linux install your distribution’s Python 3.12 and its venv package (Ubuntu 24.04: sudo apt-get install python3.12-venv); on Windows install Python 3.12 from python.org, run py -3.12 -m venv narration-env, write narration-env\Scripts\ wherever the commands say narration-env/bin/, and run Kokoro as narration-env\Scripts\python -X utf8 -m kokoro … so it reads the script as UTF-8. Kokoro writes a WAV file; in the cut prompt and the Whisper command below, use narration.wav instead of narration.mp3. Not in the guide.

kokoro-narration3 lines
python3.12 -m venv narration-env
narration-env/bin/pip install "kokoro>=0.9.4" soundfile
narration-env/bin/python -m kokoro -i script.txt -m am_michael -o narration.wav

C · free footage (no camera, no AI needed)

List every clip with its source and licence in the description; for CC BY, add the author, a licence link and that it was trimmed. Check every file’s licence before you use it. (The guide calls Internet Archive “free licence” and says the Titanic clip it used is Ifremer’s, CC BY 4.0; no such clip could be found on Commons. Ifremer’s own Commons videos are CC BY 4.0, credited to the author named on each file.)

SourceLicenceWhat to watch
Wikimedia Commons (commons.wikimedia.org)LicencePublic domain, CC0, CC BY or CC BY-SAWhat to watchUse the Videos filter. CC BY needs credit; skip CC BY-SA unless you’ll share your video under the same licence.
NOAA Ocean Exploration (oceanexplorer.noaa.gov)LicenceIts video portal is public domainWhat to watchCredit NOAA Ocean Exploration, and skip anything whose caption says copyright.
NASA (images.nasa.gov)LicenceGenerally public domainWhat to watchCredit NASA, don’t imply its endorsement, and keep NASA logos out, especially next to AI shots.
Pexels (pexels.com/videos)LicenceFree, credit optionalWhat to watchDon’t show identifiable people in a bad light or imply that people or brands endorse you.
Pixabay (pixabay.com/videos)LicenceFree, credit optionalWhat to watchAvoid clips with recognisable brands or people in anything promotional.
Internet Archive (archive.org)LicenceVaries item by itemWhat to watchUse only items marked public domain or under a Creative Commons licence that allows commercial use; many are non-commercial.

D · the cut

Paste into Claude Code, with the files in the folder. FFmpeg must be installed with caption support: on Windows, winget install --id Gyan.FFmpeg -e; on a Mac the standard Homebrew ffmpeg can’t burn in captions, so install ffmpeg-full and follow the PATH line Homebrew prints. Name a font file if Claude asks. A 16:9 video is a regular upload, not a Short. Not in the guide.

cut-prompt5 lines
In this folder: narration.mp3, 3 video clips and script.txt. Make a 16:9
1080p video: pick the best 20 seconds of each clip in order, fit them to the
narration, add the script lines as captions at the bottom (white, bold,
black outline), a small title top-left, and export final.mp4 with ffmpeg.
Show me 3 frames first.

To time the captions to the voice, make word timings with Whisper first, in the same Python 3.12 environment as Kokoro. If you skipped Kokoro, get Python 3.12 as its note says; on Windows, use py -3.12 -m venv narration-env for the first line and narration-env\Scripts\ wherever the commands say narration-env/bin/. Then add “time the captions from narration.srt” to the prompt. Not in the guide.

caption-timing3 lines
python3.12 -m venv narration-env
narration-env/bin/pip install -U openai-whisper
narration-env/bin/whisper narration.mp3 --model turbo --language en --word_timestamps True --output_format srt --max_words_per_line 4

E · the thumbnail (Nano Banana in Gemini)

Point the arrow only at something the video actually shows. Upload it as JPG or PNG, 16:9, at least 640 pixels wide; custom thumbnails need a verified YouTube account. (The guide’s prompt ends “no watermark”. That’s removed: a prompt can’t remove Gemini’s marks.)

thumbnail-prompt3 lines
YouTube thumbnail, 16:9. A deep-sea ROV's lights hitting the rusted bow of
the Titanic, dark water, one red arrow pointing at a shape in the gloom, bold
white text "WHAT IT FOUND" top-left. Photoreal, high contrast.
The money

What it pays

Figures are public YouTube numbers at scan time (20 October 2026) and estimates; examples, not a promise of what you will earn.

The guide’s estimateWhat it rests on
A 21-minute video with 4.0M views: $8k to 16k, at $2 to 4 per 1,000 views (long-form, US audience)The arithmetic holds, but the rate is a guess: YouTube publishes no rates by niche, and third-party medians run from about $2.30 overall to about $10 for education. Pay counts engaged views, not the public count, which since August includes autoplay and hover. Whether that channel earns at all is unknown, and “US” is the country it declares, not its viewers.
The same views on Shorts: $400 to 800, at $0.10 to 0.20 per 1,000Also an estimate; YouTube’s own worked example comes to about $0.41 per 1,000. From 1 February 2027 a channel earns from Shorts only in months with 10 million Shorts views over the previous 90 days.
“Long videos pay 10 to 40 times more per view”The guide calls that gap “the whole business model”, but the ratio is just its two guesses divided. What is documented: creators keep 55% of long-form ad revenue against 45% of their Shorts share, and videos of 8 minutes or more can carry mid-roll ads.
“Which is why every channel [in the list] posts 20 minutes, not 60 seconds”Eight of the 11 breakouts run 20 minutes or more.
“You unlock ads at 1,000 subscribers + 4,000 public watch hours in 12 months”True until 31 January 2027 (or 10 million Shorts views in 90 days). New channels then need 8,000 watch hours in 365 days, or 20 million Shorts views in 90 days. Hours from the Shorts feed never count, so long videos do get you there faster. At 500 subscribers, with 3,000 watch hours in the past year (or 3 million Shorts views in 90 days) and three uploads in the last 90 days, memberships and Super Thanks open, but not ads.
The 30 days

Week 1 · setup

1

Run it once

Get the API key, unzip the scanner and run it.

2

Ask the group-by-channel question

The prompt from Step 2.

3

Pick ONE niche

Where three or more small channels broke out, and where you can tell a real, researched story each time (see the monetization box above; not in the guide).

4

Create the channel

Name, and a banner from a Nano Banana still. YouTube wants at least 2048 × 1152 pixels with text inside the central 1235 × 338; free Gemini downloads at 1K, so upscale it. Not in the guide.

5

Post the trailer

Make the 60-second clip from Step 3 and set it as the channel trailer: YouTube Studio → Customization → Home tab → Channel trailer. It’s 16:9, so it posts as a regular video, not a Short.

Weeks 2 to 4 · the loop

1

Monday

Run the scan and pick the week’s two topics.

2

Tuesday

Claude writes both outlines and chapter 1 of each. The other eleven chapters still need writing before you voice them, which the guide doesn’t schedule.

3

Wednesday and Thursday

Voice, footage and cut, one video a day. (The guide’s own estimate elsewhere is a weekend per 20-minute video, so expect this to slip.)

4

Friday and Sunday

Publish one 20-minute video each, at the same time of day.

5

Day 30

Seven videos up: the trailer and six (the guide says eight videos up). Make three more like the best one, each with its own story rather than an interchangeable copy; that last part is not in the guide (see the monetization box above).