Roadmap
Where this is going: the complete technical content library for engineers.
The goal: the complete technical content library for engineers. Everything between having something to explain and having published it, expressible as code, reviewable as a diff, and reproducible on a build server.
The test for whether that has been reached is narrow and concrete:
An engineer can take a merged pull request and produce a finished YouTube video, a vertical short, a blog post with matching diagrams, and the social posts announcing all three — from one source file, in one command, without opening an editor.
Today stingo does the middle of that. This is the rest, in the order it is worth doing.
#Where it is now — v0.1
- Scripts in YAML, JSON or typed TypeScript
- Fourteen blocks: title, statement, code, terminal, stat, list, chart, diagram,
image, quote, compare, broll, camera, outro — and adding one is a single file,
defineBlock, with no central list to edit - Taste profiles: palette, type, motion, pacing, texture — derivable from one brand colour, with contrast floors enforced
- Beat detection, with cuts snapped to bars
- Talking-head takes in three layouts, with take audio placed automatically
- Parallel rendering, ~33 ms a frame at 1080×1920
- A live preview server, and an MCP server so agents can render and see frames
#Now — finishing what is started
Captions. The schema has a Done:
word-level timing estimated from each scene's captions field that nothing reads yet.say, burned in above the platform
safe area with the spoken word picked out, plus .srt and .vtt sidecars
written beside the video. Still estimated rather than force-aligned — against a
recorded take it will drift, which is what Voice below fixes.
Forced alignment. The next thing worth building, ahead of most of what follows. Estimated caption timing is fine against TTS generated from the same words and drifts against a real take, and drifting captions look worse than no captions — so for talking-head work this gates the feature rather than polishing it. Where a take's own transcript exists it should replace the estimate; the shape of a cue is the same either way, so nothing downstream changes.
Voice. say: already drives scene length. It should also be able to become
the narration, through a TTS provider you choose, so a script with no recorded
audio still produces a narrated film.
Transitions that exist. Done: all four are implemented.
stingo renders one scene per frame, so rather than pay for a true crossfade
each move splits in half — the outgoing scene plays the first half over its
last whip, glitch, slide and wipe are in the
taste schema and currently render as cuts.duration seconds, the incoming scene the second half over its first,
both pushing the same way. glitch runs on the rasterised pixels, seeded
deterministically so parallel workers agree.
A block gallery in the docs with every block in three tastes and three orientations, generated by CI rather than maintained by hand.
#Next — the source of truth moves closer to the code
This is the part that makes it a technical content library rather than a general video tool.
Read the repository. A block that takes a file and a git range and renders what changed — real code, real line numbers, syntax-highlighted, with the diff animating. Explaining a commit should not require retyping it.
- block: diff
repo: .
ref: HEAD~1..HEAD
file: packages/media/src/source.ts
focus: filterChainRun the code. A terminal block that executes the command and captures real output, instead of you pasting what you remember it printing. Wrong output in a tutorial is worse than no tutorial.
Stay correct. stingo check in CI: fail the build when a code block quotes a
file that has changed, or a terminal block's real output no longer matches.
Video that rots silently is the reason most engineering teams stop making it.
Diagrams. Boxes, arrows, sequence and architecture diagrams that animate.
Done for architecture and data-flow: the diagram block places nodes on an
explicit grid and draws arrows between them. Sequence diagrams, and layout solved
from the declaration rather than stated, are still open.
#Then — one source, every surface
Blog posts and thumbnails. The same document rendered to markdown with stills, and to a set of thumbnail candidates. One script, one video, one post, one set of images.
Reframing. Take a horizontal cut and produce the vertical one, with the layout re-solved rather than cropped. The stage already knows how to do this; what is missing is a single command that does both cuts and names them.
Chapters and metadata. YouTube chapter markers from the scene list, a description, and tags — output alongside the MP4.
A publish step. stingo publish uploading to YouTube and the short-form
platforms, with metadata generated from the script.
#Later — scale and collaboration
Render anywhere. Frames are already a pure function of their index, so the work is packaging, not architecture: a container and a queue, and a long film renders across machines in the time of its slowest frame.
Incremental rendering. Cache frames by the hash of what produced them. Change one scene and re-render one scene.
Review. A shareable preview with timestamped comments, so a script can be reviewed the way a pull request is.
Taste packs. Installable profiles, so a team's look is a dependency with a version number.
Brand kits. Logo, lower-third, intro and outro as a package a whole organisation shares.
#Explicitly not doing
A timeline GUI. If the answer to "how do I change this" is ever "drag that", the project has failed at the thing it exists for. A preview you can scrub is a window onto the file; it is not a place to edit.
A proprietary format. A script is YAML or TypeScript, plain text, diffable, greppable, yours.
A hosted-only feature tier. Everything renders on your machine.
#Helping
The most useful contribution is a script that renders badly — a video.yaml, a
taste profile, and a still showing what went wrong. Layout bugs are hard to
imagine and obvious to look at.
If you want to take something from this list, open an issue first and say which part. See CONTRIBUTING.md.
Dates are deliberately absent. This is an ordering, not a schedule.