@litfamily/litopencode 1.0.31 → 1.0.32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (267) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/README-Ko-KR.md +6 -6
  3. package/README.md +6 -6
  4. package/dist/activation-probe.js +1 -0
  5. package/dist/activation-prompt-utils.d.ts +1 -1
  6. package/dist/activation-reentry.d.ts +20 -0
  7. package/dist/activation-reentry.js +110 -1
  8. package/dist/activation-routing.d.ts +2 -1
  9. package/dist/activation-routing.js +100 -11
  10. package/dist/activation-workflow-prompts.d.ts +4 -0
  11. package/dist/activation-workflow-prompts.js +30 -0
  12. package/dist/activation.d.ts +1 -1
  13. package/dist/activation.js +44 -5
  14. package/dist/adhd-next.d.ts +51 -0
  15. package/dist/adhd-next.js +150 -0
  16. package/dist/cli/managed-skill-assets.d.ts +1 -1
  17. package/dist/cli/managed-skill-assets.js +7 -1
  18. package/dist/cli/native-skill-integrity.js +1 -1
  19. package/dist/cli.js +7 -1
  20. package/dist/commands.d.ts +28 -1
  21. package/dist/commands.js +48 -1
  22. package/dist/features.d.ts +80 -1
  23. package/dist/features.js +105 -1
  24. package/dist/ledger.js +12 -1
  25. package/dist/secret-shapes.js +5 -5
  26. package/dist/skills.d.ts +22 -1
  27. package/dist/skills.js +36 -0
  28. package/dist/start-work-typed.d.ts +34 -0
  29. package/dist/start-work-typed.js +156 -0
  30. package/dist/state.d.ts +2 -0
  31. package/dist/state.js +2 -0
  32. package/dist/tools.js +22 -2
  33. package/dist/tui/mission-band.d.ts +20 -1
  34. package/dist/tui/mission-band.js +73 -16
  35. package/dist/tui/mission-looks.d.ts +38 -0
  36. package/dist/tui/mission-looks.js +73 -0
  37. package/dist/tui/mission-model.d.ts +2 -0
  38. package/dist/tui/mission-model.js +3 -1
  39. package/dist/tui/mission-rainbow.d.ts +33 -0
  40. package/dist/tui/mission-rainbow.js +90 -0
  41. package/dist/tui/mission-source.d.ts +48 -0
  42. package/dist/tui/mission-source.js +184 -2
  43. package/dist/tui/mission-text.d.ts +2 -0
  44. package/dist/tui/mission-text.js +9 -1
  45. package/dist/tui/mission-threads.d.ts +50 -0
  46. package/dist/tui/mission-threads.js +119 -0
  47. package/dist/tui.js +84 -6
  48. package/dist/uiux-visual-catalog.js +8 -1
  49. package/dist/v2/session-hooks.js +38 -5
  50. package/dist/workflow-stack.d.ts +53 -0
  51. package/dist/workflow-stack.js +196 -0
  52. package/docs/assets/readme/badge-version.svg +1 -1
  53. package/docs/assets/skills/lit-schematic.webp +0 -0
  54. package/docs/reference-Ko-KR.md +30 -2
  55. package/docs/reference.md +34 -2
  56. package/package.json +1 -1
  57. package/skills/frontend-ui-ux/SKILL.md +3 -2
  58. package/skills/frontend-ui-ux/kit/components.css +414 -0
  59. package/skills/frontend-ui-ux/kit/fonts.json +22 -0
  60. package/skills/frontend-ui-ux/kit/layouts/landing.html +164 -0
  61. package/skills/frontend-ui-ux/kit/layouts/settings.html +114 -0
  62. package/skills/frontend-ui-ux/kit/layouts/workspace.html +115 -0
  63. package/skills/frontend-ui-ux/kit/styles/computational-brutalism.json +227 -0
  64. package/skills/frontend-ui-ux/kit/styles/field-notes.json +205 -0
  65. package/skills/frontend-ui-ux/kit/styles/graphite.json +200 -0
  66. package/skills/frontend-ui-ux/kit/styles/meadow.json +199 -0
  67. package/skills/frontend-ui-ux/kit/styles/neo-brutalism.json +222 -0
  68. package/skills/frontend-ui-ux/kit/ui.js +226 -0
  69. package/skills/frontend-ui-ux/references/brand-and-imagery.md +2 -2
  70. package/skills/frontend-ui-ux/references/complete-contract.md +2 -1
  71. package/skills/frontend-ui-ux/references/craft-floor.md +6 -2
  72. package/skills/frontend-ui-ux/references/default-editorial-pixel.json +3 -0
  73. package/skills/frontend-ui-ux/references/house-styles.md +236 -0
  74. package/skills/frontend-ui-ux/references/motion-guide.md +2 -2
  75. package/skills/frontend-ui-ux/references/production.md +3 -1
  76. package/skills/frontend-ui-ux/references/slop-register.md +4 -4
  77. package/skills/frontend-ui-ux/scripts/design-lock.mjs +400 -0
  78. package/skills/frontend-ui-ux/scripts/pixel-art.mjs +60 -0
  79. package/skills/frontend-ui-ux/scripts/probe-lock.mjs +235 -0
  80. package/skills/frontend-ui-ux/scripts/probe-page.mjs +34 -12
  81. package/skills/frontend-ui-ux/scripts/probe-static.mjs +16 -3
  82. package/skills/frontend-ui-ux/scripts/probe-thresholds.json +8 -2
  83. package/skills/frontend-ui-ux/scripts/probe.mjs +35 -7
  84. package/skills/lit-adhd/SKILL.md +208 -0
  85. package/skills/lit-adhd/references/brief-format.md +43 -0
  86. package/skills/lit-adhd/references/card-examples.md +82 -0
  87. package/skills/lit-adhd/references/status-taxonomy.md +29 -0
  88. package/skills/lit-adhd/scripts/rewind.mjs +835 -0
  89. package/skills/lit-diagram-drawer/SKILL.md +4 -3
  90. package/skills/lit-diagram-drawer/references/style-guide.md +20 -11
  91. package/skills/lit-diagram-drawer/references/type-architecture.md +3 -3
  92. package/skills/lit-diagram-drawer/references/type-dependency.md +1 -1
  93. package/skills/lit-diagram-drawer/references/type-tree.md +3 -3
  94. package/skills/lit-diagram-drawer/references/type-wardley.md +1 -1
  95. package/skills/lit-diagram-drawer/references/verifier-guide.md +1 -0
  96. package/skills/lit-diagram-drawer/scripts/craft-thresholds.json +1 -2
  97. package/skills/lit-diagram-drawer/scripts/visual-quality.mjs +1 -2
  98. package/skills/lit-docx/SKILL.md +2 -1
  99. package/skills/lit-handoff/SKILL.md +2 -0
  100. package/skills/lit-hijack/SKILL.md +422 -0
  101. package/skills/lit-hijack/references/capture-and-provenance.md +87 -0
  102. package/skills/lit-hijack/references/clean-room-build.md +111 -0
  103. package/skills/lit-hijack/references/distil-and-licence.md +100 -0
  104. package/skills/lit-hijack/references/gap-and-port-design.md +126 -0
  105. package/skills/lit-hijack/references/parity-and-report.md +110 -0
  106. package/skills/lit-hijack/scripts/hijack.mjs +993 -0
  107. package/skills/lit-plan/SKILL.md +2 -0
  108. package/skills/lit-pptx/SKILL.md +27 -11
  109. package/skills/lit-pptx/fonts/jetbrains-mono/JetBrainsMono-Bold.ttf +0 -0
  110. package/skills/lit-pptx/fonts/jetbrains-mono/JetBrainsMono-Regular.ttf +0 -0
  111. package/skills/lit-pptx/fonts/jetbrains-mono/OFL.txt +93 -0
  112. package/skills/lit-pptx/fonts/jetbrains-mono/SOURCE.md +17 -0
  113. package/skills/lit-pptx/references/density-and-fill.md +9 -3
  114. package/skills/lit-pptx/references/direction-step.md +21 -6
  115. package/skills/lit-pptx/references/examples/04-lecture-chalk-ko.md +3 -6
  116. package/skills/lit-pptx/references/examples/05-research-talk-paper-en.md +1 -5
  117. package/skills/lit-pptx/references/examples/08-reliability-keynote-night-en.md +0 -4
  118. package/skills/lit-pptx/references/examples/09-status-update-ledger-en.md +2 -2
  119. package/skills/lit-pptx/references/examples/11-forecast-review-night-ko.md +4 -7
  120. package/skills/lit-pptx/references/examples/13-engineering-review-computational-brutalism-ko.md +173 -0
  121. package/skills/lit-pptx/references/examples/14-launch-pitch-neo-brutalism-ko.md +154 -0
  122. package/skills/lit-pptx/references/examples/15-design-lecture-bauhaus-ko.md +139 -0
  123. package/skills/lit-pptx/references/examples/16-community-programme-riso-ko.md +158 -0
  124. package/skills/lit-pptx/references/examples/17-public-data-briefing-newsroom-ko.md +179 -0
  125. package/skills/lit-pptx/references/layout-families.md +65 -47
  126. package/skills/lit-pptx/references/title-treatments.md +83 -134
  127. package/skills/lit-pptx/references/tonalities/atlas.md +3 -3
  128. package/skills/lit-pptx/references/tonalities/bauhaus.md +140 -0
  129. package/skills/lit-pptx/references/tonalities/chalk.md +7 -6
  130. package/skills/lit-pptx/references/tonalities/computational-brutalism.md +150 -0
  131. package/skills/lit-pptx/references/tonalities/gazette.md +1 -1
  132. package/skills/lit-pptx/references/tonalities/ledger.md +1 -1
  133. package/skills/lit-pptx/references/tonalities/neo-brutalism.md +161 -0
  134. package/skills/lit-pptx/references/tonalities/newsroom.md +144 -0
  135. package/skills/lit-pptx/references/tonalities/night.md +1 -1
  136. package/skills/lit-pptx/references/tonalities/paper.md +2 -2
  137. package/skills/lit-pptx/references/tonalities/riso.md +137 -0
  138. package/skills/lit-pptx/references/tonalities/signal.md +3 -3
  139. package/skills/lit-pptx/references/tonalities/studio.md +7 -6
  140. package/skills/lit-pptx/run.mjs +2 -1
  141. package/skills/lit-pptx/scripts/compile-deck.js +1 -1
  142. package/skills/lit-pptx/scripts/craft-thresholds.json +4 -8
  143. package/skills/lit-pptx/scripts/craft_extras.py +56 -3
  144. package/skills/lit-pptx/scripts/deck_output.py +75 -90
  145. package/skills/lit-pptx/scripts/embed_fonts.py +13 -1
  146. package/skills/lit-pptx/scripts/layout_inventory.py +12 -5
  147. package/skills/lit-pptx/scripts/lib/grid-resolver.js +101 -110
  148. package/skills/lit-pptx/scripts/lib/layout-resolver.js +9 -15
  149. package/skills/lit-pptx/scripts/lib/render-pack.js +373 -566
  150. package/skills/lit-pptx/scripts/lib/slide-grid.js +104 -0
  151. package/skills/lit-pptx/scripts/lib/template-registry.js +57 -6
  152. package/skills/lit-pptx/scripts/qa_deck.py +10 -11
  153. package/skills/lit-pptx/scripts/render_pages.py +118 -0
  154. package/skills/lit-pptx/templates/tonalities/atlas/pack.yaml +1 -1
  155. package/skills/lit-pptx/templates/tonalities/bauhaus/pack.yaml +98 -0
  156. package/skills/lit-pptx/templates/tonalities/chalk/pack.yaml +1 -1
  157. package/skills/lit-pptx/templates/tonalities/computational-brutalism/pack.yaml +99 -0
  158. package/skills/lit-pptx/templates/tonalities/gazette/pack.yaml +1 -1
  159. package/skills/lit-pptx/templates/tonalities/ledger/pack.yaml +1 -1
  160. package/skills/lit-pptx/templates/tonalities/neo-brutalism/pack.yaml +107 -0
  161. package/skills/lit-pptx/templates/tonalities/newsroom/pack.yaml +99 -0
  162. package/skills/lit-pptx/templates/tonalities/night/pack.yaml +1 -1
  163. package/skills/lit-pptx/templates/tonalities/paper/pack.yaml +1 -1
  164. package/skills/lit-pptx/templates/tonalities/riso/pack.yaml +99 -0
  165. package/skills/lit-pptx/templates/tonalities/signal/pack.yaml +2 -2
  166. package/skills/lit-pptx/templates/tonalities/studio/pack.yaml +1 -1
  167. package/skills/lit-recap/SKILL.md +4 -0
  168. package/skills/lit-schematic/SKILL.md +118 -0
  169. package/skills/lit-schematic/examples/iso-heat-exchanger/build.mjs +38 -0
  170. package/skills/lit-schematic/examples/iso-heat-exchanger/scene.mjs +133 -0
  171. package/skills/lit-schematic/examples/journal-adsorption-rig/build.mjs +87 -0
  172. package/skills/lit-schematic/examples/pid-dosing-skid/build.mjs +85 -0
  173. package/skills/lit-schematic/references/cutaway-outputs.md +70 -0
  174. package/skills/lit-schematic/references/isometric-craft.md +101 -0
  175. package/skills/lit-schematic/references/journal-figures.md +72 -0
  176. package/skills/lit-schematic/references/kit-api.md +134 -0
  177. package/skills/lit-schematic/references/pfd-and-layout.md +53 -0
  178. package/skills/lit-schematic/references/pid-drafting.md +103 -0
  179. package/skills/lit-schematic/references/pid-symbols.md +163 -0
  180. package/skills/lit-schematic/references/verification.md +100 -0
  181. package/skills/lit-schematic/scripts/doctor.mjs +57 -0
  182. package/skills/lit-schematic/scripts/lib/figure.mjs +81 -0
  183. package/skills/lit-schematic/scripts/lib/fonts.mjs +25 -0
  184. package/skills/lit-schematic/scripts/lib/geom.mjs +113 -0
  185. package/skills/lit-schematic/scripts/lib/interactive.mjs +292 -0
  186. package/skills/lit-schematic/scripts/lib/isa.mjs +115 -0
  187. package/skills/lit-schematic/scripts/lib/iso.mjs +719 -0
  188. package/skills/lit-schematic/scripts/lib/legend-sheet.mjs +162 -0
  189. package/skills/lit-schematic/scripts/lib/pid.mjs +937 -0
  190. package/skills/lit-schematic/scripts/lib/png.mjs +132 -0
  191. package/skills/lit-schematic/scripts/lib/qa-core.mjs +658 -0
  192. package/skills/lit-schematic/scripts/lib/route.mjs +218 -0
  193. package/skills/lit-schematic/scripts/lib/sheet.mjs +890 -0
  194. package/skills/lit-schematic/scripts/lib/svg.mjs +82 -0
  195. package/skills/lit-schematic/scripts/lib/theme.mjs +115 -0
  196. package/skills/lit-schematic/scripts/motion.mjs +129 -0
  197. package/skills/lit-schematic/scripts/qa.mjs +92 -0
  198. package/skills/lit-schematic/scripts/render.mjs +233 -0
  199. package/skills/lit-schematic/scripts/scaffold.mjs +60 -0
  200. package/skills/lit-scientific-visualization/SKILL.md +27 -4
  201. package/skills/lit-typographic-motion/SKILL.md +19 -17
  202. package/skills/lit-typographic-motion/THIRD_PARTY_NOTICES +9 -0
  203. package/skills/lit-typographic-motion/engine/accents.mjs +6 -0
  204. package/skills/lit-typographic-motion/engine/assets.mjs +282 -0
  205. package/skills/lit-typographic-motion/engine/blender/runner.py +228 -0
  206. package/skills/lit-typographic-motion/engine/blender.mjs +126 -0
  207. package/skills/lit-typographic-motion/engine/board.mjs +138 -0
  208. package/skills/lit-typographic-motion/engine/cover/assets.mjs +11 -8
  209. package/skills/lit-typographic-motion/engine/cover/capture.mjs +6 -6
  210. package/skills/lit-typographic-motion/engine/cover/render.mjs +20 -7
  211. package/skills/lit-typographic-motion/engine/cover/treatment.mjs +30 -3
  212. package/skills/lit-typographic-motion/engine/fill.mjs +54 -0
  213. package/skills/lit-typographic-motion/engine/gallery.mjs +118 -0
  214. package/skills/lit-typographic-motion/engine/house.mjs +42 -0
  215. package/skills/lit-typographic-motion/engine/look.mjs +65 -8
  216. package/skills/lit-typographic-motion/engine/loudness.mjs +101 -0
  217. package/skills/lit-typographic-motion/engine/scaffold.mjs +219 -0
  218. package/skills/lit-typographic-motion/engine/score.mjs +594 -0
  219. package/skills/lit-typographic-motion/engine/sound.mjs +9 -57
  220. package/skills/lit-typographic-motion/engine/stage/capture.mjs +23 -9
  221. package/skills/lit-typographic-motion/engine/stage/clock.js +8 -2
  222. package/skills/lit-typographic-motion/engine/stage/cover-init.js +12 -1
  223. package/skills/lit-typographic-motion/engine/stage/frame-worker.mjs +15 -7
  224. package/skills/lit-typographic-motion/engine/stage/gate.mjs +48 -4
  225. package/skills/lit-typographic-motion/engine/stage/qa-page.js +16 -5
  226. package/skills/lit-typographic-motion/engine/stage/qa.mjs +148 -7
  227. package/skills/lit-typographic-motion/engine/stage/render.mjs +69 -7
  228. package/skills/lit-typographic-motion/engine/stage/scan.mjs +20 -1
  229. package/skills/lit-typographic-motion/engine/stage/stage-kit.js +85 -4
  230. package/skills/lit-typographic-motion/engine/stills.mjs +1 -1
  231. package/skills/lit-typographic-motion/engine/styles.mjs +221 -0
  232. package/skills/lit-typographic-motion/engine/text.mjs +1 -1
  233. package/skills/lit-typographic-motion/engine/treatment.mjs +190 -6
  234. package/skills/lit-typographic-motion/engine/vendor/three/LICENSE +21 -0
  235. package/skills/lit-typographic-motion/engine/vendor/three/addons/environments/RoomEnvironment.js +144 -0
  236. package/skills/lit-typographic-motion/engine/vendor/three/addons/geometries/RoundedBoxGeometry.js +155 -0
  237. package/skills/lit-typographic-motion/engine/vendor/three/three.module.js +54571 -0
  238. package/skills/lit-typographic-motion/gate.mjs +18 -2
  239. package/skills/lit-typographic-motion/probe.mjs +13 -1
  240. package/skills/lit-typographic-motion/recipes/hero-3d/expected.json +64 -0
  241. package/skills/lit-typographic-motion/recipes/hero-3d/index.html +132 -0
  242. package/skills/lit-typographic-motion/recipes/orbit-loop/expected.json +2 -0
  243. package/skills/lit-typographic-motion/recipes/painted-light/expected.json +2 -0
  244. package/skills/lit-typographic-motion/recipes/weight-tide/expected.json +2 -0
  245. package/skills/lit-typographic-motion/references/cover.md +56 -13
  246. package/skills/lit-typographic-motion/references/craft-loop.md +20 -7
  247. package/skills/lit-typographic-motion/references/depth.md +112 -0
  248. package/skills/lit-typographic-motion/references/runtime.md +21 -6
  249. package/skills/lit-typographic-motion/references/sound.md +76 -0
  250. package/skills/lit-typographic-motion/references/stage.md +50 -7
  251. package/skills/lit-typographic-motion/references/studio.md +162 -0
  252. package/skills/lit-typographic-motion/references/style-bibles.md +18 -0
  253. package/skills/lit-typographic-motion/references/treatment.md +108 -9
  254. package/skills/lit-typographic-motion/render.mjs +60 -3
  255. package/skills/lit-typographic-motion/styles/paper.json +185 -0
  256. package/skills/lit-typographic-motion/styles/swiss-signal.json +188 -0
  257. package/skills/lit-typographic-motion/styles/terminalcore.json +182 -0
  258. package/skills/lit-typographic-motion/styles/tidal.json +187 -0
  259. package/skills/litresearch/SKILL.md +2 -0
  260. package/skills/managed-skill-manifest.json +517 -88
  261. package/skills/readme-studio/SKILL.md +1 -1
  262. package/skills/review-work/SKILL.md +2 -0
  263. package/skills/start-work/SKILL.md +8 -0
  264. package/skills/workflow-loop/SKILL.md +4 -0
  265. package/tools/check-pack-payload.mjs +4 -2
  266. package/tools/payload-substance-parity.json +4 -3
  267. package/tools/qa-cover-recipes.mjs +4 -3
@@ -34,8 +34,12 @@ Usage:
34
34
  node render.mjs video --brief <brief.json> --out <dir> [--round 1|2|3] [--viewed N]
35
35
  node render.mjs perf --brief <brief.json> --out <dir>
36
36
  node render.mjs gate --out <dir> [--viewed N]
37
+ node render.mjs scaffold --out <dir>
37
38
  node render.mjs stage --out <dir> [--round 1|2|3] [--stills-only] [--detach]
39
+ node render.mjs styles --out <dir> [--format 16:9|9:16]
38
40
  node render.mjs cover --out <dir> [--round 1|2|3] [--window t0,t1] [--detach]
41
+ node render.mjs assets --out <dir> --url <https link of the product> [--cover]
42
+ node render.mjs blender --out <dir> [--final] [--detach]
39
43
  node render.mjs sound --out <dir>
40
44
  node render.mjs look --out <dir> --round 1|2|3 --answers <answers.json>
41
45
  Options: --samples N (master default 4) --shutter S (default 0.5) --scale 1..4 --word-timing (Tier 3, opt-in)
@@ -524,9 +528,14 @@ async function stageMode(argv, out, viewed) {
524
528
  }
525
529
  const stillsOnly = argv.includes("--stills-only");
526
530
  const result = await stage.renderStage(out, { round, stillsOnly });
527
- for (const entry of result.stills.files) console.log(`${entry.kind === "sheet" ? "contact sheet" : "still"}: ${path.join(out, entry.file)}`);
531
+ for (const entry of result.stills.files) console.log(`${entry.kind === "sheet" ? "contact sheet" : entry.kind === "board" ? "storyboard" : "still"}: ${path.join(out, entry.file)}`);
528
532
  if (result.stillsOnly) {
529
- console.log(`stills-only: open every still and the contact sheet, record the round with \`look --round ${round}\`, make the change, then render the film.`);
533
+ const failed = result.board?.failed ?? [];
534
+ if (failed.length) {
535
+ console.error(`BOARD_CHECK_FAIL (${EXIT.GATE_FAIL_QA}): ${failed.map((rule) => `${rule.id} ${rule.detail}`).join("; ")}. Fix the page, render --stills-only again, then look at the storyboard ${path.join(out, "stills", "board.png")} and every file in ${path.join(out, "stills")}`);
536
+ return EXIT.GATE_FAIL_QA;
537
+ }
538
+ console.log(`stills-only: board check PASS; open the storyboard ${path.join(out, "stills", "board.png")}, every still and the contact sheet, record the round with \`look --round ${round}\`, make the change, then render the film.`);
530
539
  return EXIT.OK;
531
540
  }
532
541
  const gate = runGate(out, { viewed });
@@ -534,6 +543,43 @@ async function stageMode(argv, out, viewed) {
534
543
  return gate.exitCode;
535
544
  }
536
545
 
546
+ // `scaffold`: the starting stage page from the treatment (engine/scaffold.mjs).
547
+ async function scaffoldMode(out) {
548
+ const { scaffoldCommand } = await import("./engine/scaffold.mjs");
549
+ console.log(scaffoldCommand(out, { env: process.env }));
550
+ return EXIT.OK;
551
+ }
552
+
553
+ // `blender`: the offline Cycles rung (engine/blender.mjs). The final plate can take most of an hour, so
554
+ // `--detach` runs it like a full stage render and reports through .run/.
555
+ async function blenderMode(argv, out) {
556
+ const final = argv.includes("--final");
557
+ if (argv.includes("--detach")) {
558
+ const { detachStage } = await import("./engine/stage/render.mjs");
559
+ const detached = detachStage(out, argv.slice(1), "blender");
560
+ console.log(`rendering the plate in the background (pid ${detached.pid}); progress: ${detached.progressFile}; the exit code lands in ${detached.exitFile}; log: ${detached.logFile}`);
561
+ return EXIT.OK;
562
+ }
563
+ const { blenderCommand } = await import("./engine/blender.mjs");
564
+ const runDir = path.join(out, ".run");
565
+ const progress = (frame, frameCount) => {
566
+ mkdirSync(runDir, { recursive: true });
567
+ writeFileSync(path.join(runDir, "progress.json"), JSON.stringify({ phase: "plate", frame, frameCount, updatedAt: new Date().toISOString() }) + "\n");
568
+ };
569
+ const result = await blenderCommand({ out, final, env: process.env, log, progress: final ? progress : null });
570
+ console.log(result.message);
571
+ return result.code;
572
+ }
573
+
574
+ // `styles`: the style gallery, one board round per house style (engine/gallery.mjs).
575
+ async function stylesMode(argv, out) {
576
+ const { stylesCommand } = await import("./engine/gallery.mjs");
577
+ const { renderStage } = await import("./engine/stage/render.mjs");
578
+ const result = await stylesCommand(out, { format: option(argv, "format", "16:9"), render: renderStage, log });
579
+ console.log(result.message);
580
+ return result.code;
581
+ }
582
+
537
583
  // `cover`: a README cover loop (engine/cover/). Every round is a full render gated on the decoded file;
538
584
  // `--window t0,t1` re-renders only the frames around a logged defect. A detached run reports through .run/.
539
585
  async function coverMode(argv, out) {
@@ -554,10 +600,17 @@ async function coverMode(argv, out) {
554
600
  return result.code;
555
601
  }
556
602
 
603
+ async function assetsMode(argv) {
604
+ const { assetsCommand } = await import("./engine/assets.mjs");
605
+ const result = await assetsCommand(argv);
606
+ process.stdout.write(`${result.message}\n`);
607
+ return result.code;
608
+ }
609
+
557
610
  async function run(argv) {
558
611
  const mode = argv[0];
559
612
  if (!mode || mode === "--help" || argv.includes("--help")) { console.log(usage); return EXIT.OK; }
560
- if (!["film", "stills", "sheet", "video", "perf", "gate", "frames", "stage", "cover", "sound", "look"].includes(mode)) { console.error(usage); return 2; }
613
+ if (!["film", "stills", "sheet", "video", "perf", "gate", "frames", "stage", "scaffold", "styles", "cover", "assets", "blender", "sound", "look"].includes(mode)) { console.error(usage); return 2; }
561
614
  const out = option(argv, "out") ? path.resolve(option(argv, "out")) : undefined;
562
615
  if (!out) throw new Error("--out <dir> is required");
563
616
  const viewed = argv.includes("--viewed") ? Number(option(argv, "viewed", "0")) || 0 : undefined;
@@ -567,7 +620,11 @@ async function run(argv) {
567
620
  return result.exitCode;
568
621
  }
569
622
  if (mode === "stage") return stageMode(argv, out, viewed);
623
+ if (mode === "scaffold") return scaffoldMode(out);
624
+ if (mode === "styles") return stylesMode(argv, out);
570
625
  if (mode === "cover") return coverMode(argv, out);
626
+ if (mode === "assets") return assetsMode(argv);
627
+ if (mode === "blender") return blenderMode(argv, out);
571
628
  if (mode === "sound") return soundMode(out);
572
629
  if (mode === "look") return lookMode(argv, out);
573
630
  let treatment = null;
@@ -0,0 +1,185 @@
1
+ {
2
+ "schema": "litopencode.motion-style/v1",
3
+ "id": "paper",
4
+ "name": "Paper",
5
+ "summary": "A warm paper ground, near-black ink, one terracotta signal and one blue moment; soft springs, hand-drawn calm.",
6
+ "light": true,
7
+ "typePreset": null,
8
+ "palette": {
9
+ "ground": "#F3EEE5",
10
+ "surface": "#E6DED0",
11
+ "ink": "#1D1B18",
12
+ "muted": "#5B564E",
13
+ "signal": "#B0452A",
14
+ "accent": "#2B5D8E",
15
+ "line": "#C9BFAE"
16
+ },
17
+ "accents": [
18
+ {
19
+ "role": "growth and done",
20
+ "color": "#3F7D3A"
21
+ },
22
+ {
23
+ "role": "a second data series",
24
+ "color": "#7A3E7A"
25
+ },
26
+ {
27
+ "role": "a warning or a date",
28
+ "color": "#8A6418"
29
+ },
30
+ {
31
+ "role": "a third data series",
32
+ "color": "#1F6F6B"
33
+ }
34
+ ],
35
+ "textRoles": [
36
+ "ink",
37
+ "muted",
38
+ "signal",
39
+ "accent",
40
+ "ground"
41
+ ],
42
+ "faces": {
43
+ "display": {
44
+ "family": "Pretendard",
45
+ "weight": 700
46
+ },
47
+ "headline": {
48
+ "family": "Pretendard",
49
+ "weight": 700
50
+ },
51
+ "body": {
52
+ "family": "Pretendard",
53
+ "weight": 400
54
+ },
55
+ "label": {
56
+ "family": "MesloLGS NF",
57
+ "weight": 400
58
+ }
59
+ },
60
+ "scale": {
61
+ "16:9": {
62
+ "display": 112,
63
+ "headline": 68,
64
+ "body": 40,
65
+ "label": 26
66
+ },
67
+ "9:16": {
68
+ "display": 108,
69
+ "headline": 74,
70
+ "body": 46,
71
+ "label": 32
72
+ }
73
+ },
74
+ "leading": {
75
+ "display": 1.15,
76
+ "headline": 1.25,
77
+ "body": 1.6,
78
+ "label": 1.4
79
+ },
80
+ "motion": {
81
+ "ease": {
82
+ "enter": [
83
+ 0.22,
84
+ 1,
85
+ 0.36,
86
+ 1
87
+ ],
88
+ "move": [
89
+ 0.65,
90
+ 0,
91
+ 0.35,
92
+ 1
93
+ ],
94
+ "exit": [
95
+ 0.55,
96
+ 0,
97
+ 1,
98
+ 0.45
99
+ ]
100
+ },
101
+ "dur": {
102
+ "micro": 0.18,
103
+ "move": 0.55,
104
+ "hero": 0.8,
105
+ "exit": 0.32
106
+ },
107
+ "stagger": {
108
+ "letter": 0.03,
109
+ "word": 0.09,
110
+ "item": 0.1
111
+ },
112
+ "spring": {
113
+ "micro": {
114
+ "zeta": 0.85,
115
+ "hz": 3.5
116
+ },
117
+ "panel": {
118
+ "zeta": 0.8,
119
+ "hz": 2
120
+ },
121
+ "headline": {
122
+ "zeta": 0.95,
123
+ "hz": 2.2
124
+ },
125
+ "subject": {
126
+ "zeta": 0.6,
127
+ "hz": 1.8
128
+ },
129
+ "camera": {
130
+ "zeta": 1,
131
+ "hz": 0.5
132
+ }
133
+ },
134
+ "secondary": {
135
+ "delay": 0.15,
136
+ "travel": 0.6
137
+ },
138
+ "ambient": {
139
+ "travel": 0.04
140
+ },
141
+ "push": 0.02
142
+ },
143
+ "transitions": [
144
+ "cut",
145
+ "match",
146
+ "wipe",
147
+ "iris",
148
+ "push"
149
+ ],
150
+ "ground": {
151
+ "kind": "flat"
152
+ },
153
+ "sound": {
154
+ "palette": "warm",
155
+ "key": "F major",
156
+ "tempo": 96
157
+ },
158
+ "score": {
159
+ "genre": "garage"
160
+ },
161
+ "beds": [
162
+ {
163
+ "palette": "warm",
164
+ "key": "F major",
165
+ "tempo": 96
166
+ },
167
+ {
168
+ "palette": "air",
169
+ "key": "G major",
170
+ "tempo": 88
171
+ },
172
+ {
173
+ "palette": "glass",
174
+ "key": "C major",
175
+ "tempo": 108
176
+ }
177
+ ],
178
+ "bans": [
179
+ "drop shadows that float type",
180
+ "neon or glow",
181
+ "gradients on type",
182
+ "a saturated colour with no role",
183
+ "bouncy type"
184
+ ]
185
+ }
@@ -0,0 +1,188 @@
1
+ {
2
+ "schema": "litopencode.motion-style/v1",
3
+ "id": "swiss-signal",
4
+ "name": "Swiss signal",
5
+ "summary": "Ink ground, bone type, one teal signal and one amber moment; type lands precisely and cuts hard.",
6
+ "light": false,
7
+ "typePreset": "swiss-signal",
8
+ "palette": {
9
+ "ground": "#0C0E13",
10
+ "surface": "#171B24",
11
+ "ink": "#E9EBE4",
12
+ "muted": "#A4A9AF",
13
+ "signal": "#0F7A82",
14
+ "accent": "#D9A441",
15
+ "line": "#4B5058"
16
+ },
17
+ "accents": [
18
+ {
19
+ "role": "state under review",
20
+ "color": "#E2725B"
21
+ },
22
+ {
23
+ "role": "state planned",
24
+ "color": "#9B8CFF"
25
+ },
26
+ {
27
+ "role": "state done",
28
+ "color": "#8FC25A"
29
+ },
30
+ {
31
+ "role": "state in progress",
32
+ "color": "#5BA8E0"
33
+ }
34
+ ],
35
+ "textRoles": [
36
+ "ink",
37
+ "muted",
38
+ "signal",
39
+ "accent",
40
+ "ground"
41
+ ],
42
+ "faces": {
43
+ "display": {
44
+ "family": "Archivo",
45
+ "weight": 900,
46
+ "stretch": "100%"
47
+ },
48
+ "headline": {
49
+ "family": "Archivo",
50
+ "weight": 700,
51
+ "stretch": "100%"
52
+ },
53
+ "body": {
54
+ "family": "Pretendard",
55
+ "weight": 400
56
+ },
57
+ "label": {
58
+ "family": "MesloLGS NF",
59
+ "weight": 400
60
+ }
61
+ },
62
+ "scale": {
63
+ "16:9": {
64
+ "display": 128,
65
+ "headline": 76,
66
+ "body": 40,
67
+ "label": 26
68
+ },
69
+ "9:16": {
70
+ "display": 120,
71
+ "headline": 80,
72
+ "body": 46,
73
+ "label": 32
74
+ }
75
+ },
76
+ "leading": {
77
+ "display": 1.1,
78
+ "headline": 1.2,
79
+ "body": 1.55,
80
+ "label": 1.4
81
+ },
82
+ "motion": {
83
+ "ease": {
84
+ "enter": [
85
+ 0.16,
86
+ 1,
87
+ 0.3,
88
+ 1
89
+ ],
90
+ "move": [
91
+ 0.65,
92
+ 0,
93
+ 0.35,
94
+ 1
95
+ ],
96
+ "exit": [
97
+ 0.7,
98
+ 0,
99
+ 0.84,
100
+ 0
101
+ ]
102
+ },
103
+ "dur": {
104
+ "micro": 0.15,
105
+ "move": 0.45,
106
+ "hero": 0.6,
107
+ "exit": 0.28
108
+ },
109
+ "stagger": {
110
+ "letter": 0.025,
111
+ "word": 0.07,
112
+ "item": 0.08
113
+ },
114
+ "spring": {
115
+ "micro": {
116
+ "zeta": 1,
117
+ "hz": 4
118
+ },
119
+ "panel": {
120
+ "zeta": 0.9,
121
+ "hz": 2.2
122
+ },
123
+ "headline": {
124
+ "zeta": 1,
125
+ "hz": 2.6
126
+ },
127
+ "subject": {
128
+ "zeta": 0.8,
129
+ "hz": 1.8
130
+ },
131
+ "camera": {
132
+ "zeta": 1,
133
+ "hz": 0.5
134
+ }
135
+ },
136
+ "secondary": {
137
+ "delay": 0.15,
138
+ "travel": 0.6
139
+ },
140
+ "ambient": {
141
+ "travel": 0.03
142
+ },
143
+ "push": 0.02
144
+ },
145
+ "transitions": [
146
+ "cut",
147
+ "wipe",
148
+ "match",
149
+ "push"
150
+ ],
151
+ "ground": {
152
+ "kind": "flat",
153
+ "grid": true
154
+ },
155
+ "sound": {
156
+ "palette": "glass",
157
+ "key": "A minor",
158
+ "tempo": 104
159
+ },
160
+ "score": {
161
+ "genre": "house"
162
+ },
163
+ "beds": [
164
+ {
165
+ "palette": "glass",
166
+ "key": "A minor",
167
+ "tempo": 104
168
+ },
169
+ {
170
+ "palette": "pulse",
171
+ "key": "D minor",
172
+ "tempo": 112
173
+ },
174
+ {
175
+ "palette": "warm",
176
+ "key": "C major",
177
+ "tempo": 96
178
+ }
179
+ ],
180
+ "bans": [
181
+ "glow or bloom on type",
182
+ "an accent colour with no role",
183
+ "centred fade-in as the only move",
184
+ "overshoot or bounce on type",
185
+ "particles as decoration",
186
+ "gradients behind type"
187
+ ]
188
+ }
@@ -0,0 +1,182 @@
1
+ {
2
+ "schema": "litopencode.motion-style/v1",
3
+ "id": "terminalcore",
4
+ "name": "Terminalcore",
5
+ "summary": "A navy terminal: phosphor type that appears at typing speed, one signal hue, hard cuts, nothing eases.",
6
+ "light": false,
7
+ "typePreset": "terminalcore",
8
+ "palette": {
9
+ "ground": "#05070A",
10
+ "surface": "#0C1116",
11
+ "ink": "#39FF6A",
12
+ "muted": "#7C8B93",
13
+ "signal": "#39FF6A",
14
+ "line": "#1E2A33"
15
+ },
16
+ "accents": [
17
+ {
18
+ "role": "a warning line",
19
+ "color": "#FFB23F"
20
+ },
21
+ {
22
+ "role": "an error line",
23
+ "color": "#FF6B6B"
24
+ },
25
+ {
26
+ "role": "a path or a link",
27
+ "color": "#6CA8FF"
28
+ }
29
+ ],
30
+ "textRoles": [
31
+ "ink",
32
+ "muted",
33
+ "signal",
34
+ "ground"
35
+ ],
36
+ "faces": {
37
+ "display": {
38
+ "family": "VT323",
39
+ "weight": 400
40
+ },
41
+ "headline": {
42
+ "family": "VT323",
43
+ "weight": 400
44
+ },
45
+ "body": {
46
+ "family": "VT323",
47
+ "weight": 400
48
+ },
49
+ "label": {
50
+ "family": "MesloLGS NF",
51
+ "weight": 400
52
+ }
53
+ },
54
+ "hangul": {
55
+ "family": "Galmuri9",
56
+ "weight": 400
57
+ },
58
+ "scale": {
59
+ "16:9": {
60
+ "display": 126,
61
+ "headline": 81,
62
+ "body": 45,
63
+ "label": 36
64
+ },
65
+ "9:16": {
66
+ "display": 117,
67
+ "headline": 81,
68
+ "body": 54,
69
+ "label": 36
70
+ }
71
+ },
72
+ "leading": {
73
+ "display": 1.1,
74
+ "headline": 1.2,
75
+ "body": 1.5,
76
+ "label": 1.4
77
+ },
78
+ "motion": {
79
+ "ease": {
80
+ "enter": [
81
+ 0,
82
+ 0,
83
+ 1,
84
+ 1
85
+ ],
86
+ "move": [
87
+ 0,
88
+ 0,
89
+ 1,
90
+ 1
91
+ ],
92
+ "exit": [
93
+ 0,
94
+ 0,
95
+ 1,
96
+ 1
97
+ ]
98
+ },
99
+ "dur": {
100
+ "micro": 0.1,
101
+ "move": 0.3,
102
+ "hero": 0.5,
103
+ "exit": 0.1
104
+ },
105
+ "stagger": {
106
+ "letter": 0.0455,
107
+ "word": 0.18,
108
+ "item": 0.25
109
+ },
110
+ "spring": {
111
+ "micro": {
112
+ "zeta": 1,
113
+ "hz": 6
114
+ },
115
+ "panel": {
116
+ "zeta": 1,
117
+ "hz": 4
118
+ },
119
+ "headline": {
120
+ "zeta": 1,
121
+ "hz": 4
122
+ },
123
+ "subject": {
124
+ "zeta": 1,
125
+ "hz": 3
126
+ },
127
+ "camera": {
128
+ "zeta": 1,
129
+ "hz": 1
130
+ }
131
+ },
132
+ "secondary": {
133
+ "delay": 0.1,
134
+ "travel": 0.6
135
+ },
136
+ "ambient": {
137
+ "travel": 0.02
138
+ },
139
+ "push": 0
140
+ },
141
+ "transitions": [
142
+ "cut",
143
+ "wipe"
144
+ ],
145
+ "ground": {
146
+ "kind": "flat",
147
+ "panel": "surface"
148
+ },
149
+ "sound": {
150
+ "palette": "pulse",
151
+ "key": "E minor",
152
+ "tempo": 120
153
+ },
154
+ "score": {
155
+ "genre": "tech-house"
156
+ },
157
+ "beds": [
158
+ {
159
+ "palette": "pulse",
160
+ "key": "E minor",
161
+ "tempo": 120
162
+ },
163
+ {
164
+ "palette": "glass",
165
+ "key": "B minor",
166
+ "tempo": 132
167
+ },
168
+ {
169
+ "palette": "pulse",
170
+ "key": "A minor",
171
+ "tempo": 100
172
+ }
173
+ ],
174
+ "bans": [
175
+ "falling code rain",
176
+ "purple-cyan neon haze",
177
+ "glitch running continuously",
178
+ "an accent hue with no role",
179
+ "pixel type too small to read",
180
+ "eased type"
181
+ ]
182
+ }