@hanzo/frame is taken by the hero video primitive — one full-bleed video element — which has held that name on npm since it shipped. This repo is the video toolchain: a CLI, a renderer, a studio, a player. Plural is what it is, so the CLI publishes as @hanzo/frames and the workspace packages follow it (@hanzo/frames-core, @hanzo/frames-engine, and the rest). The binary stays `frames`, and now actually ships. The manifest mapped it to bin/frames.mjs while the file on disk was bin/hyperframes.mjs, so a global install produced no working command. The paths that name a package to fetch were pointing elsewhere. The update check read registry.npmjs.org/frames, a different author's package, and the npm, bun and pnpm installers would have pulled it over the CLI; the render image installed the upstream hyperframes; scaffolded projects and the docs pinned the unscoped name. All of them now name @hanzo/frames.
2.2 KiB
Project-local Codex CLI skills
Skills in this directory are auto-discovered by Codex CLI (verified against
Codex 0.144.3) when the frames repo is opened as the working
directory. They are NOT part of the marketplace-distributed plugin (that
set lives under skills/ and is manifested by .codex-plugin/). Two
separate namespaces, on purpose:
.agents/skills/— repo-native, run only against this repo (weekly changelog videos, doctrine-heavy authoring flows). Codex CLI's project-local skill dir.skills/— marketplace-distributable, installed into other projects vianpx @hanzo/frames skillsornpx skills add hanzoai/frames.
Weekly changelog video
The changelog-video skill turns a weekly changelog markdown into a
~45–60s branded 1080×1080 MP4 (motion-doctrine layout, one narrator,
seam-gated cuts, caption rail). It ships pre-configured — fonts,
background pattern, house BGM, lexicon, and the align-captions script
all live inside changelog-video/. Its five dependency skills
(motion-doctrine, cut-the-curve, captions-overlay, seam-craft,
oversized-cursor) sit alongside so the router graph is complete on
clone.
Weekly usage:
- Regenerate the digest markdown for the target range:
bun run changelog:weekly --from YYYY-MM-DD --to YYYY-MM-DD(this only reads git; the--writevariant is what the docs cron uses). - In Codex CLI at the repo root, invoke
/changelog-videowith the generated markdown. The agent will present its script + visualization plan for review before rendering. - Accept, and the agent produces
weekly-changelog-<range>.mp4gated byframes check(0 errors) +seam-gate verify(0 fail/warn).
VO comes from frames tts and its word timings from frames transcribe,
both local models. Runtime dependencies you need on PATH:
- Node ≥ 22
ffmpeg(for VO wav conversion + frame QA)- A headless Chrome for Frames rendering (
frames doctorwill point out the exact ask if it's missing)
The parallel set at .claude/skills/ is a byte-identical copy so
Claude Code users get the same auto-discover behaviour — keep the two
in sync when editing. A scripts/check-skill-mirror.mjs check enforces
this at CI time.