hyperframes 0.7.64 → 0.7.66
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +2456 -2102
- package/dist/hyperframe-runtime.js +1 -1
- package/dist/hyperframe.manifest.json +1 -1
- package/dist/hyperframe.runtime.iife.js +1 -1
- package/dist/hyperframes-player.global.js +2 -2
- package/dist/skills/hyperframes/SKILL.md +11 -75
- package/dist/skills/hyperframes/references/capability-menu.md +1 -1
- package/dist/skills/hyperframes/references/intent-interview.md +71 -0
- package/dist/skills/hyperframes/references/pitch-round.md +1 -1
- package/dist/skills/hyperframes/references/route-briefs.md +8 -82
- package/dist/skills/hyperframes/references/routes/embedded-captions.md +11 -0
- package/dist/skills/hyperframes/references/routes/faceless-explainer.md +12 -0
- package/dist/skills/hyperframes/references/routes/general-video.md +12 -0
- package/dist/skills/hyperframes/references/routes/motion-graphics.md +11 -0
- package/dist/skills/hyperframes/references/routes/music-to-video.md +12 -0
- package/dist/skills/hyperframes/references/routes/pr-to-video.md +28 -0
- package/dist/skills/hyperframes/references/routes/product-launch-video.md +13 -0
- package/dist/skills/hyperframes/references/routes/remotion-to-hyperframes.md +9 -0
- package/dist/skills/hyperframes/references/routes/slideshow.md +11 -0
- package/dist/skills/hyperframes/references/routes/talking-head-recut.md +11 -0
- package/dist/skills/hyperframes/references/workflow-catalog.md +7 -67
- package/dist/skills/hyperframes-cli/references/doctor-browser.md +12 -0
- package/dist/studio/assets/{hyperframes-player-D4jpio27.js → hyperframes-player-BiCGkoKi.js} +1 -1
- package/dist/studio/assets/{index-srObT-DA.js → index-CnL24iBm.js} +1 -1
- package/dist/studio/assets/{index-CqjWmIbE.js → index-Cp6reNm_.js} +1 -1
- package/dist/studio/assets/{index-BOMWJSjh.js → index-wCPvBGsm.js} +144 -144
- package/dist/studio/index.html +1 -1
- package/dist/studio/index.js +2562 -2538
- package/dist/studio/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,85 +1,11 @@
|
|
|
1
|
-
# Route briefs
|
|
1
|
+
# Route briefs (moved)
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Each route's interview entry — must-haves, conditional questions, deferred asks,
|
|
4
|
+
pitch-eligible fields, and whether the run-shape questions apply — now lives in that
|
|
5
|
+
route's own file, together with its input/output/trigger contract:
|
|
4
6
|
|
|
5
|
-
|
|
7
|
+
`references/routes/<workflow>.md` — e.g. `routes/faceless-explainer.md`,
|
|
8
|
+
`routes/pr-to-video.md` (including the PR-size → length table).
|
|
6
9
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
- **Must-haves:** **angle** — concept / how-to / listicle / narrative, recommend the one the text's own shape suggests · **length** — inside the 30–90s sweet spot, scaled to how much the text actually teaches · **destination** — YouTube / embed → 16:9 · X / LinkedIn / Instagram feed → 1:1 · Shorts / TikTok → 9:16.
|
|
10
|
-
- **Conditional:** a pasted script adds **`VO_MODE`** — use it verbatim, or restructure per scene?
|
|
11
|
-
- **Pitch round:** `message` + `angle` — five tellings of the same topic are five different videos.
|
|
12
|
-
- **Run-shape:** both.
|
|
13
|
-
|
|
14
|
-
## `/product-launch-video`
|
|
15
|
-
|
|
16
|
-
- **First, sell or show?** One question when the request doesn't say: market the product (a promo), or show the site as-is (a tour / showcase)? A show-it answer is **intent, not a different pipeline**: write it into `BRIEF.md` (`## Intent` / `## Customizations` — "feature the site's own captured screens as the video's assets") and the workflow's normal steps carry it — the captured screens become the featured `asset_candidates`.
|
|
17
|
-
- **Must-haves:** **angle** — story shapes from the site's / brief's own positioning, recommend one with its basis · **length** — 30–90s sweet spot, scaled to the material · **destination** — as above.
|
|
18
|
-
- **Conditional:** a show-it-as-is ask adds **what to show** — the whole site, or specific pages/sections (into `BRIEF.md`'s body); a pasted script/brief adds **`VO_MODE`** (verbatim or restructured?); a script that only names a site adds **capture?** — crawl it for brand + assets (default), or text-only / "don't scrape" (no-capture mode, a preset supplies the design system).
|
|
19
|
-
- **Pitch round:** `message` + `angle`, after sell-or-show is settled — the pitches inherit that intent.
|
|
20
|
-
- **Run-shape:** both.
|
|
21
|
-
|
|
22
|
-
## `/pr-to-video`
|
|
23
|
-
|
|
24
|
-
- **Must-haves:** the **PR reference** (URL, `owner/repo#N`, or "this PR") · **angle** — changelog / feature-reveal / fix-explainer / refactor-walkthrough, recommend the one the PR itself suggests · **audience** — developers (default) · mixed technical · non-technical stakeholders · **length** — from the size table below · **destination** — 16:9 is the default for a code explainer.
|
|
25
|
-
- **Length comes from the PR's change size**, not a fixed guess — peek once, read-only (the workflow's Step 1 still does the full deterministic fetch):
|
|
26
|
-
|
|
27
|
-
```bash
|
|
28
|
-
gh pr view <PR_REF> --json title,additions,deletions,changedFiles
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
Pick the tier from `additions + deletions` (nudged up by `changedFiles`) and lead with it (hard cap ~3 min):
|
|
32
|
-
|
|
33
|
-
| PR change size | Recommended length |
|
|
34
|
-
| --------------------------------- | ------------------ |
|
|
35
|
-
| trivial (≲ 50 lines changed) | ~20–40s |
|
|
36
|
-
| focused (~50–200 lines) | ~40–70s |
|
|
37
|
-
| substantial (~200–600 lines) | ~70–110s |
|
|
38
|
-
| large (≳ 600 lines, or 25+ files) | ~110–180s |
|
|
39
|
-
|
|
40
|
-
State the basis in one phrase ("~40s — small change, +44/−13 across 12 files"). The tier is a **ceiling** on how much story the diff can support, never a floor to fill: a one-headline story recommends inside 30–90s regardless of tier (the tier's range may still appear as a non-recommended fuller-walkthrough option).
|
|
41
|
-
|
|
42
|
-
- **Pitch round:** `angle` and the opening hook — the diff fixes the facts, not the telling.
|
|
43
|
-
- **Run-shape:** both.
|
|
44
|
-
|
|
45
|
-
## `/general-video`
|
|
46
|
-
|
|
47
|
-
- **Open-ended requests only:** first derive a one-sentence `message`. Ask `audience` only when it is unclear and would change the story or terminology. Ask `destination` only when it would change aspect or composition. Ask for a priority only when the brief contains a real trade-off. Default to one best version; ask about variations only when the user requests options or comparison.
|
|
48
|
-
- **Specific requests:** a complete ask such as “a static title card with our logo for a website hero” needs no discovery questions.
|
|
49
|
-
- **Pitch round:** `message` — the unformed open-ended request is this round's home case.
|
|
50
|
-
- **Run-shape:** both questions apply. `/general-video` is also the companion host, so `flow: companion` stays on this route with the full toolbox.
|
|
51
|
-
|
|
52
|
-
## `/music-to-video`
|
|
53
|
-
|
|
54
|
-
- **Must-haves:** the **music source** — a track file, a video to pull audio from, or generate one from a mood description · **destination → aspect**.
|
|
55
|
-
- **Deferred (announce):** brand (font + palette) and the genre feel are chosen at its Step 3 by design — they emerge from the track's analysis, not from a question up front.
|
|
56
|
-
- **Pitch round:** `message` — the visual concept riding the beat grid (lyric treatment, montage story, kinetic type); brand and genre feel still land at Step 3.
|
|
57
|
-
- **Run-shape:** both.
|
|
58
|
-
|
|
59
|
-
## `/motion-graphics`
|
|
60
|
-
|
|
61
|
-
- Autonomous by design: at most **one** clarifying question, owned by its director step, in the flow. No must-haves here beyond confirming the input; route directly.
|
|
62
|
-
- **Run-shape:** neither — the piece is seconds long; a board and a companion session have nothing to add.
|
|
63
|
-
- **Front-door capability offer:** skip it. The director's one-question limit is authoritative.
|
|
64
|
-
|
|
65
|
-
## `/slideshow`
|
|
66
|
-
|
|
67
|
-
- The one question is the routing confirmation itself — "do you want this as a HyperFrames slideshow?" — asked during triage (it survives every mode: wrong routing is a quality problem). The deck contract owns everything after.
|
|
68
|
-
- **Run-shape:** neither — the deliverable is a navigable deck, not a rendered video.
|
|
69
|
-
- **Front-door capability offer:** skip it. After route confirmation, the deck workflow owns all remaining choices.
|
|
70
|
-
|
|
71
|
-
## `/embedded-captions`
|
|
72
|
-
|
|
73
|
-
- **Must-haves:** which clip (the input file).
|
|
74
|
-
- **Deferred (announce):** the caption **identity** pick — its Step 0 probes the clip first, then shortlists 2–3 identities from the catalog and recommends one. Say that's coming.
|
|
75
|
-
- **Run-shape:** neither — the footage is untouched; there is no storyboard to review.
|
|
76
|
-
|
|
77
|
-
## `/talking-head-recut`
|
|
78
|
-
|
|
79
|
-
- **Must-haves:** which clip (the input file).
|
|
80
|
-
- **Deferred (announce):** its render-strategy questions — aspect ratio, layout, style group, card count — stay at its Step 7, where the recommendations come from the probed footage and transcript. Say they're coming.
|
|
81
|
-
- **Run-shape:** neither.
|
|
82
|
-
|
|
83
|
-
## `/remotion-to-hyperframes`
|
|
84
|
-
|
|
85
|
-
- Not served by the intent layer — a migration with no brief. Route directly.
|
|
10
|
+
The interview procedure itself (the eight steps) is `references/intent-interview.md`.
|
|
11
|
+
Field semantics and question rules: `hyperframes-core/references/brief-contract.md` § 2–3.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Route: embedded-captions
|
|
2
|
+
|
|
3
|
+
- **Input:** Existing talking-head footage to caption. It is an actual media file, not a URL or creative brief.
|
|
4
|
+
- **Output:** The same footage, untouched, with a caption layer and selected caption identity. The subject may occlude embedded captions. Any length.
|
|
5
|
+
- **Triggers:** "add captions", "add subtitles", "captions behind the subject", "cinematic captions for my clip".
|
|
6
|
+
|
|
7
|
+
## Interview
|
|
8
|
+
|
|
9
|
+
- **Must-haves:** which clip (the input file).
|
|
10
|
+
- **Deferred (announce):** the caption **identity** pick — its Step 0 probes the clip first, then shortlists 2–3 identities from the catalog and recommends one. Say that's coming.
|
|
11
|
+
- **Run-shape:** neither — the footage is untouched; there is no storyboard to review.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Route: faceless-explainer
|
|
2
|
+
|
|
3
|
+
- **Input:** A topic, article, notes, or arbitrary text being explained, with no product being marketed and no website to capture.
|
|
4
|
+
- **Output:** A faceless explainer MP4 with invented typography, abstract graphics, diagrams, or data visualization. Sweet spot 30–90s; hard cap about 3 minutes.
|
|
5
|
+
- **Triggers:** "faceless explainer about X", "explain how DNS works as a video", "turn this article into an explainer".
|
|
6
|
+
|
|
7
|
+
## Interview
|
|
8
|
+
|
|
9
|
+
- **Must-haves:** **angle** — concept / how-to / listicle / narrative, recommend the one the text's own shape suggests · **length** — inside the 30–90s sweet spot, scaled to how much the text actually teaches · **destination** — YouTube / embed → 16:9 · X / LinkedIn / Instagram feed → 1:1 · Shorts / TikTok → 9:16.
|
|
10
|
+
- **Conditional:** a pasted script adds **`VO_MODE`** — use it verbatim, or restructure per scene?
|
|
11
|
+
- **Pitch round:** `message` + `angle` — five tellings of the same topic are five different videos.
|
|
12
|
+
- **Run-shape:** both.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Route: general-video
|
|
2
|
+
|
|
3
|
+
- **Input:** Any custom creation or edit not covered by a specialized route: a static title card, longer brand or sizzle reel, multi-scene montage, static loop/poster, NLE-like footage remix, or freeform composition. It also executes every `flow: companion` brief.
|
|
4
|
+
- **Output:** A HyperFrames composition of any length or format through design → plan → static layout → animation → check → approval → render.
|
|
5
|
+
- **Triggers:** "make a static title card", "longer brand reel", "multi-scene composition", "static loop", "custom video", or any unmatched video request.
|
|
6
|
+
|
|
7
|
+
## Interview
|
|
8
|
+
|
|
9
|
+
- **Open-ended requests only:** first derive a one-sentence `message`. Ask `audience` only when it is unclear and would change the story or terminology. Ask `destination` only when it would change aspect or composition. Ask for a priority only when the brief contains a real trade-off. Default to one best version; ask about variations only when the user requests options or comparison.
|
|
10
|
+
- **Specific requests:** a complete ask such as "a static title card with our logo for a website hero" needs no discovery questions.
|
|
11
|
+
- **Pitch round:** `message` — the unformed open-ended request is this round's home case.
|
|
12
|
+
- **Run-shape:** both questions apply. `/general-video` is also the companion host, so `flow: companion` stays on this route with the full toolbox.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Route: motion-graphics
|
|
2
|
+
|
|
3
|
+
- **Input:** A short design-led unit, typically under 10s, with no narration, where motion is the message: kinetic type, stat/count-up, chart hit, logo sting, animated title, lower-third, map, tweet/headline/page highlight, or asset-fusion shot.
|
|
4
|
+
- **Output:** A short MP4 or transparent alpha WebM/MOV overlay.
|
|
5
|
+
- **Triggers:** "an 8s logo sting", "animate this stat", "kinetic-type intro", "animate this title", "transparent lower-third overlay".
|
|
6
|
+
|
|
7
|
+
## Interview
|
|
8
|
+
|
|
9
|
+
- Autonomous by design: at most **one** clarifying question, owned by its director step, in the flow. No must-haves here beyond confirming the input; route directly.
|
|
10
|
+
- **Run-shape:** neither — the piece is seconds long; a board and a companion session have nothing to add.
|
|
11
|
+
- **Front-door capability offer:** skip it. The director's one-question limit is authoritative.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Route: music-to-video
|
|
2
|
+
|
|
3
|
+
- **Input:** A music track, or a video whose audio becomes the track, with no narration or website capture. User images or videos are optional.
|
|
4
|
+
- **Output:** A beat-synced MP4 driven by a deterministic beat/energy map (`audiomap.json`). It may become a lyric video, slideshow, visualizer, or kinetic promo without changing pipelines.
|
|
5
|
+
- **Triggers:** "make a video for this song", "beat-synced video", "lyric video", "music visualizer", "kinetic promo to this beat".
|
|
6
|
+
|
|
7
|
+
## Interview
|
|
8
|
+
|
|
9
|
+
- **Must-haves:** the **music source** — a track file, a video to pull audio from, or generate one from a mood description · **destination → aspect**.
|
|
10
|
+
- **Deferred (announce):** brand (font + palette) and the genre feel are chosen at its Step 3 by design — they emerge from the track's analysis, not from a question up front.
|
|
11
|
+
- **Pitch round:** `message` — the visual concept riding the beat grid (lyric treatment, montage story, kinetic type); brand and genre feel still land at Step 3.
|
|
12
|
+
- **Run-shape:** both.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Route: pr-to-video
|
|
2
|
+
|
|
3
|
+
- **Input:** A GitHub PR URL, `owner/repo#N`, or "this PR", read through `gh`; it is not a website capture request.
|
|
4
|
+
- **Output:** A changelog, feature reveal, fix explainer, or refactor walkthrough with diff, before/after, file-tree, and impact scenes. Hard cap about 3 minutes; duration follows change size.
|
|
5
|
+
- **Triggers:** "make a video about this PR", "turn PR #1187 into a changelog video", "release-notes video from this pull request".
|
|
6
|
+
|
|
7
|
+
## Interview
|
|
8
|
+
|
|
9
|
+
- **Must-haves:** the **PR reference** (URL, `owner/repo#N`, or "this PR") · **angle** — changelog / feature-reveal / fix-explainer / refactor-walkthrough, recommend the one the PR itself suggests · **audience** — developers (default) · mixed technical · non-technical stakeholders · **length** — from the size table below · **destination** — 16:9 is the default for a code explainer.
|
|
10
|
+
- **Length comes from the PR's change size**, not a fixed guess — peek once, read-only (the workflow's Step 1 still does the full deterministic fetch):
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
gh pr view <PR_REF> --json title,additions,deletions,changedFiles
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Pick the tier from `additions + deletions` (nudged up by `changedFiles`) and lead with it (hard cap ~3 min):
|
|
17
|
+
|
|
18
|
+
| PR change size | Recommended length |
|
|
19
|
+
| --------------------------------- | ------------------ |
|
|
20
|
+
| trivial (≲ 50 lines changed) | ~20–40s |
|
|
21
|
+
| focused (~50–200 lines) | ~40–70s |
|
|
22
|
+
| substantial (~200–600 lines) | ~70–110s |
|
|
23
|
+
| large (≳ 600 lines, or 25+ files) | ~110–180s |
|
|
24
|
+
|
|
25
|
+
State the basis in one phrase ("~40s — small change, +44/−13 across 12 files"). The tier is a **ceiling** on how much story the diff can support, never a floor to fill: a one-headline story recommends inside 30–90s regardless of tier (the tier's range may still appear as a non-recommended fuller-walkthrough option).
|
|
26
|
+
|
|
27
|
+
- **Pitch round:** `angle` and the opening hook — the diff fixes the facts, not the telling.
|
|
28
|
+
- **Run-shape:** both.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Route: product-launch-video
|
|
2
|
+
|
|
3
|
+
- **Input:** A website URL; a script or brief that names a site; or a product-launch script with no derivable site or an explicit "do not scrape" instruction. Capture website assets and brand tokens unless the brief selects no-capture mode. Ask whether supplied script copy is verbatim voice-over or may be restructured.
|
|
4
|
+
- **Output:** A product promo, launch video, site tour, or showcase MP4. Sweet spot 30–90s; hard cap about 3 minutes. A show-it-as-is brief features captured screens rather than inventing a separate route.
|
|
5
|
+
- **Triggers:** "launch video for X", "promo for our site", "turn this script into a 60s promo", "text-only launch video", "turn this website into a video", "site tour from this URL".
|
|
6
|
+
|
|
7
|
+
## Interview
|
|
8
|
+
|
|
9
|
+
- **First, sell or show?** One question when the request doesn't say: market the product (a promo), or show the site as-is (a tour / showcase)? A show-it answer is **intent, not a different pipeline**: write it into `BRIEF.md` (`## Intent` / `## Customizations` — "feature the site's own captured screens as the video's assets") and the workflow's normal steps carry it — the captured screens become the featured `asset_candidates`.
|
|
10
|
+
- **Must-haves:** **angle** — story shapes from the site's / brief's own positioning, recommend one with its basis · **length** — 30–90s sweet spot, scaled to the material · **destination** — YouTube / embed → 16:9 · X / LinkedIn / Instagram feed → 1:1 · Shorts / TikTok → 9:16.
|
|
11
|
+
- **Conditional:** a show-it-as-is ask adds **what to show** — the whole site, or specific pages/sections (into `BRIEF.md`'s body); a pasted script/brief adds **`VO_MODE`** (verbatim or restructured?); a script that only names a site adds **capture?** — crawl it for brand + assets (default), or text-only / "don't scrape" (no-capture mode, a preset supplies the design system).
|
|
12
|
+
- **Pitch round:** `message` + `angle`, after sell-or-show is settled — the pitches inherit that intent.
|
|
13
|
+
- **Run-shape:** both.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Route: remotion-to-hyperframes
|
|
2
|
+
|
|
3
|
+
- **Input:** Existing Remotion React source, only when the user explicitly asks to port, convert, or migrate it. A passing Remotion mention is not a trigger.
|
|
4
|
+
- **Output:** A HyperFrames HTML composition translated from the source and compared with the Remotion render through the migration evaluation harness.
|
|
5
|
+
- **Triggers:** "port my Remotion project", "convert this Remotion composition", "migrate from Remotion".
|
|
6
|
+
|
|
7
|
+
## Interview
|
|
8
|
+
|
|
9
|
+
- Not served by the intent layer — a migration with no brief. Route directly.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Route: slideshow
|
|
2
|
+
|
|
3
|
+
- **Input:** A brief, outline, or existing page to author as a presentation, pitch deck, or interactive deck. If "slides", "deck", or "convert this page" is ambiguous, confirm that the user wants a HyperFrames slideshow before authoring.
|
|
4
|
+
- **Output:** A runnable HyperFrames composition plus the JSON island used by `SlideshowController`: discrete slides, fragment reveals, branching, hotspots, presenter mode, and speaker notes. The deliverable is a navigable deck, not an MP4.
|
|
5
|
+
- **Triggers:** "make a pitch deck", "interactive presentation", "convert this page into slides", "slideshow with presenter mode".
|
|
6
|
+
|
|
7
|
+
## Interview
|
|
8
|
+
|
|
9
|
+
- The one question is the routing confirmation itself — "do you want this as a HyperFrames slideshow?" — asked during triage (it survives every mode: wrong routing is a quality problem). The deck contract owns everything after.
|
|
10
|
+
- **Run-shape:** neither — the deliverable is a navigable deck, not a rendered video.
|
|
11
|
+
- **Front-door capability offer:** skip it. After route confirmation, the deck workflow owns all remaining choices.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Route: talking-head-recut
|
|
2
|
+
|
|
3
|
+
- **Input:** Existing talking-head, interview, or podcast footage to package. The underlying clip plays unchanged.
|
|
4
|
+
- **Output:** The same footage with transcript-synced graphic-overlay cards: kinetic titles, lower-thirds, data callouts, pull-quotes, side panels, or picture-in-picture. Any length.
|
|
5
|
+
- **Triggers:** "package this video", "add graphic overlays to my talk", "add lower-thirds or data callouts to this interview".
|
|
6
|
+
|
|
7
|
+
## Interview
|
|
8
|
+
|
|
9
|
+
- **Must-haves:** which clip (the input file).
|
|
10
|
+
- **Deferred (announce):** its render-strategy questions — aspect ratio, layout, style group, card count — stay at its Step 7, where the recommendations come from the probed footage and transcript. Say they're coming.
|
|
11
|
+
- **Run-shape:** neither.
|
|
@@ -1,70 +1,10 @@
|
|
|
1
|
-
# Workflow catalog
|
|
1
|
+
# Workflow catalog (moved)
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Each workflow's input/output/trigger contract now lives in its own route file — one
|
|
4
|
+
small read per candidate instead of a whole catalog:
|
|
4
5
|
|
|
5
|
-
|
|
6
|
+
`references/routes/<workflow>.md` — e.g. `routes/product-launch-video.md`,
|
|
7
|
+
`routes/general-video.md`, `routes/remotion-to-hyperframes.md`.
|
|
6
8
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
- [`/motion-graphics`](#motion-graphics), [`/music-to-video`](#music-to-video), [`/slideshow`](#slideshow)
|
|
10
|
-
- [`/general-video`](#general-video), [`/remotion-to-hyperframes`](#remotion-to-hyperframes)
|
|
11
|
-
|
|
12
|
-
## `/product-launch-video`
|
|
13
|
-
|
|
14
|
-
- **Input:** A website URL; a script or brief that names a site; or a product-launch script with no derivable site or an explicit “do not scrape” instruction. Capture website assets and brand tokens unless the brief selects no-capture mode. Ask whether supplied script copy is verbatim voice-over or may be restructured.
|
|
15
|
-
- **Output:** A product promo, launch video, site tour, or showcase MP4. Sweet spot 30–90s; hard cap about 3 minutes. A show-it-as-is brief features captured screens rather than inventing a separate route.
|
|
16
|
-
- **Triggers:** “launch video for X”, “promo for our site”, “turn this script into a 60s promo”, “text-only launch video”, “turn this website into a video”, “site tour from this URL”.
|
|
17
|
-
|
|
18
|
-
## `/faceless-explainer`
|
|
19
|
-
|
|
20
|
-
- **Input:** A topic, article, notes, or arbitrary text being explained, with no product being marketed and no website to capture.
|
|
21
|
-
- **Output:** A faceless explainer MP4 with invented typography, abstract graphics, diagrams, or data visualization. Sweet spot 30–90s; hard cap about 3 minutes.
|
|
22
|
-
- **Triggers:** “faceless explainer about X”, “explain how DNS works as a video”, “turn this article into an explainer”.
|
|
23
|
-
|
|
24
|
-
## `/pr-to-video`
|
|
25
|
-
|
|
26
|
-
- **Input:** A GitHub PR URL, `owner/repo#N`, or “this PR”, read through `gh`; it is not a website capture request.
|
|
27
|
-
- **Output:** A changelog, feature reveal, fix explainer, or refactor walkthrough with diff, before/after, file-tree, and impact scenes. Hard cap about 3 minutes; duration follows change size.
|
|
28
|
-
- **Triggers:** “make a video about this PR”, “turn PR #1187 into a changelog video”, “release-notes video from this pull request”.
|
|
29
|
-
|
|
30
|
-
## `/embedded-captions`
|
|
31
|
-
|
|
32
|
-
- **Input:** Existing talking-head footage to caption. It is an actual media file, not a URL or creative brief.
|
|
33
|
-
- **Output:** The same footage, untouched, with a caption layer and selected caption identity. The subject may occlude embedded captions. Any length.
|
|
34
|
-
- **Triggers:** “add captions”, “add subtitles”, “captions behind the subject”, “cinematic captions for my clip”.
|
|
35
|
-
|
|
36
|
-
## `/talking-head-recut`
|
|
37
|
-
|
|
38
|
-
- **Input:** Existing talking-head, interview, or podcast footage to package. The underlying clip plays unchanged.
|
|
39
|
-
- **Output:** The same footage with transcript-synced graphic-overlay cards: kinetic titles, lower-thirds, data callouts, pull-quotes, side panels, or picture-in-picture. Any length.
|
|
40
|
-
- **Triggers:** “package this video”, “add graphic overlays to my talk”, “add lower-thirds or data callouts to this interview”.
|
|
41
|
-
|
|
42
|
-
## `/motion-graphics`
|
|
43
|
-
|
|
44
|
-
- **Input:** A short design-led unit, typically under 10s, with no narration, where motion is the message: kinetic type, stat/count-up, chart hit, logo sting, animated title, lower-third, map, tweet/headline/page highlight, or asset-fusion shot.
|
|
45
|
-
- **Output:** A short MP4 or transparent alpha WebM/MOV overlay.
|
|
46
|
-
- **Triggers:** “an 8s logo sting”, “animate this stat”, “kinetic-type intro”, “animate this title”, “transparent lower-third overlay”.
|
|
47
|
-
|
|
48
|
-
## `/music-to-video`
|
|
49
|
-
|
|
50
|
-
- **Input:** A music track, or a video whose audio becomes the track, with no narration or website capture. User images or videos are optional.
|
|
51
|
-
- **Output:** A beat-synced MP4 driven by a deterministic beat/energy map (`audiomap.json`). It may become a lyric video, slideshow, visualizer, or kinetic promo without changing pipelines.
|
|
52
|
-
- **Triggers:** “make a video for this song”, “beat-synced video”, “lyric video”, “music visualizer”, “kinetic promo to this beat”.
|
|
53
|
-
|
|
54
|
-
## `/slideshow`
|
|
55
|
-
|
|
56
|
-
- **Input:** A brief, outline, or existing page to author as a presentation, pitch deck, or interactive deck. If “slides”, “deck”, or “convert this page” is ambiguous, confirm that the user wants a HyperFrames slideshow before authoring.
|
|
57
|
-
- **Output:** A runnable HyperFrames composition plus the JSON island used by `SlideshowController`: discrete slides, fragment reveals, branching, hotspots, presenter mode, and speaker notes. The deliverable is a navigable deck, not an MP4.
|
|
58
|
-
- **Triggers:** “make a pitch deck”, “interactive presentation”, “convert this page into slides”, “slideshow with presenter mode”.
|
|
59
|
-
|
|
60
|
-
## `/general-video`
|
|
61
|
-
|
|
62
|
-
- **Input:** Any custom creation or edit not covered above: a static title card, longer brand or sizzle reel, multi-scene montage, static loop/poster, NLE-like footage remix, or freeform composition. It also executes every `flow: companion` brief.
|
|
63
|
-
- **Output:** A HyperFrames composition of any length or format through design → plan → static layout → animation → check → approval → render.
|
|
64
|
-
- **Triggers:** “make a static title card”, “longer brand reel”, “multi-scene composition”, “static loop”, “custom video”, or any unmatched video request.
|
|
65
|
-
|
|
66
|
-
## `/remotion-to-hyperframes`
|
|
67
|
-
|
|
68
|
-
- **Input:** Existing Remotion React source, only when the user explicitly asks to port, convert, or migrate it. A passing Remotion mention is not a trigger.
|
|
69
|
-
- **Output:** A HyperFrames HTML composition translated from the source and compared with the Remotion render through the migration evaluation harness.
|
|
70
|
-
- **Triggers:** “port my Remotion project”, “convert this Remotion composition”, “migrate from Remotion”.
|
|
9
|
+
The same file carries that route's interview entry (must-haves, conditionals, deferred
|
|
10
|
+
asks, run-shape), so confirming a route is exactly one read.
|
|
@@ -31,6 +31,18 @@ Common issues:
|
|
|
31
31
|
- **Missing FFmpeg** — install via `brew install ffmpeg` (macOS) or your package manager.
|
|
32
32
|
- **Missing bundled Chrome** — run `npx hyperframes browser ensure`.
|
|
33
33
|
- **Low memory** — close other Chromes, reduce `--workers`, or use `--quality draft`.
|
|
34
|
+
- **Chrome exits instantly inside an agent sandbox (macOS)** — seatbelt-style sandboxes
|
|
35
|
+
(e.g. codex `workspace-write`) block Chromium's Mach port bootstrap
|
|
36
|
+
(`MachPortRendezvous`; openai/codex#21292), so every Chrome — bundled, system, or
|
|
37
|
+
headless shell — dies at startup. This is a host-level block, not a HyperFrames or
|
|
38
|
+
Chrome install problem: compile checks and audio still pass, only rendering is
|
|
39
|
+
unavailable. State the blocker and deliver the checked composition; render outside the
|
|
40
|
+
sandbox or via `render --docker` / cloud rendering where available. **Do not build a
|
|
41
|
+
substitute rasterizer** (magick/PIL/SVG frame pipelines) — on a blocked-browser host
|
|
42
|
+
the deliverable IS the checked composition plus this blocker note, and rendering is
|
|
43
|
+
handed to `--docker`, cloud, or the user. Write your final summary the moment the
|
|
44
|
+
blocker is identified, BEFORE any optional fallback work: a later session failure must
|
|
45
|
+
not erase the report of work already done.
|
|
34
46
|
|
|
35
47
|
## browser
|
|
36
48
|
|
package/dist/studio/assets/{hyperframes-player-D4jpio27.js → hyperframes-player-BiCGkoKi.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var ce=Object.defineProperty;var pe=(r,t,e)=>t in r?ce(r,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):r[t]=e;var c=(r,t,e)=>pe(r,typeof t!="symbol"?t+"":t,e);import{r as ne,i as me,a as fe}from"./index-
|
|
1
|
+
var ce=Object.defineProperty;var pe=(r,t,e)=>t in r?ce(r,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):r[t]=e;var c=(r,t,e)=>pe(r,typeof t!="symbol"?t+"":t,e);import{r as ne,i as me,a as fe}from"./index-wCPvBGsm.js";function _e(r){return r.hasRuntime||r.runtimeInjected?!1:!!(r.hasNestedCompositions||r.hasTimelines&&r.attempts>=5)}function F(r){return typeof r=="object"&&r!==null}function ge(r){return F(r)&&typeof r.getDuration=="function"}function ye(r){return F(r)&&typeof r.duration=="function"&&typeof r.time=="function"&&typeof r.seek=="function"&&typeof r.play=="function"&&typeof r.pause=="function"}function ve(r){if(!/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/.test(r))throw new Error(`Invalid HyperFrames runtime version: ${r}`);return`https://cdn.jsdelivr.net/npm/@hyperframes/core@${r}/dist/hyperframe.runtime.iife.js`}const be=typeof __HYPERFRAMES_RUNTIME_CDN_URL__=="string"?__HYPERFRAMES_RUNTIME_CDN_URL__:ve("0.0.0-dev");function H(r){if(r===null)return null;const t=Number.parseInt(r,10);return Number.isFinite(t)&&t>0?t:null}function we(r){const t=(r==null?void 0:r.querySelector("[data-composition-id][data-width][data-height]"))??(r==null?void 0:r.querySelector("[data-width][data-height]"));if(!t)return null;const e=H(t.getAttribute("data-width")),i=H(t.getAttribute("data-height"));return e!==null&&i!==null?{width:e,height:i}:null}class Ae{constructor(t,e){c(this,"_interval",null);c(this,"_runtimeInjected",!1);this._iframe=t,this._callbacks=e}get runtimeInjected(){return this._runtimeInjected}start(){this.stop(),this._runtimeInjected=!1;let t=0;this._interval=setInterval(()=>{var e;t++;try{const i=this._iframe.contentWindow;if(!i)return;const s=!!(i.__hf||i.__player),o=!!(i.__timelines&&Object.keys(i.__timelines).length>0),d=!!((e=this._iframe.contentDocument)!=null&&e.querySelector("[data-composition-src]"));if(_e({hasRuntime:s,hasTimelines:o,hasNestedCompositions:d,runtimeInjected:this._runtimeInjected,attempts:t})){this._injectRuntime();return}if(this._runtimeInjected&&!s)return;const a=this._resolvePlaybackDurationAdapter(i);if(a&&a.getDuration()>0){this.stop();const h=we(this._iframe.contentDocument);this._callbacks.onReady({duration:a.getDuration(),adapter:a,compositionSize:h});return}}catch{}t>=40&&(this.stop(),this._callbacks.onError("Composition timeline not found after 8s"))},200)}stop(){this._interval!==null&&(clearInterval(this._interval),this._interval=null)}resolveDirectTimelineAdapter(){try{const t=this._iframe.contentWindow;return t?this._resolveDirectTimelineAdapterFromWindow(t):null}catch{return null}}resolveDirectTimelineAdapterFromWindow(t){return this._resolveDirectTimelineAdapterFromWindow(t)}hasRuntimeBridge(t){return Reflect.get(t,"__hf")!==void 0||F(Reflect.get(t,"__player"))}_injectRuntime(){var t,e;this._runtimeInjected=!0;try{const i=this._iframe.contentDocument;if(!i)return;const s=i.createElement("script");s.src=be,(i.head||i.documentElement).appendChild(s),(e=(t=this._callbacks).onRuntimeInjected)==null||e.call(t)}catch{}}_resolveDirectTimelineAdapterFromWindow(t){var a,h;if(this.hasRuntimeBridge(t))return null;const e=Reflect.get(t,"__timelines");if(!F(e))return null;const i=Object.keys(e);if(i.length===0)return null;const s=(h=(a=this._iframe.contentDocument)==null?void 0:a.querySelector("[data-composition-id]"))==null?void 0:h.getAttribute("data-composition-id"),o=s&&s in e?s:i[i.length-1],d=e[o];return ye(d)?d:null}_resolvePlaybackDurationAdapter(t){const e=Reflect.get(t,"__player");if(ge(e))return{kind:"runtime",getDuration:()=>e.getDuration()};const i=this._resolveDirectTimelineAdapterFromWindow(t);return i?{kind:"direct-timeline",timeline:i,getDuration:()=>i.duration()}:null}}const Ee=`
|
|
2
2
|
:host {
|
|
3
3
|
display: block;
|
|
4
4
|
position: relative;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{g as P}from"./index-
|
|
1
|
+
import{g as P}from"./index-wCPvBGsm.js";function j(c,d){for(var s=0;s<d.length;s++){const a=d[s];if(typeof a!="string"&&!Array.isArray(a)){for(const i in a)if(i!=="default"&&!(i in c)){const l=Object.getOwnPropertyDescriptor(a,i);l&&Object.defineProperty(c,i,l.get?l:{enumerable:!0,get:()=>a[i]})}}}return Object.freeze(Object.defineProperty(c,Symbol.toStringTag,{value:"Module"}))}var v={},w;function k(){if(w)return v;w=1,Object.defineProperty(v,"__esModule",{value:!0}),v.default=d;var c=window.OfflineAudioContext||window.webkitOfflineAudioContext;function d(e){var r=a(e);return r.start(0),[i,y,O(e.sampleRate),s].reduce(function(t,o){return o(t)},r.buffer.getChannelData(0))}function s(e){return e.sort(function(r,t){return t.count-r.count}).splice(0,5)[0].tempo}function a(e){var r=e.length,t=e.numberOfChannels,o=e.sampleRate,n=new c(t,r,o),u=n.createBufferSource();u.buffer=e;var f=n.createBiquadFilter();return f.type="lowpass",u.connect(f),f.connect(n.destination),u}function i(e){for(var r=[],t=.9,o=.3,n=15;r.length<n&&t>=o;)r=l(e,t),t-=.05;if(r.length<n)throw new Error("Could not find enough samples for a reliable detection.");return r}function l(e,r){for(var t=[],o=0,n=e.length;o<n;o+=1)e[o]>r&&(t.push(o),o+=1e4);return t}function y(e){var r=[];return e.forEach(function(t,o){for(var n=function(x){var g=e[o+x]-t,_=r.some(function(h){if(h.interval===g)return h.count+=1});_||r.push({interval:g,count:1})},u=0;u<10;u+=1)n(u)}),r}function O(e){return function(r){var t=[];return r.forEach(function(o){if(o.interval!==0){for(var n=60/(o.interval/e);n<90;)n*=2;for(;n>180;)n/=2;n=Math.round(n);var u=t.some(function(f){if(f.tempo===n)return f.count+=o.count});u||t.push({tempo:n,count:o.count})}}),t}}return v}var p,b;function q(){return b||(b=1,p=k().default),p}var m=q();const A=P(m),D=j({__proto__:null,default:A},[m]);export{D as i};
|