mirror of
https://github.com/heygen-com/hyperframes.git
synced 2026-09-03 12:54:29 +00:00
Packages Jake Moran's changelog-video pipeline (v1, validated end-to-end
by Home on the Jun 23-29 range) as a repo-native skill set that Claude
Code (.claude/skills/) and Codex CLI (.agents/skills/) auto-discover the
moment the repo is opened. No install step; run the skill against a
changelog markdown for a given git range and it produces a lint-clean,
seam-gate-green 1080x1080 MP4 (~45-60s, Annie VO, mock-UI visualizations,
caption rail) end-to-end.
Six skills added byte-identical in both mirror dirs:
- changelog-video (pipeline entry point)
- motion-doctrine (carries seam-stamp.mjs + seam-gate.mjs)
- cut-the-curve, captions-overlay, seam-craft, oversized-cursor
Layout:
- .claude/skills/ - Claude Code project-local auto-discover
- .agents/skills/ - Codex CLI project-local auto-discover (verified via
Magi's clean-home Codex 0.144.3 repro; NOT .codex/skills/)
Fonts, animated background (12 MB), house BGM (5 MB), lexicon, and
align-captions ship inside the skill dirs. .gitattributes routes only
.claude/skills/**/*.{mp4,mp3} + .agents/skills/**/*.{mp4,mp3} through
LFS — narrowly scoped so unrelated Player, Studio, registry, and
marketplace media stay put. HeyGen CLI auth is the one credential the
skill needs; Node >= 22, ffmpeg, and headless Chrome are documented
alongside in both READMEs.
.gitignore: rewrites .claude/ and .agents/ blocks to keep agent-installed
skill hygiene while re-including the six repo-native skill dirs plus
README.md.
CI:
- Extends changes.skills filter to match .claude/skills/**,
.agents/skills/**, scripts/lint-skills.ts, and scripts/check-skill-mirror.mjs.
- New 'Skills: project-native lint + mirror' job runs the extended
lint-skills.ts (schema-driven; required { name, description } + optional
{ license, allowed-tools, metadata }, name pattern check, description
length check) plus a new check-skill-mirror.mjs byte-integrity script
(24 mirrored files must match; README.md deliberately per-CLI).
- Wired into 'bun run lint' locally.
Frontmatter validator:
- Rejects unsupported top-level keys (catches category:-style drift).
- Requires name + description.
- Validates name pattern (^[a-z][a-z0-9-]{0,63}$) and description shape
(non-empty, <=1024 chars).
- Missing frontmatter block itself is a first-class error.
Also strips unsupported top-level 'category:' frontmatter from Jake's
motion-doctrine and cut-the-curve SKILL.mds (both mirrors), rewrites the
TTS invocation from ~/.claude/skills/media-use/... to the tracked
skills/hyperframes-media/scripts/heygen-tts.mjs, swaps npx hyperframes@latest
for the repo-local CLI in the gate step, and fixes a lint issue in Jake's
seam-gate.mjs (ternary-for-side-effect -> if/else).
Validated end-to-end by Home on Jun 23-29 (MP4 posted in C0ACCNHLG3U
thread 1784181166.041319). Independently reviewed R1/R2/R3 by Magi.
Co-authored-by: Jake Moran <jake@heygen.com>
44 lines
2.6 KiB
Plaintext
44 lines
2.6 KiB
Plaintext
# Normalize text files to LF on checkout and in the repo, regardless of the
|
|
# contributor's OS. Without this, files saved on Windows can land in PRs with
|
|
# CRLF endings or a UTF-8 BOM, which makes every line differ at the byte level
|
|
# and trips GitHub's "Binary file not shown" diff heuristic.
|
|
* text=auto eol=lf
|
|
|
|
# Regression-test media under packages/producer/tests — RECURSIVE (`**`) so
|
|
# media in ANY nested fixture dir routes to LFS. The earlier non-recursive
|
|
# patterns (`tests/*/output/...`, `tests/*/src/...`) only matched one level
|
|
# deep, so binaries in nested dirs like `tests/hdr-regression/hdr-pq/assets/*.mp4`
|
|
# and `.../_renders/*.mp4` committed straight into the git pack and now live in
|
|
# history forever. `**` closes that leak: any video/baseline anywhere under
|
|
# tests/ is LFS, regardless of how deeply it is nested.
|
|
packages/producer/tests/**/*.mp4 filter=lfs diff=lfs merge=lfs -text
|
|
packages/producer/tests/**/*.mov filter=lfs diff=lfs merge=lfs -text
|
|
packages/producer/tests/**/*.webm filter=lfs diff=lfs merge=lfs -text
|
|
packages/producer/tests/**/*.png filter=lfs diff=lfs merge=lfs -text
|
|
packages/producer/tests/**/output/compiled.html filter=lfs diff=lfs merge=lfs -text
|
|
|
|
# ONNX models must ALWAYS use LFS regardless of location: a 31 MB ppmattingv2
|
|
# model was once committed raw into skills/ then deleted — but a raw commit
|
|
# lives in history forever. No path in the repo legitimately ships a raw .onnx.
|
|
# (Audio masters / .wav are intentionally NOT globalized here — registry blocks
|
|
# ship raw audio so they stay portable when installed via `hyperframes add`.
|
|
# The wav-in-LFS question is a coordinated policy decision left for later.)
|
|
*.onnx filter=lfs diff=lfs merge=lfs -text
|
|
|
|
# GitHub Linguist overrides — HTML files are compositions (user content / templates),
|
|
# not the framework source. Hide them from the repo language stats so TypeScript,
|
|
# which is the actual implementation, surfaces as the dominant language.
|
|
registry/**/*.html linguist-vendored
|
|
*.html linguist-detectable=false
|
|
|
|
# Repo-native project-skill assets — the changelog-video skill ships a 12 MB
|
|
# animated background (bg-pattern.mp4) and a 5 MB house music track (bgm.mp3)
|
|
# alongside its 5 fonts. Route them through LFS in both mirrors so a fresh
|
|
# clone stays lean; the largefiles pre-commit guard fails hard on raw commits
|
|
# of media this size, and history rewrites after merge are painful (see the
|
|
# comment on the packages/producer patterns above).
|
|
.claude/skills/**/*.mp4 filter=lfs diff=lfs merge=lfs -text
|
|
.claude/skills/**/*.mp3 filter=lfs diff=lfs merge=lfs -text
|
|
.agents/skills/**/*.mp4 filter=lfs diff=lfs merge=lfs -text
|
|
.agents/skills/**/*.mp3 filter=lfs diff=lfs merge=lfs -text
|