@olegkoval/agent-skills 1.59.3 → 1.61.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 (231) hide show
  1. package/.github/copilot-instructions.md +2 -0
  2. package/.github/prompts/carousel-maker.prompt.md +102 -0
  3. package/.github/prompts/self-critique.prompt.md +167 -43
  4. package/.github/prompts/shorts-animator.prompt.md +103 -0
  5. package/.kiro/steering/carousel-maker.md +101 -0
  6. package/.kiro/steering/shorts-animator.md +102 -0
  7. package/.windsurf/rules/carousel-maker.md +100 -0
  8. package/.windsurf/rules/shorts-animator.md +101 -0
  9. package/README.md +5 -3
  10. package/adapters/claude/olko-creative/skills/carousel-maker/SKILL.md +112 -0
  11. package/adapters/claude/olko-creative/skills/carousel-maker/scripts/cm.ts +220 -0
  12. package/adapters/claude/olko-creative/skills/carousel-maker/scripts/domain/check.ts +68 -0
  13. package/adapters/claude/olko-creative/skills/carousel-maker/scripts/domain/layout.ts +75 -0
  14. package/adapters/claude/olko-creative/skills/carousel-maker/scripts/domain/schema.ts +54 -0
  15. package/adapters/claude/olko-creative/skills/carousel-maker/scripts/domain/types.ts +33 -0
  16. package/adapters/claude/olko-creative/skills/carousel-maker/scripts/edge/io.ts +87 -0
  17. package/adapters/claude/olko-creative/skills/carousel-maker/scripts/package.json +4 -0
  18. package/adapters/claude/olko-creative/skills/carousel-maker/scripts/test/domain.test.ts +99 -0
  19. package/adapters/claude/olko-creative/skills/carousel-maker/scripts/tsconfig.json +16 -0
  20. package/adapters/claude/olko-creative/skills/shorts-animator/SKILL.md +113 -0
  21. package/adapters/claude/olko-creative/skills/shorts-animator/references/kit.md +59 -0
  22. package/adapters/claude/olko-creative/skills/shorts-animator/references/looks.md +32 -0
  23. package/adapters/claude/olko-creative/skills/shorts-animator/references/writing.md +9 -0
  24. package/adapters/claude/olko-creative/skills/shorts-animator/scripts/audio/compose.ts +290 -0
  25. package/adapters/claude/olko-creative/skills/shorts-animator/scripts/audio/dsp.ts +193 -0
  26. package/adapters/claude/olko-creative/skills/shorts-animator/scripts/audio/instruments.ts +185 -0
  27. package/adapters/claude/olko-creative/skills/shorts-animator/scripts/audio/master.ts +55 -0
  28. package/adapters/claude/olko-creative/skills/shorts-animator/scripts/audio/soundtrack.ts +119 -0
  29. package/adapters/claude/olko-creative/skills/shorts-animator/scripts/domain/captions.ts +35 -0
  30. package/adapters/claude/olko-creative/skills/shorts-animator/scripts/domain/check.ts +96 -0
  31. package/adapters/claude/olko-creative/skills/shorts-animator/scripts/domain/look.ts +26 -0
  32. package/adapters/claude/olko-creative/skills/shorts-animator/scripts/domain/patch.ts +38 -0
  33. package/adapters/claude/olko-creative/skills/shorts-animator/scripts/domain/schema.ts +81 -0
  34. package/adapters/claude/olko-creative/skills/shorts-animator/scripts/domain/timeline.ts +75 -0
  35. package/adapters/claude/olko-creative/skills/shorts-animator/scripts/domain/types.ts +91 -0
  36. package/adapters/claude/olko-creative/skills/shorts-animator/scripts/edge/chrome.ts +169 -0
  37. package/adapters/claude/olko-creative/skills/shorts-animator/scripts/edge/doctor.ts +52 -0
  38. package/adapters/claude/olko-creative/skills/shorts-animator/scripts/edge/media.ts +105 -0
  39. package/adapters/claude/olko-creative/skills/shorts-animator/scripts/edge/page.ts +53 -0
  40. package/adapters/claude/olko-creative/skills/shorts-animator/scripts/edge/probe.ts +75 -0
  41. package/adapters/claude/olko-creative/skills/shorts-animator/scripts/edge/sound.ts +46 -0
  42. package/adapters/claude/olko-creative/skills/shorts-animator/scripts/edge/voice.ts +183 -0
  43. package/adapters/claude/olko-creative/skills/shorts-animator/scripts/looks/gouache.json +7 -0
  44. package/adapters/claude/olko-creative/skills/shorts-animator/scripts/looks/ink.json +6 -0
  45. package/adapters/claude/olko-creative/skills/shorts-animator/scripts/looks/oil.json +7 -0
  46. package/adapters/claude/olko-creative/skills/shorts-animator/scripts/looks/pastel.json +7 -0
  47. package/adapters/claude/olko-creative/skills/shorts-animator/scripts/looks/watercolor.json +6 -0
  48. package/adapters/claude/olko-creative/skills/shorts-animator/scripts/package.json +4 -0
  49. package/adapters/claude/olko-creative/skills/shorts-animator/scripts/runtime/globals.d.ts +199 -0
  50. package/adapters/claude/olko-creative/skills/shorts-animator/scripts/runtime/kit.ts +856 -0
  51. package/adapters/claude/olko-creative/skills/shorts-animator/scripts/runtime/paint.ts +268 -0
  52. package/adapters/claude/olko-creative/skills/shorts-animator/scripts/runtime/stage.ts +181 -0
  53. package/adapters/claude/olko-creative/skills/shorts-animator/scripts/runtime/tsconfig.json +12 -0
  54. package/adapters/claude/olko-creative/skills/shorts-animator/scripts/sa.ts +262 -0
  55. package/adapters/claude/olko-creative/skills/shorts-animator/scripts/test/domain.test.ts +107 -0
  56. package/adapters/claude/olko-creative/skills/shorts-animator/scripts/tsconfig.json +16 -0
  57. package/adapters/claude/olko-creative/skills/shorts-animator/scripts/tts.py +20 -0
  58. package/adapters/claude/olko-reflection/skills/self-critique/SKILL.md +167 -43
  59. package/adapters/claude/olko-reflection/skills/self-critique/scripts/claim-ledger.mjs +159 -0
  60. package/adapters/claude/olko-reflection/skills/self-critique/scripts/rule-store.mjs +193 -0
  61. package/adapters/codex/olko-creative/README.md +2 -0
  62. package/adapters/cursor/olko-creative/skills/carousel-maker/SKILL.md +112 -0
  63. package/adapters/cursor/olko-creative/skills/carousel-maker/scripts/cm.ts +220 -0
  64. package/adapters/cursor/olko-creative/skills/carousel-maker/scripts/domain/check.ts +68 -0
  65. package/adapters/cursor/olko-creative/skills/carousel-maker/scripts/domain/layout.ts +75 -0
  66. package/adapters/cursor/olko-creative/skills/carousel-maker/scripts/domain/schema.ts +54 -0
  67. package/adapters/cursor/olko-creative/skills/carousel-maker/scripts/domain/types.ts +33 -0
  68. package/adapters/cursor/olko-creative/skills/carousel-maker/scripts/edge/io.ts +87 -0
  69. package/adapters/cursor/olko-creative/skills/carousel-maker/scripts/package.json +4 -0
  70. package/adapters/cursor/olko-creative/skills/carousel-maker/scripts/test/domain.test.ts +99 -0
  71. package/adapters/cursor/olko-creative/skills/carousel-maker/scripts/tsconfig.json +16 -0
  72. package/adapters/cursor/olko-creative/skills/shorts-animator/SKILL.md +113 -0
  73. package/adapters/cursor/olko-creative/skills/shorts-animator/references/kit.md +59 -0
  74. package/adapters/cursor/olko-creative/skills/shorts-animator/references/looks.md +32 -0
  75. package/adapters/cursor/olko-creative/skills/shorts-animator/references/writing.md +9 -0
  76. package/adapters/cursor/olko-creative/skills/shorts-animator/scripts/audio/compose.ts +290 -0
  77. package/adapters/cursor/olko-creative/skills/shorts-animator/scripts/audio/dsp.ts +193 -0
  78. package/adapters/cursor/olko-creative/skills/shorts-animator/scripts/audio/instruments.ts +185 -0
  79. package/adapters/cursor/olko-creative/skills/shorts-animator/scripts/audio/master.ts +55 -0
  80. package/adapters/cursor/olko-creative/skills/shorts-animator/scripts/audio/soundtrack.ts +119 -0
  81. package/adapters/cursor/olko-creative/skills/shorts-animator/scripts/domain/captions.ts +35 -0
  82. package/adapters/cursor/olko-creative/skills/shorts-animator/scripts/domain/check.ts +96 -0
  83. package/adapters/cursor/olko-creative/skills/shorts-animator/scripts/domain/look.ts +26 -0
  84. package/adapters/cursor/olko-creative/skills/shorts-animator/scripts/domain/patch.ts +38 -0
  85. package/adapters/cursor/olko-creative/skills/shorts-animator/scripts/domain/schema.ts +81 -0
  86. package/adapters/cursor/olko-creative/skills/shorts-animator/scripts/domain/timeline.ts +75 -0
  87. package/adapters/cursor/olko-creative/skills/shorts-animator/scripts/domain/types.ts +91 -0
  88. package/adapters/cursor/olko-creative/skills/shorts-animator/scripts/edge/chrome.ts +169 -0
  89. package/adapters/cursor/olko-creative/skills/shorts-animator/scripts/edge/doctor.ts +52 -0
  90. package/adapters/cursor/olko-creative/skills/shorts-animator/scripts/edge/media.ts +105 -0
  91. package/adapters/cursor/olko-creative/skills/shorts-animator/scripts/edge/page.ts +53 -0
  92. package/adapters/cursor/olko-creative/skills/shorts-animator/scripts/edge/probe.ts +75 -0
  93. package/adapters/cursor/olko-creative/skills/shorts-animator/scripts/edge/sound.ts +46 -0
  94. package/adapters/cursor/olko-creative/skills/shorts-animator/scripts/edge/voice.ts +183 -0
  95. package/adapters/cursor/olko-creative/skills/shorts-animator/scripts/looks/gouache.json +7 -0
  96. package/adapters/cursor/olko-creative/skills/shorts-animator/scripts/looks/ink.json +6 -0
  97. package/adapters/cursor/olko-creative/skills/shorts-animator/scripts/looks/oil.json +7 -0
  98. package/adapters/cursor/olko-creative/skills/shorts-animator/scripts/looks/pastel.json +7 -0
  99. package/adapters/cursor/olko-creative/skills/shorts-animator/scripts/looks/watercolor.json +6 -0
  100. package/adapters/cursor/olko-creative/skills/shorts-animator/scripts/package.json +4 -0
  101. package/adapters/cursor/olko-creative/skills/shorts-animator/scripts/runtime/globals.d.ts +199 -0
  102. package/adapters/cursor/olko-creative/skills/shorts-animator/scripts/runtime/kit.ts +856 -0
  103. package/adapters/cursor/olko-creative/skills/shorts-animator/scripts/runtime/paint.ts +268 -0
  104. package/adapters/cursor/olko-creative/skills/shorts-animator/scripts/runtime/stage.ts +181 -0
  105. package/adapters/cursor/olko-creative/skills/shorts-animator/scripts/runtime/tsconfig.json +12 -0
  106. package/adapters/cursor/olko-creative/skills/shorts-animator/scripts/sa.ts +262 -0
  107. package/adapters/cursor/olko-creative/skills/shorts-animator/scripts/test/domain.test.ts +107 -0
  108. package/adapters/cursor/olko-creative/skills/shorts-animator/scripts/tsconfig.json +16 -0
  109. package/adapters/cursor/olko-creative/skills/shorts-animator/scripts/tts.py +20 -0
  110. package/adapters/cursor/olko-reflection/skills/self-critique/SKILL.md +167 -43
  111. package/adapters/cursor/olko-reflection/skills/self-critique/scripts/claim-ledger.mjs +159 -0
  112. package/adapters/cursor/olko-reflection/skills/self-critique/scripts/rule-store.mjs +193 -0
  113. package/adapters/grok/olko-creative/skills/carousel-maker/SKILL.md +112 -0
  114. package/adapters/grok/olko-creative/skills/carousel-maker/scripts/cm.ts +220 -0
  115. package/adapters/grok/olko-creative/skills/carousel-maker/scripts/domain/check.ts +68 -0
  116. package/adapters/grok/olko-creative/skills/carousel-maker/scripts/domain/layout.ts +75 -0
  117. package/adapters/grok/olko-creative/skills/carousel-maker/scripts/domain/schema.ts +54 -0
  118. package/adapters/grok/olko-creative/skills/carousel-maker/scripts/domain/types.ts +33 -0
  119. package/adapters/grok/olko-creative/skills/carousel-maker/scripts/edge/io.ts +87 -0
  120. package/adapters/grok/olko-creative/skills/carousel-maker/scripts/package.json +4 -0
  121. package/adapters/grok/olko-creative/skills/carousel-maker/scripts/test/domain.test.ts +99 -0
  122. package/adapters/grok/olko-creative/skills/carousel-maker/scripts/tsconfig.json +16 -0
  123. package/adapters/grok/olko-creative/skills/shorts-animator/SKILL.md +113 -0
  124. package/adapters/grok/olko-creative/skills/shorts-animator/references/kit.md +59 -0
  125. package/adapters/grok/olko-creative/skills/shorts-animator/references/looks.md +32 -0
  126. package/adapters/grok/olko-creative/skills/shorts-animator/references/writing.md +9 -0
  127. package/adapters/grok/olko-creative/skills/shorts-animator/scripts/audio/compose.ts +290 -0
  128. package/adapters/grok/olko-creative/skills/shorts-animator/scripts/audio/dsp.ts +193 -0
  129. package/adapters/grok/olko-creative/skills/shorts-animator/scripts/audio/instruments.ts +185 -0
  130. package/adapters/grok/olko-creative/skills/shorts-animator/scripts/audio/master.ts +55 -0
  131. package/adapters/grok/olko-creative/skills/shorts-animator/scripts/audio/soundtrack.ts +119 -0
  132. package/adapters/grok/olko-creative/skills/shorts-animator/scripts/domain/captions.ts +35 -0
  133. package/adapters/grok/olko-creative/skills/shorts-animator/scripts/domain/check.ts +96 -0
  134. package/adapters/grok/olko-creative/skills/shorts-animator/scripts/domain/look.ts +26 -0
  135. package/adapters/grok/olko-creative/skills/shorts-animator/scripts/domain/patch.ts +38 -0
  136. package/adapters/grok/olko-creative/skills/shorts-animator/scripts/domain/schema.ts +81 -0
  137. package/adapters/grok/olko-creative/skills/shorts-animator/scripts/domain/timeline.ts +75 -0
  138. package/adapters/grok/olko-creative/skills/shorts-animator/scripts/domain/types.ts +91 -0
  139. package/adapters/grok/olko-creative/skills/shorts-animator/scripts/edge/chrome.ts +169 -0
  140. package/adapters/grok/olko-creative/skills/shorts-animator/scripts/edge/doctor.ts +52 -0
  141. package/adapters/grok/olko-creative/skills/shorts-animator/scripts/edge/media.ts +105 -0
  142. package/adapters/grok/olko-creative/skills/shorts-animator/scripts/edge/page.ts +53 -0
  143. package/adapters/grok/olko-creative/skills/shorts-animator/scripts/edge/probe.ts +75 -0
  144. package/adapters/grok/olko-creative/skills/shorts-animator/scripts/edge/sound.ts +46 -0
  145. package/adapters/grok/olko-creative/skills/shorts-animator/scripts/edge/voice.ts +183 -0
  146. package/adapters/grok/olko-creative/skills/shorts-animator/scripts/looks/gouache.json +7 -0
  147. package/adapters/grok/olko-creative/skills/shorts-animator/scripts/looks/ink.json +6 -0
  148. package/adapters/grok/olko-creative/skills/shorts-animator/scripts/looks/oil.json +7 -0
  149. package/adapters/grok/olko-creative/skills/shorts-animator/scripts/looks/pastel.json +7 -0
  150. package/adapters/grok/olko-creative/skills/shorts-animator/scripts/looks/watercolor.json +6 -0
  151. package/adapters/grok/olko-creative/skills/shorts-animator/scripts/package.json +4 -0
  152. package/adapters/grok/olko-creative/skills/shorts-animator/scripts/runtime/globals.d.ts +199 -0
  153. package/adapters/grok/olko-creative/skills/shorts-animator/scripts/runtime/kit.ts +856 -0
  154. package/adapters/grok/olko-creative/skills/shorts-animator/scripts/runtime/paint.ts +268 -0
  155. package/adapters/grok/olko-creative/skills/shorts-animator/scripts/runtime/stage.ts +181 -0
  156. package/adapters/grok/olko-creative/skills/shorts-animator/scripts/runtime/tsconfig.json +12 -0
  157. package/adapters/grok/olko-creative/skills/shorts-animator/scripts/sa.ts +262 -0
  158. package/adapters/grok/olko-creative/skills/shorts-animator/scripts/test/domain.test.ts +107 -0
  159. package/adapters/grok/olko-creative/skills/shorts-animator/scripts/tsconfig.json +16 -0
  160. package/adapters/grok/olko-creative/skills/shorts-animator/scripts/tts.py +20 -0
  161. package/adapters/grok/olko-reflection/skills/self-critique/SKILL.md +167 -43
  162. package/adapters/grok/olko-reflection/skills/self-critique/scripts/claim-ledger.mjs +159 -0
  163. package/adapters/grok/olko-reflection/skills/self-critique/scripts/rule-store.mjs +193 -0
  164. package/adapters/hermes/olko-creative/README.md +2 -0
  165. package/catalog/skills.json +47 -1
  166. package/docs/superpowers/plans/2026-10-27-self-critique-v2.md +306 -0
  167. package/docs/superpowers/specs/2026-10-27-self-critique-v2-spec.md +104 -0
  168. package/package.json +1 -1
  169. package/plugins/olko-apple-kit/.claude-plugin/plugin.json +1 -1
  170. package/plugins/olko-creative/.claude-plugin/plugin.json +1 -1
  171. package/plugins/olko-creative/skills/carousel-maker/SKILL.md +111 -0
  172. package/plugins/olko-creative/skills/carousel-maker/scripts/cm.ts +220 -0
  173. package/plugins/olko-creative/skills/carousel-maker/scripts/domain/check.ts +68 -0
  174. package/plugins/olko-creative/skills/carousel-maker/scripts/domain/layout.ts +75 -0
  175. package/plugins/olko-creative/skills/carousel-maker/scripts/domain/schema.ts +54 -0
  176. package/plugins/olko-creative/skills/carousel-maker/scripts/domain/types.ts +33 -0
  177. package/plugins/olko-creative/skills/carousel-maker/scripts/edge/io.ts +87 -0
  178. package/plugins/olko-creative/skills/carousel-maker/scripts/package.json +4 -0
  179. package/plugins/olko-creative/skills/carousel-maker/scripts/test/domain.test.ts +99 -0
  180. package/plugins/olko-creative/skills/carousel-maker/scripts/tsconfig.json +16 -0
  181. package/plugins/olko-creative/skills/shorts-animator/SKILL.md +112 -0
  182. package/plugins/olko-creative/skills/shorts-animator/references/kit.md +59 -0
  183. package/plugins/olko-creative/skills/shorts-animator/references/looks.md +32 -0
  184. package/plugins/olko-creative/skills/shorts-animator/references/writing.md +9 -0
  185. package/plugins/olko-creative/skills/shorts-animator/scripts/audio/compose.ts +290 -0
  186. package/plugins/olko-creative/skills/shorts-animator/scripts/audio/dsp.ts +193 -0
  187. package/plugins/olko-creative/skills/shorts-animator/scripts/audio/instruments.ts +185 -0
  188. package/plugins/olko-creative/skills/shorts-animator/scripts/audio/master.ts +55 -0
  189. package/plugins/olko-creative/skills/shorts-animator/scripts/audio/soundtrack.ts +119 -0
  190. package/plugins/olko-creative/skills/shorts-animator/scripts/domain/captions.ts +35 -0
  191. package/plugins/olko-creative/skills/shorts-animator/scripts/domain/check.ts +96 -0
  192. package/plugins/olko-creative/skills/shorts-animator/scripts/domain/look.ts +26 -0
  193. package/plugins/olko-creative/skills/shorts-animator/scripts/domain/patch.ts +38 -0
  194. package/plugins/olko-creative/skills/shorts-animator/scripts/domain/schema.ts +81 -0
  195. package/plugins/olko-creative/skills/shorts-animator/scripts/domain/timeline.ts +75 -0
  196. package/plugins/olko-creative/skills/shorts-animator/scripts/domain/types.ts +91 -0
  197. package/plugins/olko-creative/skills/shorts-animator/scripts/edge/chrome.ts +169 -0
  198. package/plugins/olko-creative/skills/shorts-animator/scripts/edge/doctor.ts +52 -0
  199. package/plugins/olko-creative/skills/shorts-animator/scripts/edge/media.ts +105 -0
  200. package/plugins/olko-creative/skills/shorts-animator/scripts/edge/page.ts +53 -0
  201. package/plugins/olko-creative/skills/shorts-animator/scripts/edge/probe.ts +75 -0
  202. package/plugins/olko-creative/skills/shorts-animator/scripts/edge/sound.ts +46 -0
  203. package/plugins/olko-creative/skills/shorts-animator/scripts/edge/voice.ts +183 -0
  204. package/plugins/olko-creative/skills/shorts-animator/scripts/looks/gouache.json +7 -0
  205. package/plugins/olko-creative/skills/shorts-animator/scripts/looks/ink.json +6 -0
  206. package/plugins/olko-creative/skills/shorts-animator/scripts/looks/oil.json +7 -0
  207. package/plugins/olko-creative/skills/shorts-animator/scripts/looks/pastel.json +7 -0
  208. package/plugins/olko-creative/skills/shorts-animator/scripts/looks/watercolor.json +6 -0
  209. package/plugins/olko-creative/skills/shorts-animator/scripts/package.json +4 -0
  210. package/plugins/olko-creative/skills/shorts-animator/scripts/runtime/globals.d.ts +199 -0
  211. package/plugins/olko-creative/skills/shorts-animator/scripts/runtime/kit.ts +856 -0
  212. package/plugins/olko-creative/skills/shorts-animator/scripts/runtime/paint.ts +268 -0
  213. package/plugins/olko-creative/skills/shorts-animator/scripts/runtime/stage.ts +181 -0
  214. package/plugins/olko-creative/skills/shorts-animator/scripts/runtime/tsconfig.json +12 -0
  215. package/plugins/olko-creative/skills/shorts-animator/scripts/sa.ts +262 -0
  216. package/plugins/olko-creative/skills/shorts-animator/scripts/test/domain.test.ts +107 -0
  217. package/plugins/olko-creative/skills/shorts-animator/scripts/tsconfig.json +16 -0
  218. package/plugins/olko-creative/skills/shorts-animator/scripts/tts.py +20 -0
  219. package/plugins/olko-garmin-kit/.claude-plugin/plugin.json +1 -1
  220. package/plugins/olko-git-tools/.claude-plugin/plugin.json +1 -1
  221. package/plugins/olko-github-pr/.claude-plugin/plugin.json +1 -1
  222. package/plugins/olko-obsidian/.claude-plugin/plugin.json +1 -1
  223. package/plugins/olko-product/.claude-plugin/plugin.json +1 -1
  224. package/plugins/olko-reflection/.claude-plugin/plugin.json +1 -1
  225. package/plugins/olko-reflection/skills/self-critique/SKILL.md +167 -43
  226. package/plugins/olko-reflection/skills/self-critique/scripts/claim-ledger.mjs +159 -0
  227. package/plugins/olko-reflection/skills/self-critique/scripts/rule-store.mjs +193 -0
  228. package/plugins/olko-release/.claude-plugin/plugin.json +1 -1
  229. package/plugins/olko-skill-meta/.claude-plugin/plugin.json +1 -1
  230. package/plugins/olko-web-ops/.claude-plugin/plugin.json +1 -1
  231. package/scripts/lib/catalog.mjs +2 -1
@@ -0,0 +1,102 @@
1
+ <!-- Generated by scripts/build-adapters.sh. Do not edit directly. -->
2
+
3
+ ---
4
+ inclusion: manual
5
+ description: "Make narrated, painted animated shorts (TikTok, Reels, YouTube Shorts) from a script and a look described in words: scenes drawn in code, GPU-painted, voiced locally, captioned and scored into an MP4."
6
+ ---
7
+
8
+ # Shorts Animator
9
+
10
+ A script and a look in, an animated short out. You write the lines and draw every shot as canvas code; the
11
+ tool paints it on the GPU on twos, narrates it with a local Kokoro voice, captions it, scores it and
12
+ encodes the MP4. Nothing is filmed, generated by an image model, or licensed.
13
+
14
+ `SA` = `node <this skill's folder>/scripts/sa.ts`. Write the full command each time. One folder per short:
15
+ `WORK=./<slug>-short`. First run on a machine: `SA doctor` (checks Node, ffmpeg, Chrome, sets up the voice,
16
+ renders a 3-second test).
17
+
18
+ ## 1. Decide, do not interrogate
19
+
20
+ Decide the lines, shots, look, voice and music yourself. Ask one question only if the subject is unclear.
21
+ A pasted script is used word for word. A topic: write it per `references/writing.md`.
22
+
23
+ | they say | look |
24
+ |---|---|
25
+ | oil, painterly, Van Gogh, swirly, "like the faith shorts" | `oil` |
26
+ | watercolour, soft, dreamy, children's book | `watercolor` |
27
+ | crayon, pastel, chalk, for kids | `pastel` |
28
+ | ink, comic, graphic novel, line art | `ink` |
29
+ | flat, storybook, gouache, poster, calm | `gouache` |
30
+
31
+ Custom look: `"look": { "base": "oil", "brush": 16, "palette": {...} }`. Read `references/looks.md` only
32
+ when overriding numbers. Voice `bm_george` (default, scripture and quotes), `am_michael`, `bf_emma`
33
+ (stories), `af_heart` (kids); `speed` 0.85 to 0.95 reads calm. Their recording: `"voice": { "file":
34
+ "assets/voice.m4a" }` with `say` lines matching it in order. `"voice": "none"` for music only. Music
35
+ `mood`: `tender`, `hopeful`, `night`, `wonder`, `playful`, `none`, or a track path. `SA looks` lists all.
36
+
37
+ ## 2. Write the plan and the drawings
38
+
39
+ ```bash
40
+ SA new "$WORK" --look oil # short.json + scenes.js + assets/
41
+ ```
42
+
43
+ `short.json` lines: `{ "say": "...", "scene": "meadow" | ["a", "b"], "move": "push", "hold": 0.8 }`.
44
+ - A list of scenes cuts on the caption chunks. Cut often: a new picture every 1.5 to 3 s.
45
+ - `move`: push, pull, pan-left, pan-right, rise, fall, drift, still. `transition`: cut, fade, dip (rarely).
46
+ - `caption` shows different words; `/` forces a break. `captions.style`: box, plain, none.
47
+ - `format`: 9:16 (default), 16:9, 1:1, 4:5. `twos`: 2 (hand-drawn), 1 (smooth).
48
+
49
+ `scenes.js`: `window.SCENES = { "meadow": (k) => { k.sky({...}); k.person({...}); } }`. Read
50
+ `references/kit.md` before writing scenes. Draw like a painter:
51
+ - Big simple shapes, strong value contrast, one subject. The paint pass adds texture; draw nothing fussy.
52
+ - Keep faces out of the caption band (about 77% down).
53
+ - Every shot different: place, scale, day and night, warm and cool. Match the words.
54
+ - Small motion: `pose: "walk"`, `dx`, rain, glints. `k.t` seconds, `k.p` progress 0 to 1.
55
+ - No helper for it (a boat, an animal)? Write a small function with `k.g`, flat shapes in the palette.
56
+
57
+ ## 3. Check, then look (budgeted)
58
+
59
+ ```bash
60
+ SA check "$WORK" # no browser, about a second: missing scenes, throwing scenes, unknown kit calls,
61
+ # figures under the captions, line and total length
62
+ SA frames "$WORK" # narrates (cached), one painted frame per shot -> frames/sheet.jpg
63
+ SA still "$WORK" 7 # one shot full size, only when the sheet shows a problem you cannot place
64
+ ```
65
+
66
+ Fix every `ERROR` from `check` before spending a browser run. Then read `frames/sheet.jpg` once. Fix muddy
67
+ or empty shots, a figure lost in its background (contrast, `rim`), look-alike shots, a red "no scene"
68
+ frame, and every `⚠ the page said` line. **Budget: at most two frames rounds before the first render.**
69
+ Images are the expensive part of this loop; do not reopen a sheet you have already judged.
70
+
71
+ ## 4. Render and deliver
72
+
73
+ ```bash
74
+ SA render "$WORK" # about a minute for 40 s -> <title>.mp4, renders/vN.mp4 (+ its short.json), qa/sheet.jpg
75
+ ```
76
+
77
+ Read `qa/sheet.jpg` only if the render printed a warning or they report a problem. Tell them in two
78
+ lines what it is (look, length, shots) and: "Tell me what to change, one sentence is enough."
79
+
80
+ ## 5. One-sentence changes
81
+
82
+ Smallest change, `SA check`, render, show. `SA set "$WORK" voice.speed=0.85 music.mood=night` edits
83
+ short.json (JSON values; plain text otherwise) and refuses an invalid result.
84
+
85
+ | they say | change |
86
+ |---|---|
87
+ | more painterly, softer | `look` or its numbers (brush, swirl, wash) |
88
+ | slower, faster | `voice.speed`, `pause` |
89
+ | a woman's voice, American | `voice.id` |
90
+ | no music, more emotional | `music.mood` |
91
+ | bigger captions, no box | `captions.size` 52, `captions.style` plain |
92
+ | for YouTube | `format` 16:9, redraw shots whose layout breaks |
93
+ | change shot 4 | that scene function only |
94
+
95
+ ## When something goes wrong
96
+
97
+ | symptom | fix |
98
+ |---|---|
99
+ | no Chrome | install Chrome, or `SA doctor` fetches a headless one |
100
+ | "painting on the CPU" | works, about 10x slower |
101
+ | narrator setup fails | needs Python 3.10+ or `uv`; or use `"voice": "none"` or their recording |
102
+ | voice timing off with their recording | `say` lines must match its words, in order |
@@ -0,0 +1,100 @@
1
+ <!-- Generated by scripts/build-adapters.sh. Do not edit directly. -->
2
+
3
+ ---
4
+ description: "Make Instagram or LinkedIn carousel slides from a topic or pasted copy: a brand template sets the text, and a reusable library of hand-drawn illustrations, drawn once in code per brand, supplies the pictures."
5
+ ---
6
+
7
+ # Carousel Maker
8
+
9
+ A brand and a few lines of copy in, 1080x1350 carousel slides out. The template places the text, so it
10
+ is never garbled and never off-brand. Pictures come from the brand's library: drawings written once as
11
+ canvas code, painted by shorts-animator, and reused by every deck after that. Text-only decks need no
12
+ library at all.
13
+
14
+ `CM` = `node <this skill's folder>/scripts/cm.ts`. Write the full command each time. One folder per
15
+ brand: `BRAND=./<slug>-carousels`. Decks live in `$BRAND/decks/<deck>.json`.
16
+
17
+ ## 1. Decide the copy
18
+
19
+ Decide the slides yourself. Ask one question only if the subject or the brand is unclear. A pasted
20
+ script is used word for word.
21
+
22
+ - 5 to 8 slides: a `cover`, then `point` slides, then one `cta`.
23
+ - The cover is a promise in 8 words or fewer. It is the only slide most people see.
24
+ - One idea per point slide: a title of 7 words or fewer, a body of 22 words or fewer.
25
+ - The cta asks for one thing (save, follow, comment) and carries a `follow` line.
26
+ - `caption` is the post text: two short lines and one question for the comments.
27
+
28
+ ## 2. Set up the brand
29
+
30
+ ```bash
31
+ CM new "$BRAND" --name "Slow Hours" --handle @slowhours --look ink # brand.json, decks/, art/, library/
32
+ ```
33
+
34
+ `brand.json`: `name`, `handle`, `colors` (`paper`, `ink`, `accent`, `muted`, all `#rrggbb`), `fonts`
35
+ (`head`, `body`, CSS font stacks). Set them from what they told you; the defaults are cream, near-black
36
+ and orange. `--look` picks the paint for the library: `ink`, `gouache`, `watercolor`, `pastel`, `oil`.
37
+
38
+ A deck:
39
+
40
+ ```json
41
+ { "title": "mornings", "caption": "...", "slides": [
42
+ { "kind": "cover", "title": "Slow mornings, in 4 steps", "body": "No 5am club.", "art": "window" },
43
+ { "kind": "point", "title": "Coffee, outside", "body": "Five minutes on the step.", "art": "coffee" },
44
+ { "kind": "point", "title": "Their own photo", "art": "photos/desk.jpg" },
45
+ { "kind": "cta", "title": "Save this for tomorrow", "follow": "Follow @slowhours" } ] }
46
+ ```
47
+
48
+ `art` is a library drawing (a bare name), a file (a path, relative to `$BRAND`), or left out for a
49
+ text-only slide, which gets larger type.
50
+
51
+ ## 3. Draw the library (once per brand)
52
+
53
+ Skip this for text-only decks. Every bare `art` name needs a function in `$BRAND/art/scenes.js`:
54
+ `window.SCENES = { "window": (k) => { k.sky({...}); ... } }`. Read `../shorts-animator/references/kit.md`
55
+ before writing scenes. Draw objects and places, square, one subject, big simple shapes, strong value
56
+ contrast; the paint pass adds texture. No people's faces close up.
57
+
58
+ ```bash
59
+ CM art "$BRAND" # every drawing the decks use -> library/<name>.jpg
60
+ CM art "$BRAND" coffee # only these
61
+ ```
62
+
63
+ Look at the sheet it reports once. Redraw only the drawings that are muddy, empty or look alike. The
64
+ library is the brand's asset: the next deck reuses it and only new names cost a drawing.
65
+
66
+ ## 4. Check, render, look (budgeted)
67
+
68
+ ```bash
69
+ CM check "$BRAND" [deck] # no browser: unknown kinds, missing drawings or files, deck shape, word counts
70
+ CM render "$BRAND" [deck] # out/<deck>/slide-N.png, sheet.jpg, caption.txt; measures every slide
71
+ ```
72
+
73
+ Fix every `ERROR` from `check` before rendering. `render` also fails a slide whose text spills out of
74
+ its frame or whose picture did not load. Then read `out/<deck>/sheet.jpg` once. **Budget: at most two
75
+ looks per deck** (the library sheet and the deck sheet). Images are the expensive part of this loop; do
76
+ not reopen a sheet you have already judged.
77
+
78
+ Tell them in two lines what it is (slides, look) and: "Tell me what to change, one sentence is enough."
79
+
80
+ ## 5. One-sentence changes
81
+
82
+ Smallest change, `CM check`, render, show.
83
+
84
+ | they say | change |
85
+ |---|---|
86
+ | shorter, punchier | the slide's `title` or `body` |
87
+ | different colours, our brand | `brand.json` `colors` |
88
+ | serif, sans, our font | `brand.json` `fonts` |
89
+ | a different picture on slide 3 | that slide's `art`, or one new scene plus `CM art "$BRAND" <name>` |
90
+ | no pictures | drop `art` from the slides |
91
+ | another post on the same brand | a new `decks/<deck>.json`; reuse library names |
92
+
93
+ ## When something goes wrong
94
+
95
+ | symptom | fix |
96
+ |---|---|
97
+ | no Chrome | install Chrome, or set `CHROME` to a Chrome or headless-shell binary |
98
+ | `CM art` cannot find shorts-animator | install it alongside, or set `SHORTS_ANIMATOR` to its `scripts/sa.ts` |
99
+ | "text spills out of the frame" | cut words; `check` warns before this happens |
100
+ | no sheet.jpg | ffmpeg is missing; the slides are still in `out/<deck>/` |
@@ -0,0 +1,101 @@
1
+ <!-- Generated by scripts/build-adapters.sh. Do not edit directly. -->
2
+
3
+ ---
4
+ description: "Make narrated, painted animated shorts (TikTok, Reels, YouTube Shorts) from a script and a look described in words: scenes drawn in code, GPU-painted, voiced locally, captioned and scored into an MP4."
5
+ ---
6
+
7
+ # Shorts Animator
8
+
9
+ A script and a look in, an animated short out. You write the lines and draw every shot as canvas code; the
10
+ tool paints it on the GPU on twos, narrates it with a local Kokoro voice, captions it, scores it and
11
+ encodes the MP4. Nothing is filmed, generated by an image model, or licensed.
12
+
13
+ `SA` = `node <this skill's folder>/scripts/sa.ts`. Write the full command each time. One folder per short:
14
+ `WORK=./<slug>-short`. First run on a machine: `SA doctor` (checks Node, ffmpeg, Chrome, sets up the voice,
15
+ renders a 3-second test).
16
+
17
+ ## 1. Decide, do not interrogate
18
+
19
+ Decide the lines, shots, look, voice and music yourself. Ask one question only if the subject is unclear.
20
+ A pasted script is used word for word. A topic: write it per `references/writing.md`.
21
+
22
+ | they say | look |
23
+ |---|---|
24
+ | oil, painterly, Van Gogh, swirly, "like the faith shorts" | `oil` |
25
+ | watercolour, soft, dreamy, children's book | `watercolor` |
26
+ | crayon, pastel, chalk, for kids | `pastel` |
27
+ | ink, comic, graphic novel, line art | `ink` |
28
+ | flat, storybook, gouache, poster, calm | `gouache` |
29
+
30
+ Custom look: `"look": { "base": "oil", "brush": 16, "palette": {...} }`. Read `references/looks.md` only
31
+ when overriding numbers. Voice `bm_george` (default, scripture and quotes), `am_michael`, `bf_emma`
32
+ (stories), `af_heart` (kids); `speed` 0.85 to 0.95 reads calm. Their recording: `"voice": { "file":
33
+ "assets/voice.m4a" }` with `say` lines matching it in order. `"voice": "none"` for music only. Music
34
+ `mood`: `tender`, `hopeful`, `night`, `wonder`, `playful`, `none`, or a track path. `SA looks` lists all.
35
+
36
+ ## 2. Write the plan and the drawings
37
+
38
+ ```bash
39
+ SA new "$WORK" --look oil # short.json + scenes.js + assets/
40
+ ```
41
+
42
+ `short.json` lines: `{ "say": "...", "scene": "meadow" | ["a", "b"], "move": "push", "hold": 0.8 }`.
43
+ - A list of scenes cuts on the caption chunks. Cut often: a new picture every 1.5 to 3 s.
44
+ - `move`: push, pull, pan-left, pan-right, rise, fall, drift, still. `transition`: cut, fade, dip (rarely).
45
+ - `caption` shows different words; `/` forces a break. `captions.style`: box, plain, none.
46
+ - `format`: 9:16 (default), 16:9, 1:1, 4:5. `twos`: 2 (hand-drawn), 1 (smooth).
47
+
48
+ `scenes.js`: `window.SCENES = { "meadow": (k) => { k.sky({...}); k.person({...}); } }`. Read
49
+ `references/kit.md` before writing scenes. Draw like a painter:
50
+ - Big simple shapes, strong value contrast, one subject. The paint pass adds texture; draw nothing fussy.
51
+ - Keep faces out of the caption band (about 77% down).
52
+ - Every shot different: place, scale, day and night, warm and cool. Match the words.
53
+ - Small motion: `pose: "walk"`, `dx`, rain, glints. `k.t` seconds, `k.p` progress 0 to 1.
54
+ - No helper for it (a boat, an animal)? Write a small function with `k.g`, flat shapes in the palette.
55
+
56
+ ## 3. Check, then look (budgeted)
57
+
58
+ ```bash
59
+ SA check "$WORK" # no browser, about a second: missing scenes, throwing scenes, unknown kit calls,
60
+ # figures under the captions, line and total length
61
+ SA frames "$WORK" # narrates (cached), one painted frame per shot -> frames/sheet.jpg
62
+ SA still "$WORK" 7 # one shot full size, only when the sheet shows a problem you cannot place
63
+ ```
64
+
65
+ Fix every `ERROR` from `check` before spending a browser run. Then read `frames/sheet.jpg` once. Fix muddy
66
+ or empty shots, a figure lost in its background (contrast, `rim`), look-alike shots, a red "no scene"
67
+ frame, and every `⚠ the page said` line. **Budget: at most two frames rounds before the first render.**
68
+ Images are the expensive part of this loop; do not reopen a sheet you have already judged.
69
+
70
+ ## 4. Render and deliver
71
+
72
+ ```bash
73
+ SA render "$WORK" # about a minute for 40 s -> <title>.mp4, renders/vN.mp4 (+ its short.json), qa/sheet.jpg
74
+ ```
75
+
76
+ Read `qa/sheet.jpg` only if the render printed a warning or they report a problem. Tell them in two
77
+ lines what it is (look, length, shots) and: "Tell me what to change, one sentence is enough."
78
+
79
+ ## 5. One-sentence changes
80
+
81
+ Smallest change, `SA check`, render, show. `SA set "$WORK" voice.speed=0.85 music.mood=night` edits
82
+ short.json (JSON values; plain text otherwise) and refuses an invalid result.
83
+
84
+ | they say | change |
85
+ |---|---|
86
+ | more painterly, softer | `look` or its numbers (brush, swirl, wash) |
87
+ | slower, faster | `voice.speed`, `pause` |
88
+ | a woman's voice, American | `voice.id` |
89
+ | no music, more emotional | `music.mood` |
90
+ | bigger captions, no box | `captions.size` 52, `captions.style` plain |
91
+ | for YouTube | `format` 16:9, redraw shots whose layout breaks |
92
+ | change shot 4 | that scene function only |
93
+
94
+ ## When something goes wrong
95
+
96
+ | symptom | fix |
97
+ |---|---|
98
+ | no Chrome | install Chrome, or `SA doctor` fetches a headless one |
99
+ | "painting on the CPU" | works, about 10x slower |
100
+ | narrator setup fails | needs Python 3.10+ or `uv`; or use `"voice": "none"` or their recording |
101
+ | voice timing off with their recording | `say` lines must match its words, in order |
package/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
  <p><strong>Agent-agnostic skill catalog for Codex, Claude, Cursor, Grok, Copilot, Windsurf, Kiro, Hermes Agent, and other skill-aware tools.</strong></p>
4
4
  <p>
5
5
  <img src="https://img.shields.io/badge/license-MIT-16a34a" alt="MIT license">
6
- <img src="https://img.shields.io/badge/skills-56-2563eb" alt="56 skills">
6
+ <img src="https://img.shields.io/badge/skills-59-2563eb" alt="59 skills">
7
7
  <img src="https://img.shields.io/badge/platforms-Codex%20%7C%20Claude%20%7C%20Cursor%20%7C%20Grok%20%7C%20Copilot%20%7C%20Windsurf%20%7C%20Kiro%20%7C%20Hermes-111827" alt="Codex Claude Cursor Grok Copilot Windsurf Kiro Hermes">
8
8
  <img src="https://img.shields.io/badge/status-public%20catalog-16a34a" alt="Public catalog">
9
9
  </p>
@@ -300,7 +300,7 @@ Look back and improve: self-critique, retrospectives, performance review, rapid
300
300
 
301
301
  | Skill | What it does | Use when |
302
302
  |-------|-------------|----------|
303
- | [self-critique](plugins/olko-reflection/skills/self-critique/SKILL.md) | Adversarially critiques your own last answer: spawns a critic agent that verifies claims against live sources, then loops until satisfied and reports where you were wrong | Checking a substantial answer before the user has to |
303
+ | [self-critique](plugins/olko-reflection/skills/self-critique/SKILL.md) | Adversarially critiques your own last answer: a blind critic agent re-derives and verifies every claim against live sources, the score is computed from a labelled claim ledger, you revise under a ratchet, restate the corrected answer, and turn each caught error into a durable rule with a fire counter | Checking a substantial answer before the user has to |
304
304
  | [review-past-performance](plugins/olko-reflection/skills/review-past-performance/SKILL.md) | Pulls 24h of ICM memories, git history, and skill analytics; detects repeated mistakes and slow workflows; proposes 1-3 concrete fixes | Daily self-improvement loop or codifying a repeated workflow |
305
305
  | [retro-analysis](plugins/olko-reflection/skills/retro-analysis/SKILL.md) | Produces repository, comparison, and cross-project retrospectives from delivery, code-quality, work-pattern, and trend evidence | The user asks for a retro over shipped work ("run a retrospective", "how did this quarter go", "what did we ship") or a scheduled retro job fires; for agent-operations retros use agent-ops-retro, for a single finished change use wrap-up |
306
306
  | [agent-ops-retro](plugins/olko-reflection/skills/agent-ops-retro/SKILL.md) | Retrospective on how the agents themselves are being operated: mines local transcripts and reads the reports other jobs already produce to surface what the human keeps repeating, what the guardrails caught, and where delivery leaked, carrying unactioned findings forward | Checking agent usage, delegation cost, or repeating corrections across sessions rather than shipped code |
@@ -334,7 +334,7 @@ Build, test and publish Garmin Connect IQ watch faces.
334
334
  |-------|-------------|----------|
335
335
  | [garmin-watchface](plugins/olko-garmin-kit/skills/garmin-watchface/SKILL.md) | Designs, builds, tests, screenshots, and publishes Garmin Connect IQ watch faces in Monkey C | Working on a Connect IQ watch face, SVG design proposals, inspiration gathering, layout that clips or overlaps, simulator screenshots, app settings, device support, or store submission |
336
336
 
337
- ### olko-creative (5)
337
+ ### olko-creative (7)
338
338
 
339
339
  Creative and personal projects: photo galleries, music players, Plex ingest, listings, wiki editing.
340
340
 
@@ -345,6 +345,8 @@ Creative and personal projects: photo galleries, music players, Plex ingest, lis
345
345
  | [music-to-plex](plugins/olko-creative/skills/music-to-plex/SKILL.md) | Acquires albums, DJ crates, and YouTube playlists for Plex/Plexamp with verified NAS delivery, Plex visibility, and source-backed Obsidian radio notes | Adding or downloading music to Plex/Plexamp, including an album request, DJ crate, or YouTube playlist |
346
346
  | [vinted-listing](plugins/olko-creative/skills/vinted-listing/SKILL.md) | Creates and safely publishes Vinted listings from verified item details and the seller's original photos, with automatic suggestions, duplicate checks, draft verification, and publish confirmation | Listing, selling, relisting, or pricing an item on Vinted, or editing and publishing an existing draft |
347
347
  | [wikipedia-uk-editor](plugins/olko-creative/skills/wikipedia-uk-editor/SKILL.md) | Drafts policy-compliant Ukrainian Wikipedia edits, en→uk translation, stub expansion, sourcing, backlog cleanup, returning ready-to-paste wikitext, an edit summary, and a verified source list | Editing, translating, or sourcing a uk.wikipedia.org article, or planning what to contribute next |
348
+ | [shorts-animator](plugins/olko-creative/skills/shorts-animator/SKILL.md) | Makes narrated, painted animated shorts from a script and a look in words: scenes drawn in code, GPU-painted on twos, voiced locally, captioned and scored into an MP4 | Making a TikTok, Reels or YouTube Shorts animation, a painted quote or verse video, or any faceless short that should look drawn |
349
+ | [carousel-maker](plugins/olko-creative/skills/carousel-maker/SKILL.md) | Makes Instagram or LinkedIn carousel slides from a topic or pasted copy: a brand template sets the text, a library of code-drawn illustrations made once per brand supplies the pictures, and every slide is measured for overflow before export | Making a carousel post, a swipeable slide series, or a set of on-brand social slides without image models |
348
350
 
349
351
  ### olko-web-ops (4)
350
352
 
@@ -0,0 +1,112 @@
1
+ ---
2
+ name: carousel-maker
3
+ description: Use when someone wants Instagram or LinkedIn carousel slides from a topic, a brief or pasted copy. A fixed brand template sets the text on every slide, and an optional library of hand-drawn illustrations, drawn once in code per brand and reused across decks, supplies the pictures. No image models or stock.
4
+ license: MIT
5
+ allowed-tools: Bash, Read, Write, Edit
6
+ compatibility: Codex, Claude Code, Hermes Agent, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Needs Node 22.18+ and Chrome; ffmpeg for the contact sheet. The illustration library needs the shorts-animator skill installed alongside.
7
+ metadata:
8
+ targets: [_source-only]
9
+ author: Oleg Koval
10
+ tags:
11
+ - instagram
12
+ - carousel
13
+ - social
14
+ - design
15
+ - slides
16
+ ---
17
+ <!-- Generated by scripts/build-adapters.sh. Do not edit directly. -->
18
+
19
+ # Carousel Maker
20
+
21
+ A brand and a few lines of copy in, 1080x1350 carousel slides out. The template places the text, so it
22
+ is never garbled and never off-brand. Pictures come from the brand's library: drawings written once as
23
+ canvas code, painted by shorts-animator, and reused by every deck after that. Text-only decks need no
24
+ library at all.
25
+
26
+ `CM` = `node <this skill's folder>/scripts/cm.ts`. Write the full command each time. One folder per
27
+ brand: `BRAND=./<slug>-carousels`. Decks live in `$BRAND/decks/<deck>.json`.
28
+
29
+ ## 1. Decide the copy
30
+
31
+ Decide the slides yourself. Ask one question only if the subject or the brand is unclear. A pasted
32
+ script is used word for word.
33
+
34
+ - 5 to 8 slides: a `cover`, then `point` slides, then one `cta`.
35
+ - The cover is a promise in 8 words or fewer. It is the only slide most people see.
36
+ - One idea per point slide: a title of 7 words or fewer, a body of 22 words or fewer.
37
+ - The cta asks for one thing (save, follow, comment) and carries a `follow` line.
38
+ - `caption` is the post text: two short lines and one question for the comments.
39
+
40
+ ## 2. Set up the brand
41
+
42
+ ```bash
43
+ CM new "$BRAND" --name "Slow Hours" --handle @slowhours --look ink # brand.json, decks/, art/, library/
44
+ ```
45
+
46
+ `brand.json`: `name`, `handle`, `colors` (`paper`, `ink`, `accent`, `muted`, all `#rrggbb`), `fonts`
47
+ (`head`, `body`, CSS font stacks). Set them from what they told you; the defaults are cream, near-black
48
+ and orange. `--look` picks the paint for the library: `ink`, `gouache`, `watercolor`, `pastel`, `oil`.
49
+
50
+ A deck:
51
+
52
+ ```json
53
+ { "title": "mornings", "caption": "...", "slides": [
54
+ { "kind": "cover", "title": "Slow mornings, in 4 steps", "body": "No 5am club.", "art": "window" },
55
+ { "kind": "point", "title": "Coffee, outside", "body": "Five minutes on the step.", "art": "coffee" },
56
+ { "kind": "point", "title": "Their own photo", "art": "photos/desk.jpg" },
57
+ { "kind": "cta", "title": "Save this for tomorrow", "follow": "Follow @slowhours" } ] }
58
+ ```
59
+
60
+ `art` is a library drawing (a bare name), a file (a path, relative to `$BRAND`), or left out for a
61
+ text-only slide, which gets larger type.
62
+
63
+ ## 3. Draw the library (once per brand)
64
+
65
+ Skip this for text-only decks. Every bare `art` name needs a function in `$BRAND/art/scenes.js`:
66
+ `window.SCENES = { "window": (k) => { k.sky({...}); ... } }`. Read `../shorts-animator/references/kit.md`
67
+ before writing scenes. Draw objects and places, square, one subject, big simple shapes, strong value
68
+ contrast; the paint pass adds texture. No people's faces close up.
69
+
70
+ ```bash
71
+ CM art "$BRAND" # every drawing the decks use -> library/<name>.jpg
72
+ CM art "$BRAND" coffee # only these
73
+ ```
74
+
75
+ Look at the sheet it reports once. Redraw only the drawings that are muddy, empty or look alike. The
76
+ library is the brand's asset: the next deck reuses it and only new names cost a drawing.
77
+
78
+ ## 4. Check, render, look (budgeted)
79
+
80
+ ```bash
81
+ CM check "$BRAND" [deck] # no browser: unknown kinds, missing drawings or files, deck shape, word counts
82
+ CM render "$BRAND" [deck] # out/<deck>/slide-N.png, sheet.jpg, caption.txt; measures every slide
83
+ ```
84
+
85
+ Fix every `ERROR` from `check` before rendering. `render` also fails a slide whose text spills out of
86
+ its frame or whose picture did not load. Then read `out/<deck>/sheet.jpg` once. **Budget: at most two
87
+ looks per deck** (the library sheet and the deck sheet). Images are the expensive part of this loop; do
88
+ not reopen a sheet you have already judged.
89
+
90
+ Tell them in two lines what it is (slides, look) and: "Tell me what to change, one sentence is enough."
91
+
92
+ ## 5. One-sentence changes
93
+
94
+ Smallest change, `CM check`, render, show.
95
+
96
+ | they say | change |
97
+ |---|---|
98
+ | shorter, punchier | the slide's `title` or `body` |
99
+ | different colours, our brand | `brand.json` `colors` |
100
+ | serif, sans, our font | `brand.json` `fonts` |
101
+ | a different picture on slide 3 | that slide's `art`, or one new scene plus `CM art "$BRAND" <name>` |
102
+ | no pictures | drop `art` from the slides |
103
+ | another post on the same brand | a new `decks/<deck>.json`; reuse library names |
104
+
105
+ ## When something goes wrong
106
+
107
+ | symptom | fix |
108
+ |---|---|
109
+ | no Chrome | install Chrome, or set `CHROME` to a Chrome or headless-shell binary |
110
+ | `CM art` cannot find shorts-animator | install it alongside, or set `SHORTS_ANIMATOR` to its `scripts/sa.ts` |
111
+ | "text spills out of the frame" | cut words; `check` warns before this happens |
112
+ | no sheet.jpg | ffmpeg is missing; the slides are still in `out/<deck>/` |