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.
Paste the raw Markdown skill URL into your AI agent:
https://lazy-frames.cosmicstack.ai/skill.md
For example: Read this skill, then make a promo video for https://example.com.
npm install lazy-framesThen run any command via npx:
npx lazy doctor
npx lazy capture https://example.com projects/acme
npx lazy render projects/acmegit clone https://github.com/cosmicstack-labs/lazy-frames.git
cd lazy-frames
npm install && npm run build
node packages/cli/dist/index.js doctor| Dependency | Required for | Check |
|---|---|---|
| Node.js ≥ 20 | CLI + engine | node --version |
| ffmpeg + ffprobe | encoding + audio | ffmpeg -version |
| Google Chrome | headless rendering | lazy doctor (Windows: Chrome/Edge in Program Files, or CHROME_PATH) |
| Python 3 | audio sidecar (music, TTS, SFX) | python3 --version or python --version; override with LAZY_PYTHON |
| Local TTS | narration (say or Windows SAPI) |
lazy doctor |
ELEVENLABS_API_KEY |
Optional ElevenLabs plugin | lazy doctor |
Run npx lazy doctor to verify all providers and see your hardware tier.
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.
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/cineThe 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.
| 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 or Windows SAPI) |
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, with mixed audio when the spec has it |
| 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).
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 gates
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/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
npm run verify:demo # byte-stability (two renders, sha256 compare)
npm run verify:cinematic # gen assets + gates + audio determinismspec.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 | doctor
MIT © CosmicStack Labs