How this works
Take a video that is already getting engagement and make your own version. Same proven format, your content, your voice. It never invents your opinions.
Quick start
- Start it:
python -m uvicorn dashboard.app:app --port 8756 from the scripts/ folder.
- Open
http://localhost:8756.
- Paste a reel or YouTube URL, pick the format, click Reverse-engineer it.
- Fill your own picks into the slots, add your take and CTA, click Write my script.
- Copy the hook, script, shot list and caption. Go record.
The three steps
1
Reverse-engineer
It downloads the video, transcribes it locally (Whisper), and uses Claude vision to split it into structure you keep (hook shape, pacing, shot order, CTA) and swappable slots you replace (the picks, claims, examples it is built around).
2
You fill the slots
It shows you exactly what content it needs. You supply your own picks, your take, your CTA. It will never fabricate your opinions, an empty slot comes back flagged, not invented.
3
It writes your version
Your content dropped into the proven format, in your voice. Reels get 3 hook options + a low-face shot list. YouTube gets a narration script for ElevenLabs + a synced screen-recording plan + chapters + titles.
Reel vs YouTube
| Reel / Short | YouTube (long-form) |
| Aspect | 9:16 vertical | 16:9 landscape |
| Face | hook + CTA only | zero (voiceover) |
| Voice | you on camera | ElevenLabs, your clone |
| Output | hooks + script + shot list | narration + screen plan + chapters + titles |
Where the output goes
Everything saves under scripts/output/<video_id>/ as JSON, so any stage can be re-run. The finished script is tailored_output.json (reel) or youtube_output.json.
The Brain loop
This pipeline is meant to speak from your Airtable Brain, the same one that runs your blog. Two hooks:
- Learning Live reads Active Lessons before writing and applies them as hard constraints (e.g. "name a number in every hook"). Shows you which lessons it used.
- Memory Live the "Save to Brain" button logs the script to the Content table so you have a searchable library.
- Dedup Live warns if you already made a version of this URL.
The dashboard talks to the Brain directly via AIRTABLE_TOKEN in .env, so it works with no Claude session open. The Google Doc step is still Claude-side; here you use the Download button instead.
What's built vs coming
| Capability | Status |
| Run the real pipeline (reel + YouTube) | Now |
| Fill slots, get script / hooks / shot list | Now |
| Copy + Download (PDF) buttons, branded UI | Now |
| Auto-apply Lessons (learning) | Now |
| Save to the Content table (memory) | Now |
| Dedup warning | Now |
| Google Doc from a button | Later |
| Source backlog + one-click queue | Later |
Needs
scripts/.env with ANTHROPIC_API_KEY and IG_COOKIES_PATH (Instagram cookies; most reels will not download without them).
- ffmpeg and ffprobe on your PATH.
- Phase 2 also needs an Airtable token, and Google credentials for the Doc step.
If something breaks
- Download fails โ your Instagram cookies went stale, re-export them, or run
pip install -U yt-dlp.
- Transcribe is slow โ normal, Whisper runs on your CPU. A long YouTube video takes a few minutes.
- Messy transcript โ raise
WHISPER_MODEL to small in .env.