name: pop-in-therapy-reels
description: The Pop In Therapy reel engine for @pop.in.therapy (IG + TikTok) — pop-psychology "decode the song" reels about mega-recognizable girly-pop. Use whenever the user wants to make/build a reel, do the next reel, change the format/slate/songs, debug a reel that shipped wrong (text too small, cut off, bad loop, wrong music), check how posts are doing, or touch anything about the autonomous build→ship→learn pipeline. The CURRENT format is faceless quote (no-VO b-roll: artist photo + album art + a cliffhanger card; the caption holds the decode). NOTE: this skill was rewritten 2026-06-09 — the old HeyGen talking-head/avatar pipeline is PARKED, ignore references/ files that describe it.
Pop In Therapy Reels — system map
@pop.in.therapy is an autonomous IG/TikTok account: pop-psychology takes that decode what a mega-hit song reveals about a relationship/attachment dynamic. The machine builds, QCs, ships, and learns on its own on a VPS. This file is the map — it tells you what the system is and points to the canonical files that run it. It does not duplicate them (so they can't drift).
The ONE format that matters now: quote (no-VO b-roll)
The data picked it (Sabrina's quote reel hit 37% skip — beat Drake, the prior benchmark). It is the default + the registry "winner". Anatomy:
- Full-bleed colored artist photo (face kept high) + album/single-art inset top-right (double recognition).
- A bold caps HOOK that is a CLIFFHANGER — opens a curiosity loop, withholds the payoff.
- 2-3 SHORT teaser lines (≤80 chars each) — NOT an essay. The card is read in 2 seconds.
- The CAPTION holds the full decode (this is where people learn) — must CONTINUE the hook, never recap.
- ~5s, seamless loop (image ping-pongs home; text is static; music bed is a crossfade loop).
- On-brand generated music bed matching the song's genre/era (never the real song — licensing).
- Closes on a VIEWER-MIRROR ("that's you" / a line specific enough to send to one person), never a "tag/comment/save" beg.
Other formats: whohurt (VO + graphics — the #2, a change-up ~1 in 6), plus attach/hidden/cry/red-flags (VO graphics, testing). Parked: HeyGen avatar (PodcastClipReel/face), editorial. Retired: quiz, all 5 silent-* engines (flopped 75-85% skip).
How a reel is built (faceless, ~$0-0.30/reel)
The autonomous builder (headless Claude on the VPS) follows ops/pop-in-therapy/auto-builder-prompt.txt (the full rulebook — read it for the real detail). Flow:
scripts/next_slate_item.py→ next unbuilt song frompriority-slate.md(skipsstate/used-songs.json). If exhausted →pick_next_format.py(explore/exploit onformat-registry.json+ Dana's guidance).- Builder writes a spec JSON in
ops/pop-in-therapy/segments/<slug>.json(quote/segment) orred-flags/<slug>.json. scripts/build_quote.py <spec>(orbuild_segment.pyfor VO formats): fetches artist photo (Wikipedia) + album art (iTunesfetch_album), generates the on-brand bed (generate_bed.py→ seamlessseamless_loop), writesprops.json, renders viarender_quote.mjs(Remotion), writes a<slug>-safezone.pngQC overlay.- QC: the safezone overlay must show all text inside the safe box;
build_quoteprints⚠️ BUILD TOO LONGif the card text would shrink below the 34px legible floor. finalize_autobuild.py: git commit+push the reel, append tostate/queue.json, log toused-songs.json+learnings.json.ship_today.py(cron) popsqueue.json, posts to IG (live) + TikTok (draft → you add the real song manually), records toposted_reels.json.
The autonomous schedule (LIVE on the VPS — /etc/cron.d/pop-in-therapy-*)
- Autobuild 4×/day: 13:00 / 16:00 / 20:00 / 23:00 UTC (
/opt/pop-build/scripts/run_auto_build.sh) - Ship 4×/day: 15:00 / 18:00 / 22:00 / 01:00 UTC = 18:00 / 21:00 / 01:00 / 04:00 EAT (
/opt/pop-in-therapy/scripts/ship_today.py) - Dana's analysis 05:00 UTC (
run_daily_analysis.sh→prompts/daily-analysis.txt) → writeslearning-log.md+builder_guidance.json - Metrics 14:00 UTC (
reel_metrics.py→reel_metrics_log.json); Competitor scan Mon 04:30 (run_competitor_scan.sh) - Two VPS clones:
/opt/pop-build(git; builds;git pull --ff-onlybefore each build so pushes tomainauto-propagate) and/opt/pop-in-therapy(NOT git, rsync-deployed; runs ships + holdsstate/and Dana'sprompts/).daily-analysis.txtand the prompts live ONLY there — edit them on the VPS (not in git).
Metric philosophy (Ben 6/9)
VIEWS is the headline scoreboard. Skip-rate and saves/shares are the diagnostic inputs that drive views: low skip unlocks the first push; saves/shares unlock the push to NEW audiences. Current diagnosis: skip is SOLVED (quote 37-59%), but saves/shares ≈ 0 → views cap at ~150. The bottleneck now is RESONANCE — the viewer-mirror close is the lever. Don't keep polishing production; the remaining work is content.
Content rules (the durable system — they live in priority-slate.md's header)
MEGA-recognizable girly-pop only (Sabrina, Chappell, Billie, Taylor, Ariana, Dua, Gaga, Lorde, Olivia, Tate, Gracie, Lana, Adele, Rihanna, Katy, Selena, Miley — NO Doja, NO male-led) · rotate artists (never same within ~6) · topic = ALL romance/relationship psychology (situationships, jealousy, trauma bonds, self-sabotage, honeymoon-brain, no-contact, romanticizing pain) NOT just attachment · decode the SONG never generic self-help · hook = cliffhanger · close = viewer-mirror · paraphrase lyrics (never exact — licensing).
Hard-won gotchas (DO NOT relearn these)
- Safe zone (organic IG+TikTok): keep all text inside
x:[90,916] y:[200,1580]. Encoded intokens.tsZONE constants. QC withscripts/safezone_check.sh <slug>. Bottom is the ORGANIC number (340px); ads would need ~1440. - Legibility: card text shrinks to fit — never below 34px. If it'd overflow, the card is too wordy → shorten to 2-3 lines, move detail to caption (NOT shrink the font).
- Seamless loop: image uses a ping-pong (sin curve, home→peak→home) so first frame == last; text is static; the MUSIC bed is crossfaded into a seamless loop (
seamless_loop) or you hear an audio seam. - Deploy race: ships fetch the video by URL (
brochbot.com/reels/<slug>/...via Vercel). A re-render only ships correctly once committed+pushed AND Vercel/CDN propagated — verify live URL content-length vs local before claiming a fix shipped. - Music: AI-generated bed per reel (
musicStylein the spec → ElevenLabs/v1/music), genre/era only, never the melody. Real songs can't be auto-attached (API limit) and licensing (Lickd) is ~$1-2k/mo — rejected. Add the real song manually on the TikTok draft for recognition. - Verify by RENDERING (read the safezone PNG), not by ffmpeg preview.
ELEVENLABS_API_KEYis on the VPS.
Where everything lives (the index)
Operational (the autonomous system runs on these):
ops/pop-in-therapy/auto-builder-prompt.txt— the full build rulebook (read in full by the VPS agent)ops/pop-in-therapy/priority-slate.md— RULES (top) + the deep girly-pop build queueops/pop-in-therapy/format-registry.json— format status (winner/testing/retired)ops/pop-in-therapy/learning-log.md— Dana's daily journal (newest = current strategy)ops/pop-in-therapy/treatment-registry.json— visual treatment vocabulary (VO formats)- VPS
/opt/pop-in-therapy/state/— the LIVE truth:queue.json,posted_reels.json,used-songs.json,learnings.json,builder_guidance.json,reel_metrics_log.json(local repostate/copies are stale) - VPS
/opt/pop-in-therapy/prompts/daily-analysis.txt— Dana's analysis prompt (VPS-only, not git)
Build/render code: scripts/build_quote.py, build_segment.py, build_red_flag.py, generate_bed.py, next_slate_item.py, pick_next_format.py, finalize_autobuild.py, ship_today.py, safezone_check.sh; video-editor/reels/ (QuoteReel.tsx, SegmentReel.tsx, RedFlagsReel.tsx + design/ tokens/primitives/motion — the ZONE safe box + design system).
Creative knowledge (reference, pull from these): docs/pop-in-therapy/ — song-catalogue.md (170-song deep well), scroll-stop-playbook.md (hook research), vox-method.md (script shape), design-system.md (the visual law), the banks (red-flags/attachment/hidden-meaning), chart-pulse.md (weekly charts), music-library.md.
Lessons (the why, in user memory): project_pop_*, project_reel_*, feedback_reel_* memory files — safe zone, ship schedule, testing engine, metric philosophy, production gotchas, viral-loop, bold hooks.
LEGACY / IGNORE: references/heygen-and-audio.md, scene-types.md, script-writing.md, reels-rubric.md describe the PARKED HeyGen avatar era. scene-types.md is still loosely relevant to SegmentReel scene kinds; the rest is dead.