An AI video generator that turns a topic into a fully produced short film — complete with cinematic visuals, narration or scenes acted out by its characters, and background music.
📖 Documentation & manual · ✍️ The story: “I will never direct a movie again”
- Script — an LLM (local vLLM, Claude, Grok, or OpenAI) drafts and critiques the whole story as prose, you review it, and it is then divided into scenes with visual prompts, narration, and a mood-matched music description
- Images — FLUX.2 Klein (the default per-style image engine) generates each scene's first-frame still, with optional recurring characters kept consistent via reference images
- Video — LTX 2.5 animates each scene from its still via ComfyUI (local or distributed workers)
- Narration — F5-TTS synthesises speech with voice cloning from a reference WAV. The default weights are the Apache-2.0 OpenF5-TTS-Base so narration is licensed for commercial use — see docs/tts_licensing.md. A per-style voice-model picker adds Chatterbox Multilingual (23 languages, with a per-style narration language that also drives the script's language)
- Dialogue — scenes can instead be acted or silent: the characters speak on screen, with MiniMax H3 Ref2VA generating picture and voice together from their portraits
- Music — ACE-Step generates background music from the LLM's mood description, mixed in at the very end (switch it off per style or per film). A per-style music-model picker adds MiniMax Music 3 — slower and song-shaped, under its own community license. The Music video format goes further: the LLM writes the story as tagged lyrics, the music model sings them (a lead singer is cast from the style's character catalogue and the vocalist is matched to their sex, age and background), and the cast performs the song on camera — or you upload a song you already have and the film is built around that instead
- Assembly — FFmpeg mixes everything into a single video with synced audio. Films aimed at QHD/4K (or upscaled later from the film editor) go through FlashVSR video super-resolution by default — see upscaler modes
A film's format decides how the story is staged: narrated throughout, entirely acted — the characters speaking on screen, no narrator and no music — a music video sung end to end, or mixed, with acted, narrated and silent scenes side by side. Each scene then takes the render path its mode asks for — and a style can send its silent scenes down the acted path too, performed on H3 from their own first frame (plus the portraits of anyone in shot) so a wordless beat matches the takes it cuts against.
Around the pipeline, the web app also handles the full channel workflow: a render queue with automation — global or per style, unattended in any format, music videos included, their song written, sung and re-voiced before the pictures are made — AI-suggested video ideas, per-scene editing with image inpainting, clip trimming, per-scene review marks (to be reviewed / to work on / approved) and version history, opening titles and end credits joined onto the finished film, an ending fade that dips the last seconds to black, one-click restyling (the same script or finished film in another visual style), misspelling-proof cover thumbnails (text-free artwork in the style's own engine + real-font typography with per-style fonts, colours, and accent words), publishing to YouTube (multi-channel, with playlists, captions — attached or burned into the picture — and tags) and X, a publish scheduler with per-channel cadence, comment fetching / AI replies / community engagement, a predictive engagement model, and C2PA "AI-generated" content credentials on published videos.
Controller (runs the web app): Python 3.11+, Node.js 20+, FFmpeg, and a local
vLLM server or an API key (Claude, Grok, or OpenAI) for script generation.
Workers (GPU machines): Docker + the
NVIDIA Container Toolkit —
ComfyUI and TTS run as containers that make install builds and
deploys, so a worker needs no Python of its own. One machine can be both.
git clone https://github.com/pizzato/stephen_spielbot
cd stephen_spielbot
make install WORKERS="s1 s2 s3" # deps, models, workers, config.yaml, web UI
make start # start ComfyUI on all workers, then launch the appOmit WORKERS=... for a single-machine (localhost) setup, or run make install
with no args to be prompted. Then open http://localhost:8001.
make stop # stop everything
make status # check health of the app and all workersFull setup, cluster deployment, and uninstall instructions: Installation.
The web app has no authentication and is meant to run bound to localhost
as a single-user tool — anyone who can reach port 8001 has full control. Don't
expose it to untrusted networks. make tailscale shares it with your tailnet
(no app auth, tailnet-only — never public). See SECURITY.md.
Everything lives at pizzato.github.io/stephen_spielbot:
- Installation — requirements,
make install, day-to-day commands - Your first film — topic → script → render → publish, end to end
- The manual — every screen in the web app, control by control
- Configuration · Environment variables · Models
- Cluster & workers · Architecture · Troubleshooting
The source for that site is docs/ — make docs-serve previews it locally.
Guides that also read well on GitHub:
docs/characters.md— recurring characters: consistent looks, reference images, voicesdocs/performance_films.md— acted scenes and performance films: portraits + dialogue straight to video, no first frame or TTSdocs/orchestration.md— the durable SQLite task layer and how renders executedocs/youtube_setup.md— Google Cloud / OAuth setup for YouTube publishingdocs/x_setup.md— X (Twitter) developer app setup for postingdocker/README.md— the containerized worker stack in detailwebapp/README.md— web UI architecture and development workflowCONTRIBUTING.md— dev setup, tests, and the CI gate
- Stephen Spielbot (@StephenSpielbot) — YouTube · The original
- A Brief History of Botkind (@BHOBk) — YouTube
- A Brief History of Botkind (@aBHOBk) — X
- Amelia and the World (@AmeliaAndTheWorld) — YouTube
Making films with Stephen Spielbot? Add your channel to
channels.yaml and open a pull request — that file is the only
thing you need to edit. On merge, a GitHub Action regenerates this list and the
app's About screen, and opens a follow-up pull request with the result. Run
make channels if you want to preview the result locally.
Stephen Spielbot's code is licensed under Apache-2.0.
The AI models it downloads each carry their own licenses — see
THIRD_PARTY_NOTICES.md and
docs/tts_licensing.md.
The defaults (FLUX.2 Klein, LTX-Video, ACE-Step, and the OpenF5 narration model)
are commercial-friendly; the original F5-TTS narration weights are offered only
as an opt-in non-commercial preview, and the opt-in MiniMax engines carry
their own community licenses. Review the notices before monetizing.
"Stephen Spielbot" is a playful name and is not affiliated with, endorsed by, or connected to Steven Spielberg or any of his companies.

