Back to Projects
FireFun Games (personal project) · Creator & curator

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ă logo
1 / 2

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

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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.

  7. 07

    Lyrics + Suno tags saved

    Final lyrics and the matching Suno tags are written to per-song JSON files.

  8. 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.

  9. 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. 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. 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. 12

    Second slash command

    A single slash command triggers the video and publishing steps.

  13. 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. 14

    Chunk into on-screen lines

    A Claude subagent groups the timed words into logical on-screen lyric blocks.

  15. 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. 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. 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. 18

    Auto-generated thumbnail

    A 1280×720 thumbnail is generated from the song and queued for upload.

  19. 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. 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. 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. 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. 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. 24

    Quiz fact-check (Codex)

    A Codex agent independently verifies the quiz's questions, answers, and explanations before it ships.

  25. 25

    Commit, push, deploy

    The changes are committed and pushed to GitHub, which auto-deploys the updated site to Vercel.