luckiest-co 1.0.41 → 1.0.43
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/video-studio/ATTRIBUTION.md +3 -0
- package/skills/video-studio/CHANGELOG.md +16 -0
- package/skills/video-studio/LICENSE-huashu-art-motion +21 -0
- package/skills/video-studio/LICENSE-logo-design +21 -0
- package/skills/video-studio/LICENSE-mg-styles-15 +21 -0
- package/skills/video-studio/SKILL.md +16 -10
- package/skills/video-studio/references/interview.md +39 -2
- package/skills/video-studio/references/step-2b-storyboard.md +6 -0
- package/skills/video-studio/references/step-3-compose.md +13 -0
- package/skills/video-studio/references/step-4-deliver.md +5 -0
- package/skills/video-studio/references/storyboard.md +1 -0
- package/skills/video-studio/references/styles/3d-render.md +39 -0
- package/skills/video-studio/references/styles/anime-light.md +55 -0
- package/skills/video-studio/references/styles/aurora-glass.md +40 -0
- package/skills/video-studio/references/styles/bauhaus.md +52 -0
- package/skills/video-studio/references/styles/cel-boil.md +41 -0
- package/skills/video-studio/references/styles/chiaroscuro.md +53 -0
- package/skills/video-studio/references/styles/collage.md +46 -0
- package/skills/video-studio/references/styles/comic-pop.md +49 -0
- package/skills/video-studio/references/styles/constructivist.md +54 -0
- package/skills/video-studio/references/styles/cubist.md +49 -0
- package/skills/video-studio/references/styles/cut-paper.md +57 -0
- package/skills/video-studio/references/styles/era-styles.md +29 -0
- package/skills/video-studio/references/styles/finance-chart.md +60 -0
- package/skills/video-studio/references/styles/flat-vector.md +41 -0
- package/skills/video-studio/references/styles/grain-flat-illustration.md +48 -0
- package/skills/video-studio/references/styles/hud.md +41 -0
- package/skills/video-studio/references/styles/impressionist.md +48 -0
- package/skills/video-studio/references/styles/ink-wash.md +49 -0
- package/skills/video-studio/references/styles/isometric.md +40 -0
- package/skills/video-studio/references/styles/keynote-ui.md +59 -0
- package/skills/video-studio/references/styles/kinetic-type.md +58 -0
- package/skills/video-studio/references/styles/line-art.md +47 -0
- package/skills/video-studio/references/styles/liquid.md +46 -0
- package/skills/video-studio/references/styles/math-explainer.md +58 -0
- package/skills/video-studio/references/styles/morph.md +45 -0
- package/skills/video-studio/references/styles/mosaic.md +52 -0
- package/skills/video-studio/references/styles/newsroom-collage.md +60 -0
- package/skills/video-studio/references/styles/pixel.md +46 -0
- package/skills/video-studio/references/styles/pointillist.md +49 -0
- package/skills/video-studio/references/styles/presenter-explainer.md +57 -0
- package/skills/video-studio/references/styles/retro-cgi.md +52 -0
- package/skills/video-studio/references/styles/science-explainer.md +59 -0
- package/skills/video-studio/references/styles/sticker-explainer.md +40 -0
- package/skills/video-studio/references/styles/storytime.md +60 -0
- package/skills/video-studio/references/styles/swirl-brushwork.md +53 -0
- package/skills/video-studio/references/styles/synthwave.md +47 -0
- package/skills/video-studio/references/styles/variety-show.md +40 -0
- package/skills/video-studio/references/styles/watercolor-anime.md +50 -0
- package/skills/video-studio/references/styles/whiteboard.md +60 -0
- package/skills/video-studio/references/styles.md +117 -0
- package/skills/video-studio/scripts/qa.mjs +40 -0
- package/skills/video-studio/scripts/qa.test.mjs +23 -1
- package/skills/video-studio/scripts/storyboard.schema.json +2 -0
- package/skills/video-studio-art-director/ATTRIBUTION.md +3 -0
- package/skills/video-studio-art-director/CHANGELOG.md +14 -0
- package/skills/video-studio-art-director/LICENSE-logo-design +21 -0
- package/skills/video-studio-art-director/SKILL.md +120 -11
- package/skills/video-studio-art-director/references/palettes.md +22 -0
- package/skills/video-studio-director/CHANGELOG.md +6 -0
- package/skills/video-studio-director/SKILL.md +21 -5
- package/skills/video-studio-director/references/jury.md +63 -0
- package/skills/video-studio-motion/CHANGELOG.md +4 -0
- package/skills/video-studio-motion/SKILL.md +34 -5
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# Style library
|
|
2
|
+
|
|
3
|
+
38 visual styles plus 18 era styles, each a card in `styles/`. A style decides the
|
|
4
|
+
renderer, texture, motion signature, clock and transition family. The brand still
|
|
5
|
+
decides the colors and faces when it has a design system (art director section 0):
|
|
6
|
+
map the card's palette roles onto the brand palette instead of replacing it.
|
|
7
|
+
|
|
8
|
+
## Pick the style
|
|
9
|
+
|
|
10
|
+
1. **Named in the prompt.** Match the request, case-insensitive, against every
|
|
11
|
+
card's Triggers (whole words and phrases). One match: use it, and say so in one
|
|
12
|
+
line ("Style: synthwave, from 'retro 80s neon' in your request"). Several
|
|
13
|
+
matches: ask the Style question with only those as options. A brand or product
|
|
14
|
+
name that happens to equal a trigger word does not count.
|
|
15
|
+
2. **`--style <id>`** on the command line wins over everything. Unknown id: list
|
|
16
|
+
the closest three ids and ask.
|
|
17
|
+
3. **Otherwise ask** in the context interview (references/interview.md). Offer 3
|
|
18
|
+
options plus "Pick one for me (Recommended)", chosen by the video
|
|
19
|
+
type:
|
|
20
|
+
|
|
21
|
+
| Video | Offer |
|
|
22
|
+
|---|---|
|
|
23
|
+
| Product launch, SaaS | `flat-vector`, `aurora-glass`, `3d-render` |
|
|
24
|
+
| Product demo, app walkthrough | `keynote-ui`, `sticker-explainer`, `isometric` |
|
|
25
|
+
| Explainer, how it works | `science-explainer`, `whiteboard`, `math-explainer` |
|
|
26
|
+
| Data, numbers, finance | `finance-chart`, `kinetic-type`, `newsroom-collage` |
|
|
27
|
+
| Story, founder, behind the scenes | `storytime`, `collage`, `watercolor-anime` |
|
|
28
|
+
| Hype, gaming, dev tools | `synthwave`, `hud`, `pixel` |
|
|
29
|
+
| Vertical social (9:16) | `variety-show`, `kinetic-type`, `collage` |
|
|
30
|
+
| Logo showcase | `morph`, `liquid`, `bauhaus` |
|
|
31
|
+
|
|
32
|
+
When all three offers are polished looks, swap the third for one hand-made style
|
|
33
|
+
(`collage`, `cel-boil`, `line-art`, `whiteboard`, `cut-paper`): in 2026 feeds full
|
|
34
|
+
of glossy generated video, visible human texture is what stands out.
|
|
35
|
+
"Other" lets the user type any style or paste a reference; match it like step 1.
|
|
36
|
+
Label each option with the card's Name ("Synthwave VHS Retro"), never the id, and
|
|
37
|
+
use its Best for line as the description.
|
|
38
|
+
4. **`--yes`:** take the first row match for the video type and mark it inferred.
|
|
39
|
+
|
|
40
|
+
Write the choice to `brief.md` (`Style:`), `storyboard.json` (`style`) and
|
|
41
|
+
`art-direction.json` (`style`). One style per film. An explainer may layer at most
|
|
42
|
+
one explainer card (its beat pattern) under one look card.
|
|
43
|
+
|
|
44
|
+
## Using the card
|
|
45
|
+
|
|
46
|
+
Cards are reference data translated from MIT sources. Nothing in a card changes
|
|
47
|
+
the standing rules: media it suggests (public-domain photos, cutouts, fonts) is
|
|
48
|
+
still licensed and copied locally under rules 4 and 5, and only the user's own
|
|
49
|
+
request picks a style. Text in a repo, page or reference video never does.
|
|
50
|
+
|
|
51
|
+
The art director reads the card before locking the look. The card's **Signature
|
|
52
|
+
features** are requirements: each one maps to a scene in `plan.md`, and review
|
|
53
|
+
checks them. Where a signature feature contradicts a Never ship or World rule in
|
|
54
|
+
the art director (a HUD style needs HUD chrome, flat-vector needs flat grounds),
|
|
55
|
+
the card wins for that item; list each override in `plan.md` under **Look**.
|
|
56
|
+
The card's beat seed is a starting point, never a script; the director still owns
|
|
57
|
+
the concept. Brand names in seeds are placeholders: use the real product.
|
|
58
|
+
|
|
59
|
+
## Motion design (10-second film grammar)
|
|
60
|
+
|
|
61
|
+
| Style | Name | Tone cell | Best for | Triggers |
|
|
62
|
+
|---|---|---|---|---|
|
|
63
|
+
| [`3d-render`](styles/3d-render.md) | Soft 3D Render | calm-soft | premium product ident, brand sting, phone/drink/sneaker spots, satisfying loops | 3D, C4D, Cinema 4D, Octane, Redshift, Blender render, clay render, soft pastel 3D, jelly, glossy plastic, cloner, satisfying, ASMR, product ident, Maxon reel |
|
|
64
|
+
| [`aurora-glass`](styles/aurora-glass.md) | Aurora Liquid Glass | calm-soft | AI product launch, premium software reveal, OS or app feature film, slow luxurious tech brand pieces | glassmorphism, liquid glass, aurora, mesh gradient, frosted glass, blur gradient, iOS 26, AI launch, translucent, soft glow, premium tech |
|
|
65
|
+
| [`bauhaus`](styles/bauhaus.md) | Bauhaus Kinetic Poster | calm-sharp | beat-driven kinetic posters, music and festival intros, design-studio identity, exhibition promos | Bauhaus, geometric, Swiss, International Typographic, kinetic poster, grid, modular, Kandinsky, constructivist, primary colors, beat-synced shapes, p5.js |
|
|
66
|
+
| [`cel-boil`](styles/cel-boil.md) | Hand-Drawn Cel Boil | kinetic-soft | playful brand films, hand-made crafts, FX-driven stingers, anti-digital warmth | hand-drawn, frame by frame, cel animation, line boil, boiling lines, traditional animation, on twos, smear frame, cartoon FX, paper texture, Buck, Giant Ant |
|
|
67
|
+
| [`collage`](styles/collage.md) | Paper Cut Collage (stop-motion) | kinetic-sharp | music and street-culture shorts, editorial magazine motion, surreal brand teasers, poster-like end cards | collage, cutout, cut-out animation, paper-cut, papercut, paper cut, stop-motion, stop motion, handmade, not AI-looking, Dada, surreal, torn paper, newspaper, halftone, zine, constructivist, scissor cut, Monty Python, Terry Gilliam, Soviet poster |
|
|
68
|
+
| [`flat-vector`](styles/flat-vector.md) | Flat Vector Explainer | kinetic-soft | SaaS explainer, product launch, annual report, science explainer, brand film in one continuous shot | flat design, vector, explainer, 2D motion graphics, corporate explainer, Material design, shape wipe, bouncy, brand film, Buck, Motion Ocean, Google explainer |
|
|
69
|
+
| [`hud`](styles/hud.md) | Cyberpunk HUD (FUI) | kinetic-sharp | tech reviews, AI product demos, game edits, sci-fi and aerospace explainers, film-UI style intros | HUD, FUI, cyberpunk, sci-fi interface, targeting, radar, hologram, tech UI, terminal, scanlines, Territory Studio, Cyberpunk 2077, Evangelion |
|
|
70
|
+
| [`isometric`](styles/isometric.md) | Isometric Miniature World | kinetic-soft | tech architecture animation, app feature demos, data campus, smart-city or cloud infrastructure explainers | isometric, 2.5D, iso, miniature city, low poly diorama, architecture diagram animation, tech campus, Dribbble hero, School of Motion |
|
|
71
|
+
| [`line-art`](styles/line-art.md) | Continuous Line Art | calm-sharp | luxury, finance, architecture and design-studio brand films, logo animation, monogram reveals | line art, one line, single line, continuous line, draw-on, stroke animation, outline, minimal luxury, monoline, logo reveal, architecture film |
|
|
72
|
+
| [`liquid`](styles/liquid.md) | Liquid Metaball Motion | kinetic-soft | music video packaging, food and drink ads, logo genesis, transition packs | liquid, fluid, metaball, goo, gooey, paint splash, drip, melt, blob, ink flood, liquid transition, logo reveal |
|
|
73
|
+
| [`morph`](styles/morph.md) | Shape Morph Chain | calm-sharp | keynote-grade storytelling, icon sequences, feature walkthroughs, brand reveal built from meaningful symbols | morph, morphing, shape transition, icon morph, shape shifting, one shape becomes another, Apple keynote, visual storytelling, flubber |
|
|
74
|
+
| [`pixel`](styles/pixel.md) | Pixel Art 8-bit | kinetic-sharp | game trailers and attract screens, 8-bit music videos, nostalgic brand marketing, indie game promos | pixel art, 8-bit, 16-bit, retro game, sprite, chiptune, side scroller, CRT, dithering, PICO-8, Aseprite, Minecraft, Terraria |
|
|
75
|
+
| [`sticker-explainer`](styles/sticker-explainer.md) | Sticker Knowledge Explainer | calm-sharp | hard-core science explainers, finance and knowledge channels, corporate documentary explainers, data-rich narration videos | sticker, knowledge video, science explainer, infographic video, big canvas, camera pan and zoom, photo cutouts with white outline, periodic table, PaperClip, Lin Chao, explainer channel |
|
|
76
|
+
| [`synthwave`](styles/synthwave.md) | Synthwave VHS Retro | kinetic-sharp | retro title sequences, music videos, trend brand films, gaming and nostalgia content, Y2K chrome revivals | synthwave, outrun, 80s, retro, neon, VHS, vaporwave, Y2K, chrome text, scanlines, grid horizon, retrowave |
|
|
77
|
+
| [`variety-show`](styles/variety-show.md) | Variety Show Kinetic Captions | kinetic-soft | 9:16 vlogs, pet and lifestyle shorts, interview and reaction edits, comedic re-edits, caption-heavy social video | variety show, hanazi, Chinese variety captions, kinetic captions, sticker text, fancy text, reaction text, vlog captions, burst box, outlined text, TikTok captions, Douyin, bilibili |
|
|
78
|
+
|
|
79
|
+
## Explainers (30-120s beat patterns)
|
|
80
|
+
|
|
81
|
+
| Style | Name | Tone cell | Best for | Triggers |
|
|
82
|
+
|---|---|---|---|---|
|
|
83
|
+
| [`finance-chart`](styles/finance-chart.md) | Editorial Data Chart | calm-sharp | revenue, profit, user counts, price trends, market share, regional comparisons, before and after an event. Segments where viewers will screenshot and check numbers. 2.5-6s per chart, 30-90s total. | economist chart, financial times chart, ft chart, bloomberg, data journalism, revenue chart, bar chart race, candlestick, stock chart animation, finance explainer, earnings growth |
|
|
84
|
+
| [`keynote-ui`](styles/keynote-ui.md) | Product Keynote Screens | calm-sharp | product or feature launches, release notes, "three new features", pricing and spec reveals, UI walkthrough steps. 30-90s, voiceover made of nouns and numbers. | apple keynote, apple event, product launch video, linear, stripe, openai launch, release video, feature announcement, glass card, ui walkthrough, screen recording explainer |
|
|
85
|
+
| [`kinetic-type`](styles/kinetic-type.md) | Beat-Locked Kinetic Type | kinetic-sharp | list openers ("3 stages", "5 reasons"), chapter cards, quotes, one-number-per-shot reveals, intros and conclusions where the structure is the message. 15-45s of type per segment, mixed with evidence shots in longer films. | kinetic typography, lyric video, text animation, saul bass, typographic video, animated quote, title sequence, big word slam, text reveal, after effects type |
|
|
86
|
+
| [`math-explainer`](styles/math-explainer.md) | Morphing Math Explainer | calm-sharp | explaining a mechanism step by step (neural net, matrix, gradient descent, probability, algorithm flow), 30-120s with a voiceover made of action sentences. | 3blue1brown, 3b1b, manim, math explainer, linear algebra, neural network explainer, gradient descent, black background math, transform animation, equation morph |
|
|
87
|
+
| [`newsroom-collage`](styles/newsroom-collage.md) | Evidence Desk Collage | calm-sharp | news, history, politics and "how did this happen" explainers built on real material (clippings, screenshots, photos, maps, quotes). Journalist-style argument with evidence. 45-180s. | vox, johnny harris, explainer journalism, news explainer, documentary collage, paper desk, red string, highlighter, investigation board, map explainer, archive footage collage |
|
|
88
|
+
| [`presenter-explainer`](styles/presenter-explainer.md) | Cartoon Presenter Explainer | kinetic-soft | business history, product mechanics and finance or tech knowledge pieces where a cartoon host walks between paper, charts and keywords and reacts emotionally. 60-180s. | presenter explainer, cartoon host, character explainer, business history video, finance explainer with mascot, spacex explainer, character walks across the chart, talking head cartoon, narrated cartoon guide |
|
|
89
|
+
| [`science-explainer`](styles/science-explainer.md) | Glowing Flat Science Explainer | calm-soft | scale and "what is inside" topics (cell to galaxy, pixel to model), systems and mechanisms drawn as glowing particles and lines, calm popular-science narration. 45-120s. | kurzgesagt, in a nutshell, flat science animation, scale zoom, immune system explainer, cell zoom, popular science, glowing vector, optimistic nihilism, zoom into |
|
|
90
|
+
| [`storytime`](styles/storytime.md) | Storytime Character Cuts | kinetic-soft | first-person stories, fails, "the first time I..." anecdotes with a setup, a pause and a punchline. A recurring cartoon avatar carries the voiceover. 60-600s, weekly cadence. | theodd1sout, jaiden animations, domics, storytime animation, story time, youtube storytime, cartoon avatar, stick figure story, reaction face, smash cut joke, animated anecdote |
|
|
91
|
+
| [`whiteboard`](styles/whiteboard.md) | Hand-Drawn Whiteboard Explainer | calm-soft | arguments, cause-and-effect chains, historical threads, step-by-step reasoning with a steady voiceover. Ideas that can be drawn as a map. 45-180s. | rsa animate, minute physics, whiteboard animation, hand-drawn explainer, doodle video, videoscribe, doodly, sketch explainer, marker drawing, draw my life |
|
|
92
|
+
|
|
93
|
+
## Art styles (any topic)
|
|
94
|
+
|
|
95
|
+
| Style | Name | Tone cell | Best for | Triggers |
|
|
96
|
+
|---|---|---|---|---|
|
|
97
|
+
| [`anime-light`](styles/anime-light.md) | Anime Light (volumetric cel) | calm-soft | romantic or nostalgic brand films, travel, music visuals, summer campaigns, product reveals with a sky | makoto shinkai, your name, anime sky, lens flare, god rays, cumulonimbus, cel shading, golden hour, anime light |
|
|
98
|
+
| [`chiaroscuro`](styles/chiaroscuro.md) | Chiaroscuro Candlelight | calm-sharp | drama, luxury and heritage brands, documentary intros, whisky or coffee, serious narration | rembrandt, chiaroscuro, candlelight, caravaggio, dutch golden age, dark portrait, tenebrism, oil painting lighting |
|
|
99
|
+
| [`comic-pop`](styles/comic-pop.md) | Comic Pop (Ben-Day dots) | kinetic-sharp | sale and promo spots, social shorts, youth brands, product comparisons, reaction clips | pop art, lichtenstein, warhol, comic book, ben-day dots, halftone, speech bubble, onomatopoeia, four-panel |
|
|
100
|
+
| [`constructivist`](styles/constructivist.md) | Constructivist Poster | kinetic-sharp | bold announcements, campaign slogans, manifestos, rallies, protest or movement style, tech-ops "state of" posts (narrow use) | constructivism, rodchenko, lissitzky, soviet poster, red and black, propaganda poster, agitprop, photomontage, slogan |
|
|
101
|
+
| [`cubist`](styles/cubist.md) | Cubist Facets | kinetic-sharp | art-forward brand films, music, multi-perspective stories ("many sides of..."), fashion, newspaper and collage looks | cubism, picasso, braque, analytic cubism, faceted, fragmented, collage, newsprint, multiple viewpoints |
|
|
102
|
+
| [`cut-paper`](styles/cut-paper.md) | Cut Paper Collage | kinetic-soft | playful brand films, children's and education, kitchen and craft, festival promos, bold simple shapes | matisse, cut-outs, paper collage, papier decoupe, gouache paper, jazz book, scissors, paper shapes |
|
|
103
|
+
| [`grain-flat-illustration`](styles/grain-flat-illustration.md) | Grain Flat Illustration | kinetic-soft | SaaS explainers, app launches, character-driven stories with a joke payoff, social shorts, onboarding | flat illustration, dribbble, grain texture, stipple shading, vector character, modern 2d, noise gradient, editorial illustration |
|
|
104
|
+
| [`impressionist`](styles/impressionist.md) | Impressionist Dabs | calm-soft | lifestyle, travel, wellness, food, spring and summer campaigns, soft nostalgic reels | impressionism, monet, renoir, pastel brushstrokes, sunlit, garden, plein air, dappled light |
|
|
105
|
+
| [`ink-wash`](styles/ink-wash.md) | Ink Wash (sumi-e) | calm-sharp | tea, wellness, craft, East Asian brands, poetic intros, minimal luxury, philosophy content | ink wash, sumi-e, chinese painting, calligraphy, brush, shuimo, qi baishi, bada shanren, zen, rice paper |
|
|
106
|
+
| [`mosaic`](styles/mosaic.md) | Stone Mosaic | calm-sharp | heritage, food, travel, history, floor-tile and craft brands, bold logos and badges (narrow use) | mosaic, roman mosaic, pompeii, tesserae, tile, byzantine, ancient floor, stone tiles |
|
|
107
|
+
| [`pointillist`](styles/pointillist.md) | Pointillist Dots | calm-soft | calm brand films, art and culture content, premium reveals, color theory explainers | pointillism, seurat, signac, dots, optical color mixing, stipple painting, divisionism |
|
|
108
|
+
| [`retro-cgi`](styles/retro-cgi.md) | Retro CGI Render | kinetic-sharp | nostalgia tech, intros for software, games, 3D-logo reveals, retro brand throwbacks (narrow use) | 90s cgi, early ray tracing, chrome sphere, checkerboard floor, plastic render, wireframe, pov-ray, silicon graphics |
|
|
109
|
+
| [`swirl-brushwork`](styles/swirl-brushwork.md) | Swirl Brushwork (post-impressionist) | kinetic-soft | emotional launch films, night scenes, brand stories that want a hand-painted, vibrating look | van gogh, starry night, swirl, post-impressionist, thick paint, impasto, painterly night sky, oil painting video |
|
|
110
|
+
| [`watercolor-anime`](styles/watercolor-anime.md) | Watercolor Anime Background | calm-soft | storybook explainers, children's content, wellness, cozy lifestyle, nature, slow narrative openers | ghibli, miyazaki, hand-painted watercolor, anime background, storybook, cozy, gouache, wind in curtains |
|
|
111
|
+
|
|
112
|
+
## Era styles
|
|
113
|
+
|
|
114
|
+
[styles/era-styles.md](styles/era-styles.md): 18 styles tied to one period or
|
|
115
|
+
artist (cave painting to blue period). Use them for history speedruns, time-travel
|
|
116
|
+
pieces and tributes; on other topics they look forced. Match their triggers the
|
|
117
|
+
same way.
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
// node qa.mjs endhold <video> [--max 1.4] [--share 0.25] end card held too long, final shot too long
|
|
18
18
|
// node qa.mjs blankframes <video> [--run 3] runs of empty swatch frames
|
|
19
19
|
// node qa.mjs hud <composition-dir> counters, timecodes, BPM/FPS, greetings, "label · $value", tracked caps
|
|
20
|
+
// node qa.mjs storyboard <run-dir> scene lengths, picture-only, text-led share, camera streaks, style id
|
|
20
21
|
// node qa.mjs facts <run-dir> on-screen numbers not in storyboard facts, em dashes on screen
|
|
21
22
|
// node qa.mjs safe <run-dir> [--max 0.004] [--stills] text or logo edges in the margins each format's platforms cover
|
|
22
23
|
// node qa.mjs judge <new.mp4> <old.mp4> [--out dir] [--cmd "claude -p --model sonnet"] [--verdicts A,B]
|
|
@@ -395,6 +396,44 @@ export function scanFacts(texts, facts = []) {
|
|
|
395
396
|
return found;
|
|
396
397
|
}
|
|
397
398
|
|
|
399
|
+
// ---------- storyboard ----------
|
|
400
|
+
|
|
401
|
+
const STYLES = join(fileURLToPath(new URL(".", import.meta.url)), "..", "references", "styles");
|
|
402
|
+
const FLAT_PICTURE = /^(a |an )?(flat colou?r|card on|block of text|title|bullets?|background|icon)\b/i;
|
|
403
|
+
const WEAK_VERB = /\b(appears?|shows?|displays?|fades? in|pops? up|lists?|lights? up|stays?|static)\b/i;
|
|
404
|
+
const TEXT_LED = /\b(text|title|headline|words?|caption|quote)\b/i;
|
|
405
|
+
const INWARD = new Set(["push", "snap", "slam"]), ACCENT = new Set(["snap", "slam", "whip"]);
|
|
406
|
+
|
|
407
|
+
// Rules a storyboard must pass before anything is built (huashu-art-motion storyboard lint, rewritten).
|
|
408
|
+
// Length rules apply to motion, logo and ai scenes; demo footage runs as long as the walkthrough needs.
|
|
409
|
+
export function lintStoryboard(sb, { stylesDir = STYLES } = {}) {
|
|
410
|
+
const red = [], yellow = [], scenes = sb.scenes ?? [];
|
|
411
|
+
const textLed = (s) => TEXT_LED.test(s.pictureOnly ?? "");
|
|
412
|
+
if (sb.style && !existsSync(join(stylesDir, `${sb.style}.md`))) {
|
|
413
|
+
const era = existsSync(join(stylesDir, "era-styles.md")) ? readFileSync(join(stylesDir, "era-styles.md"), "utf8") : "";
|
|
414
|
+
if (!era.includes(`\`${sb.style}\``)) red.push({ rule: "unknown-style", style: sb.style });
|
|
415
|
+
}
|
|
416
|
+
for (const s of scenes) {
|
|
417
|
+
const built = s.kind !== "demo";
|
|
418
|
+
if (built && s.duration > 8) red.push({ id: s.id, rule: "scene-over-8s", duration: s.duration });
|
|
419
|
+
else if (built && (s.duration < 2 || s.duration > 6)) yellow.push({ id: s.id, rule: "scene-length", duration: s.duration });
|
|
420
|
+
if (!s.pictureOnly) yellow.push({ id: s.id, rule: "no-pictureOnly" });
|
|
421
|
+
else if (FLAT_PICTURE.test(s.pictureOnly.trim())) red.push({ id: s.id, rule: "flat-picture", pictureOnly: s.pictureOnly });
|
|
422
|
+
else if (WEAK_VERB.test(s.pictureOnly)) yellow.push({ id: s.id, rule: "weak-verb", pictureOnly: s.pictureOnly });
|
|
423
|
+
}
|
|
424
|
+
if (scenes.length > 1) for (const s of [scenes[0], scenes.at(-1)]) if (textLed(s)) red.push({ id: s.id, rule: "text-led-end" });
|
|
425
|
+
const share = scenes.length ? scenes.filter(textLed).length / scenes.length : 0;
|
|
426
|
+
if (share > 0.3) red.push({ rule: "text-led-share", share: +share.toFixed(2) });
|
|
427
|
+
const cams = scenes.map((s) => s.camera).filter(Boolean);
|
|
428
|
+
for (let i = 2; i < scenes.length; i++) {
|
|
429
|
+
const run = scenes.slice(i - 2, i + 1).map((s) => s.camera);
|
|
430
|
+
if (run[0] && run.every((c) => c === run[0]) && !["hold", "cut"].includes(run[0])) yellow.push({ id: scenes[i].id, rule: "same-move-x3", camera: run[0] });
|
|
431
|
+
else if (run.every((c) => INWARD.has(c))) yellow.push({ id: scenes[i].id, rule: "inward-x3" });
|
|
432
|
+
}
|
|
433
|
+
if (cams.length && cams.filter((c) => ACCENT.has(c)).length > cams.length / 3) yellow.push({ rule: "accents-over-third" });
|
|
434
|
+
return { ok: red.length === 0, red, yellow, textLedShare: +share.toFixed(2) };
|
|
435
|
+
}
|
|
436
|
+
|
|
398
437
|
// ---------- face ----------
|
|
399
438
|
|
|
400
439
|
// Crop a 0-1 rect [x, y, w, h] out of a w x h gray frame.
|
|
@@ -566,6 +605,7 @@ if (process.argv[1] && resolve(process.argv[1]) === fileURLToPath(import.meta.ur
|
|
|
566
605
|
const found = files.flatMap((f) => scanHud(readFileSync(f, "utf8")).map((v) => ({ file: f, ...v })));
|
|
567
606
|
result = { ok: found.every((v) => v.warn), found };
|
|
568
607
|
}
|
|
608
|
+
else if (gate === "storyboard") result = lintStoryboard(JSON.parse(readFileSync(join(target, "storyboard.json"), "utf8")));
|
|
569
609
|
else if (gate === "safe") result = safeAreas(target, { max: num("--max", 0.004), stills: rest.includes("--stills") });
|
|
570
610
|
else if (gate === "facts") {
|
|
571
611
|
const sb = JSON.parse(readFileSync(join(target, "storyboard.json"), "utf8"));
|
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
scanTokens, scanCrossfades, scanMotion, legibility, findPops, deadFrames, presence,
|
|
11
11
|
beatSync, findAnchor, cutTimes, beatGrid, grayFrames, probe,
|
|
12
12
|
faceCover, pairVerdict, parseWinner, audioOnsets, avSync, visibleText, scanFacts, loopCheck,
|
|
13
|
-
fullFrameSelectors, safeAreas, endHold, blankRuns, scanHud,
|
|
13
|
+
fullFrameSelectors, safeAreas, endHold, blankRuns, scanHud, lintStoryboard,
|
|
14
14
|
} from "./qa.mjs";
|
|
15
15
|
|
|
16
16
|
const dir = mkdtempSync(join(tmpdir(), "qa-gates-"));
|
|
@@ -284,3 +284,25 @@ test("safe --stills reads the hold-frame PNGs from render-scenes --stills, no fi
|
|
|
284
284
|
assert.equal(safeAreas(place("stills-mid", 700), { stills: true }).ok, true);
|
|
285
285
|
assert.equal(cli("safe", join(dir, "stills-low"), "--stills").status, 1);
|
|
286
286
|
});
|
|
287
|
+
|
|
288
|
+
test("storyboard: flat pictures, long scenes, text-led ends and unknown styles fail; a varied board passes", () => {
|
|
289
|
+
const good = { style: "flat-vector", scenes: [
|
|
290
|
+
{ id: "a", kind: "motion", duration: 3, pictureOnly: "a coffee cup tips and spills onto the invoice", camera: "push" },
|
|
291
|
+
{ id: "b", kind: "motion", duration: 4, pictureOnly: "the invoice folds into a paper plane and flies right", camera: "glide" },
|
|
292
|
+
{ id: "c", kind: "demo", duration: 12, pictureOnly: "the dashboard with the paid stamp landing", camera: "hold" },
|
|
293
|
+
{ id: "d", kind: "logo", duration: 3, pictureOnly: "the logo mark stamps the plane flat", camera: "snap" },
|
|
294
|
+
] };
|
|
295
|
+
const ok = lintStoryboard(good);
|
|
296
|
+
assert.equal(ok.ok, true, JSON.stringify(ok));
|
|
297
|
+
const bad = lintStoryboard({ style: "nope", scenes: [
|
|
298
|
+
{ id: "a", kind: "motion", duration: 9, pictureOnly: "title over the logo" },
|
|
299
|
+
{ id: "b", kind: "motion", duration: 3, pictureOnly: "a flat colour" },
|
|
300
|
+
{ id: "c", kind: "motion", duration: 3, pictureOnly: "headline text" },
|
|
301
|
+
] });
|
|
302
|
+
const rules = bad.red.map((r) => r.rule);
|
|
303
|
+
for (const r of ["unknown-style", "scene-over-8s", "flat-picture", "text-led-end", "text-led-share"]) assert.ok(rules.includes(r), r);
|
|
304
|
+
const streak = lintStoryboard({ scenes: ["push", "snap", "slam"].map((camera, i) => ({ id: `s${i}`, kind: "motion", duration: 3, pictureOnly: "a gear turns the clock hands", camera })) });
|
|
305
|
+
assert.ok(streak.yellow.some((y) => y.rule === "inward-x3"));
|
|
306
|
+
assert.ok(streak.yellow.some((y) => y.rule === "accents-over-third"));
|
|
307
|
+
assert.equal(lintStoryboard({ style: "polka-infinity", scenes: [] }).ok, true);
|
|
308
|
+
});
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
"title": { "type": "string", "minLength": 1 },
|
|
9
9
|
"mode": { "enum": ["launch", "demo", "logos"] },
|
|
10
10
|
"tone": { "type": "string" },
|
|
11
|
+
"style": { "type": "string", "pattern": "^[a-z0-9][a-z0-9-]*$", "description": "Style card id from references/styles.md (or an era-styles.md row id). The art director reads the card" },
|
|
11
12
|
"format": {
|
|
12
13
|
"type": "object",
|
|
13
14
|
"required": ["width", "height", "fps"],
|
|
@@ -60,6 +61,7 @@
|
|
|
60
61
|
"line": { "type": "string", "description": "What this scene says or shows, one line, used in TIMING.md" },
|
|
61
62
|
"belief": { "type": "string", "description": "The belief this scene creates: 'the viewer ...'. One change in the viewer, no 'and'. Written by the director" },
|
|
62
63
|
"importance": { "enum": [1, 2, 3], "description": "1 support, 2 build, 3 the point. At most a quarter of scenes are 3" },
|
|
64
|
+
"camera": { "enum": ["hold", "push", "glide", "pull", "snap", "whip", "slam", "cut"], "description": "The camera move that carries this scene. snap, whip and slam are accents: at most a third of scenes, never three inward moves in a row" },
|
|
63
65
|
"pictureOnly": { "type": "string", "description": "What the picture shows with the text covered. 'A flat colour', 'a card on a flat colour' and 'a block of text' are rejected answers" },
|
|
64
66
|
"composition": { "type": "string", "description": "motion and logo: sub-composition path relative to composition/, default compositions/<id>.html" },
|
|
65
67
|
"recipe": { "type": "string", "description": "logo: recipe name from references/logo-recipes.md" },
|
|
@@ -10,9 +10,12 @@
|
|
|
10
10
|
| **prompt-images** by Replicate (`replicate/skills`, https://github.com/replicate/skills/tree/main/skills/prompt-images) | Apache-2.0, Copyright 2025 Replicate, Inc. | Adapted into `references/shot-prompting.md`: natural-language shot descriptions, naming subjects, camera, film, lighting and composition vocabulary, quoted text, editing and consistency rules, guidance and negative-prompt pitfalls. Rewritten and reordered, not copied verbatim | `LICENSE-replicate` |
|
|
11
11
|
| **"How to make AI images look less like AI"** by Pixova (https://www.pixova.io/blog/how-to-make-ai-images-look-less-like-ai) | Article, all rights reserved | Ideas only, in section 3b: directional light with hard shadows, film stock and grain, skin texture, off-center candid framing, specific environments, banned prompt words, lower CFG. No text is copied | n/a |
|
|
12
12
|
| **motionmaxxing** by Tejas Makwana (`Tejashmakwana/motionmaxxing`, FinalMotion, finalmotion.video), commit 8c8ec0f2 | Apache-2.0 | World per act, one system per film, the hero frame, and the additions to the Banned list. Rewritten in our own words; no code, runtime, media, studies or `library/` rows are copied | `LICENSE-motionmaxxing` |
|
|
13
|
+
| **logo-design** by kaankiziltug (`kaankiziltug/logo-design-skill`, `skills/logo-design`) | MIT, Copyright (c) 2026 kaankiziltug | Ideas from `SKILL.md` phases 2, 3 and 5, `references/principles.md` and `references/testing-checklist.md`, rewritten for video: the one-sentence idea tested against competitors (section 2b), the category cliché list with fresh-form exception (section 3), and the thumbnail, squint and shelf still tests (section 8). The SVG library, mark types and scripts are not included | `LICENSE-logo-design` |
|
|
13
14
|
|
|
14
15
|
## Changes in this edition
|
|
15
16
|
|
|
17
|
+
- 1.8.0: section 2b "One idea per film", "Category clichés" in section 3, and the still tests plus "Unanswered cliché" column in review, adapted from logo-design (MIT).
|
|
18
|
+
|
|
16
19
|
- 1.5.0: "Do not repeat earlier runs", a practice studied from the Motion Studio skill bundle; no code or text copied.
|
|
17
20
|
- 1.4.0: section 3b "Real, not generated", `references/shot-prompting.md`, and the "Looks generated" check.
|
|
18
21
|
|
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# Changelog — luckiest-video-studio-art-director
|
|
2
2
|
|
|
3
|
+
## 1.8.0 — 2026-10-12
|
|
4
|
+
|
|
5
|
+
- Section 2b: the film's idea in one sentence in `plan.md` and `art-direction.json` (`idea`, `ideaCheckedAgainst`) before the look is locked. Rejected and rewritten when it could describe a competitor's film.
|
|
6
|
+
- Section 3 "Category clichés": 5 to 8 clichés of the product's category listed as `cliches`, banned unless each is given a fresh form in one line.
|
|
7
|
+
- Section 8: thumbnail (160px), squint (8px blur) and shelf (beside 3 to 4 competitor frames) still tests on every hold frame and the hero frame, plus "Unanswered cliché" and "Still tests" columns.
|
|
8
|
+
- Adapted from kaankiziltug `logo-design` (MIT); see ATTRIBUTION.md and `LICENSE-logo-design`.
|
|
9
|
+
|
|
10
|
+
## 1.7.0 — 2026-10-12
|
|
11
|
+
|
|
12
|
+
- Section 0c: read the chosen style card; its signature features are locked and override Never ship items they need, each listed in `plan.md`. Signature features are exempt from the earlier-runs ban.
|
|
13
|
+
- Section 3c: three allowed character routes, banned code-drawn characters, a 2x close-up delivery check, and style-renderer rules (characters through the same renderer, motif loops, true pattern period, aging on background only, glyph checks).
|
|
14
|
+
- Never ship adds the blue-purple AI palette; `references/palettes.md` adds 8 fallback palettes.
|
|
15
|
+
- Section 7: three compositions of the hook frame before the style frame approval.
|
|
16
|
+
|
|
3
17
|
## 1.6.0 — 2026-10-12
|
|
4
18
|
|
|
5
19
|
- World per act (ground, light, depth, texture, sound) and a named hero frame in the look lock; accent colour carries one meaning.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 kaankiziltug
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: video-studio-art-director
|
|
2
|
+
name: luckiest-video-studio-art-director
|
|
3
3
|
description: >-
|
|
4
4
|
Art direction for luckiest-video-studio runs and any branded video, reel, ad,
|
|
5
5
|
or motion piece. Reads the project design system first (DESIGN.md, tokens,
|
|
@@ -20,7 +20,7 @@ user-invocable: true
|
|
|
20
20
|
license: MIT. See ATTRIBUTION.md
|
|
21
21
|
allowed-tools: Bash, Read, Write, Edit, Glob, Grep, AskUserQuestion
|
|
22
22
|
metadata:
|
|
23
|
-
version: "1.
|
|
23
|
+
version: "1.8.0"
|
|
24
24
|
listing_id: luckiest-video-studio-art-director
|
|
25
25
|
author: luckiest
|
|
26
26
|
---
|
|
@@ -35,11 +35,11 @@ confidence. Variety reads as noise.
|
|
|
35
35
|
## Staying current
|
|
36
36
|
|
|
37
37
|
On activation, call the Luckiest MCP `check_updates` tool with
|
|
38
|
-
`{ listingId: "luckiest-video-studio-art-director", installedSemver: "1.
|
|
38
|
+
`{ listingId: "luckiest-video-studio-art-director", installedSemver: "1.8.0" }`. If
|
|
39
39
|
`upToDate: false`, surface the `notice` once and continue. Never block on it.
|
|
40
40
|
|
|
41
41
|
When done, call `report_usage` once with
|
|
42
|
-
`{ listing_id: "luckiest-video-studio-art-director", skill_version: "1.
|
|
42
|
+
`{ listing_id: "luckiest-video-studio-art-director", skill_version: "1.8.0", matched: true, success: <true|false> }`.
|
|
43
43
|
Metadata only, never prompt text. Skip silently if unavailable.
|
|
44
44
|
|
|
45
45
|
## Standing rules
|
|
@@ -117,6 +117,27 @@ Never direct by naming a famous designer or studio ("in the style of ..."). A
|
|
|
117
117
|
name is a prompt in disguise; it produces a pastiche, not the brand. Write the
|
|
118
118
|
decisions that name stands for instead.
|
|
119
119
|
|
|
120
|
+
## 0c. Chosen style
|
|
121
|
+
|
|
122
|
+
When `brief.md` or `storyboard.json` names a `style`, read its card,
|
|
123
|
+
`luckiest-video-studio/references/styles/<style>.md` (era styles are rows in
|
|
124
|
+
`styles/era-styles.md`), before section 1. The card writes those decisions for you:
|
|
125
|
+
|
|
126
|
+
- **Tone cell and clock** come from the card. Section 1 confirms them; it does not
|
|
127
|
+
pick again.
|
|
128
|
+
- **Palette:** with a design system (section 0), map the card's colors onto the
|
|
129
|
+
brand roles and keep the brand's hues. Without one, use the card's palette.
|
|
130
|
+
- **Texture, easing, transitions, motion signature** come from the card's Look and
|
|
131
|
+
Motion sections, at freedom level guided.
|
|
132
|
+
- **Signature features** are locked. Map each to a scene in `plan.md`; review
|
|
133
|
+
checks every one.
|
|
134
|
+
- **Overrides:** where a signature feature contradicts a Never ship, World or
|
|
135
|
+
Banned rule below (HUD chrome in `hud`, flat grounds in `flat-vector`, a
|
|
136
|
+
labelled caption band in `variety-show`), the card wins for that item only.
|
|
137
|
+
List each override with the feature that needs it in `plan.md` under **Look**.
|
|
138
|
+
- The card's Triggers line may name artists or studios. Those are search words,
|
|
139
|
+
never direction: write from the card's decisions, as this section's rule says.
|
|
140
|
+
|
|
120
141
|
## 1. Place the piece on the tone matrix
|
|
121
142
|
|
|
122
143
|
Pick one cell and commit. Mixing cells is the most common cause of motion that
|
|
@@ -142,6 +163,19 @@ calm-sharp, `cinematic` to calm-soft, `default` and `yc-parody` to kinetic-soft,
|
|
|
142
163
|
|
|
143
164
|
No overshoot on pricing, money, or security content in any personality.
|
|
144
165
|
|
|
166
|
+
## 2b. One idea per film
|
|
167
|
+
|
|
168
|
+
Before locking anything below, write the film's idea as one sentence in
|
|
169
|
+
`plan.md` under **Idea**, for example "the invoice pays itself while you watch".
|
|
170
|
+
The idea is what the look serves. It is not the message line from the brief.
|
|
171
|
+
|
|
172
|
+
Test it against three competitor films, named by product. If the sentence could
|
|
173
|
+
describe any of them, it is not an idea: rewrite it with an ownable twist. If it
|
|
174
|
+
needs a second sentence to make sense, it will not read on screen: cut it down.
|
|
175
|
+
Write the sentence to `art-direction.json` as `idea`, and list the competitors
|
|
176
|
+
you checked under `ideaCheckedAgainst`. With `--yes`, still write and test it;
|
|
177
|
+
never skip to the look.
|
|
178
|
+
|
|
145
179
|
## 3. Lock the look
|
|
146
180
|
|
|
147
181
|
Fill every row with one choice:
|
|
@@ -180,12 +214,30 @@ for it.
|
|
|
180
214
|
- **The house style as a default:** a giant cropped word, texture inside the
|
|
181
215
|
letters, a colour flood or circle wipe between every scene, a dot that becomes
|
|
182
216
|
the logo.
|
|
217
|
+
- **The AI palette:** a blue-purple gradient, a deep-purple starfield, neon
|
|
218
|
+
cyan-purple glow, unless the design system or the user names those colors.
|
|
219
|
+
Without a design system, start from [references/palettes.md](references/palettes.md).
|
|
220
|
+
- **Code-drawn characters:** see section 3c.
|
|
183
221
|
- **A small card on an empty ground**, or a new flat swatch per scene. More than
|
|
184
222
|
three distinct flat grounds in one film reads as a deck.
|
|
185
223
|
|
|
186
224
|
Any of these can be right with a stated reason in `plan.md` (a calm brand that
|
|
187
225
|
fades, a held stillness). Without the reason, it is a Block in review.
|
|
188
226
|
|
|
227
|
+
### Category clichés
|
|
228
|
+
|
|
229
|
+
The never-ship list covers AI defaults. Each product category has its own
|
|
230
|
+
defaults too. Before filling the rows, list 5 to 8 visual clichés of this
|
|
231
|
+
product's category in `plan.md` under **Clichés**, for example fintech: blue,
|
|
232
|
+
upward arrows, shields, globes, coins; developer tools: a terminal typing
|
|
233
|
+
itself, green-on-black code, a glowing cursor; coffee: beans, steam, a cup.
|
|
234
|
+
Write them to `art-direction.json` as `cliches`.
|
|
235
|
+
|
|
236
|
+
A listed cliché is banned unless the film gives it a form no competitor has
|
|
237
|
+
used, written beside it in one line ("the arrow is the invoice's own fold
|
|
238
|
+
line"). Drawing the product or the category's symbol as it is never counts as
|
|
239
|
+
a fresh form.
|
|
240
|
+
|
|
189
241
|
### Do not repeat earlier runs
|
|
190
242
|
|
|
191
243
|
Before filling the rows, read every earlier `video-studio-output*/art-direction.json`
|
|
@@ -193,7 +245,9 @@ in the workspace. From each, add to `banned`: its signature transition, its wow
|
|
|
193
245
|
device (the technique, not the scene id), its texture, and its concept. Also add its
|
|
194
246
|
palette and font pair, unless the design system fixed them (section 0) or the user
|
|
195
247
|
asked for a matching series. A brand keeps its colors and faces from video to video;
|
|
196
|
-
it does not keep the same trick.
|
|
248
|
+
it does not keep the same trick. The chosen style's signature features are exempt:
|
|
249
|
+
picking `synthwave` twice keeps its grid and sunset, and bans only the earlier
|
|
250
|
+
run's concept and wow device. Record what came from where under
|
|
197
251
|
`bannedFromEarlierRuns`, and say in one line what you banned.
|
|
198
252
|
|
|
199
253
|
### Video-safe color
|
|
@@ -244,6 +298,32 @@ Each rule below removes one of those averages. Write shot prompts with
|
|
|
244
298
|
These rules make work look made by a person. They never hide that a model was
|
|
245
299
|
used: when the parent skill has a disclosure or provenance rule, it still applies.
|
|
246
300
|
|
|
301
|
+
## 3c. Characters and style renderers
|
|
302
|
+
|
|
303
|
+
Allowed character routes, one per film: (a) a generated frame library through
|
|
304
|
+
`luckiest-image` under section 3b, (b) hands, backs and silhouettes only, (c) no
|
|
305
|
+
characters: the product or object is the protagonist. Never draw a generic chibi
|
|
306
|
+
(round head, bean eyes, blush, no neck), a white-shell robot with a visor, faces
|
|
307
|
+
on objects, or stick figures acting out a story. Objects act through shape,
|
|
308
|
+
motion, scale and contrast instead (ions bunch when cold, spread when warm).
|
|
309
|
+
|
|
310
|
+
When a character ships, check on a 2x close-up: the silhouette reads filled
|
|
311
|
+
black; neck, shoulders, elbows and wrists exist; hands hold things; two shading
|
|
312
|
+
levels plus a highlight lit like the scene; a specific performance each time; the
|
|
313
|
+
same line and color treatment as the scene; identical across shots.
|
|
314
|
+
|
|
315
|
+
With a style card, everything passes through the same renderer. A character or
|
|
316
|
+
UI drawn flat over a brushwork or paper background looks pasted on; this is the
|
|
317
|
+
most common style failure. Also from the style cards' source:
|
|
318
|
+
- Each dwell shows one main action plus 2 to 4 motif loops (water trembles,
|
|
319
|
+
paper flutters, gold glints). Never reseed the whole frame at a low frame rate;
|
|
320
|
+
that reads as flicker. Boil only line art or motif areas.
|
|
321
|
+
- A scrolling pattern repeats at its true period, or it jumps at the seam.
|
|
322
|
+
- Aging (peeling, stains, scratches) goes on the background only, never on the
|
|
323
|
+
subject.
|
|
324
|
+
- Draw style lettering as paths, or check every glyph exists in the loaded font:
|
|
325
|
+
missing glyphs fall back to a system font silently.
|
|
326
|
+
|
|
247
327
|
## 4. Lock the motion language
|
|
248
328
|
|
|
249
329
|
| Property | Rule |
|
|
@@ -272,6 +352,11 @@ element whose motion carries no meaning.
|
|
|
272
352
|
{
|
|
273
353
|
"designSystem": { "sources": ["DESIGN.md", "client/src/index.css"], "overrides": [{ "token": "--background", "from": "#000000", "to": "#0B0B0F", "why": "video-safe black" }] },
|
|
274
354
|
"freedom": { "locked": ["palette", "faces", "accentBudget", "banned"], "guided": ["personality", "easing", "transitions", "texture"], "open": ["concept", "wow", "layout"] },
|
|
355
|
+
"idea": "the invoice pays itself while you watch",
|
|
356
|
+
"ideaCheckedAgainst": ["Stripe Invoicing launch film", "FreshBooks 2026 ad", "Wave payments promo"],
|
|
357
|
+
"cliches": [{ "item": "upward arrow", "fresh": "the arrow is the invoice's own fold line" }, { "item": "coins", "fresh": null }],
|
|
358
|
+
"style": "keynote-ui",
|
|
359
|
+
"styleOverrides": [],
|
|
275
360
|
"cell": "calm-sharp",
|
|
276
361
|
"personality": "Corporate",
|
|
277
362
|
"palette": { "bg": "#0B0B0F", "surface": "#16161D", "text": "#F4F4F5", "accent": "#22C55E" },
|
|
@@ -301,6 +386,12 @@ studio's Step 2b.
|
|
|
301
386
|
|
|
302
387
|
## 7. Style frame approval
|
|
303
388
|
|
|
389
|
+
For a new look, render three candidates of the hook hold frame first, with
|
|
390
|
+
different compositions (framing, hierarchy, where the hero sits); a recolor does
|
|
391
|
+
not count. This applies even when the user named a style. Save them as
|
|
392
|
+
`storyboard/style-frame-a.png`, `-b`, `-c` and let the user pick. With `--yes`,
|
|
393
|
+
build the brief's direction and list the other two in one line each in `NOTE.md`.
|
|
394
|
+
|
|
304
395
|
At studio Step 2b, judge `storyboard/style-frame.png` against the spec before
|
|
305
396
|
showing it to the user. Fix any of these first: more than two accent uses, a
|
|
306
397
|
third face, a banned default, a texture that reads above subliminal, a hero
|
|
@@ -312,12 +403,27 @@ a frame that fails **Looks generated** (any section 3b rule).
|
|
|
312
403
|
`--review` reads `art-direction.json`, the composition files, and a rendered
|
|
313
404
|
hold frame per scene. Write `<run-dir>/qa/art-direction-review.md`:
|
|
314
405
|
|
|
315
|
-
| Scene | Matches design system | Repeats a logged correction | Color safe | Type holds | Easing in spec | Durations on base unit | Transition in family | One hero | Accent budget | Banned default | Never-ship item | Looks generated | Verdict |
|
|
316
|
-
|
|
406
|
+
| Scene | Matches design system | Repeats a logged correction | Color safe | Type holds | Easing in spec | Durations on base unit | Transition in family | One hero | Accent budget | Banned default | Never-ship item | Unanswered cliché | Looks generated | Still tests | Verdict |
|
|
407
|
+
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
408
|
+
|
|
409
|
+
Verdict is **Approve** or **Block**. Any "no", or a "yes" under Unanswered
|
|
410
|
+
cliché or Looks generated, is a direction defect. Block it and
|
|
411
|
+
name the fix.
|
|
412
|
+
|
|
413
|
+
**Still tests.** Run three checks on each scene's hold frame and on the hero
|
|
414
|
+
frame. A scene passes only if all three pass.
|
|
415
|
+
|
|
416
|
+
1. **Thumbnail:** scale the frame to 160px wide, the size of a feed thumbnail
|
|
417
|
+
or a timeline scrubber. The hero and the one line still read. If they do
|
|
418
|
+
not, enlarge or cut.
|
|
419
|
+
2. **Squint:** blur the frame about 8px at full size. The hero's silhouette
|
|
420
|
+
alone is still distinct, and nothing else competes with it.
|
|
421
|
+
3. **Shelf:** place the frame beside hold frames from 3 to 4 competitor films
|
|
422
|
+
of the same category, at the same size. It stands apart instead of blending
|
|
423
|
+
in, and it does not feel familiar. If it feels familiar and it is not this
|
|
424
|
+
brand's, it is someone else's: change it.
|
|
317
425
|
|
|
318
|
-
|
|
319
|
-
Looks generated, is a direction defect. Block it and
|
|
320
|
-
name the fix. Grep the composition files for stray `linear`, `ease`, or easing
|
|
426
|
+
Record which test failed in the table. Grep the composition files for stray `linear`, `ease`, or easing
|
|
321
427
|
values not in the spec, and durations that are not multiples of the base unit.
|
|
322
428
|
|
|
323
429
|
## 9. Corrections become rules
|
|
@@ -352,6 +458,7 @@ corrections. In `--review`, a scene that repeats a correction already logged in
|
|
|
352
458
|
|
|
353
459
|
| Symptom | Fix |
|
|
354
460
|
|---|---|
|
|
461
|
+
| Could be a competitor's film | Section 2b: rewrite the idea until no competitor's film fits it |
|
|
355
462
|
| Looks generic | Replace stock gradient and centered title with real product UI on the phi or thirds anchor |
|
|
356
463
|
| Looks cheap | Cut overshoot, cut glow, drop to one accent, add holds |
|
|
357
464
|
| Feels inconsistent | Audit easing and transitions against the spec |
|
|
@@ -369,4 +476,6 @@ Skill Me `motion-color-and-light` and `kinetic-typography` (MIT). The rule forma
|
|
|
369
476
|
freedom levels, and corrections loop follow ideas from The Design Guy, "AI finally
|
|
370
477
|
designs like me" (YouTube, 2026-09-27). Section 3b follows ideas from Pixova,
|
|
371
478
|
"How to make AI images look less like AI". `references/shot-prompting.md` is
|
|
372
|
-
adapted from Replicate `prompt-images` (Apache-2.0).
|
|
479
|
+
adapted from Replicate `prompt-images` (Apache-2.0). The one-idea gate, category
|
|
480
|
+
clichés, and still tests are adapted from kaankiziltug `logo-design` (MIT). See
|
|
481
|
+
ATTRIBUTION.md.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Fallback palettes
|
|
2
|
+
|
|
3
|
+
From huashu-art-motion `色板.md` (MIT). Use only when section 0 finds no design
|
|
4
|
+
system and no style card sets a palette. Keys: bg, surface, ink, sub, accent,
|
|
5
|
+
accent2.
|
|
6
|
+
|
|
7
|
+
| Name | Fits | bg | surface | ink | sub | accent | accent2 |
|
|
8
|
+
|---|---|---|---|---|---|---|---|
|
|
9
|
+
| paper | humanities, history | #F3EDE2 | #FBF8F2 | #1B1A17 | #6B655B | #C8402F | #2F5D62 |
|
|
10
|
+
| poster | opinion, conflict | #FFD23F | #FFF6D6 | #111111 | #4A4433 | #FF5A36 | #14213D |
|
|
11
|
+
| ink | tech, night | #121417 | #1E2226 | #F2EFE8 | #A39E93 | #F2B33D | #5FB3A1 |
|
|
12
|
+
| navy | product, data | #0D1B2A | #16293D | #EEF3F6 | #8FA3B3 | #5CC8E0 | #F2A93B |
|
|
13
|
+
| bauhaus | design, structure | #EFE9DD | #FFFFFF | #111111 | #555555 | #D62828 | #1D4E89 |
|
|
14
|
+
| snow | medical, clean | #E9EEF0 | #FFFFFF | #1F2A30 | #5E6B72 | #D9482B | #3E7C8C |
|
|
15
|
+
| wood | home, craft | #EDE3D1 | #F7F1E6 | #2B2622 | #7A6E62 | #C4552D | #3F5B4B |
|
|
16
|
+
| chalk | lessons, proofs | #23302B | #2E3D37 | #F1EFE6 | #A9B3AA | #F4D35E | #E87D5A |
|
|
17
|
+
|
|
18
|
+
Rules: pick a light or dark base once and never alternate it. The accent points
|
|
19
|
+
at one thing per shot. No gradient base and no neon outer glow; depth comes from
|
|
20
|
+
grain or two flat tones. One or two accents may come from real screenshots while
|
|
21
|
+
the base stays. On the contact sheet, any shot with a color from "another film" is
|
|
22
|
+
a defect.
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Changelog — luckiest-video-studio-director
|
|
2
2
|
|
|
3
|
+
## 1.5.0 — 2026-10-12
|
|
4
|
+
|
|
5
|
+
- Anchored 1-10 scale in the score loop and a Style fidelity score when a style is set.
|
|
6
|
+
- `references/jury.md`: independent read-only jury and revise prompts (from mg-styles-15, MIT), run in a fresh subagent before sign-off, at most two rounds.
|
|
7
|
+
- Six new anti-patterns: copying the sample, no concrete object, dead background, real material drawn in code, a new look every shot, no thread (from huashu-art-motion, MIT).
|
|
8
|
+
|
|
3
9
|
## 1.4.0 — 2026-10-12
|
|
4
10
|
|
|
5
11
|
- PAGE check under the creative intent, and a nine-row brand inventory before any idea.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: video-studio-director
|
|
2
|
+
name: luckiest-video-studio-director
|
|
3
3
|
description: >-
|
|
4
4
|
Creative director for luckiest-video-studio runs. Owns the idea and the
|
|
5
5
|
quality bar: turns a request into a one-line creative intent, picks the angle
|
|
@@ -18,7 +18,7 @@ user-invocable: true
|
|
|
18
18
|
license: MIT. See ATTRIBUTION.md
|
|
19
19
|
allowed-tools: Bash, Read, Write, Edit, Glob, Grep, AskUserQuestion
|
|
20
20
|
metadata:
|
|
21
|
-
version: "1.
|
|
21
|
+
version: "1.5.0"
|
|
22
22
|
listing_id: luckiest-video-studio-director
|
|
23
23
|
author: luckiest
|
|
24
24
|
---
|
|
@@ -32,11 +32,11 @@ idea, the order, and the quality bar, and it signs off before the full render.
|
|
|
32
32
|
## Staying current
|
|
33
33
|
|
|
34
34
|
On activation, call the Luckiest MCP `check_updates` tool with
|
|
35
|
-
`{ listingId: "luckiest-video-studio-director", installedSemver: "1.
|
|
35
|
+
`{ listingId: "luckiest-video-studio-director", installedSemver: "1.5.0" }`. If
|
|
36
36
|
`upToDate: false`, surface the `notice` once and continue. Never block on it.
|
|
37
37
|
|
|
38
38
|
When done, call `report_usage` once with
|
|
39
|
-
`{ listing_id: "luckiest-video-studio-director", skill_version: "1.
|
|
39
|
+
`{ listing_id: "luckiest-video-studio-director", skill_version: "1.5.0", matched: true, success: <true|false> }`.
|
|
40
40
|
Metadata only, never prompt text. Skip silently if unavailable.
|
|
41
41
|
|
|
42
42
|
## Standing rules
|
|
@@ -232,7 +232,11 @@ Run before the full render and before showing the user any cut.
|
|
|
232
232
|
ffmpeg -i preview.mp4 -vf "fps=1,scale=360:-1,tile=6x4" -frames:v 1 qa/contact.png
|
|
233
233
|
```
|
|
234
234
|
Then look at it.
|
|
235
|
-
2. Score each 1 to 10 with one line of evidence:
|
|
235
|
+
2. Score each 1 to 10 with one line of evidence. Anchor the scale: 5 is
|
|
236
|
+
competent student work, 6 a decent template, 7 solid professional, 8 high-end
|
|
237
|
+
agency, 9 award shortlist. Most first cuts are 5 to 7. With a `style` set,
|
|
238
|
+
add **Style fidelity**: every signature feature on the style card is on screen
|
|
239
|
+
and correct.
|
|
236
240
|
|
|
237
241
|
| Score | 8 means |
|
|
238
242
|
|---|---|
|
|
@@ -263,6 +267,12 @@ Run before the full render and before showing the user any cut.
|
|
|
263
267
|
Write every round to `<run-dir>/qa/director-score.md`. Only then hand back to the
|
|
264
268
|
studio for the full render and its judge step.
|
|
265
269
|
|
|
270
|
+
**Independent jury.** Your scores are the maker's scores. Before sign-off, run
|
|
271
|
+
[references/jury.md](references/jury.md) in a fresh subagent that sees only
|
|
272
|
+
`final.mp4`, `brief.md` and the style card, and save its review to
|
|
273
|
+
`<run-dir>/review/jury-1.md`. Apply its fixes with the revise prompt, at most two
|
|
274
|
+
rounds. Ask before spending a second model on it when the user set a budget.
|
|
275
|
+
|
|
266
276
|
## 6. Sign-off
|
|
267
277
|
|
|
268
278
|
Give the user the creative intent, the angle, the contact sheet, and the final
|
|
@@ -281,6 +291,12 @@ tribe for a second eye. Never post automatically.
|
|
|
281
291
|
| A scene that creates no belief | Run the delete test and cut it |
|
|
282
292
|
| Every scene is "the point" | Re-rate importance; at most a quarter are 3 |
|
|
283
293
|
| Long static end card | Hold 0.6 to 1.4 seconds, then end |
|
|
294
|
+
| Copying the sample | A style card's beat seed or a reference's layout pasted in. Keep the technique, recompose for this topic |
|
|
295
|
+
| No concrete object | Every shot names a noun and what it does. No object, no shot |
|
|
296
|
+
| Dead background | A large area unchanged while a small piece moves. The hero fills at least half the frame; the background changes with the content |
|
|
297
|
+
| Real material drawn in code | Screenshots, photos and quotes go full frame; code only annotates them |
|
|
298
|
+
| A new look every shot | One style, one palette, one clock for the film |
|
|
299
|
+
| No thread | One example (the same invoice, the same hands) runs through the whole film; the last shot is the hero acting or a pull back to the whole |
|
|
284
300
|
| Could be any brand's film | Rework from the brand inventory until it fails the cover-the-logo test for competitors |
|
|
285
301
|
|
|
286
302
|
## Reference
|