mirror of
https://github.com/heygen-com/hyperframes.git
synced 2026-09-11 14:50:02 +00:00
feat(studio): add storyboard manifest contract, parser, and read API (#1528)
First PR in the Studio storyboarding stack. Establishes the parseable contract the storyboard UI reads from; no UI yet. - core/storyboard: StoryboardManifest/Frame/Globals types + a lenient STORYBOARD.md parser (frontmatter + status/src/duration/transition_in, freeform narrative tolerated, never throws, records warnings). Exposed as @hyperframes/core/storyboard (browser-safe). - studio-api: GET /projects/:id/storyboard returns the normalized manifest with per-frame srcExists; missing file -> exists:false, not 404. - fixture: packages/studio/fixtures/storyboard-sample for dogfooding the storyboard view in later PRs (built/animated frames + one outline). Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
f72ea25b3b
commit
8a13a07074
@@ -0,0 +1,71 @@
|
||||
---
|
||||
format: 1920x1080
|
||||
message: "Ship a launch video in an afternoon"
|
||||
arc: Hook → Problem → Solution → Proof → CTA
|
||||
audience: indie devs on X
|
||||
voice: Rachel — 5 lines from SCRIPT.md
|
||||
---
|
||||
|
||||
## Frame 1 — Hook
|
||||
|
||||
- scene: Big type punches in on the beat
|
||||
- duration: 3s
|
||||
- poster: 2s
|
||||
- transition_in: cut
|
||||
- status: animated
|
||||
- voiceover: "Ship a launch video in an afternoon."
|
||||
- src: compositions/frames/01-hook.html
|
||||
|
||||
Open cold on the promise. Big type punches in on the beat: "Ship a launch
|
||||
video in an afternoon." This is the thesis — everything after pays it off.
|
||||
|
||||
## Frame 2 — The problem
|
||||
|
||||
- scene: A 20-minute timer spins on a stack of rejected takes
|
||||
- duration: 4s
|
||||
- poster: 2.6s
|
||||
- transition_in: crossfade
|
||||
- status: animated
|
||||
- voiceover: "The old way? Prompt, wait twenty minutes, get something that misses."
|
||||
- src: compositions/frames/02-problem.html
|
||||
|
||||
The old way: prompt, wait twenty minutes, get something that misses. A timer
|
||||
spins while a stack of rejected takes piles up. Establish the pain we remove.
|
||||
|
||||
## Frame 3 — The feature in action
|
||||
|
||||
- scene: Frames line up as a contact sheet
|
||||
- duration: 5s
|
||||
- poster: 3.3s
|
||||
- transition_in: crossfade
|
||||
- status: built
|
||||
- voiceover: "You lock the story first — then it animates."
|
||||
- src: compositions/frames/03-feature.html
|
||||
|
||||
Cut to the storyboard view itself. Frames line up as a contact sheet and the
|
||||
narration says "...you lock the story first, then it animates." Show, don't tell.
|
||||
|
||||
## Frame 4 — Proof
|
||||
|
||||
- scene: A stat counts up to the payoff number
|
||||
- duration: 4s
|
||||
- poster: 2.6s
|
||||
- transition_in: wipe
|
||||
- status: built
|
||||
- voiceover: "Fewer re-renders. More finished videos."
|
||||
- src: compositions/frames/04-proof.html
|
||||
|
||||
A real metric lands: fewer re-renders per finished video. Number counts up
|
||||
while a caption credits the storyboard-first flow.
|
||||
|
||||
## Frame 5 — Call to action
|
||||
|
||||
- scene: End card with the wordmark and a one-line CTA
|
||||
- duration: 3s
|
||||
- transition_in: crossfade
|
||||
- status: outline
|
||||
- voiceover: "Try it: npx hyperframes."
|
||||
- src: compositions/frames/05-cta.html
|
||||
|
||||
End card, still an outline. "Try it: npx hyperframes" with the wordmark. Not
|
||||
built yet — this frame should render as an outline placeholder in the grid.
|
||||
Reference in New Issue
Block a user