Kid mode 🧒

This page is Avoidant / NarcissistAI-Video Pipeline. It is one of the projects Brandon built and put online. The grown-up details are below, tap Grown-up mode to read them the normal way.

Workflow Plan · Phase 1 executing · full pipeline proven (mine → script → voice → caption → QA)

Avoidant / Narcissist
AI-Video Pipeline

A three-channel faceless short-form operation in the understand-your-avoidant-partner niche. One script base, rendered three ways, dispatched on the same launchd plumbing that already runs the idea-miner and chat-conductor jobs. Every video opens on a hyper-specific crisis moment mined from real sources, then delivers one real solution.

q-2026-06-06-244acf ✓ 6/6 decisions resolved ✓ Christian render READY 5/5 Occult render → review (length) Secular gated (spend) 4 pipeline scripts built ~$5-12 / month all-in
source: /Users/drwu/Desktop/Brandon-Vault/20 Projects/avoidant-narcissist-ai-video-pipeline-plan.md

Phase 1 — Live test renders 2026-06-07, newest 2026-06-13

The two free lanes, run end-to-end through the real pipeline: lane-palette background bed → 3-second voice-free title card → word-synced burned captions → the 5-check QA gate. Press play — portrait 1080×1920, exactly as they would post to Shorts.

Christian · "3 days of silence" ✓ READY 5/5
audio integrity — clean, no dropouts
caption sync — 29/29 cards on speech
transcript fidelity — exact
visual readability — captions every frame
length gate — 42.9s (42–65s)
Newest render, full pipeline end to end: seed headline → DeepSeek script → voice-gate clean (NKJV "love suffers long and is kind", no "already", no antithesis, no partner-blame) → Brandon XTTS → forced-aligned captions → QA gate. Staged in queue/ready/.
Christian · "silent treatment"✓ READY 5/5
audio integrity — no dropout, 14 natural pauses, −17.6 LUFS
caption sync — 30/30 cards land on speech
transcript fidelity — exact (captions = script)
visual readability — captions render on every frame
length gate — 58.7s (42–65s)
58.7s · H.264/AAC · the approved 55.7s Brandon render + 3s title card. Clean, gate-passing — staged in queue/ready/.
Occult · Lester XTTS⚠ REVIEW
audio integrity — 1.82s dead-air gap at 24s
caption sync — 30/30 cards on speech
transcript fidelity — exact
visual readability — "Eight of Cups" caption reads clean on the obsidian bed
length gate — 67.9s, over the 65s ceiling
The gate working as designed — two real fails route it to queue/review/. One fix clears both: trim ~3s from the Lester script for v3 (drops the length and the long pivot pause together).
Secular lane
held at the
ElevenLabs spend gate
no paid call fires
without your token
Secular · ElevenLabs Flash🔒 GATED
Script is written and ready; render waits on a spend-gate token (≤$10/mo Flash auto-approve, then it renders identically to the other two).
What this pass shipped & learned

Three-channel routing

One script base, three voices, three palettes, three framings, three CTAs. The real-solution rule holds across all three.

Christian cut3x / week
Channel
@onethingneeded (existing audience)
Voice
XTTS Brandon (AB_5_brandon_REAL.wav), $0
Palette
Light gold/cream, candlelight, open Bible, sunrise loops
Framing
Your partner's avoidance is not God's design for covenant love. Here is what Scripture says about secure attachment.
Edge anchor
1 Scripture ref woven into the solution (Song of Songs, Proverbs, 1 Cor 13)
CTA
the-key-of-david.com or Faith & Devotionals Etsy
Secular cut7x / week
Channel
@avoidantdecoded (new), tone on @OnAttachment
Voice
ElevenLabs Starter Flash, neutral male, $5/mo, gated
Palette
Clean neutral, dark navy or charcoal, soft light motion
Framing
Direct secular, attachment research only, no religious or esoteric language.
Edge anchor
None
CTA
Secular Substack or a lead-magnet PDF
Occult cut3x / week
Channel
brandonpage (2nd channel)
Voice
XTTS Lester (lester_v3_ref.wav), $0
Palette
Dark mystic, indigo/obsidian, slow starfield or smoke (no crystals)
Framing
Your avoidant partner's energy is sending a signal. Here is how to read it, and the boundary it is asking you to hold.
Edge anchor
1 tarot card per video, energy/frequency lens, no crystals
CTA
Tarot & Voice Readings Etsy section
Non-negotiable: the differentiator is validation that names your exact moment, then a real fix. A video that only validates is filler. The occult and crystalline edges decorate the solution, they never replace it.

Build phases

Each phase ships one pass at a time. The shift executor pulls this plan and runs it phase by phase.

Phase 1Research and Format Lock~1 week

Lock visual format, caption style, voice, and length for all three lanes before any automation is built.

  1. Audit 16 videos (4 each from @heidipriebe1, @LisaARomano, @StephanieLynCoaching, @OnAttachment). Log caption font/size, background type, length, hook placement, real-solution placement.
  2. Hand-render one test video per lane for a single crisis headline, all captions burned via the free Whisper+ffmpeg path the pipeline actually uses.
  3. Lock the format spec: 1080x1920 portrait, caption style, background mode, intro hook length, 45-60s length target.
  4. Resolve the channel-identity conflict (open item 1) with Brandon before any routing is wired.
  5. Build the stock-loop library plus 5 Kling Free-tier test loops across the three palettes.
Done when: Three hand-rendered test videos play clean on a phone, captions came from the free path, the format spec is approved, and the channel conflict has a recorded answer.
Phase 2Build and Template~1-2 weeks

A Python pipeline that takes one script and outputs a QA-passed MP4 per lane, ready to dispatch.

  1. tts_render.py routes XTTS Brandon / XTTS Lester / ElevenLabs Flash by lane, with the spend-gate token required before any ElevenLabs call.
  2. caption_burn.py uses faster-whisper base word timestamps, groups into 3-5 word phrases, writes the .ass style, burns over the looped background plus a 3s title card.
  3. qa_check.py runs the four-check gate, moving each MP4 to ready/ on all-pass or review/ on any fail.
  4. generate_scripts.py scores with DeepSeek Haiku, expands with DeepSeek Sonnet, runs the relationship-psych-canon gate on the Christian variant.
  5. assemble_video.py wraps tts -> caption -> composite for one script.
Done when: assemble_video.py produces a clean MP4 that passes all four QA checks for all three lanes, and the gate correctly fails a synthetic audio-dropout file and a file with one word deleted from the TTS input.
Phase 3Automate and Dispatch~1 week, then ongoing

The whole loop runs on a daily cadence with no hands. Mine, generate, render, QA, dispatch.

  1. Install the 6 launchd plists, copying com.drwu.idea-miner.plist, loaded via launchctl bootstrap.
  2. YouTube upload via Data API v3, per-lane OAuth tokens, category 26, per-lane playlist, vertical clip auto-detected as a Short.
  3. Backpressure: 14-day buffer target, emergency double-batch under 7 days, dispatch pause plus phone notification when review/ exceeds 5.
  4. n8n (optional) for a visual execution log layered over the launchd jobs.
Done when: The pipeline runs 7 consecutive days with zero manual intervention, 3+ videos per lane per week upload, QA passes on 90%+ of renders, review never exceeds 5, and zero ElevenLabs credits fire without a spend-gate token.

Headline-mining method

Specificity is the growth lever. The method manufactures hyper-specific crisis headlines from real human phrasing, at volume, from free sources.

Step 1
Crisis-phrase extraction

Reddit miner pulls 50+ upvote titles from r/anxiousattachment, r/AvoidantBreakups, r/NarcissisticAbuse and others via free JSON endpoints. YouTube title miner reuses yt-transcripts to pull top titles from the four verified channels (metadata only, no rate-limit risk).

Step 2
Expand and de-label (DeepSeek bulk)

Rewrite each crisis phrase as a 50-60 char Shorts title, front-load the emotional hook, second person, and drop the literal words 'attachment style' and 'narcissist' (the algorithm suppresses clinical labels).

Step 3
Score and gate

DeepSeek Haiku scores each candidate 1-10 on emotional specificity, crisis salience, and tri-lane fit. 7+ on all three enters the queue. About $0.01 per batch of 50.

Step 4
Three-way script adaptation

One DeepSeek Sonnet call emits three ~200-word scripts per headline, each in its lane framing and CTA, each carrying one real solution. The Christian variant clears the relationship-psych-canon gate before render. ~$0.02-0.04 per triple.

Self-QA gate

qa_check.py runs four checks on every rendered MP4. No video reaches ready/ unless every check returns pass. Any failure moves it to review/ and fires a phone notification.

CheckToolPass conditionCatches
Audio integrityffmpeg astats + silencedetectNo silence gap > 0.5s after the intro pause; no clip above -1 dBFS; loudness -16 to -14 LUFSTTS dropout, render clipping, dead audio
Caption syncre-run faster-whisper, diff vs burned .assEvery word within 0.3s of its predicted onset; zero dropped or duplicated wordsDrift between captions and speech
Transcript fidelityWhisper re-transcript vs source scriptWord Error Rate < 5%TTS mispronounced or skipped a chunk (the new v2 check)
Visual readability10-frame brightness sampleNo frame below 20/255 or above 240/255; no solid black/white frameUnreadable caption on a dark/blown loop, freeze or crash

Cost per video

Variable cost only. Local-first keeps voice, captions, QA, and upload at zero.

ItemChrSecOcc
Script (DeepSeek triple)$0.01$0.01$0.01
Voice (TTS)$0.00~$0.01-0.02$0.00
Background (Kling, amortized)$0.00$0.00~$0.01
Caption + QA (local)$0.00$0.00$0.00
Upload (YouTube API)$0.00$0.00$0.00
Per video~$0.01~$0.03-0.04~$0.02

Queue states

State is folder location, so the scheduler is stateless and any step re-runs safely.

pending/approved scripts, awaiting render
rendered/MP4 + qa.json, awaiting QA verdict
review/failed QA, human inspection needed
ready/passed QA, awaiting dispatch
uploaded/dispatched, archived with the YT video id
pending → rendered → ready → uploaded  (detour to review/ on any QA fail)

Daily scheduler (launchd)

Six plists, the exact pattern of com.drwu.idea-miner and com.drwu.conductor-rebuild.

WhenJobRuns
06:00 dailycom.drwu.avoidant-minereddit_headline_miner.py + yt_title_miner.py
06:30 dailycom.drwu.avoidant-scriptgenerate_scripts.py (score, expand, gate -> pending/)
07:00 dailycom.drwu.avoidant-renderassemble_video.py --batch pending/
08:00 dailycom.drwu.avoidant-qaqa_check.py --batch rendered/
08:30 dailycom.drwu.avoidant-dispatchupload_queue.py (ready/ -> YouTube)
Mon weeklycom.drwu.avoidant-refreshyt_title_miner.py full title-corpus refresh

Skill and script reuse map

Every asset below was confirmed present on disk in the v2 rigor pass. The build leans on what already works.

Pipeline stepReused asset
YouTube title corpusyt-transcripts / yt_trans
Christian solution-source gaterelationship-psych-canon
Occult / crystal vocabularytarot-canon
XTTS render patternbook-to-video (call ~/xtts_env311, not the header's stale env)
ElevenLabs render patternbook-to-video + voices.json
Brandon voice ref~/Projects/brandon-voice-clone/AB_5_brandon_REAL.wav
Lester voice reflester_v3 in voices.json
TTS spend gatescribe-video/tts_gate/approve_script.py
Caption word timestampsfile-getter (faster-whisper base int8)
SSML prosodyspeech-synth
Christian prose gatechristian-devotional-rewrite
Scheduling patternlaunchd (com.drwu.idea-miner.plist)
Phone notify on QA failiCloud remote inbox (5s watcher)

Decisions, resolved 2026-06-06

All six confirm items are answered. Channels routed, occult edge set to tarot plus energy with no crystals, format and spend gate locked to defaults.

Occult lane channel

Resolved: routes to brandonpage (2nd channel). Key of David stays the Christian Lane 1 anchor, the 4-lane split holds, no Channel Map edit needed.

Christian lane channel

Resolved: @onethingneeded, the existing-audience channel (Music Lane 3 lives here too).

Secular lane handle

Resolved: @avoidantdecoded, a new channel, tone modeled on @OnAttachment.

Occult edge depth

Resolved: tarot energy yes, crystal no. Keep one tarot card per video plus energy/frequency language, drop named crystals and crystal imagery across all lanes.

Format orientation

Locked default: 1080x1920 portrait, 45 to 60s Shorts for all lanes.

ElevenLabs spend-gate threshold

Locked default: auto-approve secular batches under a $10/mo Flash cap, hard-stop and notify above it.