luckiest-co 1.0.27 → 1.0.28
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/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/package.json +1 -1
- package/skills/luckiest-video-studio/CHANGELOG.md +5 -0
- package/skills/luckiest-video-studio/SKILL.md +3 -3
- package/skills/luckiest-video-studio/references/step-2b-storyboard.md +17 -5
- package/skills/luckiest-video-studio/references/step-3-compose.md +12 -0
package/package.json
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
# Changelog — luckiest-video-studio
|
|
2
2
|
|
|
3
|
+
## 1.7.2 (2026-10-05)
|
|
4
|
+
From a real luckiest.co launch video run end to end (storyboard approvals, render, QA gates, Concat export matching the render at 58 dB PSNR):
|
|
5
|
+
- Step 2b: capture live site pages with headless Chrome (wait budget, crop out cookie banners); the style frame is now a `hyperframes snapshot` still, no video render.
|
|
6
|
+
- Step 3: the project layout HyperFrames 0.8 needs: root `index.html` hosts every scene, per-scene files with their own composition id, assets and fonts under `composition/assets/` with root-relative paths, no named font fallbacks, ids on timed elements, and a one-pass hold-frame snapshot before the full render.
|
|
7
|
+
|
|
3
8
|
## 1.7.1 (2026-10-04)
|
|
4
9
|
- `assemble-concat.mjs` tested end to end against Concat 0.2.5. Fixes found by the
|
|
5
10
|
live run and by reading Concat's source: progress events between replies no
|
|
@@ -4,7 +4,7 @@ description: "Make product launch videos, product demos with motion design betwe
|
|
|
4
4
|
license: See ATTRIBUTION.md
|
|
5
5
|
allowed-tools: Bash, Read, Write, Edit, Glob, Grep, AskUserQuestion
|
|
6
6
|
metadata:
|
|
7
|
-
version: "1.7.
|
|
7
|
+
version: "1.7.2"
|
|
8
8
|
listing_id: luckiest-video-studio
|
|
9
9
|
author: luckiest
|
|
10
10
|
---
|
|
@@ -19,13 +19,13 @@ an MP4.
|
|
|
19
19
|
## Staying current
|
|
20
20
|
|
|
21
21
|
On activation, call the Luckiest MCP `check_updates` tool with
|
|
22
|
-
`{ listingId: "aff888e4-9ee9-4f73-af08-74d5d09d3c10", installedSemver: "1.7.
|
|
22
|
+
`{ listingId: "aff888e4-9ee9-4f73-af08-74d5d09d3c10", installedSemver: "1.7.2" }`. If it returns
|
|
23
23
|
`upToDate: false`, surface the `notice` to the user once, then continue. Do nothing
|
|
24
24
|
further if `upToDate: true`. Never block on this check; if the tool is unavailable,
|
|
25
25
|
proceed.
|
|
26
26
|
|
|
27
27
|
When the skill's work is done, call the Luckiest MCP `report_usage` tool once with
|
|
28
|
-
`{ listing_id: "luckiest-video-studio", skill_version: "1.7.
|
|
28
|
+
`{ listing_id: "luckiest-video-studio", skill_version: "1.7.2", matched: true, success: <true if the skill completed, false otherwise> }`.
|
|
29
29
|
Metadata only, never prompt text. Never block on it; if the tool is unavailable,
|
|
30
30
|
skip silently.
|
|
31
31
|
|
|
@@ -17,6 +17,18 @@ screen and put each file in `<output-dir>/assets/`:
|
|
|
17
17
|
- Demo footage the scene will play (`demo/`), as a single frame grab:
|
|
18
18
|
`ffmpeg -ss <in> -i <file> -frames:v 1 assets/<scene-id>-demo.png`.
|
|
19
19
|
|
|
20
|
+
To capture a page of the user's live site, headless Chrome works with no install:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" --headless=new --hide-scrollbars \
|
|
24
|
+
--window-size=1920,1400 --virtual-time-budget=25000 --screenshot=<abs-path>.png "<url>"
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Read the screenshot before using it. Pages that load data late come back empty
|
|
28
|
+
with a short budget, so raise `--virtual-time-budget`. Crop with ffmpeg
|
|
29
|
+
(`-vf crop=w:h:x:y`) to the part the scene shows, and keep cookie banners, promo
|
|
30
|
+
bars, and anything personal out of the crop.
|
|
31
|
+
|
|
20
32
|
Every file must exist on disk before the board is shown. Never show a placeholder
|
|
21
33
|
as if it were the real asset.
|
|
22
34
|
|
|
@@ -51,14 +63,14 @@ in `storyboard.json`.
|
|
|
51
63
|
|
|
52
64
|
## 4. Approve one style frame
|
|
53
65
|
|
|
54
|
-
Build only the hook scene (the first scene) as Step 3 describes,
|
|
55
|
-
|
|
56
|
-
|
|
66
|
+
Build only the hook scene (the first scene) as Step 3 describes, with the root
|
|
67
|
+
`index.html` hosting just that scene for now, pass `hyperframes check`, and capture
|
|
68
|
+
its hold frame as a still. No video render is needed:
|
|
57
69
|
|
|
58
70
|
```bash
|
|
59
71
|
cd <output-dir>/composition
|
|
60
|
-
npx hyperframes
|
|
61
|
-
|
|
72
|
+
npx hyperframes snapshot . --at <hold-seconds> --no-end -o ../storyboard/snap
|
|
73
|
+
cp ../storyboard/snap/frame-00-*.png ../storyboard/style-frame.png
|
|
62
74
|
```
|
|
63
75
|
|
|
64
76
|
Show the frame and ask: "Does this look right for the whole video?" with the
|
|
@@ -192,6 +192,18 @@ After `<output-dir>/plan.md`, `<output-dir>/composition-brief.md`, and selected
|
|
|
192
192
|
|
|
193
193
|
Do not manually copy stale composition snippets from this skill into the output. The point of delegating is to benefit from the latest Hyperframes guidance.
|
|
194
194
|
|
|
195
|
+
### Project layout that passes check and `render-scenes.mjs`
|
|
196
|
+
|
|
197
|
+
Learned on a real run with HyperFrames 0.8.x:
|
|
198
|
+
|
|
199
|
+
- Scaffold with `hyperframes init composition --example blank --resolution <landscape|portrait|square> --non-interactive` inside `<output-dir>`.
|
|
200
|
+
- One file per scene at `composition/compositions/<scene-id>.html`, each a full composition with its own `data-composition-id="<scene-id>"` and a paused timeline registered as `window.__timelines["<scene-id>"]`. `render-scenes.mjs` renders these one at a time.
|
|
201
|
+
- The root `composition/index.html` must host every scene back to back: `<div id="scene-<id>" class="clip" data-composition-id="<id>" data-composition-src="compositions/<id>.html" data-start=".." data-duration="..">`. A root with no scenes fails `check` with "Timeline did not advance under seek".
|
|
202
|
+
- Copy every approved asset into `composition/assets/`, and reference it as `assets/...` from the project root, never `../`.
|
|
203
|
+
- Fonts: declare each family with `@font-face` pointing at a local file in `composition/assets/fonts/`. Leave out named fallbacks such as Georgia; HyperFrames maps them to a Google font and fetches it.
|
|
204
|
+
- Give every timed element an `id`, or check warns that Studio cannot edit it.
|
|
205
|
+
- Before the full render, check every scene's hold frame in one pass: `hyperframes snapshot . --at <hold1>,<hold2>,... --no-end -o ../qa/holds`, then read `qa/holds/contact-sheet.jpg`.
|
|
206
|
+
|
|
195
207
|
---
|
|
196
208
|
|
|
197
209
|
## Self-review checklist
|