Skip to content

Repository files navigation

gamut

A clean-room composition substrate for agent-authored video. Two groups under one umbrella:

  • runtime/ (@work.books/gamut-runtime) — HTML Web Components that schedule and composite a video timeline. Authors write a single .html file with <gm-doc> / <gm-timeline> / <gm-track> / <gm-clip> / <gm-scene> / <gm-audio> / <gm-shader> / <gm-adjustment> / <gm-include> elements. Animation lives inside <gm-scene> via the agent's HTML/CSS/JS (GSAP or anything else). The runtime registers the custom-element family with the browser; the DOM is the IR.

  • cli/ (@work.books/gamut-cli, binary gamut) — Imperative editing operations the agent can use without touching the composition HTML: gamut trim, gamut split, gamut cut, gamut concat, gamut move, gamut inspect, gamut lint, gamut verify, gamut preview, gamut transcribe, gamut render.

  • hyperframes/ (@work.books/gamut-hyperframes) — Vendored HyperFrames authoring docs + a tiny scene-side helper (onReady, canvas constants) for scripts inside <gm-scene>.

Why a new package

The previous CW XML format (vendored at vendor/workbooks/packages/cw-xml/) baked in enum-driven templates that substituted behavior for missing fields — intent="reveal" selected a tween recipe, kind="fade" selected a transition, mode="word-highlight" selected a caption renderer. The agent thought it specified motion; the runtime invented it. Every "reveal" looked the same. The format had no honest server-side counterpart.

gamut is the rebuild. No recipes. No enums. No fallbacks. The XML carries schedule + composition; the HTML scene carries animation. Guardrails come from a linter (structural checks) and a render-query verifier (RVST-style; loads the comp in a headless browser and reports what's actually visible). Every required attribute is required — missing fields are errors, never substituted defaults.

Format at a glance

<!doctype html><html><head><scripttype="module" src="https://unpkg.com/@work.books/gamut-runtime"></script><linkrel="stylesheet" href="./styles.css"></head><body><gm-docfps="30" resolution="1920x1080" aspect="16:9"><gm-assetid="hero-vid" kind="video" src="footage/hero.mp4" /><gm-assetid="vo" kind="audio" src="audio/vo.mp3" /><gm-assetid="vo-words" kind="transcript" src="audio/vo.words.json" /><gm-timelineduration="12s"><gm-trackid="base" z="0"><gm-clipasset="hero-vid" in="2s" out="9s" start="0s" /></gm-track><gm-trackid="overlays" z="10"><gm-scenestart="0.5s" duration="3s"><h1class="title">Cut from evidence.</h1><scripttype="module">import{onReady}from"@work.books/gamut-hyperframes/ready";onReady(()=>{gsap.from(".title",{y: 60,opacity: 0,duration: 0.6,ease: "back.out(1.6)"});});</script></gm-scene></gm-track><gm-trackid="grading" z="20"><gm-adjustmentstart="0s" duration="12s" filter="contrast(1.05) saturate(1.08)" /></gm-track><gm-trackid="audio-vo" z="0"><gm-audioasset="vo" start="0.5s" duration="11s" volume="1.0" /></gm-track></gm-timeline></gm-doc></body></html>

See the plan file for the full architecture and phase plan.

About

Gamut motion-graphics renderer. Blitz for HTML/CSS, Animato for timeline, Vello for rasterization, rsmpeg for encode. Pure Rust, no Chromium.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages