lazy-frames
v0.6.3
Published
Agentic video generation with byte-stable local rendering, scene-linked narration, and reviewed capability plugins.
Maintainers
Readme
Lazy Frames
Agentic video generation. Feed a skill URL to your AI agent — it captures, authors a spec, runs the gates, and renders a pixel-perfect MP4. The core runs fully locally with no keys; reviewed plugins can opt into explicitly declared external services.
Same spec + same machine = byte-identical MP4, every time.
Part of CosmicStack.AI.
Give it to your agent
Paste the raw Markdown skill URL into your AI agent:
https://lazy-frames.cosmicstack.ai/skill.mdFor example: Read this skill, then make a promo video for https://example.com.
Install
From npm
npm install lazy-framesThen run any command via npx:
npx lazy doctor
npx lazy capture https://example.com projects/acme
npx lazy render projects/acmeFrom source (for development or the agentic skill)
git clone https://github.com/cosmicstack-labs/lazy-frames.git
cd lazy-frames
npm install && npm run build
node packages/cli/dist/index.js doctorPrerequisites
| Dependency | Required for | Check |
|---|---|---|
| Node.js ≥ 20 | CLI + engine | node --version |
| ffmpeg + ffprobe | encoding + audio | ffmpeg -version |
| Google Chrome | headless rendering | lazy doctor |
| Python 3 | audio sidecar (music, TTS, SFX) | python3 --version |
| macOS say | TTS narration | say -v '?' |
| ELEVENLABS_API_KEY | Optional ElevenLabs plugin | lazy doctor |
Run npx lazy doctor to verify all providers and see your hardware tier.
Quick start
Website promo — from URL to MP4
npx lazy capture https://example.com projects/acme
npx lazy snapshot projects/acme --update
npx lazy check projects/acme
npx lazy preview projects/acme # review in browser
# ... approve ...
npx lazy render projects/acme # byte-stable MP4lazy capture writes screenshots @2x, palette, copy blocks, fonts, logo, and a starter spec.json.
Cinematic — generated stills + depth parallax + audio
npx lazy gen image -p projects/cine --seed 21 --style ridge --name r01
npx lazy gen music -p projects/cine --mood calm --bpm 90 --seed 21 --name bgm
# write spec.json referencing assets/gen/r01.png + r01.depth.png
npx lazy render projects/cinePlugin marketplace
The Lazy Frames Plugin Marketplace indexes folder-owned, schema-validated extensions and their exact permissions. ElevenLabs is the only plugin included by default; running install grants project-scoped approval for external access:
npx lazy plugin install elevenlabs -p projects/cine
export ELEVENLABS_API_KEY="your-key"
npx lazy script projects/cine --provider elevenlabs --voice YOUR_VOICE_ID --apply
npx lazy render projects/cineEach narration beat is anchored with sceneId and offsetMs, so the spoken line starts on the intended screen. Generated audio is normalized to canonical WAV and cached; the API key is never written to project files. Plugin dependencies are fingerprint-locked in the project, while consent is stored separately as a user-local, project-scoped approval.
Browse 16 plugins across voice, storytelling, visuals, audio, captions, and delivery, or run npx lazy plugin search. The other integrations are installable scaffolds: their manifests and permission locks work now, while execution remains blocked until a reviewed adapter ships.
Contributors add one self-contained plugins/<id>/manifest.json folder and run npm run plugins:build; the CLI registry, machine index, marketplace card, and detail page are generated from that folder.
CLI commands
| Command | What it does |
|---|---|
| lazy doctor | Environment + provider capability report |
| lazy capture <url> [project] | Capture a website → screenshots, palette, copy, starter spec |
| lazy gen image | Generate procedural still + matching depth map |
| lazy gen music | Generate procedural music WAV |
| lazy gen tts | Generate TTS narration WAV (macOS say) |
| lazy script <project> | Draft editable, scene-linked narration beats |
| lazy plugin search | Search reviewed plugins by name or capability |
| lazy plugin info <id> | Inspect status, provider, permissions, and detail URL |
| lazy plugin install <id> | Install a fingerprinted plugin into a project |
| lazy check <project> | Validate spec + run snapshot & determinism gates |
| lazy snapshot <project> --update | Establish/refresh the regression baseline |
| lazy render <project> | Render to MP4 (byte-stable, with audio) |
| lazy preview <project> | Scrubbable timeline preview at localhost:4173 |
Scene types
| Type | What it does |
|---|---|
| typography | Text reveals: titles, quotes, lockups (4 reveal styles) |
| stat-hit | Count-up numbers, labels, bars |
| browser-frame | Screenshot in a browser chrome mockup with cursor |
| ui-callout | Screenshot with dimmed mask, hotspot spotlight, label |
| atmosphere | Drifting gradient blobs — ambient backdrops |
| parallax | 2.5D camera move over a still (flat or depth-map mode) |
| video-layer | Footage playback with trim, speed, grade |
| three-scene | Deterministic 3D: cube/ico/grid/particles (canvas 2D) |
Plus: 7 transitions (cut, fade, dissolve, whip-pan, light-leak, dip-to-black, luma-wipe), stage-level CSS grade presets, output-level 3D LUT pipeline, and declarative audio (narration + music + SFX).
Agentic skill
Lazy Frames ships with a complete agent skill. Point any coding agent at skill/SKILL.md — it contains the full routing rules, agent contract, and reference docs. The agent reads the skill (not the source code) and knows how to capture, author, check, preview, and render.
skill/
SKILL.md ← entry point + routing + agent contract
references/
spec-format.md ← full spec schema
scene-types.md ← all 8 scene types
workflows.md ← website-promo / cinematic / edit
cli.md ← every CLI command
gates.md ← determinism + snapshot gatesDeterminism
Same spec + same machine = byte-identical MP4 (SHA-256 verified). Enforced by:
--jitless— V8 interpreter only (no JIT nondeterminism)--use-angle=swiftshader— software rendering (no GPU variance)- Integer-pixel CSS transforms (no sub-pixel text rendering)
putImageDatafor canvas scenes (no skia compositing nondeterminism)- Bitexact ffmpeg encoding (fixed creation_time,
+bitexact, fixed threads)
Examples
examples/demo— typography + stat-hit (engine proof)examples/cinematic— depth-parallax + video-layer + narration + musicexamples/showreel— grade + LUT + transitions + SFX + 3D + beatsprojects/web-demo— website capture → promo
Verify
npm run verify:demo # byte-stability (two renders, sha256 compare)
npm run verify:cinematic # gen assets + gates + audio determinismArchitecture
spec.json (typed JSON)
├─ @lazy/engine compile spec → HTML composition + channel data
├─ @lazy/renderer headless Chrome (jitless + swiftshader) → frames → ffmpeg → MP4
├─ @lazy/capture site screenshots + palette/copy/font/logo extraction
├─ @lazy/gen-sidecar Python: procedural music, TTS (say), SFX synthesis
└─ @lazy/cli lazy capture | gen | check | snapshot | render | preview | doctorLicense
MIT © CosmicStack Labs
