stingo

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

#Now — finishing what is started

Captions. The schema has a captions field that nothing reads yet. Done: word-level timing estimated from each scene's 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. whip, glitch, slide and wipe are in the taste schema and currently render as cuts. 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 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: filterChain

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