A high-performance, local-first AI video-generation NLE — a timeline editor where each row is one generation pipeline (TTS narration, an animated anime host, reaction images, code cards, diagrams, music, effects), composed in a GPU render graph with a latency-obsessed live preview and a deterministic record/export.
slopstudio is the ad-hoc video pipeline behind Gemma-san Explains (@GemmaExplains) — a channel of technical deep-dives narrated by a chuuni succubus-cosplaying cosmic architect named Gemma-san. Every video on that channel is authored, generated, and rendered with this tool. It is built for one format done well, not as a general-purpose editor.
It is open-sourced (MIT) for anyone who finds it useful — whether that's for making your own narrated explainers, as a reference for a latency-obsessed compositing NLE, or as an example of a pipeline a frontier LLM can drive end-to-end. There is no product, no account, no cloud: it runs on your own hardware against your own models.
![]() |
![]() |
![]() |
![]() |
Every frame above is composited by the editor from a single project file: a host sprite with viseme lip-sync, syntax-highlighted code that types itself in, labelled diagrams, sourced B-roll, and captions — each on its own timeline row, each a cached generation or a pure-GPU native clip.
Two layers, deliberately separated:
- Compositing layer (instant). Timing, transforms, effects, transitions, and layout are pure GPU compositing over a pull-based render graph with a param-hashed GPU texture cache. Changing one of these and seeing the result is sub-frame — that is the whole point.
- Generation layer (async, cached). AI generation (image/video/voice/music) is slow, so it never sits in the interactive loop. Generations run as background jobs producing content-addressed cached assets; editing a generation parameter re-queues a job while the preview keeps showing the last result plus a "regenerating" badge.
┌──────────────────────────────┐ ┌──────────────────────────────────┐
│ editor (Windows-native) │ HTTP/ │ providers (the GPU host) │
│ C++ · Dear ImGui · D3D11 │ WS │ Python services, one per model │
│ │ ──────► │ │
│ timeline of pipeline rows │ │ tts image video music align │
│ pull-based render graph │ ◄────── │ (Qwen3-TTS, ComfyUI/Anima, │
│ live preview + record/export │ assets │ Wan2.2, ACE-Step+Jamendo, …) │
│ HTTP control API (LLM-drive) │ │ │
└──────────────────────────────┘ └──────────────────────────────────┘
runs on the workstation defaults to `lame` (config-driven)
The editor is a Windows PE cross-compiled from the Nix flake (mingw-w64 + the Dear ImGui
DX11 backend) and runs natively on Windows via WSLInterop — no WSLg performance tax.
Providers are out-of-process so a crashing model can never take down the editor, and their
endpoints live in config.toml so the whole thing is redeployable on different hardware
by editing one file.
Everything is provided by the flake; prefix host commands with nix develop --command.
nix develop # dev shell (python providers + mingw editor toolchain)
cp config.example.toml config.toml # then edit endpoints/keys (config.toml is gitignored)
nix develop --command make -C editor # build the editor → build/slopstudio.exe
nix develop --command python -m providers.tts # run a provider locally (or deploy to a GPU host)
./build/slopstudio.exe examples/signature-opener.slop.json # open a project (Windows / WSLInterop)First run — stock assets. The editor ships no art: the stock host rig (Gemma-san's
sprite sheet) and the shared backgrounds are a separate stock-assets.zip release asset,
fetched and unpacked into presets/ on first launch. A fresh checkout plus that download is
everything the bundled example projects need to render. Full video projects live in their
own repo as portable project dirs (<name>.slop.json + assets/) and are opened the same
way — asset uris resolve relative to the project file.
Prebuilt editor. Nightly cross-compiled slopstudio.exe binaries are published to the
rolling nightly pre-release.
# 1080p60, space-efficient x264 sized to ~300 MB (YouTube re-encodes anyway):
nix develop --command bash tools/export.sh path/to/project.slop.json \
--scale 1080 --fps 60 --target-mb 300 --out exports/project.mp4Or use File ▸ Render video… in the editor. The render is deterministic: the editor streams the full-res composite to ffmpeg, which encodes the video and muxes the audio assembled from the project's export plan (clip offsets, gains, sourced-music credits).
The project file (*.slop.json) is the human- and machine-editable source of truth. An
agent composes a cut with tools/slop.py (a beats → skeleton → lint → render workflow) and
generates voice/visemes headlessly — see docs/LLM_WORKFLOW.md and
docs/PROJECT_FORMAT.md.
| Role | Model | License |
|---|---|---|
| TTS / voice design | Qwen3-TTS 1.7B VoiceDesign | Apache-2.0 |
| Host sprite art | cloud GPT image gen → sprite rig (rembg matte + pose tools); local Anima 2B + character LoRA as backup | outputs owned / weights NC · outputs OK |
| Backdrops / anime stills | Anima 2B | weights NC · outputs commercial-OK |
| Diagrams / legible text | Qwen-Image | Apache-2.0 |
| Image/video backend | ComfyUI | GPL-3.0 (separate process) |
| Image→video motion | Wan 2.2 (procedural 2.5D default) | Apache-2.0 |
| Music gen / sourcing | ACE-Step 1.5 / Jamendo (CC-BY) | MIT / per-track |
| Avatar | pngtuber sprite state machine (Inochi2D planned, not yet supported) | — |
| Word timing / visemes | WhisperX / Rhubarb Lip Sync | BSD / MIT |
See docs/RESEARCH.md for the full mid-2026 survey, the runner-ups, and
the licensing rationale.
docs/ARCHITECTURE.md |
how it all fits together |
docs/LLM_WORKFLOW.md |
compose a video as an agent |
docs/VIDEO_RUNBOOK.md |
compose and finish a video by hand |
docs/SCENE_COOKBOOK.md |
reusable animated scenes for humans and agents |
docs/PROJECT_FORMAT.md |
the *.slop.json schema |
docs/PROVIDER_PROTOCOL.md |
how the editor talks to models |
docs/RESEARCH.md |
model survey + licensing rationale |
MIT — see LICENSE. Generated content is yours; sourced music/art carry their own licenses, which slopstudio tracks and turns into automatic on-screen credits.




