You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Captures a live URL as an editable HyperFrames project: screenshots become layered scenes, assets are downloaded locally, and the result is a normal project you can `lint` / `preview` / `render`. Use this when the user supplies a URL as the starting point for a video.
45
47
48
+
`--timeout` bounds page navigation; `--capture-budget` is the separate cooperative budget for work
49
+
after navigation (fonts, assets, vision, and contact sheets). The latter is not a hard wall-clock
50
+
watchdog and cannot interrupt native work already in flight. An outer caller deadline is therefore a
51
+
third, distinct timeout. An outer caller timeout leaves the capture result unknown; it does not prove
52
+
HyperFrames hung or that the navigation timeout should be increased. Preserve the last phase and
53
+
classify the boundary that fired. `--skip-vision` disables only optional AI image captioning.
54
+
55
+
For agents, use `--json`. The result includes `ok`, warnings, and `lastPhase`. The command also emits
56
+
stable `HYPERFRAMES_CAPTURE_PHASE` records so a watchdog can report the last started, completed, or
57
+
degraded phase without retaining sensitive payloads.
58
+
59
+
Treat a non-zero exit, JSON `ok: false`, or an output `BLOCKED.md` as a **hard stop**. Do not render,
60
+
build, or infer brand/design data from partial files in a blocked capture. A successful capture may
61
+
degrade an optional phase within budget, but its structural output still has to satisfy the owning
62
+
workflow's gate. Exit zero and file existence alone are not semantic success: require the current
63
+
invocation's JSON `ok: true`, no `BLOCKED.md`, and artifacts usable for that workflow. Run each retry
64
+
into a fresh output directory; never merge or reuse a blocked attempt's partial output.
Copy file name to clipboardExpand all lines: skills/product-launch-video/SKILL.md
+23-3Lines changed: 23 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -52,15 +52,35 @@ Goal: Collect the source material, brand signals, and usable assets for the vide
52
52
53
53
Classify the input and choose the path. Explicit URL -> capture it and use the site for narration and assets. Pasted script/brief -> save verbatim as `user_script.txt`; `VO_MODE` (verbatim or restructured) comes from `BRIEF.md` — the intent layer asks it when a script arrives (ask once here only if the brief somehow lacks it). Then resolve capture target: URL in text -> use it; brand name only -> `WebSearch`, confirm URL in one line, then crawl; no URL/site (or the brief says don't scrape) -> no-capture path.
54
54
55
-
Run capture with: `npx hyperframes capture "<URL>" -o ./capture`
55
+
Run capture with: `npx hyperframes capture "<URL>" -o ./capture --json`. Keep the default
56
+
post-navigation budget unless the caller owns a smaller deadline; then pass a positive
57
+
`--capture-budget <milliseconds>` that leaves time for downstream work. `--timeout` controls page
58
+
navigation only. Use `--skip-vision` only when optional image captioning is intentionally disabled.
56
59
57
-
For a site tour or show-it-as-is brief, the captured page is the visual source of truth. Use the real screenshot instead of rebuilding the full website in HTML. If the shot needs internal movement, keep the screenshot as the base and overlay real captured assets at measured positions, or rebuild only the one component that moves. For a scroll shot, animate the viewport over `capture/screenshots/full-page.png` — the 1x plate of the whole document, pixel-exact for a 1920-wide viewport travelling down it. It is absent when the page was too tall to capture in one piece; fall back to the overlapping scroll-position shots in the same directory. Pushing in past 1:1 wants its own 2x capture of that region instead, since the plate has no headroom above 1x. Recreate the whole page only when the user explicitly asks for a stylized interpretation or the capture is unusable.
60
+
Inspect the command result and output directory immediately. A non-zero exit, JSON `ok: false`, or
61
+
`capture/BLOCKED.md` is a **hard stop** for the capture path: report the recorded reason and do not
62
+
consume partial screenshots, DOM, tokens, or assets. Do not manufacture a synthetic no-capture
63
+
fallback after a failed URL capture. Continue through the no-capture path only when the original
64
+
brief supplied the source material, or when the user explicitly switches to a provided screenshot
65
+
or brief after the failure.
66
+
67
+
Warnings such as `very little text content` together with an empty asset catalog are not proof of a
68
+
usable page. For a site tour or show-it-as-is brief, require trustworthy captured structure or a
69
+
provided screenshot; if neither exists, stop. Do not invent or rebuild the page merely because the
70
+
capture is unusable.
71
+
72
+
For a site tour or show-it-as-is brief, the captured page is the visual source of truth. Use the real screenshot instead of rebuilding the full website in HTML. If the shot needs internal movement, keep the screenshot as the base and overlay real captured assets at measured positions, or rebuild only the one component that moves. For a scroll shot, animate the viewport over `capture/screenshots/full-page.png` — the 1x plate of the whole document, pixel-exact for a 1920-wide viewport travelling down it. It is absent when the page was too tall to capture in one piece; fall back to the overlapping scroll-position shots in the same directory. Pushing in past 1:1 wants its own 2x capture of that region instead, since the plate has no headroom above 1x. Recreate the whole page only when the user explicitly asks for a stylized interpretation; an unusable capture alone is not authorization.
58
73
59
74
If `GEMINI_API_KEY`, `GOOGLE_API_KEY`, or an OpenRouter key exists, capture auto-captions assets into `capture/extracted/asset-descriptions.md`. This is not a review gate. Without a vision key, use DOM context and continue.
60
75
61
76
No-capture path: create `capture/extracted/tokens.json`, `capture/extracted/visible-text.txt`, `capture/extracted/asset-descriptions.md`, and `capture/assets/` by hand. `tokens.json` should be `{ "title": "", "description": "", "colors": [], "fonts": [] }`; fill title/description from the brief when possible. `visible-text.txt` contains the full brief or script. `asset-descriptions.md` should say no assets were captured unless the user gave asset notes.
62
77
63
-
**Gate:**`capture/extracted/tokens.json`, `capture/extracted/visible-text.txt`, `capture/extracted/asset-descriptions.md`, and `capture/assets/` exist; you can state the brand in one clear sentence. Treat `asset-descriptions.md` as the main asset inventory. If it is missing after real capture, stop and report capture incomplete. If `capture/BLOCKED.md` exists, follow it.
78
+
**Gate:** capture JSON reported `ok: true`; `capture/BLOCKED.md` does not exist;
0 commit comments