Behind the Scenes

How Rotten Takes
Gets Made

From trending topic to finished video — entirely automated. Here's exactly how each episode goes from nothing to publishable chaos.

The Pipeline

5 Steps to a Hot Take

01
Topic
Trend Detection
A real-time trending topic gets pulled from the web and analyzed for satirical potential. The Host's persona picks the single most hypocritical, ironic, or self-defeating angle to open the show with.
Trending APILLM Topic Selection
02
Script
AI Script Generation
An LLM generates the full dialogue for three characters — The Host plus two rotating archetypes. The script includes emotion tags, sound effect cues, and a mandatory Eggjection Seat sequence when the moment is right.
Ministral-3BOllamaEmotion TagsSFX Cues
03
Voices
Voice Cloning
Each character has a unique voice cloned from a reference audio file. Chatterbox TTS generates the audio for every line of dialogue. SFX are mixed in at normalized loudness levels.
Chatterbox TTSVoice Reference WAVFFmpeg Audio Mix
04
Lipsync
Phoneme Analysis
Rhubarb extracts mouth phoneme timings from each audio clip. Nine Preston Blair mouth shapes (A–H + X) get mapped to a continuous open-value float, driving the character's mouth frame by frame.
Rhubarb LipsyncPreston Blair Shapes24 FPS
05
Animation
Frame Rendering & Encode
PIL renders every frame: South Park-style blob characters, procedural desk, subtitles, emotion states, blink cycles, and the 2.85-second Eggjection Seat animation. FFmpeg assembles everything into a final 854×480 MP4.
PIL / PillowFFmpeg854×480 MP4−20 LUFS
Tool Stack

What Powers Rotten Takes

Ollama
LLM Backend
Local language model server running Ministral-3B for script generation and topic picking.
Chatterbox
Voice Cloning TTS
Text-to-speech with voice cloning. Each character has a reference WAV file that defines their voice.
Rhubarb
Lipsync
Extracts phoneme-level mouth timing from audio. Maps Preston Blair shapes to animation values.
Pillow
Frame Rendering
Procedural character drawing, background rendering, subtitle compositing — all in Python.
FFmpeg
Video Encoding
Assembles frames and audio tracks into the final MP4. Handles normalization and mixing.
Flask
Server
Python web server handling the generation pipeline, API endpoints, and this website.