Decebal Cântă — AI-automated history songs for Romanian high-school students
A history-revision tool I'd have loved as a teenager: Romanian historical figures singing their own stories across metal, pop, trap, and manele. Two AI agents — Claude and Codex — run most of the pipeline, from cross-checked lyrics and synced lyric videos to portrait Shorts, auto-uploaded YouTube content, and matching quizzes. Free for students cramming for the history baccalaureate.

Decebal Cântă — AI-automated history songs
Honestly? I got jealous of teenagers. Revising for exams with AI looks like genuine fun — then it hit me that I'm an adult, so I can have the fun without the exams. Decebal Cântă is what came out: Romanian historical figures narrating their own stories in original, actually-catchy songs, free for the kids cramming for the baccalaureate. The real experiment is how much of the pipeline two AI coding agents — Claude and Codex — can run between them: drafting and cross-checking the lyrics, rating the versions, aligning them word by word, rendering the videos, cutting portrait Shorts, and publishing to YouTube. I mostly curate — pick the winners, keep the bots honest about history, and tap the handful of buttons that would otherwise break someone's terms of service. Everything ships CC0.
Key Features
- Claude Code and Codex collaborate — each drafts songs blind, then fact-checks the other
- Fully AI-driven build flow, from lyrics to YouTube upload
- Four musical genres — metal, pop, trap, manele
- Codex-driven fact-checking against textbooks and online sources, with a dual-LLM cross-check on cheat sheets
- Automated song rating, ranking, and rejection
- Word-level lyric timing from WhisperX forced alignment, with vocal-stem isolation for accuracy, on a local GPU box
- Portrait YouTube Shorts auto-cut from each song's catchiest verse and chorus
- Auto-generated 12–16 question quizzes tied to each song, marking which facts are covered
- Website, tooling UI, and lyric-timing editor — 100% vibe-coded with AI
- All content released CC0 and free for students
My Role
- Concept & curation
- Multi-LLM orchestration (Claude + Codex)
- Editorial & historical-accuracy oversight
- Keeping the bots on track
Technical Challenges
- Orchestrating two different LLMs (Claude + Codex) as both drafters and independent fact-check gates
- Migrating the server-side agents off the Claude Agent SDK onto Codex's CLI after the SDK's runtime kept breaking
- Getting accurate word-level timings out of AI-generated music by aligning against auto-extracted vocal stems
- Respecting Suno and YouTube terms of service while automating everything else
- Keeping historical accuracy strict without losing musical character
- Making the whole pipeline cheap enough for a hobby budget
Build flow — Claude and Codex doing the heavy lifting
- 01
Cheat sheet per historical figure
Claude builds a textbook-anchored cheat sheet of facts for each historical figure, so every point the bac expects is covered before a single line of lyrics gets written.
- 02
Three drafts, two models
Claude writes two versions of the song and Codex writes a third — all from the same blank-slate brief. Running two different models against the same prompt is a built-in creativity benchmark. One slash command kicks the whole thing off.
- 03
Trivia per version
Alongside each draft, a plain-Romanian trivia file explains the jokes, propaganda phrases, and obscure references in that version's lyrics.
- 04
Lyric fact-check (Codex)
A Codex agent greps the textbooks and online sources for every claim across all three versions in parallel, and flags anything wrong or misleading. Claude fixes the offending lines; only Codex is allowed to stamp a version as fact-checked, and only once it passes.
- 05
Cheat-sheet cross-check (Claude + Codex)
If the cheat sheet changed, Claude and Codex each audit it independently and I act on what they agree on — cross-LLM agreement catches the textbook errors a single model would trust.
- 06
Rate, rank, reject
A Claude rater scores all three versions on meme potential, catchiness, flow, and learning density. Weak ones get scrapped and regenerated; the winner is picked automatically, and I can override it.
- 07
Lyrics + Suno tags saved
Final lyrics and the matching Suno tags are written to per-song JSON files.
- 08
Next.js tooling UI
A Next.js interface reads those JSON files so I can copy tags and lyrics, and see all three versions side by side.
- 09
Generate in Suno (manual)
I paste the versions into Suno by hand. This could easily be automated with Claude in Chrome, but that would break Suno's ToS, so I don't.
- 10
Listen and note
I listen to the versions while doing chores, noting favourites, off-sounding moments, and any creative ideas (which I hand back for more variants).
- 11
Download the winner
I download the winning WAV to my Downloads folder. Claude spots it there and copies it into the song directory — I never touch the folder myself.
- 12
Second slash command
A single slash command triggers the video and publishing steps.
- 13
Word-level alignment (WhisperX)
WhisperX runs forced alignment on a local Windows GPU box — it extracts the vocal stems itself for better accuracy — using the real lyrics as ground truth. If alignment fails, the pipeline stops and asks rather than quietly degrading the render.
- 14
Chunk into on-screen lines
A Claude subagent groups the timed words into logical on-screen lyric blocks.
- 15
Chunk editor (human-in-the-loop)
A little Next.js editor I vibecoded with AI lets me nudge the lyric timings by hand — fast and frictionless — on the few spots STT lands slightly off. The one step where a quick human eye still beats automation.
- 16
Place facts (Codex)
A "Re-place facts" button runs a Codex task that drops "did you know" popups into the instrumental gaps, grounded in the cheat sheet.
- 17
Render with Remotion + mux audio
Remotion renders the lyric video with the fact popups, and ffmpeg muxes the original audio track on top — both triggered from the editor.
- 18
Auto-generated thumbnail
A 1280×720 thumbnail is generated from the song and queued for upload.
- 19
Upload to YouTube
The YouTube Data API uploads the video with its title, description, tags, and thumbnail pre-filled — straight from the editor.
- 20
Go public (manual)
I flip the video to public by hand — YouTube really does not want that automated, for good anti-spam reasons. Fair.
- 21
Portrait Shorts
A second skill cuts the catchiest verse and chorus into fresh portrait renders (not crops of the landscape video), writes a punchy hook for each, and uploads them as YouTube Shorts.
- 22
Site switches to YouTube player
The YouTube link is written back into the song JSON, and the Next.js page automatically swaps the Suno-tags view for an embedded YouTube player.
- 23
Quiz generation
Claude generates a 12–16 question quiz from the facts in both the song and the cheat sheet, marking which ones the song actually covers.
- 24
Quiz fact-check (Codex)
A Codex agent independently verifies the quiz's questions, answers, and explanations before it ships.
- 25
Commit, push, deploy
The changes are committed and pushed to GitHub, which auto-deploys the updated site to Vercel.