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.
@@ -9,7 +9,7 @@
9
9
  "name": "luckiest",
10
10
  "source": "./",
11
11
  "description": "Plan, go, finish, plus bundled free Luckiest skills that work in Claude Code, web chat, and Cowork.",
12
- "version": "0.1.26",
12
+ "version": "0.1.27",
13
13
  "author": { "name": "Luckiest" }
14
14
  }
15
15
  ]
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "luckiest",
3
3
  "description": "Plan, go, finish. Guided planning, progress dashboards, and your luckiest.co tribe inside Claude Code.",
4
- "version": "0.1.26",
4
+ "version": "0.1.27",
5
5
  "author": { "name": "Luckiest" }
6
6
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "luckiest-co",
3
- "version": "1.0.27",
3
+ "version": "1.0.28",
4
4
  "description": "Luckiest for Claude Code: plan, go, finish. Your luckiest.co skills and tribe, inside Claude.",
5
5
  "bin": {
6
6
  "luckiest-co": "./bin/install.js"
@@ -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.1"
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.1" }`. If it returns
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.1", matched: true, success: <true if the skill completed, false otherwise> }`.
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, render it alone
55
- at draft quality, and grab its hold frame. Use HyperFrames directly here, because
56
- `render-scenes.mjs` expects every scene's composition to exist:
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 render -c compositions/<hook-id>.html -o ../storyboard/style-frame.mp4 --quality draft
61
- ffmpeg -ss <hold-seconds> -i ../storyboard/style-frame.mp4 -frames:v 1 ../storyboard/style-frame.png
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