Releases: nebrass/hve-video-director
Release list
v0.2.0 — HyperFrames ecosystem rebase (M0–M6)
Rebases the skill on the HyperFrames ecosystem (#34, milestones M0–M6). The finding behind it: roughly 70–85% of the phase prose had drifted into a hand-maintained shadow copy of the upstream manual, while the ecosystem had shipped real owners for nearly all of it. This release deletes the shadow copy and keeps the layer that has no upstream equivalent — the consent doctrine, revision fingerprints, capture determinism, and reviewed captions.
▶ Watch the 90-second v0.2.0 promo — produced end-to-end by this release itself, with a human granting all six phase approvals. The MP4 is attached below. It is a separate project from example/, not a render of it.
No generated project is stranded: nothing is gated on the storyboard's shape, and a project created before this release still resumes.
Upgrading
npx skills add nebrass/hve-video-director --globalNo migration is required. v0.1.0 and its published asset are unchanged — this is a new version, not an amended one.
Added
- The reasoning layer (M1) —
reasoning/andgrammar/are first-class skill directories.reasoning/scene-analysis.mdowns the twelve per-frame questions, the closed set of director keys, and the single-sourced cognitive-load budgets;reasoning/capability-catalog.mdowns the capability-tag vocabulary and turns derived tags into a runtime. compat/ecosystem.md— the compatibility thin waist (ADR-007). The only file permitted to hold intra-skill paths for ecosystem skills, so an upstream relayout is a one-row edit. Enforced both ways bytest_compat_pointers.py.- Frame packets (M5) — a builder receives one ephemeral packet per frame and returns exactly one scene file. Regenerated every run, never committed.
- A numeric seam gate (M3) — transition quality was enforced by prose DON'Ts; Phase 4 now writes a seam ledger, stamps it (
SEAM_STAMP) and verifies it (SEAM_VERIFIER). Dissolves cannot be ledger rows, and Phase 4 reports the unverified boundary count either way. - The official storyboard shape (M4) — buys the upstream parser, Studio contact-sheet review, and the structured frame-comments channel; this skill's keys ride along as preserved extras.
- ADR-001…ADR-008, plus the design review that produced them.
Changed
- Phase-5 audio generation is delegated to the
media-useengine (M2). Delegation stops at generation: the exact-track music confirmation, the caption review contract, the verified mix recipes and render approval remain this skill's governance (ADR-001). npx hyperframes checkis the required final gate;validate/inspect/layoutare deprecated aliases.example/is regenerated — a 60s promo the skill made about itself (product_surface: none, 8 frames, 4 verified z-seams, Three.js on exactly one frame). Its.hve/brief-state.jsonis the consent record that makes the claim checkable.BRIEF_FORMATwas deliberately not adopted — its run-shape contract skips questions the request already answers, which contradicts the consent doctrine.
Removed
- The local acquisition fallbacks (M6).
generate_voiceover.pyloses its ElevenLabs half, but the file survives:--assemble-onlyis the section assembler both audio paths still use.
Fixed
- Sparse keyframes in normalized terminal clips (#35) —
aggemits change-only frames, so x264 could leave keyframes 8.33s apart and the renderer produced a black or frozen clip whilelint,checkand the seam gate all passed green. The GOP is now pinned to the output fps everywhere it is set, andstitch_clip.pyderives it from--fpsso the two cannot desync.
Full changelog: v0.1.0...v0.2.0
v0.1.0 — renamed to hve-video-director (reinstall required)
⚠️ This release renames the skill. You must reinstall.
npx skills updatedoes not complete this rename. Because the old repository URL
redirects,updateresolves the newSKILL.mdand installshve-video-directoralongside
your existinghve-spielberg— then reports✓ Updated 1 skill(s)without removing the old
directory or its lock entry.You are left with both: a live 0.1.0 and a stale 0.0.4 that still declares the old name and
is still loadable by your agent. It also never converges — every laterupdatereports the same
pending update again. Remove the old install explicitly:npx skills remove hve-spielberg --global npx skills add nebrass/hve-video-director --global
git cloneand Claude Code plugin-marketplace installs need different steps — see
MIGRATION.md.
▶ Watch the 60-second explainer — the stale install, the fix, and what is unaffected. Produced end-to-end by hve-video-director v0.1.0 itself.
Why the rename
The previous name referenced a living public figure, which carried trademark and
right-of-publicity exposure and implied an endorsement that never existed. The new name describes
what the skill actually does, pairing an explicit domain (video) with the role it performs
(director) — the <domain>-<role> convention common to published agent skills.
| Before | After | |
|---|---|---|
| Invocation | /hve-spielberg |
/hve-video-director |
| Repository | nebrass/hve-spielberg |
nebrass/hve-video-director |
| Install dir | <skills-home>/hve-spielberg/ |
<skills-home>/hve-video-director/ |
| Plugin name | hve-spielberg |
hve-video-director |
The old repository URL redirects, and stars, forks, issues, and releases are preserved.
What did not change
Existing generated video projects keep working. Project scaffolding never embedded the skill
name — templates/ contains no reference to it — so your project-plan.md, .hve/brief-state.json,
storyboard.md, DESIGN.md, and scenes are unaffected. No phase, workflow, script, CLI flag, or
file format changed. This release is a rename plus documentation; the pipeline behaves identically.
Added
- Rename-resilient skill resolution — if a
git cloneinstall is left under its old directory
name, the$SKILL_DIRprobes now fall back to matching the skill's declared frontmattername
instead of failing mid-pipeline at Phase 3. Matching identity rather than file layout means no
unrelated skill sharing a skills home can be selected. Covered by 9 new unit tests and verified
against real installs. MIGRATION.md— per-runtime upgrade guide.TRADEMARKS.md— nominative attribution for every third-party mark
the skill references, a statement that thedesign-systems/presets are original written
descriptions rather than copied brand assets, and the licensing terms that attach to generated
output (CC0/CC-BY music, ElevenLabs terms, and responsibility for captured screen content).
Also in this release
The end-to-end pipeline hardening from
#22, which was not separately
changelogged: a revision-aware Creative Brief that persists and validates user-owned creative
choices, reviewed-caption delivery, native screen capture, and a Creative Brief migration flow for
legacy projects.
Full changelog: https://github.com/nebrass/hve-video-director/blob/main/CHANGELOG.md
Compare: v0.0.4...v0.1.0
Example video
hve-video-director-example-v0.1.0.mp4
is attached below — the 53-second reference build, rendered by this skill from
example/ and carrying the new
branding. Reproduce it with python3 example/voiceover.py && npx hyperframes render . --output out/final.mp4 --quality high.
Note: the promo linked from the README is hosted on YouTube and was recorded before the
rename, so it still shows the former branding. It remains accurate about the pipeline itself.
v0.0.4 — agent-agnostic skill + ducked audio mix + toolchain doctor
Makes hve-spielberg agent-agnostic, hardens the Phase 5 audio mix from a real end-to-end render, and adds a one-shot toolchain doctor.
Added
- Agent-agnostic skill. Runs on Claude Code and GitHub Copilot CLI; new "Runtime Compatibility" section in SKILL.md documents the runtime-neutral conventions (neutral
{"questions":[…]}prompts,Skill(<name>)loading, dual~/.claude/~/.copilotskills-home resolution). (#7) - Claude Code plugin manifest + skills-CLI-first install. Root
.claude-plugin/manifest +AGENTS.md; docs lead withnpx skills add nebrass/hve-spielberg [--agent github-copilot] [--global]. (#7) - OpenCode & Pi support (documented). Both discover the skill by directory convention from a scanned home — no manifest needed. (#11)
scripts/check_requirements.sh— toolchain doctor. Verifies every prerequisite (Node ≥18, Python ≥3.10, ffmpeg/ffprobe, chrome-headless-shell, hyperframes CLI + companion skills, env vars) with ✓/○/✗ and per-OS hints;--fixauto-installs only user-scoped deps and prints — never runs — sudo/system commands. (#13)
Changed
- Phase 5 audio mix hardened from a real Copilot CLI render. Sidechain mix forces both legs to stereo (fixes
sidechaincompressabort on mono voiceovers); music now sits under the voice as a sidechain-ducked bed (loudnorm base + speech-EQ carve + peak limiter). Documented the WSL2--docker/--no-low-memory-moderender path. (#5, #9)
Fixed
- True-peak ceiling breach in the audio master — final mix now lands ~-3.8 dBTP (was above the -1 dBTP target). (#9)
Documentation
- Codex & Cursor regrouped under native discovery; dead manifests removed (the shipped
.codex-plugin//.cursor-plugin/were no-ops). (#10, #12)
Full changelog: v0.0.3...v0.0.4
v0.0.3 — autonomous terminal capture + clip timing contract
Added a professional, skill-driven asciinema + agg CLI recording path so
terminal scenes can be captured autonomously — no user keyboard required.
The prior Phase 2 path treated asciinema as a one-line user-side note;
this release wires it as a first-class capture source on par with Chrome
DevTools screenshots and screencast clips.
Added
- Autonomous asciinema recording. The skill drives
asciinema rec --command "<cmd>"itself via its Bash tool: PTY-isolated, env-scrubbed
(env -i HOME=$HOME PATH=$PATH SHELL=/bin/bash PS1='$ '), and bounded
bytimeout Nsso runaway / non-terminating commands can't stall the
phase. The user never opens a terminal.aggthen renders the cast to
MP4 in the same autonomous sequence. patterns/cli-terminal-capture.md— end-to-end guide: when to use the
asciinema path vs. the authored-terminal fallback, install per OS,
autonomous recording sequence, edge cases (long-running commands,
piped input, secrets-without-leaking, PTY allocation fallback to
script -qc), agg theme→palette pairing, quality gate, troubleshooting.templates/scene-terminal-clip.html— Layer-A clip-scene archetype that
wraps the agg-rendered MP4 in a macOS-style window for brand parity
with browser-mockup scenes. Animates the.term-framewrapper only
(respects the no-<video>-dimension-tween rule).templates/storyboard.md— newCapture: terminal-clipvalue plus
requiredCommand:andRecord timeout:fields so storyboards carry
the inputs the autonomous path needs.- README "Updating" section documenting how to pull the latest skill
version (carried over from Unreleased).
Changed
SKILL.mdfrontmatter —descriptionbroadened so Phase 2 reads as a
multi-source step ("Chrome DevTools screenshots + screencast clips,
asciinema terminal recording") instead of screenshots only;
allowed-toolsgainsBash(asciinema:*), Bash(agg:*), Bash(timeout:*), Bash(ffprobe:*); prerequisites block prints an
actionable per-OS install hint when asciinema/agg are missing.workflows/phase-2-capture.md— replaces the 3-line asciinema note
with the full autonomous record → render → verify sequence,
preconditions, and the edge-case matrix.README.mdprerequisites table — concrete install commands and a link
to the new pattern doc.patterns/INDEX.mdandCLAUDE.md— register the new pattern doc and
template so future editing sessions find them.
Fixed
- Clip
<video>timing contract. Clip scenes previously used a bare
<video>and told authors not to add timing attributes. The runtime only
frame-syncs videos carryingdata-start, so with 2+ clip scenes footage
cross-routed (one scene played another's footage, another played black)
whilelint/inspect/validateall passed green. Both clip templates and
the phase-3/4 docs now mandate the explicit contract:id+
data-start="0"+data-duration+data-media-start+
data-track-index="0". Also added to the central## DON'Tslist and as a
carve-out inpatterns/transition-catalog.md. Clip in/outtrim now lands in the scene viadata-media-start
(= storyboardClip in). Previously the trim was silently ignored — the
video played from sourcet=0and desynced from Phase 5's clip-audio
extraction (CIN).- Clips no longer blank during crossfades. The inner video's
data-durationis the scene loader's full crossfade-extended window (per
patterns/transition-catalog.md), not the bare clip length — an
expired track goesvisibility:hiddenmid-crossfade otherwise. - Phase 1 now surfaces
Capture: terminal-clip(withCommand:/
Record timeout:) so new-mode storyboards can actually trigger the
autonomous asciinema path. - asciinema record env keeps
LANG(LANG="${LANG:-C.UTF-8}"through
env -i) — asciinema 2.x aborts without a UTF-8 locale. - agg no longer passes
--cols/--rows— it reads the size from the
cast header; the previous hardcoded144×32mismatched the recorded
175×32and wrapped/letterboxed wide output. The intermediate GIF now goes
to$TMPDIRinstead ofpublic/clips/, and the verify step reads
nb_framesfrom the header instead of a full-count_framesdecode. timeoutis feature-detected (GNU coreutils; absent on stock macOS —
install hint now saysbrew install asciinema agg coreutils), and the
PTY-failure fallback documents bothscriptsyntaxes (GNU-qcvs
BSD/macOS positional).allowed-toolsgainsBash(script:*)and
mcp__chrome-devtools__emulate(used for viewport + dark-mode emulation).- Dark-mode MutationObserver guidance inverted to the working order —
inject afternavigate_page(navigation wipes the page's JS context;
hydration re-renders don't navigate, so the observer survives them). - Mandatory hero-frame content check in Phase 4 (
inspect --atscene
midpoints, then read the PNGs) — the mechanical gates can't see wrong
content; this is how the bare-<video>cross-route shipped unnoticed.
Security
- Subresource Integrity on the GSAP CDN tag. Every
<script>loading
gsap@3.14.2from jsDelivr (4 templates, the phase-3/phase-4 skeletons, and
allexample/scenes) now carriesintegrity="sha384-…" crossorigin="anonymous",
so a tampered CDN response is rejected by the browser instead of executing in
preview/render.CLAUDE.mddocuments the hash-recompute step required on any
future GSAP version bump.
Unchanged (by design)
- If
asciinema/aggare missing, the skill silently falls back to the
authored-terminal scene (templates/scene-terminal.html). No install
prompts — the user is told once, then Phase 2 proceeds.
v0.0.2 — Remotion → HyperFrames
Migrated the rendering engine from Remotion (React, server-rendered) to HyperFrames (HTML + GSAP + headless Chromium) across the whole 6-phase pipeline, then extended it with first-class video-clip capture and a new tutorial content mode. Shipped via #2.
Changed
- Rendering engine: Remotion → HyperFrames. All six
workflows/phase-*.mdrewritten. New scene authoring model (sub-compositions +data-composition-id+ GSAP timelines onwindow.__timelines) replaces Remotion JSX compositions. Phase contracts updated end-to-end acrossSKILL.md,CLAUDE.md, and.github/copilot-instructions.md. - Phase 2 capture contract generalized from "screenshots" to capture artifacts (
public/screenshots/and/orpublic/clips/). patterns/visual-patterns.mdfully rewritten for GSAP — adds thetl.fromTo()stagger-trap rule,autoAlphaguidance, andtl.setfor late-entry elements.patterns/metallic-swoosh.mdreworked as an inline root-timeline pattern.
Added
- Tutorial / walkthrough content mode — a third mode beside promo and showcase: task-ordered chapters with a cold-open on the payoff, required baked captions, footage-time legibility punch-in for sub-24px UI text, a recap archetype, a "Step N of M" / chapter overlay, and a ~90s segment cap. Warns-and-degrades to stills when clips are absent.
- Video-clip capability — real motion footage as a first-class, source-agnostic capture artifact: clip-scene archetype
templates/scene-clip.html("Wiring S") with footage-locked durations; Chrome DevToolsscreencastweb capture (experimental, feature-detected) and a dependency-free terminal path for CLI (templates/scene-terminal.html, optionalasciinema+agg); a footage quality gate. - 10 vendored brand design presets in
design-systems/<slug>/DESIGN.md(Stripe, Linear, Apple, Notion, Vercel, Airbnb, GitHub, Cal, Arc, Bento) — original MIT-licensed prose — plusCONTRIBUTING.md. - New pattern files:
patterns/INDEX.md,anti-slop.md,marker-highlight.md,transition-catalog.md. example/— a self-contained reference promo project built by the pipeline itself.CLAUDE.mdcodebase guide and a top-level.gitignore.- Opt-in clip-own audio mixed under a ducked voiceover (sidechain) in Phase 5.
- CLI inventory entries
addanddoctor;screencast_*+resize_pageadded toallowed-tools.
Fixed
scripts/generate_voiceover.pyhardening: absolute-path ffmpeg concat, list-or-dict transcript parser,mktemp→mkstemp, non-zero exit on a failed TTS section, guards for null word timestamps and ffprobeN/Adurations, a mid-loop tempfile leak, word-level timestamps for overlap detection, and voiceover-overrun warnings.- HyperFrames
lint/inspect/validate/rendergates take a project directory, not a file. gsap.from()→tl.fromTo()(the stagger trap) across workflows, patterns, and templates.- Three rounds of Copilot review fixes plus a max-effort code-review pass.
Removed
- The Remotion / React rendering path.
- The committed
example/out/final.mp4binary (3.4 MB) — no longer tracked in git (regenerable build artifact; the demo lives on YouTube, rebuild viaexample/README.md).
📋 Full changelog: CHANGELOG.md · Compare: v0.0.1...v0.0.2
v0.0.1 — Initial release
Initial release of the hve-spielberg skill — an end-to-end, design-thinking video production pipeline for Claude Code.
Added
- 6-phase AI video production orchestrator (
SKILL.md) with per-phase approval checkpoints andnew/continue/jumpentry modes: Discovery → Storytelling → Capture (Chrome DevTools screenshots) → Design → Production → Audio & Render (Remotion-based rendering). - Promo and showcase content modes.
- ElevenLabs voiceover generation with Whisper timing verification (
scripts/generate_voiceover.py). - Freesound CC music search (
scripts/search_music.py), switched over from an earlier Pixabay integration. - README with install instructions and an MIT license.
📋 Full changelog: CHANGELOG.md
