luckiest-co 1.0.31 → 1.0.32
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-brandkit/CHANGELOG.md +8 -0
- package/skills/luckiest-brandkit/SKILL.md +10 -3
- package/skills/luckiest-brandkit-sizing/CHANGELOG.md +13 -0
- package/skills/luckiest-brandkit-sizing/SKILL.md +126 -0
- package/skills/luckiest-brandkit-sizing/references/signage-and-print.md +60 -0
- package/skills/luckiest-video-studio/ATTRIBUTION.md +2 -1
- package/skills/luckiest-video-studio/CHANGELOG.md +10 -0
- package/skills/luckiest-video-studio/SECURITY.md +5 -2
- package/skills/luckiest-video-studio/SKILL.md +39 -27
- package/skills/luckiest-video-studio/references/concat.md +3 -2
- package/skills/luckiest-video-studio-cuts/ATTRIBUTION.md +5 -4
- package/skills/luckiest-video-studio-cuts/CHANGELOG.md +6 -0
- package/skills/luckiest-video-studio-cuts/SKILL.md +19 -11
- package/skills/luckiest-video-studio-cuts/scripts/build-cuts-reel.mjs +63 -0
- package/skills/luckiest-video-studio-cuts/scripts/build-cuts-reel.test.mjs +35 -0
- package/skills/luckiest-video-studio-review/ATTRIBUTION.md +50 -0
- package/skills/luckiest-video-studio-review/CHANGELOG.md +44 -0
- package/skills/luckiest-video-studio-review/LICENSE-motion-os +21 -0
- package/skills/luckiest-video-studio-review/SKILL.md +125 -0
- package/skills/luckiest-video-studio-review/editor/index.html +885 -0
- package/skills/luckiest-video-studio-review/editor/serve.mjs +111 -0
- package/skills/luckiest-video-studio-review/references/apply-feedback.md +71 -0
- package/skills/luckiest-video-studio-review/scripts/build-reel.mjs +96 -0
- package/skills/luckiest-video-studio-review/scripts/build-reel.test.mjs +62 -0
- package/skills/luckiest-video-studio-cuts/scripts/build-edl-review.mjs +0 -114
package/package.json
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# Changelog — luckiest-brandkit
|
|
2
2
|
|
|
3
|
+
## 1.5.0 — 2026-10-07
|
|
4
|
+
- New sub-skill `luckiest-brandkit-sizing` for real logo size and placement on
|
|
5
|
+
apparel, hats, bags, stationery, and signage.
|
|
6
|
+
- Step 2: every merch, stationery, and signage shot states the logo's placement
|
|
7
|
+
and real size in its COMPOSITION line.
|
|
8
|
+
- Step 7: QA checks the logo's size against the product and fixes it by
|
|
9
|
+
regenerating or compositing at the planned height.
|
|
10
|
+
|
|
3
11
|
## 1.4.0 — 2026-10-06
|
|
4
12
|
- Raws are generated at the image tool's smallest, fastest setting (for example
|
|
5
13
|
1K) so the first pass is quick. The size is locked in `prompts.md`.
|
|
@@ -19,7 +19,7 @@ argument-hint: "[shot list or brief] [--shots 01,04,06] [--out .luckiest/shots]"
|
|
|
19
19
|
user-invocable: true
|
|
20
20
|
allowed-tools: Bash, Read, Write, Edit, Glob, Grep, AskUserQuestion
|
|
21
21
|
metadata:
|
|
22
|
-
version: "1.
|
|
22
|
+
version: "1.5.0"
|
|
23
23
|
listing_id: luckiest-brandkit
|
|
24
24
|
author: luckiest
|
|
25
25
|
---
|
|
@@ -33,11 +33,11 @@ retouch-erase, and file upload), plus five local scripts in `scripts/`.
|
|
|
33
33
|
## Staying current
|
|
34
34
|
|
|
35
35
|
On activation, call the Luckiest MCP `check_updates` tool with
|
|
36
|
-
`{ listingId: "luckiest-brandkit", installedSemver: "1.
|
|
36
|
+
`{ listingId: "luckiest-brandkit", installedSemver: "1.5.0" }`. If
|
|
37
37
|
`upToDate: false`, surface the `notice` once and continue. Never block on it.
|
|
38
38
|
|
|
39
39
|
When done, call `report_usage` once with
|
|
40
|
-
`{ listing_id: "luckiest-brandkit", skill_version: "1.
|
|
40
|
+
`{ listing_id: "luckiest-brandkit", skill_version: "1.5.0", matched: true, success: <true|false> }`.
|
|
41
41
|
Metadata only, never prompt text. Skip silently if unavailable.
|
|
42
42
|
|
|
43
43
|
## Output layout
|
|
@@ -62,6 +62,7 @@ Never commit `<out>` unless asked. It holds hundreds of MB.
|
|
|
62
62
|
|---|---|---|
|
|
63
63
|
| 1, 4, 5, 6, 8 | `luckiest-video-studio-art-director` | The look of the whole set. Use section 0 (design system first), 0b (rules with a reason and an example path), 3 (palette, accent budget, faces, texture, banned list), and 3b (Real, not generated) with `references/shot-prompting.md` for every shot prompt. Skip its "Video-safe color" and "Type in motion" parts and its motion, timing, and `art-direction.json` sections. Stills rules live in this skill's `references/` |
|
|
64
64
|
| 2, 7 | `luckiest-video-studio-composition` | Where things sit inside each frame: placement system, focal point, white space, the 20 rules |
|
|
65
|
+
| 2, 7 | `luckiest-brandkit-sizing` | How big the logo is on the product and where it sits: apparel, hats, bags, stationery, signage |
|
|
65
66
|
|
|
66
67
|
Load [references/prompt-recipes.md](references/prompt-recipes.md) whenever you
|
|
67
68
|
write or edit the style block or a shot prompt. Load
|
|
@@ -90,6 +91,11 @@ the tilt direction, the empty-space side, and one to three of the 20 rules.
|
|
|
90
91
|
Write it all to `prompts.md` as a table plus one entry per shot:
|
|
91
92
|
`SHOT` (object and set), `COMPOSITION`, `TEXT` (every exact string).
|
|
92
93
|
|
|
94
|
+
For every merch, stationery, and signage shot, load `luckiest-brandkit-sizing`
|
|
95
|
+
and add the logo's placement and real size to the COMPOSITION line, in words:
|
|
96
|
+
"left chest logo about 3.5 inches wide, about one sixth of the chest width".
|
|
97
|
+
Models draw logos too big when the size is left open.
|
|
98
|
+
|
|
93
99
|
Then apply the art director's prompt rules. The two that broke real runs:
|
|
94
100
|
|
|
95
101
|
1. Never put hex codes, labels, or UI words in a prompt. The model prints them
|
|
@@ -180,6 +186,7 @@ in this order, cheapest first:
|
|
|
180
186
|
| A screen, board, or poster must show exact existing artwork | `scripts/composite_screen.py photo.png art.png out.png TL TR BR BL`. Zoom each corner to read inner-corner pixels first |
|
|
181
187
|
| Misspelled or leaked text | Retouch `replace` on that region with the exact string, or regenerate the shot with the text list tightened |
|
|
182
188
|
| Composition off | Regenerate with the corrected COMPOSITION line. Prompt edits that try to keep the rest of the image rarely fix a mark |
|
|
189
|
+
| Logo the wrong size for the product (check with the sizing sub-skill's "Check it in the image") | Regenerate with the size in the COMPOSITION line, or erase the mark and run `composite_mark.py` at the planned height |
|
|
183
190
|
|
|
184
191
|
An image-model "edit" that asks to replace a logo usually returns the same
|
|
185
192
|
wrong logo. Go straight to erase + composite after one failed try.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Changelog — luckiest-brandkit-sizing
|
|
2
|
+
|
|
3
|
+
## 1.0.0 — 2026-10-07
|
|
4
|
+
- New sub-skill of luckiest-brandkit for real-world logo size and placement.
|
|
5
|
+
- Apparel table (left chest, center chest, full front, upper back, full back,
|
|
6
|
+
back neck, sleeve, hoodie, youth) in inches, cm, and share of chest width,
|
|
7
|
+
plus hats, bags, and embroidery limits.
|
|
8
|
+
- How to state the size in a shot's COMPOSITION line and how to check it in the
|
|
9
|
+
image (share of chest width, plus or minus 5 points).
|
|
10
|
+
- `references/signage-and-print.md`: minimum size, clear space, business card
|
|
11
|
+
and letterhead, mockup scale, and signage letter height by viewing distance.
|
|
12
|
+
- Built from Wooter, Rush Order Tees, ThreadLogic, Printful, Signs.com, and
|
|
13
|
+
brand guide research, read 2026-10-07.
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: luckiest-brandkit-sizing
|
|
3
|
+
description: >-
|
|
4
|
+
Real-world logo size and placement for brand mockups: apparel (left chest,
|
|
5
|
+
center chest, full front, upper back, full back, back neck, sleeve, hoodie),
|
|
6
|
+
hats, bags, embroidery limits, business cards, letterhead, minimum size and
|
|
7
|
+
clear space, and signage letter height by viewing distance. Gives each
|
|
8
|
+
placement in inches, cm, and as a share of the garment, so a shot prompt can
|
|
9
|
+
state the scale and QA can check it. Sub-skill of luckiest-brandkit, used at
|
|
10
|
+
its prompt sheet and QA steps. Trigger on "logo size on a shirt", "how big
|
|
11
|
+
should the logo be", "where does the logo go", "left chest logo size", "hat
|
|
12
|
+
logo size", "sign size", "how big should the letters be on the sign", or
|
|
13
|
+
"/luckiest-brandkit-sizing". For the whole mockup set use luckiest-brandkit.
|
|
14
|
+
For framing inside the shot use luckiest-video-studio-composition.
|
|
15
|
+
argument-hint: "[placement or product] [--viewing-distance <ft>]"
|
|
16
|
+
user-invocable: true
|
|
17
|
+
allowed-tools: Read, Write, Edit, Glob, Grep
|
|
18
|
+
metadata:
|
|
19
|
+
version: "1.0.0"
|
|
20
|
+
listing_id: luckiest-brandkit-sizing
|
|
21
|
+
author: luckiest
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
# Logo sizing for mockups
|
|
25
|
+
|
|
26
|
+
Mockups look fake when the logo is the wrong size for the product. A left chest
|
|
27
|
+
logo drawn 8 inches wide or a cap logo that wraps onto the side panels gives the
|
|
28
|
+
image away. This skill gives the real size for each placement, so every shot
|
|
29
|
+
prompt states it and QA can measure it.
|
|
30
|
+
|
|
31
|
+
## Staying current
|
|
32
|
+
|
|
33
|
+
On activation, call the Luckiest MCP `check_updates` tool with
|
|
34
|
+
`{ listingId: "luckiest-brandkit-sizing", installedSemver: "1.0.0" }`. If
|
|
35
|
+
`upToDate: false`, surface the `notice` once and continue. Never block on it.
|
|
36
|
+
|
|
37
|
+
When done, call `report_usage` once with
|
|
38
|
+
`{ listing_id: "luckiest-brandkit-sizing", skill_version: "1.0.0", matched: true, success: <true|false> }`.
|
|
39
|
+
Metadata only, never prompt text. Skip silently if unavailable.
|
|
40
|
+
|
|
41
|
+
## Apparel (adult)
|
|
42
|
+
|
|
43
|
+
Use the default unless the brief gives a size. "Share" is logo width divided by
|
|
44
|
+
the flat chest width of an adult L tee (22 in, 55.9 cm). Use it to state scale in
|
|
45
|
+
a prompt and to check it in QA.
|
|
46
|
+
|
|
47
|
+
| Placement | Default width | Range | Share | Position |
|
|
48
|
+
|---|---|---|---|---|
|
|
49
|
+
| Left chest | 3.5 in (8.9 cm) | 2.5 to 5 in | 16% | 3 to 4 in below collar, 4 to 6 in from center line, wearer's left |
|
|
50
|
+
| Left chest, embroidered | 3.5 in (8.9 cm), 1.5 to 2.5 in tall | 2 to 3.75 in | 16% | Same. About the size of a business card |
|
|
51
|
+
| Center chest | 8 in (20.3 cm) | 6 to 10 in | 36% | About 4 in below collar |
|
|
52
|
+
| Full front | 12 in (30.5 cm), up to 14 in tall | 12 to 14 in | 55% | About 3 in below collar |
|
|
53
|
+
| Upper back (word or name) | 12 in (30.5 cm) | 12 to 14 in | 55% | About 4 in below collar |
|
|
54
|
+
| Full back | 12 in (30.5 cm), up to 14 in tall | 12 to 14.5 in | 55% | A little lower than full front |
|
|
55
|
+
| Back neck | 2.5 in (6.4 cm) | 2 to 3 in | 11% | About 1 in below collar edge |
|
|
56
|
+
| Sleeve | 3 in (7.6 cm) | 1 to 4.5 in | 14% | Midway between shoulder seam and armpit |
|
|
57
|
+
| Hoodie or zip jacket | 3.5 in (8.9 cm) | Left chest range | 16% | Left chest, 0.5 to 1 in clear of zipper, pocket, and seams |
|
|
58
|
+
| Youth chest | 2.5 in (6.4 cm) | 2 to 3 in | Same visual spot as adult | Scale position with the garment |
|
|
59
|
+
|
|
60
|
+
Spacing: 0.5 to 1 in between graphics, about 1 in from garment edges, 0.5 to 1
|
|
61
|
+
in clear of seams, zippers, and pockets. Pair a left chest with a full back for
|
|
62
|
+
the classic combo. Pair a left chest print with a right sleeve to balance it.
|
|
63
|
+
|
|
64
|
+
## Hats
|
|
65
|
+
|
|
66
|
+
| Placement | Default (W x H) | Range | Position |
|
|
67
|
+
|---|---|---|---|
|
|
68
|
+
| Structured cap front | 4 x 1.75 in (10.2 x 4.4 cm) | 4 to 5 in wide, up to 2.25 in tall | Centered, 0.5 to 1 in above the brim, never wrapping onto side panels |
|
|
69
|
+
| Dad hat front | 3.5 x 1.75 in (8.9 x 4.4 cm) | 3.5 to 4 in wide, 1.75 to 2 in tall | Same |
|
|
70
|
+
| Trucker front | 4 x 1.75 in | Up to 5 x 2 in | Foam front panel |
|
|
71
|
+
| Beanie front | 4.5 x 1.75 in (11.4 x 4.4 cm) | Up to 5 x 2 in | Front cuff |
|
|
72
|
+
| Side | 2 x 1 in (5.1 x 2.5 cm) | 1 to 2.5 in wide | Side panel, clear of seams |
|
|
73
|
+
| Back | 2.5 x 0.75 in (6.4 x 1.9 cm) | 2.25 to 3 in wide, 0.5 to 1 in tall | Above the closure |
|
|
74
|
+
|
|
75
|
+
## Bags
|
|
76
|
+
|
|
77
|
+
| Placement | Default width | Range |
|
|
78
|
+
|---|---|---|
|
|
79
|
+
| Backpack upper front, above the strap anchors | 4 in (10.2 cm) | 3 to 5 in |
|
|
80
|
+
| Duffel side panel, centered | 6 in (15.2 cm) | 4 to 8 in |
|
|
81
|
+
|
|
82
|
+
## Embroidery limits
|
|
83
|
+
|
|
84
|
+
Embroidered marks need letters at least 0.25 in tall (0.3 in uppercase on
|
|
85
|
+
beanies) and lines at least 0.05 in thick. Below that, letters merge. When a
|
|
86
|
+
wordmark breaks these at the planned size, use the symbol instead.
|
|
87
|
+
|
|
88
|
+
## Write it into the shot
|
|
89
|
+
|
|
90
|
+
Add the size to the shot's COMPOSITION line in plain words: placement, width in
|
|
91
|
+
inches, and share of the product. Never write a hex code or a label the model
|
|
92
|
+
could print.
|
|
93
|
+
|
|
94
|
+
```
|
|
95
|
+
COMPOSITION: ... Left chest logo about 3.5 inches wide, about one sixth of the
|
|
96
|
+
chest width, 3 inches below the collar on the wearer's left.
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
```
|
|
100
|
+
COMPOSITION: ... Front logo about 4 inches wide and 1.75 inches tall, centered on
|
|
101
|
+
the front panel just above the brim, not wrapping onto the sides.
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## Check it in the image
|
|
105
|
+
|
|
106
|
+
1. Measure, in pixels, the garment's flat chest width just under the armpits and
|
|
107
|
+
the logo's width.
|
|
108
|
+
2. Divide. A left chest logo should land near 16% (pass from 11% to 22%). Use the
|
|
109
|
+
"Share" column for other placements, with the same plus or minus 5 point band.
|
|
110
|
+
3. On hats, the logo must stay inside the front panel and clear of the brim.
|
|
111
|
+
4. Fail when the share is outside the band. Fix by regenerating with the size
|
|
112
|
+
in the COMPOSITION line, or by compositing the real logo at the right height.
|
|
113
|
+
|
|
114
|
+
## Print, brand kit, and signage
|
|
115
|
+
|
|
116
|
+
Load [references/signage-and-print.md](references/signage-and-print.md) for
|
|
117
|
+
business cards, letterhead, minimum logo size, clear space, mockup scale, and
|
|
118
|
+
signage letter height by viewing distance.
|
|
119
|
+
|
|
120
|
+
## Sources
|
|
121
|
+
|
|
122
|
+
Wooter (logo placement on sports apparel, 2025-12-12), Rush Order Tees (screen
|
|
123
|
+
printing placement standards), ThreadLogic (embroidery size guide), Printful
|
|
124
|
+
(hat logo size guide), ooshirts (Gildan 5000 flat widths). All read 2026-10-07.
|
|
125
|
+
Numbers are vendor practice, not a formal standard. When sources disagree the
|
|
126
|
+
default is the most common value.
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Print, brand kit, and signage sizing
|
|
2
|
+
|
|
3
|
+
Load this for stationery, minimum logo size, clear space, mockup scale, and
|
|
4
|
+
signs. Sources were read 2026-10-07. Brand guides do not share one standard, so
|
|
5
|
+
these are defaults to use when the brand has none of its own. A brand's own
|
|
6
|
+
guide always wins.
|
|
7
|
+
|
|
8
|
+
## Minimum size and clear space
|
|
9
|
+
|
|
10
|
+
| Rule | Default | Range across brand guides |
|
|
11
|
+
|---|---|---|
|
|
12
|
+
| Minimum print width, wordmark | 25 mm | 30 to 50 mm |
|
|
13
|
+
| Minimum print width, symbol | 10 mm | 8 to 10 mm |
|
|
14
|
+
| Minimum screen width, wordmark | 120 px | 120 to 180 px |
|
|
15
|
+
| Minimum screen width, symbol | 40 px | 40 to 45 px |
|
|
16
|
+
| Clear space | 1x the wordmark's cap height on every side | 0.5x to 2x a key letter or element |
|
|
17
|
+
|
|
18
|
+
Below the minimum, switch from the wordmark to the symbol. Nothing (text, edges,
|
|
19
|
+
other logos) enters the clear space.
|
|
20
|
+
|
|
21
|
+
## Stationery
|
|
22
|
+
|
|
23
|
+
| Item | Default logo width | Share of the item |
|
|
24
|
+
|---|---|---|
|
|
25
|
+
| Business card, 85 x 55 mm | 40 mm | 47% of card width |
|
|
26
|
+
| Letterhead, A4 | 50 mm (range 40 to 60) | 24% of page width |
|
|
27
|
+
|
|
28
|
+
## Mockup scale
|
|
29
|
+
|
|
30
|
+
A mockup logo should match the real product, so its share of the product in
|
|
31
|
+
frame equals real logo width divided by real product width. Use the apparel
|
|
32
|
+
"Share" column in SKILL.md and the stationery shares above. An oversized logo is
|
|
33
|
+
the most common sign of a fake mockup. Use straight-on views for approval shots
|
|
34
|
+
and context scenes when scale matters.
|
|
35
|
+
|
|
36
|
+
## Signage
|
|
37
|
+
|
|
38
|
+
| Rule | Value |
|
|
39
|
+
|---|---|
|
|
40
|
+
| Letter height for comfortable reading | 1 inch per 10 feet of viewing distance |
|
|
41
|
+
| Example | Read from 150 ft needs 15 in letters. Read across a 30 ft lobby needs 3 in letters |
|
|
42
|
+
| Billboards and large outdoor | 4 to 8 in for 100 to 200 ft, 8 to 10 in for 200 to 300 ft, 15 to 20 in for 350 to 500 ft |
|
|
43
|
+
| Lobby wall logo or art | 60 to 75% of the wall width, at least 0.75x the reception desk width |
|
|
44
|
+
|
|
45
|
+
Measure the logo's cap height (or the symbol's height) against the letter
|
|
46
|
+
height rule. Sans serif, high contrast, and good light read farther. Thin script
|
|
47
|
+
and low contrast need bigger letters.
|
|
48
|
+
|
|
49
|
+
In a shot prompt, state the sign's size and the viewing distance in words, for
|
|
50
|
+
example "a wall logo about 6 feet wide above an 8 foot reception desk, letters
|
|
51
|
+
about 10 inches tall".
|
|
52
|
+
|
|
53
|
+
## Sources
|
|
54
|
+
|
|
55
|
+
- Minimum size: Unilever, APSCo, Abertay University, Auckland Art Gallery brand guides
|
|
56
|
+
- Clear space: National Wildlife Federation, NinjaOne brand guides
|
|
57
|
+
- Stationery: University of Mannheim, Arctic Paper style guides
|
|
58
|
+
- Mockups: Screenhance product mockup examples
|
|
59
|
+
- Signage: Signs.com letter height guide, Banners.com font size guide
|
|
60
|
+
- Lobby: Montcarta reception art sizing guide
|
|
@@ -11,6 +11,7 @@ projects. Upstream license texts are kept beside this file.
|
|
|
11
11
|
| **Kenney** sound effects (`kenney.nl`) | CC0 | `assets/sfx/` | Public domain, credit given here |
|
|
12
12
|
| **skills** by Emil Kowalski (`emilkowalski/skills`) | MIT | Motion and taste rules, the review posture, and the motion vocabulary, rewritten for video in the `luckiest-video-studio-motion` sub-skill | `luckiest-video-studio-motion/LICENSE-emil` |
|
|
13
13
|
| **HyperFrames student kit** by Nate Herk and contributors (`hyperframes-student-kit`) | MIT for the original kit; the Student Kit Use Permission for its pipeline skills, style library, templates, and editing tools | Rewritten rules and ported scripts in the `luckiest-video-studio-cuts`, `-talk`, and `-reel` sub-skills | `LICENSE-student-kit`, `LICENSE-student-kit-pipeline` |
|
|
14
|
+
| **Motion OS** by Jason Lee (`jasonlee-breadcrumb/motion-os`) | MIT | The review player in the `luckiest-video-studio-review` sub-skill (`editor/index.html`, `editor/serve.mjs`) and the `reel.json` format; see that sub-skill's `ATTRIBUTION.md` | `luckiest-video-studio-review/LICENSE-motion-os` |
|
|
14
15
|
|
|
15
16
|
Used at runtime, not bundled:
|
|
16
17
|
|
|
@@ -23,7 +24,7 @@ Used at runtime, not bundled:
|
|
|
23
24
|
licensed rendering engine. Optional editor for `--editor diffusion`. Installed by
|
|
24
25
|
the user; this edition writes a project for it and calls its bundled CLI, and
|
|
25
26
|
copies none of its code.
|
|
26
|
-
- **Concat** (`jub0t/Concat`), AGPL-3.0-or-later.
|
|
27
|
+
- **Concat** (`jub0t/Concat`), AGPL-3.0-or-later. Optional editor for
|
|
27
28
|
`--editor concat`. Installed by the user; this edition sends JSON requests to its
|
|
28
29
|
`concat-cli` and copies none of its code, so the AGPL does not extend to this
|
|
29
30
|
skill.
|
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
# Changelog — luckiest-video-studio
|
|
2
2
|
|
|
3
|
+
## 1.9.0 — 2026-10-07
|
|
4
|
+
- The review player is the default editor (`--editor review`). Step 5 hands the
|
|
5
|
+
run to the new `luckiest-video-studio-review` sub-skill, built from Motion OS
|
|
6
|
+
(`jasonlee-breadcrumb/motion-os`, MIT). The user edits copy and colors per
|
|
7
|
+
scene, pins notes on the frame, and sends one prompt back; edits land in
|
|
8
|
+
`storyboard.json` and re-render only the touched scenes.
|
|
9
|
+
- Concat moves to `--editor concat`. OpenScreen and Diffusion Studio are unchanged.
|
|
10
|
+
- The cuts sub-skill's review page now opens in the same player (cuts 1.1.0).
|
|
11
|
+
- SECURITY.md S48 to S50 cover the player.
|
|
12
|
+
|
|
3
13
|
## 1.8.1 — 2026-10-05
|
|
4
14
|
- Bundle ships art director 1.4.0 (section 3b Real, not generated, and shot prompting).
|
|
5
15
|
|
|
@@ -38,8 +38,8 @@ installed or run during the review.
|
|
|
38
38
|
| S20 | student kit | `cut-silences/scripts/cut-silences.mjs:96,290` | `ffprobe` and `ffmpeg` via `spawnSync` with argument lists; filtergraph built from numeric ranges only | Low, no shell | **Keep** |
|
|
39
39
|
| S21 | student kit | `cut-mistakes/scripts/find-cut-candidates.mjs` | Reads a transcript, writes candidate JSON and markdown | None, no process or network calls | **Keep** |
|
|
40
40
|
| S22 | student kit | `cut-mistakes/scripts/apply-cuts.mjs:52,167` | Validates every cut is a finite numeric range, then `ffmpeg` with argument lists | Low, no shell | **Keep** |
|
|
41
|
-
| S23 | student kit | `scripts/build-edl-review.mjs:58,61,85` | Writes an HTML review page with the EDL file name and cut reasons only partly escaped (video paths go through `encodeURI`) | A file name or reason containing `"` or `&` breaks the page markup; local only | **
|
|
42
|
-
| S24 | student kit | `cut-mistakes/SKILL.md:65` | `npx serve . -p 8080 -n` to view the review page | Downloads an unpinned npm package and serves the whole folder | **Drop**:
|
|
41
|
+
| S23 | student kit | `scripts/build-edl-review.mjs:58,61,85` | Writes an HTML review page with the EDL file name and cut reasons only partly escaped (video paths go through `encodeURI`) | A file name or reason containing `"` or `&` breaks the page markup; local only | **Drop** (2026-10-07): replaced by `luckiest-video-studio-cuts/scripts/build-cuts-reel.mjs`, which writes JSON for the Motion OS player (S48) and no HTML |
|
|
42
|
+
| S24 | student kit | `cut-mistakes/SKILL.md:65` | `npx serve . -p 8080 -n` to view the review page | Downloads an unpinned npm package and serves the whole folder | **Drop**: the Motion OS server (S48) serves the run folder on `127.0.0.1` with no npm download |
|
|
43
43
|
| S25 | student kit | `scripts/transcribe-elevenlabs.mjs:80,132` | Parses the workspace `.env` for `ELEVENLABS_API_KEY`, uploads the audio to ElevenLabs | Reads secrets from a file, paid upload of user footage | **Drop**: use `npx hyperframes@0.8.84 transcribe` (local Whisper); a user's own transcript JSON also works |
|
|
44
44
|
| S26 | student kit | `motion-showreel/scripts/sfx.mjs:15,31` | Parses `.env` for `ELEVENLABS_API_KEY`, paid sound generation | Same as S25 | **Drop**: use the CC0 kit in `assets/sfx/` or the user's own library |
|
|
45
45
|
| S27 | student kit | `motion-showreel/scripts/kie.mjs:19,36,45` | `KIE_API_KEY`, base64 upload of user files to a third-party host, paid image and video jobs | Uploads user assets, paid calls, secret handling | **Drop** |
|
|
@@ -63,6 +63,9 @@ installed or run during the review.
|
|
|
63
63
|
| S45 | student kit | `scripts/style-library/build-registry.mjs`, `new-style.mjs` | Read and write files inside the library folder | Low, no process or network calls | **Keep** as `build-registry.mjs` and `new-pack.mjs` |
|
|
64
64
|
| S46 | student kit | `scripts/style-library/gen-kallaway-style.mjs` | One-off generator for one style's manifest | Not needed | **Drop** |
|
|
65
65
|
| S47 | student kit | `style-templates/*/hyperframes.json:3` | `registry` URL pointing at the upstream `main` branch | Unpinned remote content if `hyperframes add` runs | **Keep** the template, remove the `registry` key |
|
|
66
|
+
| S48 | motion-os | `player/serve.mjs` (now `luckiest-video-studio-review/editor/serve.mjs`) | Node server with no dependencies, bound to `127.0.0.1`, serves the player page and files inside one project folder (path checked against the folder), opens the browser with `open` | Low, local only; files outside the folder get 403 | **Keep**, copied unchanged (reviewed 2026-10-07) |
|
|
67
|
+
| S49 | motion-os | `player/serve.mjs` `/export` | Runs `reel.json` `export.cmd` through `sh -c` when the page posts to `/export`; posts from other origins get 403 | Shell command taken from `reel.json` | **Keep**, never written: `build-reel.mjs` and `build-cuts-reel.mjs` leave `export` out, so the endpoint only reports that the project has no export |
|
|
68
|
+
| S50 | motion-os | `player/index.html:4-6` (now `luckiest-video-studio-review/editor/index.html`) | Loads the player UI fonts from Google Fonts | Remote stylesheet in the review page, unpinned; the video and edits never leave the machine | **Keep**, UI only; the page falls back to system fonts offline |
|
|
66
69
|
|
|
67
70
|
## Standing rules for this edition
|
|
68
71
|
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: luckiest-video-studio
|
|
3
|
-
description: "Make product launch videos, product demos with motion design between the demo shots, and logo motion showcases of a design portfolio, and keep every one editable after it is rendered. Reads the project or portfolio, plans a storyboard, builds motion scenes with HyperFrames, records or places demo footage, renders each scene as its own clip, then hands back an MP4 plus the editable pieces: a storyboard.json that re-renders one scene at a time, a
|
|
3
|
+
description: "Make product launch videos, product demos with motion design between the demo shots, and logo motion showcases of a design portfolio, and keep every one editable after it is rendered. Reads the project or portfolio, plans a storyboard, builds motion scenes with HyperFrames, records or places demo footage, renders each scene as its own clip, then hands back an MP4 plus the editable pieces: a storyboard.json that re-renders one scene at a time, a review player to edit copy, pin notes on the frame, and send changes back in one prompt (Concat, OpenScreen, or Diffusion Studio on request), and optional After Effects compositions. Use for 'make a launch video', 'product demo video', 'demo with motion graphics', 'logo animation', 'logo reveal', 'motion showcase of my work', 'portfolio reel', 'animate my logos', 'brand reel', 'turn my talking-head recording into a reel', 'add graphics over me talking', 'turn this into a video', 'change scene 3 of the video', or 'let me edit the video after'. For AI-generated footage, avatars, and text-to-video models use luckiest-video. For what to post and when use luckiest-social."
|
|
4
4
|
license: See ATTRIBUTION.md
|
|
5
5
|
allowed-tools: Bash, Read, Write, Edit, Glob, Grep, AskUserQuestion
|
|
6
6
|
metadata:
|
|
7
|
-
version: "1.
|
|
7
|
+
version: "1.9.0"
|
|
8
8
|
listing_id: luckiest-video-studio
|
|
9
9
|
author: luckiest
|
|
10
10
|
---
|
|
@@ -13,19 +13,19 @@ metadata:
|
|
|
13
13
|
|
|
14
14
|
Short videos that show the real product, with motion design between the demo
|
|
15
15
|
shots, and that stay editable after the render. The editability is the point:
|
|
16
|
-
every run leaves a storyboard, per-scene clips, and a
|
|
16
|
+
every run leaves a storyboard, per-scene clips, and a review player, not just
|
|
17
17
|
an MP4.
|
|
18
18
|
|
|
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.
|
|
22
|
+
`{ listingId: "aff888e4-9ee9-4f73-af08-74d5d09d3c10", installedSemver: "1.9.0" }`. 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.
|
|
28
|
+
`{ listing_id: "luckiest-video-studio", skill_version: "1.9.0", 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
|
|
|
@@ -75,7 +75,7 @@ in `<skill-dir>/assets/sfx/`. Resolve it; never assume an install path.
|
|
|
75
75
|
| `--scene <id>` | re-render one scene of an existing run | none |
|
|
76
76
|
| `--ae` | also build After Effects compositions | off |
|
|
77
77
|
| `--ref <url-or-mp4>` | inspiration video to study first | none |
|
|
78
|
-
| `--editor` | `concat`, `openscreen`, `diffusion`, or several for the editing handoff | `
|
|
78
|
+
| `--editor` | `review`, `concat`, `openscreen`, `diffusion`, or several for the editing handoff | `review` |
|
|
79
79
|
|
|
80
80
|
If the user asks to change an existing video ("make scene 3 slower", "swap the
|
|
81
81
|
logo in the outro"), skip to **Edit an existing run** below.
|
|
@@ -99,7 +99,9 @@ video-studio-output/
|
|
|
99
99
|
final.mp4 all clips joined, poster baked as frame 0
|
|
100
100
|
poster.jpg
|
|
101
101
|
TIMING.md every scene with its in/out time and the line it covers
|
|
102
|
-
|
|
102
|
+
reel.json what the review player reads (default editor), rewritten on every render
|
|
103
|
+
qa/review-notes.json your own notes, pinned in the review player before the user opens it
|
|
104
|
+
concat/ the Concat project (with --editor concat); project.concat.txt holds its path
|
|
103
105
|
project.openscreen.txt path to the OpenScreen timeline in ~/Movies/Openscreen/<slug>/ (with --editor openscreen)
|
|
104
106
|
share-copy.txt
|
|
105
107
|
```
|
|
@@ -107,7 +109,8 @@ video-studio-output/
|
|
|
107
109
|
## Step 0: Check tools
|
|
108
110
|
|
|
109
111
|
Confirm `node`, `ffmpeg`, and `ffprobe`. HyperFrames runs via `npx hyperframes`.
|
|
110
|
-
|
|
112
|
+
The default editor, the review player (`luckiest-video-studio-review`), needs
|
|
113
|
+
only `node`. For timeline editing, Concat (`concat-cli` on `PATH`, see
|
|
111
114
|
[references/concat.md](references/concat.md)) is optional. For demo recordings,
|
|
112
115
|
OpenScreen 1.13.0 at `/Applications/Openscreen.app` is optional. Report what is
|
|
113
116
|
missing in one line and continue with what exists: without an editor the run still
|
|
@@ -270,35 +273,44 @@ every judge verdict from v2 on is recorded there.
|
|
|
270
273
|
|
|
271
274
|
## Step 5: Hand off for editing
|
|
272
275
|
|
|
273
|
-
|
|
276
|
+
Hand the run folder to the `luckiest-video-studio-review` sub-skill. It writes
|
|
277
|
+
`reel.json`, pins your own review notes, and opens the review player in the
|
|
278
|
+
browser. Tell the user the ways to edit, in this order:
|
|
274
279
|
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
the
|
|
278
|
-
|
|
279
|
-
1. **Ask again.** "Change scene 3's headline" edits `storyboard.json` and
|
|
280
|
+
1. **Review player.** Edit (E) to change a scene's copy and colors, N to pin a
|
|
281
|
+
note on the frame, Approved to lock a scene, then **Send to Claude** and paste
|
|
282
|
+
the prompt here. See **Edit an existing run** below.
|
|
283
|
+
2. **Ask again.** "Change scene 3's headline" edits `storyboard.json` and
|
|
280
284
|
re-renders only that scene.
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
285
|
+
3. **Timeline** (on request). With `--editor concat`, run
|
|
286
|
+
`scripts/assemble-concat.mjs <run-dir>` and open the project named in
|
|
287
|
+
`project.concat.txt` in Concat to trim, reorder, caption, add effects, and
|
|
288
|
+
export. See [references/concat.md](references/concat.md). If `concat-cli` is
|
|
289
|
+
missing, say so in one line.
|
|
290
|
+
With `--editor openscreen`, run `scripts/assemble-openscreen.mjs` for cursor
|
|
291
|
+
zoom on demo recordings. See [references/openscreen.md](references/openscreen.md).
|
|
286
292
|
With `--editor diffusion`, run `scripts/assemble-diffusion.mjs <run-dir> --open`:
|
|
287
293
|
logo scenes become native Diffusion Studio scenes with inspector controls. See
|
|
288
294
|
[references/diffusion.md](references/diffusion.md).
|
|
289
|
-
|
|
295
|
+
4. **After Effects** (with `--ae`). Hand the run folder to the
|
|
290
296
|
`luckiest-video-studio-ae` sub-skill, which rebuilds motion and logo scenes as
|
|
291
297
|
After Effects precomps through `luckiest-ae-mcp`.
|
|
292
298
|
|
|
293
299
|
## Edit an existing run
|
|
294
300
|
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
`
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
301
|
+
When the user pastes a prompt from the review player (it starts with "Motion OS
|
|
302
|
+
feedback for"), hand it to `luckiest-video-studio-review`: edits set
|
|
303
|
+
`storyboard.json` values exactly, notes are read against the frame they point at,
|
|
304
|
+
and approved scenes stay untouched.
|
|
305
|
+
|
|
306
|
+
For any change, read `storyboard.json` from the run folder. Change only the scenes
|
|
307
|
+
the request touches, re-render them with `scripts/render-scenes.mjs --scene <id>`,
|
|
308
|
+
rejoin `final.mp4` and `TIMING.md`, then rerun the review sub-skill's
|
|
309
|
+
`scripts/build-reel.mjs` so the open player loads the new version. Never rebuild untouched scenes. With
|
|
310
|
+
`--editor concat`, rerun `scripts/assemble-concat.mjs` too: it starts a fresh
|
|
311
|
+
Concat project and keeps the old one as `concat-<timestamp>/`, so tell the user
|
|
312
|
+
where any edits they made in Concat now live. With `--editor openscreen` or
|
|
313
|
+
`diffusion`, rerun that editor's script too.
|
|
302
314
|
|
|
303
315
|
## Creative laws
|
|
304
316
|
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
# Editing in Concat (`--editor concat
|
|
1
|
+
# Editing in Concat (`--editor concat`)
|
|
2
2
|
|
|
3
3
|
Concat (`jub0t/Concat`, AGPL-3.0) is a free, local video editor for macOS,
|
|
4
4
|
Windows, Linux, and Android, with a scriptable API. Exports have no watermark, it
|
|
5
5
|
needs no account, and the agent can build and export a project without anyone
|
|
6
|
-
clicking.
|
|
6
|
+
clicking. Use it when the user wants a timeline. The review player
|
|
7
|
+
(`luckiest-video-studio-review`) is the default for reviewing a run. Use OpenScreen
|
|
7
8
|
([openscreen.md](openscreen.md)) for recorded product demos with cursor zoom, and
|
|
8
9
|
Diffusion Studio ([diffusion.md](diffusion.md)) when line-draw logo scenes need to
|
|
9
10
|
stay native and editable.
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Attribution
|
|
2
2
|
|
|
3
3
|
`luckiest-video-studio-cuts` is a Luckiest sub-skill of `luckiest-video-studio`.
|
|
4
|
-
It is built from the `cut-silences` and `cut-mistakes` skills
|
|
5
|
-
|
|
4
|
+
It is built from the `cut-silences` and `cut-mistakes` skills of the
|
|
5
|
+
**HyperFrames student kit** by Nate Herk and
|
|
6
6
|
contributors. The kit is MIT; its pipeline skills and editing tools carry the
|
|
7
7
|
Student Kit Use Permission. Both texts are kept in
|
|
8
8
|
`luckiest-video-studio/LICENSE-student-kit` and `LICENSE-student-kit-pipeline`.
|
|
@@ -14,6 +14,7 @@ Student Kit Use Permission. Both texts are kept in
|
|
|
14
14
|
- Transcription runs locally through `npx hyperframes@0.8.84 transcribe`. The
|
|
15
15
|
kit's ElevenLabs uploader, which read an API key from `.env`, is not included.
|
|
16
16
|
- Scripts accept the bare word array that HyperFrames writes.
|
|
17
|
-
- The review page
|
|
18
|
-
|
|
17
|
+
- The kit's `build-edl-review.mjs` review page is replaced by `build-cuts-reel.mjs`,
|
|
18
|
+
which writes a `reel.json` for the review player in `luckiest-video-studio-review/editor/`.
|
|
19
|
+
No unpinned `npx serve`.
|
|
19
20
|
- See `luckiest-video-studio/SECURITY.md` S20 to S25.
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Changelog: luckiest-video-studio-cuts
|
|
2
2
|
|
|
3
|
+
## 1.1.0 (2026-10-07)
|
|
4
|
+
- Step 4 reviews the silence cut in the review player from
|
|
5
|
+
`luckiest-video-studio-review`: `scripts/build-cuts-reel.mjs` writes
|
|
6
|
+
`footage/reel.json`, one scene per kept range so every join is a scene boundary.
|
|
7
|
+
Replaces `build-edl-review.mjs` and its `review.html`.
|
|
8
|
+
|
|
3
9
|
## 1.0.0 (2026-09-29)
|
|
4
10
|
- New sub-skill: silence pass and review-gated mistake pass for talking-head
|
|
5
11
|
footage, output as a clean clip plus retimed transcript for a storyboard scene.
|
|
@@ -14,7 +14,7 @@ user-invocable: false
|
|
|
14
14
|
license: MIT. See ATTRIBUTION.md
|
|
15
15
|
allowed-tools: Bash, Read, Write, Glob, AskUserQuestion
|
|
16
16
|
metadata:
|
|
17
|
-
version: "1.
|
|
17
|
+
version: "1.1.0"
|
|
18
18
|
listing_id: luckiest-video-studio-cuts
|
|
19
19
|
author: luckiest
|
|
20
20
|
---
|
|
@@ -28,11 +28,11 @@ decides. Nothing here changes the words that stay.
|
|
|
28
28
|
## Staying current
|
|
29
29
|
|
|
30
30
|
On activation, call the Luckiest MCP `check_updates` tool with
|
|
31
|
-
`{ listingId: "luckiest-video-studio-cuts", installedSemver: "1.
|
|
31
|
+
`{ listingId: "luckiest-video-studio-cuts", installedSemver: "1.1.0" }`. If
|
|
32
32
|
`upToDate: false`, surface the `notice` once and continue. Never block on it.
|
|
33
33
|
|
|
34
34
|
When done, call `report_usage` once with
|
|
35
|
-
`{ listing_id: "luckiest-video-studio-cuts", skill_version: "1.
|
|
35
|
+
`{ listing_id: "luckiest-video-studio-cuts", skill_version: "1.1.0", matched: true, success: <true|false> }`.
|
|
36
36
|
Metadata only. Skip silently if unavailable.
|
|
37
37
|
|
|
38
38
|
## Standing rules
|
|
@@ -100,18 +100,26 @@ a readable `raw.silence-decisions.md`. Drop `--apply` for a plan without a rende
|
|
|
100
100
|
transcript to `clean.json`. Otherwise copy `raw.mistakes-transcript.json` to
|
|
101
101
|
`clean.json`.
|
|
102
102
|
|
|
103
|
-
## Step 4: Review
|
|
103
|
+
## Step 4: Review in the review player
|
|
104
|
+
|
|
105
|
+
The cut is reviewed in the same review player as the finished video (the
|
|
106
|
+
`luckiest-video-studio-review` sub-skill):
|
|
104
107
|
|
|
105
108
|
```bash
|
|
106
|
-
node <skill-dir>/scripts/build-
|
|
107
|
-
--
|
|
108
|
-
|
|
109
|
+
node <skill-dir>/scripts/build-cuts-reel.mjs <run-dir>/footage/raw.silence-edl.json \
|
|
110
|
+
--transcript <run-dir>/footage/raw.silence-transcript.json --video <run-dir>/footage/silenced.mp4
|
|
111
|
+
node <review-dir>/editor/serve.mjs <run-dir>/footage # run in the background
|
|
109
112
|
```
|
|
110
113
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
the
|
|
114
|
+
`<review-dir>` is the `luckiest-video-studio-review` folder beside this one. The
|
|
115
|
+
player opens on `silenced.mp4` with one scene per kept range, so every join is a
|
|
116
|
+
scene boundary: `[` and `]` jump between them. Each scene lists its words and the
|
|
117
|
+
pause cut before it. Tell the user to play across the joins, press N and click the
|
|
118
|
+
frame where a word sounds clipped, then **Send to Claude** and paste the prompt.
|
|
119
|
+
Listen across two or three joins yourself if you can; a join that clips a word
|
|
120
|
+
tail sounds like a stutter. Fix by raising `--gap` or removing that cut, not by
|
|
121
|
+
editing the video by hand, then rerun both commands: the version goes up and the
|
|
122
|
+
open player reloads.
|
|
115
123
|
|
|
116
124
|
## Step 5: Hand back to the storyboard
|
|
117
125
|
|