content-to-video
GitHub将任意文本或内容自动转化为高质量MP4视频的全流程编排技能。涵盖内容分类、脚本生成、分镜设计、TTS配音、视觉渲染及FFmpeg组装,支持多格式与质量质检。
Trigger Scenarios
Install
npx skills add architectds/modeldock --skill content-to-video -g -y
SKILL.md
Frontmatter
{
"name": "content-to-video",
"description": "Turn arbitrary source content (README, article, story, slides, deck, data\/report, product description, tutorial text, audio\/transcript, or a bare topic) into a finished, high-quality MP4 video. Classifies the content type and user intent, picks the right pipeline, format preset (16:9 \/ 9:16 \/ 1:1), pacing, visual strategy, and TTS voice, then runs production end-to-end (message + storyboard with a per-shot tech-stack decision, narration with measured durations, HTML\/three.js or HyperFrames scenes, image-gen atmosphere and transparent sprites, asset strategy, ffmpeg assembly with subtitles, and single-frame vision QA with quality gates). Use when the user asks to \"make a video\", \"turn this into a video\", or \"produce a promo\/ explainer\/tutorial\/story\/social short\/data video\" from any content, or wants automatically-produced higher-quality video without specifying the full production plan. Supersedes the former promo-film skill; HyperFrames (HTML-to-MP4) is an optional second rendering backend."
}
Content to Video
Produce a finished, high-quality MP4 video from arbitrary source content. This skill is the router and orchestrator: classify -> plan -> produce -> QA. It bundles the full promo-film machinery (three.js/HTML scene contract, render commands, ffmpeg assembly, TTS, i18n) and adds per-content-type presets, adaptations (screen capture, data-viz, vertical format), an optional HyperFrames rendering backend, and stricter quality gates.
Pipeline
- CLASSIFY - Read references/classification.md. Run
node scripts/classify.mjs <source>for a fast first pass. Confirm content_type, format, duration, pacing, and visual strategy (intent beats signals; follow confidence rules in classification.md). - PLAN - Write the one-line message, audience, distribution, CTA. Design the storyboard with image-gen (planning reference only - panels are never final frames). Structure the film per the chosen pipeline in references/pipelines.md. For EVERY storyboard panel, decide and record the shot's tech stack - primary technique + layers - using references/tech-stack.md ("shot 3: three.js core + GSAP title + sprite embers"). A panel with no tech stack is a Q1 failure. Pass gate Q1.
- SCRIPT + NARRATION - Narration-first, one line per shot, into a narration JSON. Synthesize with TTS, measure real durations, write them back. PAD > FADE so speech is never cut (see references/pipeline.md).
- SCENES + ASSETS - Build scenes per the pipeline's visual strategy and the chosen rendering backend (below). Follow the identity rules in references/methodology.md: labeled real UI + 3D forms + text; image-gen only for atmosphere and planning panels.
- SOUND - After picture locks: pick BGM per sound-design.md (audition inside the cut, bed ~0.34), pin SFX with a declarative relative-frame table (genre vocabulary: whoosh/impact/riser/sparkle/transition; no game-pack timbres). If the user chose a strong-beat BGM, cut the timeline in beatF(n) per beat-sync.md and verify <= 3f error after render.
- RENDER + ASSEMBLE + QA - Preview 3 frames per scene, render clips, assemble with ffmpeg (Ken Burns, crossfades, audio mix with loudnorm, ASS subs) or render a HyperFrames composition, deliver BGM + no-BGM versions, then run Q2 per-shot vision checks and Q3 watch-through. Repeat per language from one parameterized builder.
Classification quick matrix
| Source looks like | Content type | Pipeline | Format |
|---|---|---|---|
| README / product / launch | promo | promo | 16:9 |
| article / "what is X" | explainer | explainer | 16:9 |
| how-to / steps / code | tutorial | tutorial | 16:9 |
| novel / script / dialogue | story | story | 16:9 |
| .pptx / .key / .pdf deck | slides | slides-to-video | 16:9 |
| report / metrics / charts | data | data-story | 16:9 or 1:1 |
| listicle / hacks / hashtags | social | social-vertical | 9:16 |
| audio / transcript | podcast | podcast-video | 16:9 |
Full decision tree, presets, and overrides: references/classification.md. Per-pipeline structures and visual strategies: references/pipelines.md.
Choose a rendering backend
Two scene-authoring backends; pick per pipeline and content:
- Bundled machinery (default): three.js/HTML scenes with a deterministic
frame(t)contract + build_film.py assembly. Best for cinematic 3D, real-UI heroes, particles. Promo/explainer/story/tutorial/slides default here. - HyperFrames: HTML + GSAP timelines rendered by the
hyperframesCLI. Best for kinetic motion graphics, vertical social, data charts, and caption/overlay-heavy pieces. See references/hyperframes.md (verified commands, composition contract, --variables/--batch for language variants). The official HyperFrames skills are installed locally (hyperframes, hyperframes-core, hyperframes-animation, hyperframes-cli, ...) - delegate composition authoring to them via references/hyperframes.md.
Both share the same upstream (classification, narration JSON with measured durations, Q1-Q3 gates) - only scene authoring and the render command change.
Bundled machinery (read these first)
- references/methodology.md - the full method: decisions, failure modes, asset sourcing, checklists. Read it before starting any film.
- references/pipeline.md - scene contract, render/build commands, timing math (FADE/PAD/TAIL), ffmpeg filtergraph, TTS, i18n.
- references/tech-stack.md - per-shot tech-stack catalog and decision rule; read it at storyboard time, panel by panel.
- references/sprites.md - image-gen sprite playbook (chroma-key, slicing, atlases, manifests, frame-sequence puppets); read before any sprite layer.
- references/sound-design.md - BGM + SFX + mix: genre-based vocabulary, declarative relative-frame SFX table, volume math, two-version delivery. Read at sound stage; picture locks before sound.
- references/beat-sync.md - when the user picks a strong-beat BGM: analyze the grid first (librosa), write the timeline in beatF(n), verify cut errors <= 3f on the rendered cut.
Scene contract: every scene is a standalone HTML page at 1920x1080 exposing
window.__modeldock = { frame(t), duration, frameAsync?(t) } and __ready.
Render environment: headless MS Edge via Playwright (SwiftShader flags), local
static server with HTTP Range (206). Scripts (adapt config, do not edit the
engine):
- scripts/classify.mjs - classify source content -> production recommendation.
- scripts/build_film.py - ffmpeg assembly (Ken Burns, xfade, audio mix, ASS subs, --lang).
- scripts/render-clip.mjs - render an animated scene to an mp4 clip at 25 fps.
- scripts/preview-scenes.mjs - sample 0.3/0.55/0.8 frames per scene, capture page/console errors, write 3-up strips.
- scripts/qa-frames.mjs - extract per-shot and mid-fade frames for QA.
- scripts/static-server-range.mjs - minimal static server with Range support.
Non-negotiable rules
- Narration drives the timeline; measure real TTS durations, never guess.
- PAD > FADE (e.g. 1.5s vs 1.0s) so speech finishes before the next shot.
- Never let image-gen carry product identity: no "device" heroes. Identity = labeled real UI + clear 3D forms + text sprites. image-gen is for atmosphere backgrounds, concept stills, validated hub layouts, and transparent-background decorative sprites (smoke, embers, glow orbs, sparkles, dust, generic non-brand icons). Sprites are powerful in animation, but they never carry identity.
- Plan-stage image-gen designs the OUTLINE and STORYBOARD (one panel per planned shot, plus 2-3 style anchors when shots share a look). Panels are planning references, never final frames.
- Composite image layers with heavy blur + radial feather mask; never hard crop edges (they read as panels/windows).
- Vision-QA one image per call, never contact strips (cross-frame misreads).
- Real UI footage: object-fit contain so controls are never cropped.
- Keep the builder parameterized by language (--lang).
- Windows: never pass non-ASCII text through a PowerShell pipe; read UTF-8 files from disk or write with Node fs utf8 + unicode escapes.
- A static server used for video scenes must support HTTP Range (206).
- Add a data: favicon link to every scene so console-error checks stay clean.
Quality gates (the "better" in better video)
Three gates; do not proceed past a failing gate. QA on single frames only.
- Q1 - Plan: one-line message is a sentence, audience + distribution stated, CTA defined, every claim has a visible proof point, storyboard reviewed, voice sample signed off.
- Q2 - Production (per shot, single frames): labeled identity, no modem/router reading, text readable and in safe margins, no hard edges / double exposure, clean transition midpoints, footage shows all key controls.
- Q3 - Final (watch with audio): no cut speech, audio clean, subtitles fit and match, correct aspect/fps/duration, h264 yuv420p +faststart.
Full checklists and failure handling: references/quality.md.
Language variants
One builder, per-language narration JSON and audio, shared language-neutral
scenes, translated text stills and subs. With HyperFrames, per-language text
can live in --variables/--batch instead of duplicated compositions. Never
pass non-ASCII text through a PowerShell pipe.
QA loop
- Q1 before production; fix the flow while a panel costs one generation.
- Preview every scene: zero page/console errors (HyperFrames:
check+--strictrender). - Q2 per shot on single frames; check transition midpoints.
- Q3 watch-through with audio; only then deliver.
Version History
- 54f30cb Current 2026-08-12 08:59


