html-video README

The project's README from github.com/nexu-io/html-video. As one markdown file: README.md.

html-video

html-video — HTML becomes video, on your laptop

HTML becomes video — on your laptop. Bring your local coding agent (Open Design · Windsurf CLI · Trae CLI · Claude Code · Cursor · Codex · Gemini · Grok · Qwen · OpenCode · Copilot · Aider · Hermes · or the Anthropic API). Describe a video, or paste an article link / GitHub repo, and the agent turns it into a multi-frame, fully animated video — then renders it to a real MP4 right on your machine. One agent loop, pluggable rendering engines, a curated template gallery, optional AI soundtrack. Apache-2.0, no per-render fees, no vendor lock-in.

License Agents Templates Sources Soundtrack Quickstart

Discord Follow @nexudotio on X By the Open Design team

An official project by the Open Design team · open-design.ai

English · 简体中文


Showcase

Every template below is a real, animated single-file HTML video — these are live renders, not mockups. Drop one in, let the agent fill it with your content, export to MP4.

NYT-style data chart Glitch title
frame-data-chart-nyt · data-viz
Editorial NYT-style animated line chart — headline, annotated data points, source line. For "the number went up" stories.
frame-glitch-title · title card
Chromatic-aberration glitch title with scanlines. For openers, drops, and "system online" energy.
Liquid background hero Light leak cinema
frame-liquid-bg-hero · hero
Aurora liquid-gradient hero with a centered headline. For product reveals and bold statements.
frame-light-leak-cinema · cinematic
Warm film-grain + light-leak cinematic frame. For mood, brand films, "a quiet year" storytelling.
Typewriter cursor VFX Logo outro
vfx-text-cursor · VFX
Typewriter text with a blinking terminal cursor. For code-style reveals and CLI demos.
frame-logo-outro · outro
Clean animated logo end card. For sign-offs and brand stamps at the end of any video.

…and 15 more, including multi-scene product promos, kinetic type, Swiss-grid and Vignelli data cards, decision-tree explainers, Takram-organic motion, and warm-grain editorial. Browse all 21 live in the studio gallery.


Why this exists

HTML→Video is a real category — but every engine is opinionated, and each wants you to learn its authoring model:

Engine Paradigm Tradeoff In html-video
Hyperframes HTML + CSS + GSAP, agent-skill driven Single rendering paradigm ✅ Shipped — the default engine; renders real MP4 via headless Chromium + ffmpeg
Remotion React components Source-available, paid above 4 devs 🗺️ Planned
Motion Canvas · Revideo TypeScript generators on canvas Best for explainers, code-first 🗺️ Planned
Manim & friends Math / 3D first Niche 🗺️ Researching

Picking the right engine per use case, learning each model, and stitching them into one workflow costs real engineering time. Most teams pick one and live with its limits.

html-video is the meta-layer that sits above all of them. You talk to your agent; it picks the engine, picks the template, fills in your content, and renders the video. The engine is an implementation detail behind a single adapter interface — one render(input, ctx) contract that any backend can satisfy. Add a new engine and every template, every agent, and the whole studio workflow get it for free. No new DSL to learn, no rewrite when you switch engines.

The same idea powers Open Design in the design space — an agent meta-layer over many tools. html-video is the motion counterpart from the same team.

Status: the pluggable-engine architecture is in place, and the Hyperframes engine is fully wired up and renders real MP4 — headless Chromium records the animated HTML frame-by-frame and ffmpeg encodes it (libx264). Remotion, Motion Canvas / Revideo, and Manim are on the roadmap: the adapter interface is designed for them, but their adapters aren't built yet. The "In html-video" column above is the single source of truth for what's actually runnable today.


At a glance

Coding agents (14) Open Design (Vela) · Windsurf CLI · Trae CLI · Claude Code · Cursor Agent · Codex CLI · Gemini CLI · Grok Build · Qwen Code · OpenCode · GitHub Copilot CLI · Aider · Hermes · Anthropic Messages API — auto-detected on your PATH, switchable from the top bar.
Real MP4 render Headless Chromium records the animated HTML and ffmpeg encodes it (libx264) — locally, no cloud render, no per-clip fee.
Article / repo → video Paste a URL or GitHub repo; the studio fetches it server-side (handles WeChat 公众号 articles) and builds the video from the real content.
21 templates Curated, license-clean patterns: data viz, product promos, social shorts, explainers, kinetic type, transitions — previewed live in the gallery.
Multi-frame storyboards A content-graph drives multi-scene videos; edit per-frame text inline, reorder, re-render.
AI soundtrack Optional background music + narration via MiniMax, mixed into the MP4 at export.
Studio + CLI A local browser studio and a scriptable html-video CLI.
License Apache-2.0 — no per-render fees, no seat caps, no contributor agreements.

How it works

One sentence (or one link) goes in; a real MP4 comes out. The pipeline is the same whether you start from a prompt, an article, or a repo:

  prompt / link / repo
        │
        ▼
  ① source fetch        studio pulls the URL or repo server-side, flattens it to Markdown
        │
        ▼
  ② agent loop          your agent reads the material + the picked template's style and emits
        │               a content-graph (the storyboard) + one HTML block per frame
        ▼
  ③ content-graph       multi-frame IR — nodes (entity / data / text) + edges (sequence /
        │               dependency / contrast); topo-sorted into frame order & timing
        ▼
  ④ per-frame HTML      each node becomes a self-contained animated HTML frame on disk
        │
        ▼
  ⑤ Hyperframes render  headless Chromium loads each frame, records it (auto-extending to
        │               cover the frame's own animation), → webm per frame
        ▼
  ⑥ ffmpeg              each webm → mp4 (libx264), then concat into one video;
        │               optional MiniMax music + narration mixed in
        ▼
      your.mp4

Steps ②–④ are where the "meta-layer" lives: the agent decides the storyboard and the engine decides how to draw it, and neither leaks into the other. Step ⑤ is engine-specific — swapping in Remotion or Motion Canvas later replaces only that box, leaving the storyboard and the agent loop untouched. Everything runs on your machine; the only network calls are the optional source fetch and the optional soundtrack.

Single-frame videos take a fast path that skips the content-graph — one template, one HTML, straight to render.


This is what most people reach for: hand your agent a link, get a video back. The agents run as local CLIs with no network access of their own, so the studio fetches the source server-side and feeds the real content into the generation prompt — no copy-pasting article bodies, and pages behind a login-free server render (like WeChat 公众号) just work.

You:   做一个解读视频  https://mp.weixin.qq.com/s/…
Agent: 好,我读完了《用嘴剪视频的时代来了?…》这篇文章 — 这就基于它生成。下一步选风格。
→      multi-frame explainer, built from the article's actual points

Whatever the source, it becomes the material the video is actually built from — not decoration around a canned template. The agent reads the fetched content, decides how many scenes it needs, and writes a content-graph storyboard: the key points become frames, the relationships between them (this follows that, this contrasts with that) become edges, and the picked template's visual style is applied per frame. So a 1,500-word article turns into a paced multi-scene explainer whose every line traces back to something in the source, and a repo turns into a structured walkthrough of what the project actually is.


Quick start

Prerequisites

Requirement Minimum Check
Node.js 20+ node --version
pnpm 9+ pnpm --version
ffmpeg Any recent ffmpeg -version
Chromium (or Playwright browsers) — npx playwright install chromium

The default rendering engine records animated HTML in a headless Chromium browser, then uses ffmpeg (libx264) to encode MP4. Install Playwright's Chromium if you don't have a system install:

npx playwright install chromium

Install & run

pnpm install
pnpm -r build
node packages/cli/dist/bin.js studio    # opens the studio at http://127.0.0.1:3071

In the studio: pick a template (or just describe a video / paste a link), chat with your agent, edit per-frame text, add a soundtrack, and export MP4.

CLI utilities:

node packages/cli/dist/bin.js doctor                 # detect installed agents + engines
node packages/cli/dist/bin.js search-templates --intent "github stars race" --top 3

Supported agents

Auto-detected on your PATH; switch the active one from the studio's top bar. The studio leads with Open Design (Vela) — one login, many models, lower cost — then falls back to the first available agent so a fresh project always has a working backend.

Agent Detection Invocation
Open Design (Vela) vela / bundled in the Open Design app ACP over stdio — one login in Open Design, pick any model
Windsurf CLI windsurf windsurf --yolo, ACP over stdio
Trae CLI traecli traecli acp serve --yolo, ACP over stdio
Claude Code claude claude --print, prompt via stdin
Cursor Agent cursor-agent cursor-agent --print
Codex CLI codex codex exec, prompt via stdin
Hermes hermes Hermes ACP CLI
Gemini CLI gemini Prompt via stdin
Grok Build grok grok -p <prompt>
Qwen Code qwen Prompt via stdin
OpenCode opencode opencode run, prompt via stdin
GitHub Copilot CLI copilot copilot --allow-all-tools, prompt via stdin
Aider aider aider --message <prompt>
Anthropic API BYOK Direct Messages API — works with no CLI installed

Nothing installed? Set an Anthropic key and the studio talks to the Messages API directly.


Soundtrack

Give the finished video a voice. In Settings → Audio, add a MiniMax API key, then in the per-project Soundtrack panel:

Both are mixed into the exported MP4 (music ducked under the voice, optional fade-in/out) via ffmpeg. No key configured? The rest of the studio works unchanged.


The 21 templates aren't a random grab-bag — each one is a self-contained, agent-readable unit described by a template.html-video.yaml manifest the studio scans at startup. A manifest carries everything the agent needs to pick and drive the template without opening the HTML:

That last part is deliberate. Every template is license-clean by construction: forks carry their original license, the repo-root NOTICE.md records each source and SPDX, and nothing without a clear permissive license ships. So you can put any of them in commercial work without an audit. Templates span data viz (NYT-style charts, Swiss/Vignelli grids), titles & VFX (glitch, kinetic type, typewriter cursor), heroes & cinematics (liquid gradients, light-leak, warm grain), product promos (15s / 30s multi-scene), and explainer scaffolds (decision trees) — and the format is open, so community templates drop in the same way.


Architecture

packages/
├── core/                  Project / Asset / ContentGraph types, registries, orchestrator,
│                          MiniMax provider + ffmpeg audio mux
├── content-graph/         Multi-frame storyboard IR (nodes + edges, topo-sort)
│ runtime/               Agent runtime — detect / spawn / stream
│                          (Open Design/Vela · Windsurf CLI · Trae CLI · Claude · Cursor · Codex · Gemini · Grok · Qwen · OpenCode · Copilot · Aider · Hermes · Anthropic API)
├── adapter-hyperframes/   Hyperframes engine adapter — real render via Chromium + ffmpeg
├── cli/                   `html-video` command + the studio HTTP server + source fetching
└── project-studio/        Browser studio UI (chat, template gallery, frames, soundtrack, export)
templates/                 21 curated, license-clean video templates
research/                  RFCs (engine adapter / template metadata / agent skill / content-graph)

Roadmap


References & lineage

Project Role here
Open Design Sister project — the design-agent meta-layer; same team, shared philosophy
HTML Anything Sister project — HTML for static deliverables; html-video is the motion side
Hyperframes The shipped engine adapter; the HTML+CSS+GSAP rendering paradigm and the source of several Apache-2.0 templates

License

Apache-2.0

Built by

nexu-io — the team behind Open Design. Join the Discord · follow @nexudotio.

html-video (nexu-io/html-video)

Searching Database…

这是什么?html-video 让本地编程智能体(Claude Code、Cursor、Codex、Gemini 等)把一段文字提示词、一篇文章链接或一个 GitHub 仓库变成多场景的动态 HTML 视频,并能在你自己的机器上渲染成真正的 MP4。
这是桌面应用,还是要从终端运行的东西?两者都是:它既提供一个用于挑选模板和编辑帧的本地浏览器工作室,又提供一个可脚本化的 'html-video' CLI 用于自动化。
怎么让它跑起来?安装 Node.js 20+、pnpm 9+、ffmpeg 和 Chromium(通过 'npx playwright install chromium'),然后运行 pnpm install 并启动工作室,在那里挑选模板或与你的智能体对话,最后导出 MP4。
除了 Node 它还需要什么?它需要 pnpm、用于编码的 ffmpeg,以及用于录制动态 HTML 帧的无头 Chromium 浏览器;它还会自动检测你 PATH 中 14 种受支持的编程智能体 CLI 之一,或者你也可以在没装任何 CLI 的情况下使用 Anthropic API 密钥。
它真的支持对比表中列出的所有渲染引擎吗?不支持——目前真正接好线、能渲染出真实 MP4 的只有默认的 Hyperframes 引擎(无头 Chromium + ffmpeg);Remotion、Motion Canvas/Revideo 和 Manim 列在路线图上,但它们的适配器尚未构建。
它是为谁打造的?它面向已经在使用本地编程智能体、又想生成宣传短片、数据可视化讲解或社交媒体视频,而不想专门去学一款动态图形工具的开发者。
我的内容或视频会被上传到任何地方吗?不会,一切都在本地渲染;仅有的出站网络调用是可选的服务端抓取文章/仓库 URL,以及可选的 AI 配乐生成。
它支持哪些编程智能体?支持 14 种,会自动检测你 PATH 中的智能体,包括 Open Design(Vela)、Claude Code、Cursor Agent、Codex CLI、Gemini CLI、Aider 和 Hermes,并以 Anthropic 的 Messages API 作为没有 CLI 时的后备。
除了提示词,我还能把什么变成视频?你可以粘贴网页文章链接(包括微信公众号页面)或 GitHub 仓库 URL;工作室会在服务端抓取真实内容并据此构建分镜,而不是套用通用模板。
它自带现成的模板吗?有,21 套精选模板,涵盖数据可视化、标题页、首屏、产品宣传和讲解类,每套模板都由一个 template.html-video.yaml 清单描述,记录其许可来源,因此可以放心商用。
它能为视频加上音乐或旁白吗?可以——提供可选的 MiniMax API 密钥后,你可以根据情绪描述生成器乐配乐,或让脚本被朗读成旁白,两者都会通过 ffmpeg 混入导出的 MP4。
Creator
nexu-io
Size
9.5 MB
Stars
4.7K
Updated
CommitJun 21
Age
4mo
Commits · 90 Days