Skip to content

Releases: nebrass/hve-video-director

v0.2.0 — HyperFrames ecosystem rebase (M0–M6)

Choose a tag to compare

@nebrass nebrass released this 04 Aug 15:02
69eb569

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.

hve-video-director — this promo was made by the tool it describes

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 --global

No 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/ and grammar/ are first-class skill directories. reasoning/scene-analysis.md owns the twelve per-frame questions, the closed set of director keys, and the single-sourced cognitive-load budgets; reasoning/capability-catalog.md owns 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 by test_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-use engine (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 check is the required final gate; validate/inspect/layout are 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.json is the consent record that makes the claim checkable.
  • BRIEF_FORMAT was 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.py loses its ElevenLabs half, but the file survives: --assemble-only is the section assembler both audio paths still use.

Fixed

  • Sparse keyframes in normalized terminal clips (#35) — agg emits change-only frames, so x264 could leave keyframes 8.33s apart and the renderer produced a black or frozen clip while lint, check and the seam gate all passed green. The GOP is now pinned to the output fps everywhere it is set, and stitch_clip.py derives it from --fps so the two cannot desync.

Full changelog: v0.1.0...v0.2.0

v0.1.0 — renamed to hve-video-director (reinstall required)

Choose a tag to compare

@nebrass nebrass released this 26 Jul 10:48

⚠️ This release renames the skill. You must reinstall.

npx skills update does not complete this rename. Because the old repository URL
redirects, update resolves the new SKILL.md and installs hve-video-director alongside
your existing hve-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 later update reports 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 clone and 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 clone install is left under its old directory
    name, the $SKILL_DIR probes now fall back to matching the skill's declared frontmatter name
    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 the design-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

Choose a tag to compare

@nebrass nebrass released this 23 Jun 19:08

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 / ~/.copilot skills-home resolution). (#7)
  • Claude Code plugin manifest + skills-CLI-first install. Root .claude-plugin/ manifest + AGENTS.md; docs lead with npx 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; --fix auto-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 sidechaincompress abort 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-mode render 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

Choose a tag to compare

@nebrass nebrass released this 10 Jun 07:12
a4863c1

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
    by timeout Ns so runaway / non-terminating commands can't stall the
    phase. The user never opens a terminal. agg then 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-frame wrapper only
    (respects the no-<video>-dimension-tween rule).
  • templates/storyboard.md — new Capture: terminal-clip value plus
    required Command: and Record 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.md frontmatter — description broadened so Phase 2 reads as a
    multi-source step ("Chrome DevTools screenshots + screencast clips,
    asciinema terminal recording") instead of screenshots only;
    allowed-tools gains Bash(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.md prerequisites table — concrete install commands and a link
    to the new pattern doc.
  • patterns/INDEX.md and CLAUDE.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 carrying data-start, so with 2+ clip scenes footage
    cross-routed (one scene played another's footage, another played black)
    while lint/inspect/validate all 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'Ts list and as a
    carve-out in patterns/transition-catalog.md.
  • Clip in/out trim now lands in the scene via data-media-start
    (= storyboard Clip in). Previously the trim was silently ignored — the
    video played from source t=0 and desynced from Phase 5's clip-audio
    extraction (CIN).
  • Clips no longer blank during crossfades. The inner video's
    data-duration is the scene loader's full crossfade-extended window (per
    patterns/transition-catalog.md), not the bare clip length — an
    expired track goes visibility:hidden mid-crossfade otherwise.
  • Phase 1 now surfaces Capture: terminal-clip (with Command: /
    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 hardcoded 144×32 mismatched the recorded
    175×32 and wrapped/letterboxed wide output. The intermediate GIF now goes
    to $TMPDIR instead of public/clips/, and the verify step reads
    nb_frames from the header instead of a full -count_frames decode.
  • timeout is feature-detected (GNU coreutils; absent on stock macOS —
    install hint now says brew install asciinema agg coreutils), and the
    PTY-failure fallback documents both script syntaxes (GNU -qc vs
    BSD/macOS positional). allowed-tools gains Bash(script:*) and
    mcp__chrome-devtools__emulate (used for viewport + dark-mode emulation).
  • Dark-mode MutationObserver guidance inverted to the working order
    inject after navigate_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 --at scene
    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.2 from jsDelivr (4 templates, the phase-3/phase-4 skeletons, and
    all example/ scenes) now carries integrity="sha384-…" crossorigin="anonymous",
    so a tampered CDN response is rejected by the browser instead of executing in
    preview/render. CLAUDE.md documents the hash-recompute step required on any
    future GSAP version bump.

Unchanged (by design)

  • If asciinema/agg are 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

Choose a tag to compare

@nebrass nebrass released this 04 Jun 11:05
c6b42fe

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.

▶️ Watch the demo: 60-second promo on YouTube — the skill produced its own launch video.

Changed

  • Rendering engine: Remotion → HyperFrames. All six workflows/phase-*.md rewritten. New scene authoring model (sub-compositions + data-composition-id + GSAP timelines on window.__timelines) replaces Remotion JSX compositions. Phase contracts updated end-to-end across SKILL.md, CLAUDE.md, and .github/copilot-instructions.md.
  • Phase 2 capture contract generalized from "screenshots" to capture artifacts (public/screenshots/ and/or public/clips/).
  • patterns/visual-patterns.md fully rewritten for GSAP — adds the tl.fromTo() stagger-trap rule, autoAlpha guidance, and tl.set for late-entry elements.
  • patterns/metallic-swoosh.md reworked 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 DevTools screencast web capture (experimental, feature-detected) and a dependency-free terminal path for CLI (templates/scene-terminal.html, optional asciinema+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 — plus CONTRIBUTING.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.md codebase guide and a top-level .gitignore.
  • Opt-in clip-own audio mixed under a ducked voiceover (sidechain) in Phase 5.
  • CLI inventory entries add and doctor; screencast_* + resize_page added to allowed-tools.

Fixed

  • scripts/generate_voiceover.py hardening: absolute-path ffmpeg concat, list-or-dict transcript parser, mktempmkstemp, non-zero exit on a failed TTS section, guards for null word timestamps and ffprobe N/A durations, a mid-loop tempfile leak, word-level timestamps for overlap detection, and voiceover-overrun warnings.
  • HyperFrames lint/inspect/validate/render gates 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.mp4 binary (3.4 MB) — no longer tracked in git (regenerable build artifact; the demo lives on YouTube, rebuild via example/README.md).

📋 Full changelog: CHANGELOG.md · Compare: v0.0.1...v0.0.2

v0.0.1 — Initial release

Choose a tag to compare

@nebrass nebrass released this 04 Jun 11:12

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 and new/continue/jump entry 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