The auto-tuner runs daily: scripts/yt-analytics/run.py reads the last 30 uploads from the YouTube Data API v3 videos.list endpoint, groups them by archetype, computes age-normalized views/day (excluding videos under 24 hours old), and rewrites docs/yt-today-directive.md. The generation routine must read that file first—the directive design is covered elsewhere; this is about what the live data actually said after two weeks.
Signal 1: the gap between archetypes is larger than I expected
Current median views/day by archetype:
-
product_findindiegame(game-vs-game comparisons): 11 views/day, n=19 -
product_ossfind(OSS alternative comparisons): 2 views/day, n=1 — too small to trust -
build_in_public: 1 views/day, n=2
The 11 views/day median for product_findindiegame comes from a specific pattern in the underlying data, not from the archetype label alone. Named-vs-named game comparisons—where both the indie and the AAA are well-known proper nouns—drove individual Shorts to 162-373 views. Stripping the specific names from the same template (keeping the numeric hook, dropping the game names) collapsed a comparable Short to 77 views. A Short with no recognizable game names reached 5 views.
The original analytics classifier tracked archetype vs non-archetype performance. What the two-week data added is specificity about what inside the archetype drives performance. The auto-tuner now enforces a hard gate on the spec: the title must name two real, recognizable proper nouns before the spec passes the YouTube audit.
Signal 2: build_in_public didn't just underperform—it regressed
When I started the channel, posting what I shipped each week seemed natural. One early video hit 34 views, which looked like signal at the time.
The age-normalized median for that archetype is now 1 view/day. The 34-view video was a month-one outlier; the last two build_in_public Shorts averaged 8 views each with no growth tail in the first two weeks.
The directive hard-bans it. The specific concern isn't just that it underperforms—it's that when the 3-in-a-row guard fires on the winning archetype (see below), the generation routine needs a fallback. Without an explicit ban, it might fall back to build_in_public as a low-resistance option. To prevent that, the Python script maintains DEAD_ARCHETYPES = frozenset({"build_in_public", "meta", "curated", "technical"}) and excludes those explicitly from any fallback path in the directive logic. A fallback into a dead archetype would produce a spec that the analytics engine then counts against the winner's share of the queue—distorting next week's view distribution.
Signal 3: the 3-in-a-row guard matters even for the winning archetype
Today's directive switched the target to product_ossfind because product_findindiegame appeared in the last two uploads. The 3-in-a-row guard is a rule I hardcoded when I noticed two things colliding.
First, the Jaccard duplicate detection in the spec audit. When the same archetype runs three days in a row, the opening-line similarity score between consecutive specs rises above the 0.82 threshold and the audit starts blocking specs before they reach the TTS step. The guard fires at two-in-a-row specifically to force a rotation before the audit has to catch a near-duplicate. The audit is the last-resort gate; the guard prevents the situation from reaching it.
Second, the practical consequence of the guard: today's video will likely underperform a product_findindiegame spec on the same day. I'm choosing one potentially weaker video to avoid two worse outcomes—a near-duplicate upload that erodes the audience's sense of variety, or a pipeline stall from a failed audit.
The tradeoff is real and I haven't resolved it cleanly. The right answer might be to build a rotation schedule that forces archetype diversity over a 5-day window rather than triggering off consecutive identical archetypes. That would allow product_findindiegame to appear on Monday and Thursday without triggering the guard, rather than being blocked after any two consecutive days regardless of the gap between them.
What I don't know yet
product_ossfind has one video. The 2 views/day figure is not actionable data—it's a prior that could easily flip with the second video. The auto-tuner requires n≥3 before an archetype enters the ranked comparison; currently product_ossfind is in an "early data" category and only gets the target slot today because the guard pushed off the clear winner.
The view counts are also raw, not CTR-weighted or subscriber-normalized. A Short that gets 200 views from algorithm distribution with 3% CTR is a different signal than 200 views from a well-trafficked playlist with 0.1% CTR—but I don't have CTR data accessible from the YouTube Data API at the current tier without going through YouTube Studio. Views/day is the proxy, and it's a noisy one for videos under a week old.
Part of an ongoing 6-month experiment running three AI-curated directory sites. The technical claims here are real; this article was AI-assisted.
Top comments (0)