Repository navigation
Releases
0.12.0
- Time to look at the map around a zoom. Before a zoom into a part, the whole map is held for 1.5 s with that part lit, so the viewer finds it before the box grows. After the way back out, the map is held 1.5 s (it was 0.6 s) before the next scene.
narrateadds the silence this needs (a lead of at least 3.2 s, or 1.4 s straight after a visit to another part, and a quiet end of at least 2.8 s), so scripts need noleadorpadfor a visit andcheckno longer warns about them. - Notes on code lines.
K.codetakesnotes: [{ line, html, at, until, tone }]: a short note right of the card, level with its line and joined to it, while the line glows. - Edits in a code card.
K.codetakeschanges: [{ line, to, kind: "add" | "del", at, until }]: added lines open in green, deleted lines are struck through in red and then close. For what a commit or a fix changed, in one card instead of a "before" and an "after". - Labelled borders in a flow.
K.flowtakesgroups: [{ nodes, label, at, until, tone, toneAt, dashed, pad }]: a border round some nodes, under the arrows, for a process, a transaction, a service or a trust boundary. - Videos stay on their topic. The scope step now agrees one goal (
goalin brief.json): what the viewer can do after watching. The explorer writes the path to it instead of a survey of the repository, the writer's chapters follow that path with background just before the step that needs it, and the narration audit measures how much of the script serves the goal (more than 20% off it is a must-fix). Topics the goal does not need are named as left for later. A brief withoutgoalworks as before.
A video made with 0.11 keeps its old zoom timing until it is narrated again; each visit then adds about 3 to 4 s. The kit changed, so CV video redraws every scene once.
0.11.0
- Fast mode.
--fast(or "a quick video") forshortandtour: one explorer that checks its own document, one writer that audits its own script, one builder, no visual audits. About 3 agent tasks instead of 10 to 12. The run report says plainly that the video was not audited, and the audits can be run later on the same workspace. - A first cut sooner. The video renders as soon as the scenes are built and
checkis clean, while the visual audits run. Their fixes then redraw only the scenes they change. - The cost up front. After the scope is agreed, Claude says what the run will take (agent tasks, time, Claude tokens) and offers
--fastor a preview. It also warns when the subject looks too big for the chosen length. - Length is held.
checkwarns when the script has more words than its length allows, before anything is voiced, and fails a video over the length's hard cap (it only warned before). - A stopped model download is caught.
setupdownloads the Kokoro model itself, checks its size and SHA-256, and renames it into place only once it is complete. A half-downloaded model from an earlier version is noticed and downloaded again.narratenames the problem instead of failing with "Protobuf parsing failed". - Microsoft Edge and Brave are found without
CHROME, on macOS, Linux and Windows.CHROMEstill names any other Chromium browser, and the docs now say so. - Glossary terms after a hyphen.
"213": "two thirteen"now applies insideABC-213. A leading hyphen (-213,--json) still leaves the term as written. - Parts that do not exist yet.
dashed: trueon aK.flownode or a map part draws a dashed border round a see-through box.
Fixes #2. A video made with 0.10 narrates the same way. The kit changed, so CV video redraws every scene once.
0.10.0
- Use another voice than Kokoro. A project can now be narrated by ElevenLabs, OpenAI, Azure AI Speech or Google Cloud Text-to-Speech with your own key, or by a program of your own on your computer (Piper, macOS
say, a clone of your voice). Ask Claude, for example "use OpenAI's coral voice for this project": it saves.codebase-video/voice.jsonand draws the video again once. See Use another voice. - Kokoro stays the default, and a project that sets nothing gets exactly the same video as before.
- Keys only from the environment (
ELEVENLABS_API_KEY,OPENAI_API_KEY,AZURE_SPEECH_KEYwithAZURE_SPEECH_REGION,GOOGLE_API_KEY); never written to a file, and kept out of every message. - Pay once per sentence. Every piece of narration is cached: a second run sends nothing, and a changed sentence sends only that sentence.
narratesays how many characters it sent. OpenAI's default voice costs about $0.015 per minute of narration. - Privacy. With a cloud voice the narration text (not your code) goes to that service. Claude says so before it saves a cloud voice, and names a project's own voice before narrating with it.
- Safe with other people's repositories. A program voice is defined only in your own
voices.json; a project can choose one by name but cannot run anything of its own, and the voice and language it passes are plain words. - Tested: OpenAI live (a short video narrated and rendered), macOS
saywith a full video, ElevenLabs, Azure and Google against their documentation and a local test server.
0.9.1
-
No hang after a crash either. 0.9.0 let a step end by itself when it succeeds or fails; a step that crashed (a bug, or Chrome that cannot start) still ended through
process.exit, which on current Node versions can hang for good about once in 3,000 runs (nodejs/node#64274). Now a crash is printed and the process ends by itself too. A failed Chrome launch or render closes the browser and its page server, and a voice that fails mid-sentence is stopped, so nothing is left to keep the process alive; if something still is a second later, the process exits as before. -
Everything it can do, on one page. docs/features.md lists the kinds of video, what is in one, how it is checked, the ways to use it, the files you get, what it needs and its limits.
Nothing else changes: the same messages, exit codes and files.
0.9.0
- Present it in your own voice.
presentwrites a PowerPoint deck (one slide per sentence, with the sentence as its speaker note, a section per chapter; Keynote, Google Slides and LibreOffice open it too), the script with a timestamp on each line, subtitles (.srt) and the video without its sound. With--clipseach slide plays its part of the animation as it opens;--servegives a click-through deck in the browser, where each click plays the next step and waits. - Progress videos breathe more. From a viewer's feedback: a quicker voice for an audience that follows the project, every chapter opens with what it covers and why it matters, and fewer theme chapters.
- The same video every time. Every frame is drawn from scratch, so a video comes out frame for frame identical however many browser pages render it. Rendering takes about 6 to 10% longer.
- No more rare hang at the end of a step. A step now ends by itself, whether it succeeds or fails, instead of through
process.exit, which on current Node versions could hang for good about once in 3,000 runs (nodejs/node#64274). Only a crash still exits at once. - Node.js 22.12 or newer. The renderer needs it. On an older Node, setup now says so and how to upgrade, instead of saying "ready" and failing at the first video. On Linux, take Node from nodejs.org: most distributions ship an older one.
- Under the hood. The engine runs on Async, agents and immutable values, and every failure is a value reported in one place. A golden harness checks that a change to the engine leaves every output byte for byte the same; this release's engine rewrite passed it.
Upgrading: nothing to do in Claude Code. If you cache the tool home in CI, change the cache key (see docs/ci.md).
0.8.0
Covers 0.6.0 to 0.8.0, which were not published as releases.
- Progress videos. Ask for "a progress video since v1.4.0", or since a commit or a date: what shipped in that range, where the work went and what is still open. Every number in it is read from git by a program. It can run from CI on each release or once a week (docs/ci.md).
- A shared map of the project. Each chapter that follows a path through the code opens on one map of the project's main parts with that path lit up, and zooms into a part when it goes inside it. Map arrows no longer read as branches of each other.
- Sequence diagrams (
K.sequence). - A pronunciation glossary for technical terms, which a project can extend with its own
.codebase-video/glossary.json. - Depth before breadth. The core mechanism is followed to the bottom and shown happening, before the tour widens.
v0.5.2
- More room in the pacing. The breath between sentences is longer (0.42 s, was 0.3), the writer is told to pause after every key point, new term and number, and to cut a fact before cutting a pause; the narration audit now checks for facts that arrive back to back.
checkwarns after 45 s without a pause and above 82% talking. - Lighter frames. Builders aim for 10 to 14 words on screen at once.
- Captions get their own band. With captions drawn into the picture, the scenes are drawn slightly smaller so nothing sits underneath them.
v0.5.1
- Captions in the picture, on request. Every video still comes with a separate captions file. With
"captions": truein the script (or by asking for "captions in the video"), each sentence is also drawn at the bottom as it is spoken, which helps where the player starts muted, as on GitHub. Off by default.
v0.5.0
- Short videos fit in a GitHub README. They are kept under 10 MB, the most GitHub plays inline: speech is now encoded at 64 kbit/s mono (a five-minute video went from 9.2 to 7.0 MB), and if a short video is still over the limit its picture is encoded again to fit.
- A thumbnail on the first frame. A short video starts on a frame with the title, a red border, a play button and the length, which is what players show before playing. Longer videos get it on request.
CODEBASE_VIDEO_SHORT_MAX_MBchanges the limit (for example 100 on a paid GitHub plan).
v0.4.1
- Standing hints per project. Put them in
.codebase-video/hints.md(terms, what to always skip, how to draw things); every agent gets them. Claude offers to save a hint there when it sounds permanent. - The first frame is the title. The title card no longer fades in, so players that show the first frame as a thumbnail show the title.
- Kit: an edge can attach off-centre on a box side (
fromPos,toPos), so two pairs of arrows can leave one box without colliding; a table cell can have its own time, so a number is not shown before it is spoken; a diagram now fades out at the same rate as text. - A sheet with fewer than six stills no longer repeats its last still.