html-video
Skill340 starsChanged 7 months agoMITView on GitHub
Use when the user wants a video authored as HTML and CSS and rendered with Hyperframes: "html video", "hyperframes", "render html to mp4", "animate html css to video", "title sequence from html", "html caption video", "side by side comparison video in html", "diagram explainer video in html". NOT for React or Remotion compositions, Manim animations, analysing an existing video, ordinary web pages with no video output, or planning a launch video from the current project (use launch-video, which renders through this package).
We split this skill into the rules it gives an agent
4 rules. About 0 are common, 2 are distinctive, and 2 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈2
Distinctive · estimate
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 23
No cloud rendering, avatar or model generation, publishing, or skill installation is part of this workflow.
- Very specific: line 29
Never install system binaries yourself, never run Hyperframes through npx, and never use @latest.
- Distinctive: line 54
Add no GSAP, no CDN script, no wall-clock timers and no unseeded randomness.
- Very specific: line 55
Keep each top-level clip single-level (text, or an element without block children) to keep lint clean.
≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
HTML Video
Author a video as plain HTML and CSS, then render it with a pinned, project-local Hyperframes CLI. The bundled CSS-only templates use local assets after explicit bootstrap provisioning; authoring and static audit need no network. Rendering arbitrary project code is not an offline sandbox: enforce external network isolation when that guarantee is required. Deliver editable HTML, its statically reachable asset closure, provenance and licence records, the verification reports, and the MP4 together.
When to Use
| Request | Fit |
| Titles, comparison, diagram walk-through or captions rendered to MP4 from HTML/CSS | Use a bundled template |
| Edit or re-render an existing Hyperframes composition | Audit it first, then run the workflow |
| React or Remotion component, Manim scene, existing-video analysis, plain web page | Not this skill |
No cloud rendering, avatar or model generation, publishing, or skill installation is part of this workflow. Do not read or invoke any other package from here.
Prerequisites
SKILL_DIR is the absolute directory containing this file. The scripts need Python 3.12+ and only the standard library. Rendering needs Node (major in config.toml), FFmpeg with ffprobe, a Chrome or chrome-headless-shell executable, and a font file the user may redistribute. The Hyperframes version is pinned once, in config.toml; never state or override it elsewhere.
Never install system binaries yourself, never run Hyperframes through npx, and never use @latest. If a prerequisite is missing, stop and tell the user what to install.
python3 "$SKILL_DIR/scripts/html_video.py" --help
python3 "$SKILL_DIR/scripts/html_video.py" init --listWorkflow
- Pick and copy a template.
init TEMPLATE DESTcopiestitle-sequence,comparison,diagram-explainerorcaptioned-sequence. All are 1920x1080, text-editable and animated by finite CSS keyframes. - Get the font from the user. Ask for a font file (woff2, woff, ttf or otf), its licence text, SPDX id and source. Never download or assume one; never bundle a system font.
fonts add PROJECT --font-file F --family NAME --license-id ID --license-file L --source Scopies it, records provenance, writesfonts.cssin the project's assets directory, and updates compiler-visible inline@font-facedeclarations inindex.html. Templates use the aliasHV Text; no manual HTML edit is needed.--familyis only the provenance name; the CSS family is--alias(defaultHV Text). Provision a second family, such as a monospace, with its own--alias "HV Code"on each of its faces and reference that alias in CSS, or it becomes another face ofHV Text. - Bootstrap once.
bootstrap PROJECT --browser-path PATHpins an existing browser, or--download-browserruns the pinned CLI's ownbrowser ensure. The package manager comes from the project lockfile (npm for a fresh project). The lock.html-video/environment.jsonrecords tool paths and actual versions, including the browser's own--version. Afterwardsdoctor PROJECTre-verifies offline. - Author. Edit text and
data-start/data-durationvalues; see the contract below. Keep the rootdata-durationequal to the last clip end. - Audit.
audit PROJECTrejects remote render-critical resources, path and symlink escapes, missing files, case mismatches, cycles, undeclared fonts and invalid timing. Fix every error. - Verify.
run lint PROJECT, thenrun check PROJECT, thenrun snapshot PROJECT. Read the coverage table below, then open every.html-video/snapshots/contact-sheet*.jpgpage and judge the frames yourself: layout, legibility, and motion at the sampled boundaries. - Render.
run render PROJECTuses the FPS fromconfig.toml, renders with strict, non-best-effort, software-browser capture and one worker, removes any previous output first, and checks the MP4 against the composition. Override FPS only by passing the same--fps Nto all four run commands. - Deliver.
deliver PROJECT --out DIRrequires passing reports for the same source, verified toolchain, config and effective FPS, verifies every recorded artifact, re-audits copiedsource/with provenance required, and writesRENDER.jsonplusreports/. Pass--fps Nhere too after an FPS override. Any failed rerun invalidates its prior report.
plan PROJECT prints the frame-aligned boundary times used for check and snapshots.
Timing and motion contract
- The root has
data-composition-id,data-start="0", integerdata-width/data-height, a finite positivedata-duration, anddata-no-timelinewhen no timeline is registered. - Each clip has a unique
id,data-start(a number, orotherId [+/- seconds]) anddata-duration. Paint order is CSSz-index, not track index. - Motion is finite CSS keyframes on HTML elements with
animation-fill-mode: both. The runtime seeks them to the clip-local timet - data-start. SVG child elements are not seeked, CSS transitions are not seeked, andinfiniteiteration is rejected. - Add no GSAP, no CDN script, no wall-clock timers and no unseeded randomness. Seeking can land on any time in any order.
- Keep each top-level clip single-level (text, or an element without block children) to keep lint clean; caption cues use class
caption-cueon one track. A zero-height absolutely positioned box can stretch; give shapes real dimensions or useclip-path.
Coverage you must read
run check passes --at boundary times and then enforces these report fields. A pass without them proves nothing.
| Field | Required | Meaning |
browserSkipped | false | Browser-backed layout, motion and contrast ran |
layout.samples | every requested time | Boundaries were really sampled |
motion.enabled, motion.samples | true, > 0 when animated | Needs the index.motion.json sidecar |
contrast.checked | > 0 when text exists | Absent text means no contrast proof |
_meta.version | the pinned version | The pinned CLI produced the report |
--at-transitions reads GSAP timelines only, so CSS-animated compositions rely on the explicit plan times.
Limits and network behaviour
- The audit is a static reference audit, not a sandbox. It follows supported static HTML/CSS/SVG references, local module imports and import-map addresses, but computed URLs and arbitrary JavaScript remain executable. Recognised runtime loading, wall-clock APIs and unseeked Web Animations produce warnings, not proof of their absence. Review every warning; enforce network isolation outside the tool for a hard guarantee.
- Source-confirmed network paths addressed by the package: telemetry and update checks (forced off),
snapshot --describe(the vision key is scrubbed and--describe falseis passed), and compile-time Google Fonts resolution (used named families require compiler-visible inline local@font-face). Known unmapped-font or Google Fonts compiler logs fail the run rather than silently falling back. - The browser is pinned by passing its path through
HYPERFRAMES_BROWSER_PATHandPRODUCER_HEADLESS_SHELL_PATH, so a render cannot silently select or download another build. A failed--versionor changed version aborts the run. - Rendering is seek-driven, but no byte-identical output is claimed. Results depend on the recorded Hyperframes, browser, FFmpeg and operating-system versions and on the font files.
Error Handling
| Symptom | Cause | Fix |
font_not_declared | A named family has no local @font-face | Run fonts add; never let the compiler fetch it |
font_face_not_inline, font_dynamic, font_face_local_source | Linked-only, scoped-variable or system-dependent font resolution | Run fonts add; use a literal provisioned family and inline local font faces, never local() |
remote_resource, path_escape, symlink_escape | Resource not inside the project | Copy the file into the project and reference it relatively |
motion_spec_missing or motion_unproven | Animated, no motion sidecar | Add assertions to index.motion.json |
contrast_unproven | Text present but no pair checked | Re-run check at times where text is visible |
report_stale, report_*_mismatch at deliver | Source, toolchain, config or FPS changed after verification | Re-run all four steps with one matching context; re-bootstrap only when intentionally changing the toolchain |
not installed, changed since bootstrap | Toolchain differs from the lock | Re-run bootstrap; do not fall back to npx |
render_mismatch | MP4 size, rate or length differs | Fix data-duration/dimensions and re-render |
Output
Report: the delivery directory, the MP4 path, the RENDER.json environment summary (versions, fps, duration), the check coverage numbers you read, which frames you inspected and what you judged, every warning left open, and the font and asset licences declared by the user.
Reference
references/composition-contract.mdfor the verified runtime seek contract and authoring rulesreferences/fonts-and-assets.mdfor font provisioning, provenance schema and what the audit provesreferences/verification.mdfor command flags, coverage fields and the reproducibility recordNOTICE.mdfor attribution and terms
Other versions2 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 2
- TecnicalBot/mobile-agent★ 56same name
- KevinRaihan/haro-skills★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository94 other files it gives its agents.
- AGENTS.mdAGENTS.md
- adr-writerSkill
- agent-builderSkill
- animateSkill
- api-docs-generatorSkill
- appraiseSkill
- architecture-diagramSkill
- architecture-reviewerSkill
- arxiv-figuresSkill
- arxiv-packageSkill
- arxiv-preflightSkill
- benchmark-runnerSkill
- changelog-composerSkill
- chart-claritySkill
- citation-auditSkill
- codebase-advisorSkill
- code-refinerSkill
- competitive-analyzerSkill
- concept-to-imageSkill
- debug-investigatorSkill
- decision-mapSkill
- dependency-auditSkill
- devils-advocateSkill
- domain-modelingSkill
- engineering-retroSkill
- env-validatorSkill
- estimate-calibratorSkill
- feasibility-assessorSkill
- figure-rhetoricSkill
- figure-table-qualitySkill
- filesystemSkill
- githubSkill
- gpu-optimizerSkill
- handoffSkill
- html-presentationSkill
- humanizeSkill
- idea-validatorSkill
- immuneSkill
- intakeSkill
- kg-builderSkill
- launch-videoSkill
- learning-workspaceSkill
- lightpanda-browserSkill
- linkedin-post-styleSkill
- literature-reviewSkill
- manuscript-provenanceSkill
- manuscript-reviewSkill
- manuscript-typographySkill
- market-analyzerSkill
- marp-slidesSkill
- mcp-to-skillSkill
- md-to-pdfSkill
- migration-risk-analyzerSkill
- milestone-runnerSkill
- module-deepeningSkill
- notebooklmSkill
- package-evaluatorSkill
- package-optimizerSkill
- paper-to-skillSkill
- plan-promptsSkill
- The first 60 shown.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

