@devinilabs/reelstack 1.2.0

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.
Files changed (145) hide show
  1. package/LICENSE +128 -0
  2. package/README.md +125 -0
  3. package/cli/beats.js +124 -0
  4. package/cli/bootstrap.js +124 -0
  5. package/cli/capture.js +34 -0
  6. package/cli/direction.js +114 -0
  7. package/cli/icons.js +49 -0
  8. package/cli/index.js +101 -0
  9. package/cli/init.js +253 -0
  10. package/cli/license.js +168 -0
  11. package/cli/lint.js +865 -0
  12. package/cli/preview.js +59 -0
  13. package/cli/render.js +404 -0
  14. package/cli/scaffold.js +239 -0
  15. package/cli/smoke.js +76 -0
  16. package/cli/update.js +26 -0
  17. package/cli/utils.js +184 -0
  18. package/docs/buyers-guide.md +220 -0
  19. package/docs/design-discipline.md +130 -0
  20. package/docs/family-galleries/dark.md +95 -0
  21. package/docs/family-galleries/forbidden.md +78 -0
  22. package/docs/family-galleries/glass.md +98 -0
  23. package/docs/family-galleries/paper.md +82 -0
  24. package/docs/family-galleries/warm.md +86 -0
  25. package/docs/superpowers/plans/2026-05-09-reelstack-init-readiness-gate.md +1166 -0
  26. package/docs/superpowers/specs/2026-05-09-reelstack-init-readiness-gate-design.md +233 -0
  27. package/families/dark/components/DriftingSpotlights.tsx +59 -0
  28. package/families/dark/components/FilmGrain.tsx +44 -0
  29. package/families/dark/components/ForestCard.tsx +43 -0
  30. package/families/dark/components/GridBackground.tsx +29 -0
  31. package/families/dark/components/RadialVignette.tsx +21 -0
  32. package/families/dark/components/Scanlines.tsx +35 -0
  33. package/families/dark/components/SegmentOpacity.ts +37 -0
  34. package/families/dark/components/index.ts +13 -0
  35. package/families/dark/index.ts +31 -0
  36. package/families/dark/palette.ts +98 -0
  37. package/families/dark/presets/claudedispatch.ts +46 -0
  38. package/families/dark/presets/codedrop.ts +37 -0
  39. package/families/dark/presets/gpt55.ts +54 -0
  40. package/families/dark/presets/notebooklm.ts +50 -0
  41. package/families/dark/presets/resourcescta.ts +35 -0
  42. package/families/dark/presets/skills.ts +40 -0
  43. package/families/dark/presets/stitch.ts +46 -0
  44. package/families/dark/presets/stitch2.ts +43 -0
  45. package/families/dark/typography.ts +16 -0
  46. package/families/forbidden/components/ForbiddenCausticBlobs.tsx +52 -0
  47. package/families/forbidden/components/NewsprintTexture.tsx +28 -0
  48. package/families/forbidden/components/TintedShadow.tsx +36 -0
  49. package/families/forbidden/components/index.ts +38 -0
  50. package/families/forbidden/index.ts +17 -0
  51. package/families/forbidden/palette.ts +88 -0
  52. package/families/forbidden/presets/heretic.ts +44 -0
  53. package/families/forbidden/typography.ts +18 -0
  54. package/families/glass/components/BreakdownCard.tsx +158 -0
  55. package/families/glass/components/CausticBlobs.tsx +49 -0
  56. package/families/glass/components/Counter.tsx +72 -0
  57. package/families/glass/components/EyebrowPill.tsx +59 -0
  58. package/families/glass/components/FilmStrip.tsx +202 -0
  59. package/families/glass/components/FloatingGlyphs.tsx +78 -0
  60. package/families/glass/components/GlassCard.tsx +58 -0
  61. package/families/glass/components/GlassCardBezel.tsx +45 -0
  62. package/families/glass/components/HairlineGrid.tsx +30 -0
  63. package/families/glass/components/IridescentRing.tsx +114 -0
  64. package/families/glass/components/IridescentText.tsx +98 -0
  65. package/families/glass/components/LightBeam.tsx +46 -0
  66. package/families/glass/components/ParticleBurst.tsx +62 -0
  67. package/families/glass/components/SonarRings.tsx +81 -0
  68. package/families/glass/components/StaggeredWords.tsx +74 -0
  69. package/families/glass/components/index.ts +20 -0
  70. package/families/glass/index.ts +31 -0
  71. package/families/glass/palette.ts +93 -0
  72. package/families/glass/presets/claudewatch.ts +64 -0
  73. package/families/glass/presets/claudewatchcta.ts +43 -0
  74. package/families/glass/presets/graphify.ts +45 -0
  75. package/families/glass/presets/gstack.ts +48 -0
  76. package/families/glass/presets/jcode.ts +50 -0
  77. package/families/glass/presets/lilagents.ts +52 -0
  78. package/families/glass/presets/paperclip.ts +43 -0
  79. package/families/glass/typography.ts +15 -0
  80. package/families/index.ts +49 -0
  81. package/families/paper/components/CardSpring.tsx +42 -0
  82. package/families/paper/components/CreamGrid.tsx +26 -0
  83. package/families/paper/components/EditorialSerifText.tsx +51 -0
  84. package/families/paper/components/GreenAccentCard.tsx +10 -0
  85. package/families/paper/components/PaperShadow.tsx +30 -0
  86. package/families/paper/components/ScaleBlurText.tsx +40 -0
  87. package/families/paper/components/index.ts +11 -0
  88. package/families/paper/index.ts +23 -0
  89. package/families/paper/palette.ts +102 -0
  90. package/families/paper/presets/designreel.ts +32 -0
  91. package/families/paper/presets/devini3d.ts +45 -0
  92. package/families/paper/presets/justdrop.ts +39 -0
  93. package/families/paper/presets/opus.ts +48 -0
  94. package/families/paper/typography.ts +17 -0
  95. package/families/warm/components/AccentGlow.tsx +60 -0
  96. package/families/warm/components/BentoCell.tsx +56 -0
  97. package/families/warm/components/BentoGrid.tsx +30 -0
  98. package/families/warm/components/FilmGrain.tsx +36 -0
  99. package/families/warm/components/ScaleBlurCounter.tsx +71 -0
  100. package/families/warm/components/WarmSurface.tsx +35 -0
  101. package/families/warm/components/index.ts +11 -0
  102. package/families/warm/index.ts +19 -0
  103. package/families/warm/palette.ts +81 -0
  104. package/families/warm/presets/huashu.ts +49 -0
  105. package/families/warm/presets/mempalace.ts +51 -0
  106. package/families/warm/typography.ts +17 -0
  107. package/package.json +85 -0
  108. package/reference/dark/claudedispatch.tsx +2441 -0
  109. package/reference/dark/notebooklm.tsx +2316 -0
  110. package/reference/dark/stitch.tsx +3040 -0
  111. package/reference/forbidden/heretic.tsx +2636 -0
  112. package/reference/glass/claudewatch.tsx +3827 -0
  113. package/reference/glass/graphify.tsx +2418 -0
  114. package/reference/glass/paperclip.tsx +2218 -0
  115. package/reference/paper/designreel.tsx +883 -0
  116. package/reference/paper/justdrop.tsx +1898 -0
  117. package/reference/paper/opus.tsx +1770 -0
  118. package/reference/warm/huashu.tsx +3413 -0
  119. package/reference/warm/mempalace.tsx +2909 -0
  120. package/skill/SKILL.md +229 -0
  121. package/skill/commands/reelstack-beats.md +20 -0
  122. package/skill/commands/reelstack-capture.md +24 -0
  123. package/skill/commands/reelstack-critique.md +15 -0
  124. package/skill/commands/reelstack-dark.md +40 -0
  125. package/skill/commands/reelstack-direction.md +17 -0
  126. package/skill/commands/reelstack-forbidden.md +25 -0
  127. package/skill/commands/reelstack-glass.md +39 -0
  128. package/skill/commands/reelstack-icons.md +22 -0
  129. package/skill/commands/reelstack-init.md +17 -0
  130. package/skill/commands/reelstack-lint.md +22 -0
  131. package/skill/commands/reelstack-paper.md +36 -0
  132. package/skill/commands/reelstack-render.md +20 -0
  133. package/skill/commands/reelstack-warm.md +36 -0
  134. package/templates/dark/template.tsx +115 -0
  135. package/templates/forbidden/template.tsx +111 -0
  136. package/templates/glass/template.tsx +201 -0
  137. package/templates/paper/template.tsx +133 -0
  138. package/templates/warm/template.tsx +210 -0
  139. package/utils/ai-purple-blocklist.ts +13 -0
  140. package/utils/banned-fonts.ts +11 -0
  141. package/utils/cubic-bezier.ts +36 -0
  142. package/utils/easing.ts +84 -0
  143. package/utils/grid.ts +13 -0
  144. package/utils/render-presets.json +56 -0
  145. package/utils/safe-zones.tsx +57 -0
package/skill/SKILL.md ADDED
@@ -0,0 +1,229 @@
1
+ ---
2
+ name: reelstack
3
+ description: Use when the user invokes any /reelstack-* command, asks to scaffold a reel, make a 9:16 video for Instagram/TikTok/Shorts/YouTube Shorts, names one of the 5 style families (Glass Iridescent, Cream Paper, Dark Cinematic, Warm Signature, Forbidden), or names one of the 22 presets (graphify, paperclip, gstack, lilagents, jcode, claudewatch, claudewatchcta, justdrop, opus, designreel, devini3d, stitch, stitch2, codedrop, claudedispatch, notebooklm, gpt55, resourcescta, skills, huashu, mempalace, heretic). Premium 9:16 Reel OS for Remotion. Scaffolds production-grade reels with audio-locked motion, IG-safe layouts, and palette + BEAT structure copied from real Devini Labs reels.
4
+ allowed-tools: Bash, Read, Write, Edit, AskUserQuestion
5
+ argument-hint: "[family] [--preset=<name>] [--name=<MyReel>] [--vo=<path.wav>]"
6
+ homepage: https://reelstack.dev
7
+ repository: https://github.com/devinilabs/reelstack
8
+ license: Commercial (see LICENSE in package)
9
+ user-invocable: true
10
+ ---
11
+
12
+ # ReelStack — Premium 9:16 Reel OS for Remotion
13
+
14
+ ReelStack packages the **Devini Labs reel aesthetic** — five cinematic style families, twenty-two production-tested presets, a whisper-locked audio pipeline, and a hand-tuned motion vocabulary — into a Claude Code skill plus a companion CLI installed at `~/.reelstack/`.
15
+
16
+ When a `/reelstack-*` command fires, you scaffold a complete `<Name>Reel.tsx` Remotion composition: palette inlined, primitives imported, BEAT skeleton in place, IG safe zones reserved, and the new comp registered in `src/Root.tsx`. From scaffold to first preview render in under 60 seconds.
17
+
18
+ > **License gate.** ReelStack is a paid product. If `~/.reelstack/.license` is missing, invalid, or older than 7 days, every command except `preview` short-circuits and tells the buyer to run `npx @devinilabs/reelstack init`. Each license activates up to 3 machines (rolling 30-day window).
19
+
20
+ ---
21
+
22
+ ## Design discipline & productivity influences
23
+
24
+ ReelStack v1.1+ bakes in two outside influences so buyers don't think about taste at all — they just trigger a slash command and inherit curator-grade design + huashu-style productivity patterns:
25
+
26
+ - **`leonxlnx/taste-skill`** (MIT) — design-discipline rules baked directly into ReelStack's components, palettes, and lint. Anti-emoji, font lockdown (Geist/Geist Mono only — Inter / Roboto / Helvetica banned), no pure `#000000`, max one accent per family at <80% saturation, hardware-accel-only animations (transform + opacity), spring-physics defaults, anti-AI-purple (`#7c3aed` family blocked), `prefers-reduced-motion` parity via the `reduceMotion` prop on every motion component, 4-px grid alignment, complete-output discipline. Per-family overlays: **Glass = Soft + General**, **Cream Paper = Minimalist + Soft**, **Dark Cinematic = Brutalist Tactical + General**, **Warm Signature = Minimalist + Soft**, **Forbidden = Brutalist Swiss Industrial**. Variant-specific components shipped: `<GlassCardBezel />` (Soft Double-Bezel), `<Scanlines />` (Brutalist Tactical CRT), `<NewsprintTexture />` (Brutalist Swiss substrate), `<EditorialSerifText />` (Minimalist serif hero).
27
+ - **`alchaincyf/huashu-design`** (Personal Use Only — pattern inspiration only, no code/text copied) — productivity-UX patterns adapted to Remotion. Implemented as: `/reelstack-direction "<brief>"` (Design Direction Advisor: 3 family picks for vague briefs), `/reelstack-lint <file> --critique` (5-dimension expert critique radar), `/reelstack-render --format=mp4,gif --bgm=<path> --interpolate=60` (multi-format + BGM + 60fps interpolation), pre-render frame-smoke check (verifies frame 0 / mid / last aren't all-black before rendering). The Warm Signature family's `huashu` preset is named for AlchainHust's project — natural credit hook.
28
+
29
+ The full influence map and rule citations live at `~/.reelstack/docs/design-discipline.md`.
30
+
31
+ ---
32
+
33
+ ## Reference reels (v1.1.1+)
34
+
35
+ ReelStack ships **12 reference reels** at `~/.reelstack/reference/<family>/<preset>.tsx` — production-tested Devini Labs reels with asset imports stripped (look for `REFERENCE-STRIP` markers). Use them as canonical examples of each family's motion vocabulary when scaffolding or iterating.
36
+
37
+ | Family | References available |
38
+ |---|---|
39
+ | Glass Iridescent | graphify · paperclip · claudewatch |
40
+ | Cream Paper | justdrop · opus · designreel |
41
+ | Dark Cinematic | stitch · claudedispatch · notebooklm |
42
+ | Warm Signature | huashu · mempalace |
43
+ | Forbidden | heretic |
44
+
45
+ **When you (Claude) scaffold a reel:**
46
+ 1. After the CLI scaffolds the file, check `~/.reelstack/reference/<family>/<preset>.tsx`.
47
+ 2. If it exists, READ it before answering any "make my reel feel more like X" follow-up.
48
+ 3. Use its JSX scene composition as a model — same primitives, same BEAT spacing, same camera moves.
49
+ 4. Quote specific scene names ("the RevealScene in graphify uses…") when explaining design choices to the buyer.
50
+
51
+ **Buyer-facing usage:**
52
+ - `/reelstack-glass --preset=graphify` automatically references `glass/graphify.tsx`.
53
+ - `/reelstack-glass --preset=graphify --reference=claudewatch` overrides to use ClaudeWatchReel as the iteration model.
54
+ - See `~/.reelstack/docs/design-discipline.md` for the full pattern catalog.
55
+
56
+ **Reference license:** study + adapt patterns OK. Verbatim re-publication as your own paid template NOT OK. See LICENSE.
57
+
58
+ ---
59
+
60
+ ## When to invoke ReelStack
61
+
62
+ Trigger this skill when the user:
63
+
64
+ - Runs any of the 11 `/reelstack-*` slash commands.
65
+ - Asks to "scaffold a reel", "make a 9:16 video", "build an Instagram/TikTok/Shorts/YouTube Shorts reel".
66
+ - Names one of the 5 style families: **Glass Iridescent**, **Cream Paper**, **Dark Cinematic**, **Warm Signature**, **Forbidden**.
67
+ - Names one of the 22 presets: **Glass** (graphify, paperclip, gstack, lilagents, jcode, claudewatch, claudewatchcta), **Paper** (justdrop, opus, designreel, devini3d), **Dark** (stitch, stitch2, codedrop, claudedispatch, notebooklm, gpt55, resourcescta, skills), **Warm** (huashu, mempalace), **Forbidden** (heretic).
68
+ - Asks to convert a voiceover into BEAT constants, or "lock motion to audio".
69
+ - Asks to render a reel for IG, TikTok, or Shorts with the right encode flags.
70
+ - Asks to validate a reel against IG safe zones / motion floors / hero-text fit.
71
+
72
+ **Do not invoke** for 16:9 YouTube content (out of scope in v1.0), generic Remotion questions unrelated to reels, or non-Remotion video work.
73
+
74
+ ---
75
+
76
+ ## The 13 slash commands
77
+
78
+ | Command | What it does |
79
+ |---|---|
80
+ | `/reelstack-glass` | Scaffold a **Glass Iridescent** reel. Light lavender + iridescent particles. Presets: claudewatch (default), graphify, paperclip, gstack, lilagents, jcode, claudewatchcta. |
81
+ | `/reelstack-paper` | Scaffold a **Cream Paper** reel. Warm cream + dark-green cards. Presets: justdrop (default), opus, designreel, devini3d. |
82
+ | `/reelstack-dark` | Scaffold a **Dark Cinematic** reel. Zinc void + drifting spotlights. Presets: claudedispatch (default), stitch, stitch2, codedrop, notebooklm, gpt55, resourcescta, skills. |
83
+ | `/reelstack-warm` | Scaffold a **Warm Signature** reel. Single-accent rule, amber signature. Presets: huashu (default), mempalace. |
84
+ | `/reelstack-forbidden` | Scaffold a **Forbidden** reel. Cream-rose + ember + crimson. Preset: heretic (auto-defaults silently — only one preset). |
85
+ | `/reelstack-init` | First-time setup. License verify, ffmpeg + whisper-cpp dependency check, scaffold a starter Demo.tsx. |
86
+ | `/reelstack-direction "<brief>"` | Design Direction Advisor — return 3 differentiated family picks for a vague brief (one-sentence input). |
87
+ | `/reelstack-beats <vo.wav>` | Run whisper-cli on a voiceover and print frame-accurate `BEAT` constants ready to paste. |
88
+ | `/reelstack-capture <url>` | Wrap the user's existing reel-capture skill to grab product screenshots into `public/captures/`. |
89
+ | `/reelstack-icons <brand>` | Wrap better-icons CLI to fetch real brand SVGs (logos:react, logos:next-js, etc.) into `public/icons/`. |
90
+ | `/reelstack-render <id> [--platform=ig\|tiktok\|shorts]` | Render with platform-optimal H.264 / bitrate / color flags + IG safe-zone validation. |
91
+ | `/reelstack-lint <file>` | Validate motion floors (≥4 layers in opener, ≥3 in anchors), IG safe zones, hero-text fit, audio lock. |
92
+ | `/reelstack-critique <file>` | 5-dimension expert critique radar (palette · motion · timing · hierarchy · brand fit) + Keep/Fix/Quick punch list. |
93
+
94
+ ### Slash-command flow (every family command)
95
+
96
+ 1. **Verify license first** by running `node ~/.reelstack/cli/index.js --verify` and checking exit code. If non-zero, print: *"ReelStack license missing or expired. Run `npx @devinilabs/reelstack init` to activate."* and stop.
97
+ 2. **If `--preset` is missing**, present the family-specific preset menu defined in each command stub (`~/.claude/commands/reelstack-<family>.md`). Every menu lists the family's presets with one-line use-cases and marks the recommended default. Print the menu verbatim, wait for the buyer's reply (number or preset key), and map to the canonical preset before continuing. **Forbidden auto-defaults to `heretic`** with a one-line confirmation — no menu, since it has only one preset.
98
+ 3. **If `--name` or `--vo` is missing**, ask the user via `AskUserQuestion`.
99
+ 4. **Shell to the scaffolder:**
100
+ ```bash
101
+ node ~/.reelstack/cli/index.js scaffold \
102
+ --family=<family> \
103
+ --preset=<preset> \
104
+ --name=<Name> \
105
+ [--vo=<path>]
106
+ ```
107
+ 5. **Surface the reference doc.** Read `~/.reelstack/docs/family-galleries/<family>.md` and print: palette swatches, primitive list, motion vocabulary, "must-have" rules. (This is the recall-by-slash-command behavior the buyer paid for.)
108
+ 6. **Read the reference reel** if `~/.reelstack/reference/<family>/<preset>.tsx` exists — internalize its JSX scene composition, BEAT timing, and motion choreography for any iteration follow-ups.
109
+ 7. **Offer Studio.** Ask: *"Open Remotion Studio now? (Y/n)"* — if yes, run `npm run dev` in the user's CWD (background).
110
+
111
+ ---
112
+
113
+ ## Family taxonomy
114
+
115
+ Each family declares a palette, a set of primitives, a recommended frame range, and the rules that make it feel coherent. Presets within a family share these foundations and differ only in palette accents, frame count, and BEAT structure.
116
+
117
+ ### Glass Iridescent — `~/.reelstack/families/glass/`
118
+
119
+ - **Palette base.** Lavender cream `#EFEAF2` background, iridescent stops cyan `#7FE8D4` · violet `#8B7FE8` · rose `#E89BC4` · gold `#F2D88F`.
120
+ - **Primitives.** `CausticBlobs`, `HairlineGrid`, `GlassCard`, `EyebrowPill`, `StaggeredWords`, `Counter`, `SonarRings`, `ParticleBurst`, `LightBeam`, `FloatingGlyphs`.
121
+ - **Presets.** graphify (1956f) · paperclip (1650f) · gstack (2820f) · lilagents (2160f) · jcode (2164f) · claudewatch (3156f) · claudewatchcta (240f).
122
+ - **Mood.** Premium product reveal. Underwater-light caustics, glass surfaces, iridescent text shimmer.
123
+ - **House rules.** Glass cards always over textured background (caustics + grid). Floating glyphs use unicode math symbols only — **no emojis ever**.
124
+
125
+ ### Cream Paper — `~/.reelstack/families/paper/`
126
+
127
+ - **Palette base.** Cream `#f0ede8`, dark-green cards `#1e3a27`, Claude terracotta accent `#D4663A`, paper grid `#e5e2dd`.
128
+ - **Primitives.** `CardSpring`, `ScaleBlurText`, `CreamGrid`, `GreenAccentCard`, `PaperShadow`.
129
+ - **Presets.** justdrop (1760f) · opus (3330f) · designreel (300f) · devini3d (1170f).
130
+ - **Mood.** Editorial print. Warm, document-like, with depth in the dark-green card stack.
131
+ - **House rules.** Light text on cream is `#1a1a1a` heading / `#2d2d2d` body / `#6b6b6b` muted. Card springs use damping 20, stiffness 200.
132
+
133
+ ### Dark Cinematic — `~/.reelstack/families/dark/`
134
+
135
+ - **Palette base.** Zinc void `#0a0a0b` (lifted `#141416`), Claude terracotta `#D4663A`, semantic accents (danger `#e25822`, safe `#4fc46a`).
136
+ - **Primitives.** `DriftingSpotlights`, `RadialVignette`, `SegmentOpacity` (the `so()` helper), `Crossfade`, `GridBackground`.
137
+ - **Presets.** stitch (2297f) · stitch2 (600f) · codedrop (1110f) · claudedispatch (2220f) · notebooklm (1680f) · gpt55 (2900f) · resourcescta (210f) · skills (1260f).
138
+ - **Mood.** Premium ad-film, late-night mood, mood-lit cards. Multi-brand accents allowed (NotebookLM blue, Stitch rose).
139
+ - **House rules.** Crossfades always 0.45s in / 0.55s out. Drifting spotlights at 0.003–0.004 sine drift. Each scene declared as an entry in a `SEGS` array.
140
+
141
+ ### Warm Signature — `~/.reelstack/families/warm/`
142
+
143
+ - **Palette base.** Warm zinc `#1a1610`, amber `#f99c00` (signature), emerald payoff `#00d294`, red wall `#ef4444`.
144
+ - **Primitives.** `BentoGrid`, `AccentGlow`, `ScaleBlurCounter`, `FilmGrain`, `WarmSurface`.
145
+ - **Presets.** huashu (2984f) · mempalace (2520f, parchment-gold variant).
146
+ - **Mood.** Confident product launch. Strict single-accent rule.
147
+ - **House rules.** Exactly **one primary accent** (amber) with one payoff (emerald) and one negative (red). No other hues. Bento grids for feature matrices.
148
+
149
+ ### Forbidden — `~/.reelstack/families/forbidden/`
150
+
151
+ - **Palette base.** Cream-rose paper `#F2EBE5`, ember `#D97757`, crimson `#C4506B`, ultraviolet `#6B5BD9`, plasma `#A87FE8`.
152
+ - **Primitives.** Inherits from Glass (`CausticBlobs`, `GlassCard`, `EyebrowPill`, etc.) but with tinted shadows for cream backgrounds.
153
+ - **Presets.** heretic (1639f).
154
+ - **Mood.** Forbidden, mysterious, slightly off-kilter. Desaturated palette suggests something declassified.
155
+ - **House rules.** Shadows tinted with rose-purple (`rgba(120,80,120,…)`) instead of pure black. No iridescent gold (gold is for Glass).
156
+
157
+ > Full palette tokens, BEAT structures, and per-preset specs live in `~/.reelstack/docs/family-galleries/<family>.md`. Read those when a slash command fires — they are the reference the buyer paid for.
158
+
159
+ ---
160
+
161
+ ## House pipeline (every reel inherits these rules)
162
+
163
+ 1. **IG safe zones.** Every scaffold reserves the top 280 px and bottom 422 px of the 1920 px canvas. Hero copy and CTAs stay between these bands. The `<SafeZones />` overlay component (off in production, on during dev) shows the reserved bands as a 5%-opacity tint.
164
+ 2. **Motion floors.** Opener (frames 0–180) needs **≥ 4 simultaneous motion layers**. Anchor scenes (CTA, stat reveal, hero turn) need **≥ 3**. `reelstack lint` enforces this.
165
+ 3. **Audio lock.** Voiceover beats come from `whisper-cli` SRT, never eyeballed. `/reelstack-beats` runs `ffmpeg → 16 kHz mono → whisper-cli → SRT → BEAT` constants. Empirical drift on 90-second clips when eyeballed: 6+ seconds. Audio lock is non-negotiable.
166
+ 4. **Hero text fit.** 5-digit MONO counters cap at 256 px width. Counter and caption sit on separate vertical bands (baseline + gap). Wrapped text scales down before it overflows.
167
+ 5. **Sequence timing.** When a scene starts mid-composition with `<OffthreadVideo>`, wrap it in `<Sequence from={X}>`. Inside the Sequence, `useCurrentFrame()` returns LOCAL frames — don't subtract X.
168
+ 6. **Real brand assets.** Tech logos pulled via `better-icons get logos:<brand> > public/icons/<brand>.svg`. Never hand-draw a brand mark.
169
+ 7. **GSAP vocabulary.** Easings (`power4Out`, `expoOut`, `backOut`, `bouncy`, `gentle`) live in `~/.reelstack/utils/easing.ts` and are exposed to every scaffold. Spring configs match design-system.md (snappy, gentle, bouncy, glass).
170
+
171
+ The lint command (`/reelstack-lint <file>`) statically analyzes a scaffolded reel and reports violations of rules 1, 2, 4, and 6. Rules 3 and 5 are enforced at scaffold time.
172
+
173
+ ---
174
+
175
+ ## Companion CLI surface (~/.reelstack/cli/index.js)
176
+
177
+ The skill never edits files directly — it shells to the CLI. The CLI is the only place that touches disk, so license enforcement, scaffolding, and rendering all flow through one binary.
178
+
179
+ ```text
180
+ reelstack init # first-time setup, license verify, dep check
181
+ reelstack scaffold <flags> # copy template, inject preset, patch Root.tsx
182
+ reelstack beats <vo.wav> # whisper-cli wrapper → BEAT constants
183
+ reelstack capture <url> # delegate to reel-capture skill
184
+ reelstack icons <brand> # delegate to better-icons CLI
185
+ reelstack render <id> [--platform=ig|tiktok|shorts]
186
+ reelstack lint <file> # validate motion floors, safe zones, audio lock
187
+ reelstack preview # 10s demo render — no license required
188
+ reelstack update # re-verify license; pull latest presets
189
+ reelstack --version
190
+ reelstack --verify # 0 if license valid; non-zero otherwise
191
+ ```
192
+
193
+ When in doubt, prefer `reelstack <subcommand> --help` over guessing.
194
+
195
+ ---
196
+
197
+ ## Buyer onboarding (what `init` does)
198
+
199
+ 1. Print the ReelStack ASCII banner.
200
+ 2. Prompt for license key (paste from email).
201
+ 3. POST `{license_key, machine_id}` to `https://devini.io/api/license/validate` (the key + a UUID generated on first install).
202
+ 4. On valid: cache key in `~/.reelstack/.license` (mode 600).
203
+ 5. Check Node ≥ 20, presence of `ffmpeg` and `whisper-cpp` (print `brew install` hints if missing).
204
+ 6. Copy the skill to `~/.claude/skills/reelstack/` and the 13 command stubs to `~/.claude/commands/`.
205
+ 7. Scaffold `~/.reelstack/{families,templates,utils,docs}` from the package.
206
+ 8. Run a smoke `reelstack scaffold --family=glass --preset=graphify --name=Demo` so the buyer immediately has a working `src/DemoReel.tsx`.
207
+ 9. Print: *"Run `npm run dev` to open Remotion Studio. Or type `/reelstack-glass` in Claude Code to make your next reel."*
208
+
209
+ ---
210
+
211
+ ## Anti-patterns (what to refuse)
212
+
213
+ - **Refuse to scaffold without an active license.** No exceptions, no test-mode flags. License gate is the product.
214
+ - **Refuse to mix family palettes.** A "Cream Paper but with Glass primitives" request should clarify with the user — palette tokens are family-locked for visual coherence.
215
+ - **Refuse to hand-draw brand SVGs.** Always route through `/reelstack-icons` so logos match the brand's actual marks.
216
+ - **Refuse to skip whisper for voiceover.** If the user says "just guess the beats", redirect to `/reelstack-beats`. The 6-second drift problem is real.
217
+ - **Refuse to render without IG safe-zone validation.** `/reelstack-render` runs `lint` first; if it fails, the render aborts unless the user passes `--force` (and the CLI prints a warning).
218
+
219
+ ---
220
+
221
+ ## Where to read more
222
+
223
+ - `~/.reelstack/docs/buyers-guide.md` — full setup walkthrough, troubleshooting.
224
+ - `~/.reelstack/docs/family-galleries/<family>.md` — every palette token, every primitive, every preset's BEAT structure.
225
+ - `~/.reelstack/utils/easing.ts` — GSAP→Remotion easing dictionary.
226
+ - `~/.reelstack/utils/safe-zones.tsx` — IG/TikTok/Shorts safe-zone overlay.
227
+ - `~/.reelstack/render-presets.json` — H.264 / bitrate / color flags per platform.
228
+
229
+ ReelStack is the result of 22 production reels. Treat the rules as earned, not guessed.
@@ -0,0 +1,20 @@
1
+ ---
2
+ allowed-tools: Bash, Read, Write
3
+ argument-hint: "<voiceover.wav> [--name=BEATS]"
4
+ description: Convert a voiceover .wav into frame-accurate BEAT constants by running ffmpeg + whisper-cli. Outputs a TypeScript const block ready to paste into a reel composition. The audio-locking workflow that prevents 6+ second drift on 90-second clips.
5
+ ---
6
+
7
+ You are invoking the **ReelStack** skill in **beats** mode.
8
+
9
+ This is the workflow that makes ReelStack reels feel professional — voiceover beats locked frame-accurately to whisper SRT, never eyeballed.
10
+
11
+ 1. Verify the license via `node ~/.reelstack/cli/index.js --verify`. If non-zero, refuse with the standard `init` CTA.
12
+ 2. Parse the input: `<voiceover.wav>` must be the first argument. If missing, ask the user for the path via `AskUserQuestion`.
13
+ 3. Shell to: `node ~/.reelstack/cli/index.js beats <path/to/vo.wav>`. The CLI will:
14
+ - Resample to 16 kHz mono via `ffmpeg -i $vo -ar 16000 -ac 1 -c:a pcm_s16le /tmp/v16k.wav`.
15
+ - Run `whisper-cli -m /tmp/ggml-base.en.bin -f /tmp/v16k.wav --output-srt -of /tmp/out`.
16
+ - Parse `/tmp/out.srt` and emit a TypeScript `const BEATS = { … }` block keyed by phrase → frame number (frames = `Math.round(seconds * 30)`).
17
+ 4. Surface the const block in the chat for the user to paste into their reel.
18
+ 5. **Important caveat to surface:** whisper base.en mishears tech jargon ("Claude" → "Cloud", "Remotion" → "Re-motion"). Tell the user: *"Use these timings frame-for-frame, but copy the on-screen text from your script — don't trust whisper's transcription for tech terms."*
19
+
20
+ User input: $ARGUMENTS
@@ -0,0 +1,24 @@
1
+ ---
2
+ allowed-tools: Bash, Read, Write
3
+ argument-hint: "<url> [--scroll] [--name=<slug>]"
4
+ description: Capture product screenshots or scroll-recordings from a URL into public/captures/<slug>/ for use in a reel scene. Wraps the user's existing reel-capture skill with ReelStack's slug + asset conventions.
5
+ ---
6
+
7
+ You are invoking the **ReelStack** skill in **capture** mode.
8
+
9
+ ReelStack delegates this to the user's existing `reel-capture` skill but enforces ReelStack's asset conventions.
10
+
11
+ 1. Verify the license via `node ~/.reelstack/cli/index.js --verify`.
12
+ 2. If `<url>` is missing, ask the user.
13
+ 3. Shell to: `node ~/.reelstack/cli/index.js capture <url> [--scroll] [--name=<slug>]`. The CLI:
14
+ - Validates the URL (no localhost / file:// / private IPs unless `--allow-local`).
15
+ - Activates the user's `reel-capture` skill via the `Skill` tool to drive the chrome-devtools MCP.
16
+ - Saves output under `public/captures/<slug>/` with conventional filenames: `hero.png` for stills, `frame_0001.png … frame_NNNN.png` for scroll recordings.
17
+ 4. Print a wiring snippet the user can paste into their reel:
18
+ ```tsx
19
+ import {staticFile} from "remotion";
20
+ <Img src={staticFile("captures/<slug>/hero.png")} style={{...}} />
21
+ ```
22
+ 5. **Never auto-edit** `src/<Name>Reel.tsx` — capture only writes assets. Wiring is the user's call.
23
+
24
+ User input: $ARGUMENTS
@@ -0,0 +1,15 @@
1
+ ---
2
+ allowed-tools: Bash, Read
3
+ argument-hint: "<src/MyReel.tsx>"
4
+ description: Run a 5-dimension expert critique on a reel — palette · motion · timing · hierarchy · brand fit. Outputs a radar score plus Keep/Fix/Quick punch list. Inspired by alchaincyf/huashu-design's 5-dimension expert critique pattern. Use this when /reelstack-lint passes but you want a deeper qualitative review.
5
+ ---
6
+
7
+ You are invoking ReelStack's **Critique** mode.
8
+
9
+ Flow:
10
+
11
+ 1. Verify license.
12
+ 2. Shell to: `node ~/.reelstack/cli/index.js lint <file> --critique`. Surface the radar + punch list verbatim.
13
+ 3. Offer to apply the "Quick" fixes (small ones — padding alignment, etc.) by editing the file directly. Always ask before editing.
14
+
15
+ User input: $ARGUMENTS
@@ -0,0 +1,40 @@
1
+ ---
2
+ allowed-tools: Bash, Read, Write, Edit, AskUserQuestion
3
+ argument-hint: "[--preset=stitch|stitch2|codedrop|claudedispatch|notebooklm|gpt55|resourcescta|skills] [--name=<MyReel>] [--vo=<path.wav>]"
4
+ description: Scaffold a Dark Cinematic 9:16 reel — zinc void + drifting spotlights + Claude terracotta + multi-brand accents. Premium ad-film mood. Presets carry exact palette and BEAT structure of StitchReel, Stitch2Reel, CodeDropReel, ClaudeDispatchReel, NotebookLMReel, GPT55Reel, ResourcesCTAReel, or SkillsReel.
5
+ ---
6
+
7
+ You are invoking the **ReelStack** skill in **Dark Cinematic** mode.
8
+
9
+ Follow the slash-command flow described in `~/.claude/skills/reelstack/SKILL.md`:
10
+
11
+ 1. Verify the license via `node ~/.reelstack/cli/index.js --verify`. If non-zero, refuse and direct the user to `npx @devinilabs/reelstack init`.
12
+
13
+ 2. **If `--preset` is missing from `$ARGUMENTS`**, print the menu below verbatim and wait for the user's reply. Map their reply (number or preset key) to the canonical preset key. If they're unsure, recommend `claudedispatch`.
14
+
15
+ ```
16
+ You're scaffolding a Dark Cinematic reel. Pick the preset that fits:
17
+
18
+ 1. claudedispatch (default) — Insider/secret reveal. Dispatch workflow with ForestCard surfaces.
19
+ 2. stitch — Multi-brand workflow showcase. Agent unlock narrative.
20
+ 3. stitch2 — 20-second clip-led teaser. Title lift over hero video.
21
+ 4. codedrop — Screen-rec overlay format. 30–40s tutorial reel.
22
+ 5. notebooklm — Integration reveal. Memory/RAG narrative.
23
+ 6. gpt55 — Long-form competitive thesis. Half-step narrative.
24
+ 7. resourcescta — 7-second outro / footer CTA.
25
+ 8. skills — Bento-grid feature/category showcase.
26
+
27
+ Reply with the number (1–8) or the preset key.
28
+ ```
29
+
30
+ 3. **If `--name` or `--vo` is missing**, ask via `AskUserQuestion`.
31
+
32
+ 4. Shell to: `node ~/.reelstack/cli/index.js scaffold --family=dark --preset=<preset> --name=<Name> [--vo=<path>]`.
33
+
34
+ 5. Print the family reference doc from `~/.reelstack/docs/family-galleries/dark.md`: palette (zinc `#0a0a0b`, terracotta `#D4663A`, semantic accents), primitives (DriftingSpotlights, RadialVignette, SegmentOpacity `so()`, Crossfade, GridBackground), and crossfade timing (0.45s in / 0.55s out).
35
+
36
+ 6. **Read the reference reel.** After scaffolding, check whether `~/.reelstack/reference/dark/<preset>.tsx` exists. If yes, READ it. Internalize the JSX scene composition, BEAT timing, and motion choreography. When the buyer asks for iteration help ("add a reveal scene like…", "make this section punchier", etc.), cite specific scenes from the reference reel ("ClaudeDispatch's ForestCard reveal at frame 90 layers a RadialVignette + DriftingSpotlights — let's mirror that").
37
+
38
+ 7. Offer to launch Remotion Studio.
39
+
40
+ User input: $ARGUMENTS
@@ -0,0 +1,17 @@
1
+ ---
2
+ allowed-tools: Bash, Read, AskUserQuestion
3
+ argument-hint: "\"<brief>\""
4
+ description: When the buyer's brief is vague, return 3 differentiated family picks with reasoning. Inspired by alchaincyf/huashu-design's Design Direction Advisor pattern. Useful as a fallback before scaffolding when the buyer doesn't know which family fits their content.
5
+ ---
6
+
7
+ You are invoking ReelStack's **Design Direction Advisor**.
8
+
9
+ Flow:
10
+
11
+ 1. Verify the license via `node ~/.reelstack/cli/index.js --verify`. If non-zero, refuse and direct the user to `npx @devinilabs/reelstack init`.
12
+ 2. If `$ARGUMENTS` is empty, ask the user via `AskUserQuestion`: "What's your reel about? Describe in one sentence — product launch, partnership reveal, thesis essay, etc."
13
+ 3. Shell to: `node ~/.reelstack/cli/index.js direction "<brief>"`. Surface the three family picks output verbatim.
14
+ 4. Ask the user which family they pick (1, 2, or 3, or "custom").
15
+ 5. If they pick, fire the matching slash command (`/reelstack-<family>`). If "custom", let them choose a different family.
16
+
17
+ User input: $ARGUMENTS
@@ -0,0 +1,25 @@
1
+ ---
2
+ allowed-tools: Bash, Read, Write, Edit, AskUserQuestion
3
+ argument-hint: "[--preset=heretic] [--name=<MyReel>] [--vo=<path.wav>]"
4
+ description: Scaffold a Forbidden 9:16 reel — cream-rose paper + ember + crimson + ultraviolet + plasma. Desaturated, mysterious, slightly off-kilter. Preset carries exact palette and BEAT structure of HereticReel.
5
+ ---
6
+
7
+ You are invoking the **ReelStack** skill in **Forbidden** mode.
8
+
9
+ Follow the slash-command flow described in `~/.claude/skills/reelstack/SKILL.md`:
10
+
11
+ 1. Verify the license via `node ~/.reelstack/cli/index.js --verify`. If non-zero, refuse and direct the user to `npx @devinilabs/reelstack init`.
12
+
13
+ 2. **If `--preset` is missing from `$ARGUMENTS`**, silently default to `heretic` (the only Forbidden preset at v1.1.1). Print a one-line confirmation: *"Scaffolding with the `heretic` preset (only Forbidden preset at v1.1.1)."* and continue. Do **not** prompt the buyer with a menu — there's no choice to make. Future v1.x releases may add more Forbidden presets, at which point this stub will introduce a menu.
14
+
15
+ 3. **If `--name` or `--vo` is missing**, ask via `AskUserQuestion`.
16
+
17
+ 4. Shell to: `node ~/.reelstack/cli/index.js scaffold --family=forbidden --preset=heretic --name=<Name> [--vo=<path>]`.
18
+
19
+ 5. Print the family reference doc from `~/.reelstack/docs/family-galleries/forbidden.md`: palette (cream-rose paper `#F2EBE5`, ember `#D97757`, crimson `#C4506B`, ultraviolet `#6B5BD9`, plasma `#A87FE8`), primitives (Glass family inherited but with rose-purple tinted shadows `rgba(120,80,120,…)`), and the **no-iridescent-gold** rule (gold belongs to Glass; Forbidden is desaturated).
20
+
21
+ 6. **Read the reference reel.** After scaffolding, check whether `~/.reelstack/reference/forbidden/heretic.tsx` exists. If yes, READ it. Internalize the JSX scene composition, BEAT timing, and motion choreography. When the buyer asks for iteration help ("add a reveal scene like…", "make this section punchier", etc.), cite specific scenes from the reference reel ("HereticReel's caustic-multiply background at frame 0 + crimson EyebrowPill at frame 24 — let's mirror that").
22
+
23
+ 7. Offer to launch Remotion Studio.
24
+
25
+ User input: $ARGUMENTS
@@ -0,0 +1,39 @@
1
+ ---
2
+ allowed-tools: Bash, Read, Write, Edit, AskUserQuestion
3
+ argument-hint: "[--preset=graphify|paperclip|gstack|lilagents|jcode|claudewatch|claudewatchcta] [--name=<MyReel>] [--vo=<path.wav>]"
4
+ description: Scaffold a Glass Iridescent 9:16 reel — light lavender + iridescent caustics, sonar rings, glass cards, floating glyphs. Presets carry exact palette and BEAT structure of GraphifyReel, PaperclipReel, GstackReel, LilAgentsReel, JcodeReel, ClaudeWatchReel, or ClaudeWatchCTAReel.
5
+ ---
6
+
7
+ You are invoking the **ReelStack** skill in **Glass Iridescent** mode.
8
+
9
+ Follow the slash-command flow described in `~/.claude/skills/reelstack/SKILL.md`:
10
+
11
+ 1. Verify the license by running `node ~/.reelstack/cli/index.js --verify`. If exit code is non-zero, refuse and tell the user to run `npx @devinilabs/reelstack init`.
12
+
13
+ 2. **If `--preset` is missing from `$ARGUMENTS`**, print the menu below verbatim and wait for the user's reply. Map their reply (number or preset key) to the canonical preset key before continuing. If they're unsure, recommend `claudewatch`.
14
+
15
+ ```
16
+ You're scaffolding a Glass Iridescent reel. Pick the preset that fits:
17
+
18
+ 1. claudewatch (default) — Long-form skill drop with technical breakdown (~105s).
19
+ 2. graphify — Premium product/SaaS reveal. Strongest motion-floor budget (~65s).
20
+ 3. paperclip — Open-source MIT product launch. Dash-offset glyph reveal (~55s).
21
+ 4. gstack — Long-form toolkit launch (~94s). Heavy GlassCard variant.
22
+ 5. lilagents — Character-driven mascot reveal. Local privacy-first tools (~72s).
23
+ 6. jcode — Performance/benchmark narrative. Rust rebuild reveal (~72s).
24
+ 7. claudewatchcta — 8-second standalone CTA outro.
25
+
26
+ Reply with the number (1–7) or the preset key.
27
+ ```
28
+
29
+ 3. **If `--name` or `--vo` is missing**, ask via `AskUserQuestion`. The voiceover path can be left empty if the user hasn't recorded yet — they'll add it before running `/reelstack-beats`.
30
+
31
+ 4. Shell to: `node ~/.reelstack/cli/index.js scaffold --family=glass --preset=<preset> --name=<Name> [--vo=<path>]`.
32
+
33
+ 5. Print the family reference doc: read `~/.reelstack/docs/family-galleries/glass.md` and surface palette swatches, primitive list (CausticBlobs, HairlineGrid, GlassCard, EyebrowPill, StaggeredWords, Counter, SonarRings, ParticleBurst, LightBeam, FloatingGlyphs), and the family's house rules.
34
+
35
+ 6. **Read the reference reel.** After scaffolding, check whether `~/.reelstack/reference/glass/<preset>.tsx` exists. If yes, READ it. Internalize the JSX scene composition, BEAT timing, and motion choreography. When the buyer asks for iteration help ("add a reveal scene like…", "make this section punchier", etc.), cite specific scenes from the reference reel ("RevealScene in graphify uses three layered SonarRings + a ParticleBurst at frame 28 — let's mirror that").
36
+
37
+ 7. Offer to launch Remotion Studio: ask "Open Remotion Studio now? (Y/n)" — if yes, run `npm run dev` in the user's CWD.
38
+
39
+ User input: $ARGUMENTS
@@ -0,0 +1,22 @@
1
+ ---
2
+ allowed-tools: Bash, Read, Write
3
+ argument-hint: "<brand> [<brand2> …]"
4
+ description: Pull real brand SVGs from Iconify via the better-icons CLI into public/icons/. Use when a reel references a real product (logos:react, logos:next-js, logos:google, etc.) — never hand-draw brand marks.
5
+ ---
6
+
7
+ You are invoking the **ReelStack** skill in **icons** mode.
8
+
9
+ Real brand assets are a non-negotiable house rule. Never hand-draw a logo when the actual SVG exists in Iconify.
10
+
11
+ 1. Verify the license via `node ~/.reelstack/cli/index.js --verify`.
12
+ 2. If `<brand>` is missing, ask the user which brands they need.
13
+ 3. Shell to: `node ~/.reelstack/cli/index.js icons <brand> [<brand2> …]`. The CLI:
14
+ - For each brand, run `better-icons get logos:<brand> > public/icons/<brand>.svg`.
15
+ - If `logos:<brand>` doesn't exist on Iconify, fall back to `better-icons search <brand>` and ask the user to pick.
16
+ 4. Print the staticFile() wiring snippet for each saved icon:
17
+ ```tsx
18
+ <Img src={staticFile("icons/react.svg")} style={{width: 96, height: 96}} />
19
+ ```
20
+ 5. Common brand IDs to know: `logos:react`, `logos:next-js`, `logos:google`, `logos:openai`, `logos:anthropic-icon`, `logos:github-icon`, `logos:remotion`, `logos:vercel-icon`, `logos:typescript-icon`.
21
+
22
+ User input: $ARGUMENTS
@@ -0,0 +1,17 @@
1
+ ---
2
+ allowed-tools: Bash, Read, Write, AskUserQuestion
3
+ argument-hint: ""
4
+ description: First-time ReelStack setup. Verifies the license, checks Node 20+ / ffmpeg / whisper-cpp dependencies, scaffolds ~/.reelstack/, installs the skill at ~/.claude/skills/reelstack/, and creates a Demo.tsx so the buyer sees a working reel within 5 minutes.
5
+ ---
6
+
7
+ You are invoking the **ReelStack** skill in **init** mode.
8
+
9
+ This is the buyer's first contact. Be welcoming, polished, and guided.
10
+
11
+ 1. Run `node ~/.reelstack/cli/index.js init` — the CLI handles the actual flow: ASCII banner, license prompt, devini.io validate API call (with machine_id activation tracking), dependency check, scaffold of `~/.reelstack/{families,templates,utils,docs}`, install of the skill at `~/.claude/skills/reelstack/`, install of the 13 command stubs at `~/.claude/commands/`.
12
+ 2. If the CLI exits non-zero on license validation, surface its message verbatim. Do not retry silently.
13
+ 3. If the CLI reports missing `ffmpeg` or `whisper-cpp`, print the brew install commands and offer to run them — but **ask first** before any `brew install` (system modification).
14
+ 4. After successful init, the CLI auto-runs a smoke `scaffold --family=glass --preset=graphify --name=Demo`. Confirm `src/DemoReel.tsx` exists and was registered in `src/Root.tsx`.
15
+ 5. Tell the user: *"ReelStack is ready. Run `npm run dev` to see your demo reel, or type `/reelstack-glass` (or `/reelstack-paper`, `/reelstack-dark`, `/reelstack-warm`, `/reelstack-forbidden`) to make your next one."*
16
+
17
+ User input: $ARGUMENTS
@@ -0,0 +1,22 @@
1
+ ---
2
+ allowed-tools: Bash, Read
3
+ argument-hint: "<src/MyReel.tsx>"
4
+ description: Validate a reel against ReelStack house rules — motion floors (≥4 layers in opener, ≥3 in anchor scenes), IG safe zones (top 280px, bottom 422px), hero-text fit (5-digit counter ≤ 256px), audio lock (BEAT constants present and sourced from whisper SRT). The killer feature most worth paying for.
5
+ ---
6
+
7
+ You are invoking the **ReelStack** skill in **lint** mode.
8
+
9
+ This is the discipline layer. Most AI-generated reels violate at least three of these rules silently.
10
+
11
+ 1. Verify the license via `node ~/.reelstack/cli/index.js --verify`.
12
+ 2. If `<file>` is missing, ask the user which file to lint.
13
+ 3. Shell to: `node ~/.reelstack/cli/index.js lint <file>`. The CLI statically analyzes the source and reports:
14
+ - **Safe zones.** Any `<Img>`, `<Sequence>`, or text element whose bounding box overlaps the reserved bands (top 0–280, bottom 1498–1920) without `data-reelstack-safe-override`.
15
+ - **Motion floors.** Scenes (Sequences) with fewer than 3 simultaneous animation layers. Opener (frames 0–180) flagged at < 4.
16
+ - **Hero text fit.** `<Counter>` or `<HeroText>` elements whose computed width exceeds the canvas width minus 64 px gutter.
17
+ - **Audio lock.** If the file imports `<Audio>` but defines no `BEAT` const block, flag as "audio present, motion not locked".
18
+ - **Brand assets.** Inline `<svg>` paths > 200 chars in a logo-shaped element flagged as "likely hand-drawn — use /reelstack-icons instead".
19
+ 4. Surface the violation list with line numbers.
20
+ 5. Offer: *"Want me to fix these? I can scaffold the missing motion layers, move overflowing text below the safe zone, and run /reelstack-beats if no audio lock exists."* — wait for explicit user confirmation before making any edits.
21
+
22
+ User input: $ARGUMENTS
@@ -0,0 +1,36 @@
1
+ ---
2
+ allowed-tools: Bash, Read, Write, Edit, AskUserQuestion
3
+ argument-hint: "[--preset=justdrop|opus|designreel|devini3d] [--name=<MyReel>] [--vo=<path.wav>]"
4
+ description: Scaffold a Cream Paper 9:16 reel — warm cream paper, dark-green cards, Claude terracotta accent, editorial print mood. Presets carry exact palette and BEAT structure of JustDropReel, OpusReel, DesignReel, or Devini3DReel.
5
+ ---
6
+
7
+ You are invoking the **ReelStack** skill in **Cream Paper** mode.
8
+
9
+ Follow the slash-command flow described in `~/.claude/skills/reelstack/SKILL.md`:
10
+
11
+ 1. Verify the license via `node ~/.reelstack/cli/index.js --verify`. If non-zero, refuse and direct the user to `npx @devinilabs/reelstack init`.
12
+
13
+ 2. **If `--preset` is missing from `$ARGUMENTS`**, print the menu below verbatim and wait for the user's reply. Map their reply (number or preset key) to the canonical preset key. If they're unsure, recommend `justdrop`.
14
+
15
+ ```
16
+ You're scaffolding a Cream Paper reel. Pick the preset that fits:
17
+
18
+ 1. justdrop (default) — Skill ecosystem launch. "Missing the point" reframe narrative.
19
+ 2. opus — Long-form thesis-driven essay reel. Model launch (100s+).
20
+ 3. designreel — 10-second tagline-driven design tool teaser.
21
+ 4. devini3d — Clip-driven case study with motion-graphics close.
22
+
23
+ Reply with the number (1–4) or the preset key.
24
+ ```
25
+
26
+ 3. **If `--name` or `--vo` is missing**, ask via `AskUserQuestion`.
27
+
28
+ 4. Shell to: `node ~/.reelstack/cli/index.js scaffold --family=paper --preset=<preset> --name=<Name> [--vo=<path>]`.
29
+
30
+ 5. Print the family reference doc from `~/.reelstack/docs/family-galleries/paper.md`: palette tokens (cream `#f0ede8`, dark-green cards `#1e3a27`, Claude terracotta `#D4663A`), primitives (CardSpring, ScaleBlurText, CreamGrid, GreenAccentCard, PaperShadow), and the spring configs (damping 20, stiffness 200).
31
+
32
+ 6. **Read the reference reel.** After scaffolding, check whether `~/.reelstack/reference/paper/<preset>.tsx` exists. If yes, READ it. Internalize the JSX scene composition, BEAT timing, and motion choreography. When the buyer asks for iteration help ("add a reveal scene like…", "make this section punchier", etc.), cite specific scenes from the reference reel ("the GreenCard stack in justdrop springs in at frame 60 — let's mirror that").
33
+
34
+ 7. Offer to launch Remotion Studio.
35
+
36
+ User input: $ARGUMENTS
@@ -0,0 +1,20 @@
1
+ ---
2
+ allowed-tools: Bash, Read
3
+ argument-hint: "<comp-id> [--platform=ig|tiktok|shorts] [--out=<path>] [--force]"
4
+ description: Render a reel composition with platform-optimal flags (1080×1920 H.264, 8 Mbps for IG/TikTok, 9 Mbps for Shorts). Runs reelstack lint first; aborts on safe-zone or motion-floor violations unless --force is passed.
5
+ ---
6
+
7
+ You are invoking the **ReelStack** skill in **render** mode.
8
+
9
+ 1. Verify the license via `node ~/.reelstack/cli/index.js --verify`.
10
+ 2. If `<comp-id>` is missing, ask the user. Default `--platform` is `ig`.
11
+ 3. Pre-render lint: shell to `node ~/.reelstack/cli/index.js lint src/<MatchingFile>.tsx` (the CLI infers the file from the comp ID via `Root.tsx`). If lint reports violations:
12
+ - Surface the violations to the user.
13
+ - Ask: *"Lint failed. Render anyway with `--force`? (y/N)"*
14
+ - If user declines, stop here.
15
+ 4. Shell to: `node ~/.reelstack/cli/index.js render <comp-id> [--platform=...] [--out=...] [--force]`. The CLI runs `npx remotion render` with the right flags from `render-presets.json`:
16
+ - **ig / tiktok:** 1080×1920, H.264, CRF 18, 8 Mbps target, audio AAC 192k.
17
+ - **shorts:** 1080×1920, H.264, CRF 17, 9 Mbps target, audio AAC 192k.
18
+ 5. On success, print the output path and the file size. Suggest the user preview the rendered MP4 before posting.
19
+
20
+ User input: $ARGUMENTS
@@ -0,0 +1,36 @@
1
+ ---
2
+ allowed-tools: Bash, Read, Write, Edit, AskUserQuestion
3
+ argument-hint: "[--preset=huashu|mempalace] [--name=<MyReel>] [--vo=<path.wav>]"
4
+ description: Scaffold a Warm Signature 9:16 reel — warm zinc + amber signature + emerald payoff + bento grids. Strict single-accent rule (one primary, one payoff, one negative — no other hues). Presets carry exact palette and BEAT structure of HuashuReel or MemPalaceReel (warm parchment variant).
5
+ ---
6
+
7
+ You are invoking the **ReelStack** skill in **Warm Signature** mode.
8
+
9
+ Follow the slash-command flow described in `~/.claude/skills/reelstack/SKILL.md`:
10
+
11
+ 1. Verify the license via `node ~/.reelstack/cli/index.js --verify`. If non-zero, refuse and direct the user to `npx @devinilabs/reelstack init`.
12
+
13
+ 2. **If `--preset` is missing from `$ARGUMENTS`**, print the menu below verbatim and wait for the user's reply. Map their reply (number or preset key) to the canonical preset key. If they're unsure, recommend `huashu`.
14
+
15
+ ```
16
+ You're scaffolding a Warm Signature reel. Pick the preset that fits:
17
+
18
+ 1. huashu (default) — Confident product/skill drop. Single-accent (amber) discipline.
19
+ 2. mempalace — Memory/learning narrative with parchment-gold variant.
20
+
21
+ Reply with the number (1–2) or the preset key.
22
+ ```
23
+
24
+ 3. **If `--name` or `--vo` is missing**, ask via `AskUserQuestion`.
25
+
26
+ 4. Shell to: `node ~/.reelstack/cli/index.js scaffold --family=warm --preset=<preset> --name=<Name> [--vo=<path>]`.
27
+
28
+ 5. Print the family reference doc from `~/.reelstack/docs/family-galleries/warm.md`: palette (warm zinc `#1a1610`, amber `#f99c00` signature, emerald `#00d294` payoff, red `#ef4444` wall), primitives (BentoGrid, AccentGlow, ScaleBlurCounter, FilmGrain, WarmSurface), and the **single-accent rule** (no other hues — enforce on lint).
29
+
30
+ 6. **Read the reference reel.** After scaffolding, check whether `~/.reelstack/reference/warm/<preset>.tsx` exists. If yes, READ it. Internalize the JSX scene composition, BEAT timing, and motion choreography. When the buyer asks for iteration help ("add a reveal scene like…", "make this section punchier", etc.), cite specific scenes from the reference reel ("the BentoGrid reveal in huashu staggers cells at 6-frame offsets with AccentGlow underneath — let's mirror that").
31
+
32
+ 7. Warn the user explicitly: *"Warm Signature uses ONE accent (amber). Do not introduce blues, purples, or pinks — they break the family contract."*
33
+
34
+ 8. Offer to launch Remotion Studio.
35
+
36
+ User input: $ARGUMENTS