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.
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
Four reusable pipeline scripts built and proven:background_compositor, caption_burn, assemble_video, qa_check — the Phase-2 toolchain, validated now by producing real Phase-1 renders.
Caption timing: faster-whisper installs, but its ctranslate2 backend hard-wedges on this Intel iMac (0% CPU on cold import). Pivoted to deterministic forced alignment against the known script text — higher fidelity than ASR, because the words are ground truth, not a guess.
Caption burn: this ffmpeg 8.1 build ships without libass, so the subtitles filter does not exist. Switched to PIL-rendered caption PNGs over a timed overlay chain — libass-free, fully local.
QA gate calibrated honestly: dropout threshold set at 1.5s (separates breath-pauses from dead air, every pause still logged); the visual check measures caption legibility, not palette brightness, so the near-black occult bed is not falsely failed.
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)
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.
Audit 16 videos (4 each from @heidipriebe1, @LisaARomano, @StephanieLynCoaching, @OnAttachment). Log caption font/size, background type, length, hook placement, real-solution placement.
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.
Lock the format spec: 1080x1920 portrait, caption style, background mode, intro hook length, 45-60s length target.
Resolve the channel-identity conflict (open item 1) with Brandon before any routing is wired.
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.
tts_render.py routes XTTS Brandon / XTTS Lester / ElevenLabs Flash by lane, with the spend-gate token required before any ElevenLabs call.
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.
qa_check.py runs the four-check gate, moving each MP4 to ready/ on all-pass or review/ on any fail.
generate_scripts.py scores with DeepSeek Haiku, expands with DeepSeek Sonnet, runs the relationship-psych-canon gate on the Christian variant.
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.
Install the 6 launchd plists, copying com.drwu.idea-miner.plist, loaded via launchctl bootstrap.
YouTube upload via Data API v3, per-lane OAuth tokens, category 26, per-lane playlist, vertical clip auto-detected as a Short.
Backpressure: 14-day buffer target, emergency double-batch under 7 days, dispatch pause plus phone notification when review/ exceeds 5.
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.
Check
Tool
Pass condition
Catches
Audio integrity
ffmpeg astats + silencedetect
No silence gap > 0.5s after the intro pause; no clip above -1 dBFS; loudness -16 to -14 LUFS
TTS dropout, render clipping, dead audio
Caption sync
re-run faster-whisper, diff vs burned .ass
Every word within 0.3s of its predicted onset; zero dropped or duplicated words
Drift between captions and speech
Transcript fidelity
Whisper re-transcript vs source script
Word Error Rate < 5%
TTS mispronounced or skipped a chunk (the new v2 check)
Visual readability
10-frame brightness sample
No frame below 20/255 or above 240/255; no solid black/white frame
Unreadable 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.
Item
Chr
Sec
Occ
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.
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.