summer-engine 3.8.0 → 4.0.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 (485) hide show
  1. package/.claude-plugin/marketplace.json +2 -13
  2. package/.claude-plugin/plugin.json +23 -22
  3. package/.codex-plugin/plugin.json +4 -12
  4. package/.cursor-plugin/plugin.json +4 -12
  5. package/.factory-plugin/plugin.json +4 -12
  6. package/AGENTS.md +19 -12
  7. package/CHANGELOG.md +96 -0
  8. package/GEMINI.md +3 -3
  9. package/README.md +103 -33
  10. package/assets/icon.png +0 -0
  11. package/commands/start.md +71 -0
  12. package/commands/summer.md +3 -2
  13. package/dist/cli/banner.js +3 -0
  14. package/dist/cli/commands/login.d.ts +27 -0
  15. package/dist/cli/commands/login.js +58 -12
  16. package/dist/cli/commands/ops.d.ts +47 -0
  17. package/dist/cli/commands/ops.js +301 -0
  18. package/dist/cli/commands/setup.d.ts +2 -0
  19. package/dist/cli/commands/setup.js +37 -12
  20. package/dist/cli/commands/skills.js +11 -7
  21. package/dist/cli/index.js +7 -0
  22. package/dist/core/agent-host.d.ts +65 -0
  23. package/dist/core/agent-host.js +193 -0
  24. package/dist/core/capabilities/agent-playbook.d.ts +3 -0
  25. package/dist/core/capabilities/agent-playbook.js +54 -2
  26. package/dist/core/capabilities/apps.d.ts +25 -2
  27. package/dist/core/capabilities/apps.js +25 -12
  28. package/dist/core/capabilities/doctor.d.ts +3 -0
  29. package/dist/core/capabilities/doctor.js +20 -15
  30. package/dist/core/capabilities/fabricate-mesh.d.ts +2 -2
  31. package/dist/core/capabilities/game-task-plan.d.ts +12 -6
  32. package/dist/core/capabilities/game-task-plan.js +80 -5
  33. package/dist/core/capabilities/motion-generation.js +2 -2
  34. package/dist/core/capabilities/navigation/open.d.ts +6 -2
  35. package/dist/core/capabilities/navigation/open.js +3 -0
  36. package/dist/core/capabilities/publish-build.js +2 -0
  37. package/dist/core/capabilities/runtime-control.d.ts +4 -4
  38. package/dist/core/capabilities/scene-script-target.d.ts +17 -0
  39. package/dist/core/capabilities/scene-script-target.js +70 -0
  40. package/dist/core/capabilities/sfx-choices.d.ts +4 -0
  41. package/dist/core/capabilities/sfx-choices.js +13 -6
  42. package/dist/core/capabilities/tool-dispatch.d.ts +12 -3
  43. package/dist/core/capabilities/tool-dispatch.js +81 -46
  44. package/dist/core/embeddings.d.ts +2 -0
  45. package/dist/core/embeddings.js +1 -1
  46. package/dist/core/error-codes.d.ts +62 -0
  47. package/dist/core/error-codes.js +97 -0
  48. package/dist/core/format.d.ts +2 -0
  49. package/dist/core/format.js +2 -1
  50. package/dist/core/hosted-mcp.d.ts +22 -0
  51. package/dist/core/hosted-mcp.js +56 -1
  52. package/dist/core/library-read.js +5 -0
  53. package/dist/core/library-search.js +2 -1
  54. package/dist/core/oauth.js +4 -0
  55. package/dist/core/ops/catalog.d.ts +41 -0
  56. package/dist/core/ops/catalog.js +145 -0
  57. package/dist/core/ops/cloud.d.ts +56 -0
  58. package/dist/core/ops/cloud.js +175 -0
  59. package/dist/core/ops/contract.d.ts +119 -0
  60. package/dist/core/ops/contract.js +142 -0
  61. package/dist/core/ops/engine-answer.d.ts +25 -0
  62. package/dist/core/ops/engine-answer.js +117 -0
  63. package/dist/core/ops/engine.d.ts +55 -0
  64. package/dist/core/ops/engine.js +649 -0
  65. package/dist/core/ops/save-files.d.ts +78 -0
  66. package/dist/core/ops/save-files.js +419 -0
  67. package/dist/core/ops/search.d.ts +9 -0
  68. package/dist/core/ops/search.js +55 -0
  69. package/dist/core/skills-registry.d.ts +16 -1
  70. package/dist/core/skills-registry.js +35 -2
  71. package/dist/core/telemetry.d.ts +32 -0
  72. package/dist/core/telemetry.js +38 -10
  73. package/dist/core/tool-profiles.d.ts +25 -0
  74. package/dist/core/tool-profiles.js +41 -0
  75. package/dist/installer/agent-config.d.ts +17 -4
  76. package/dist/installer/agent-config.js +22 -6
  77. package/dist/installer/agent-table.d.ts +3 -0
  78. package/dist/installer/agent-table.js +10 -7
  79. package/dist/installer/setup.d.ts +2 -0
  80. package/dist/installer/setup.js +9 -4
  81. package/dist/installer/version-check.d.ts +29 -9
  82. package/dist/installer/version-check.js +81 -28
  83. package/dist/mcp/command.js +7 -0
  84. package/dist/mcp/hosted-mount.d.ts +27 -2
  85. package/dist/mcp/hosted-mount.js +53 -23
  86. package/dist/mcp/legacy-toolset.d.ts +27 -0
  87. package/dist/mcp/legacy-toolset.js +43 -0
  88. package/dist/mcp/ops-surface.d.ts +59 -0
  89. package/dist/mcp/ops-surface.js +443 -0
  90. package/dist/mcp/server.d.ts +35 -11
  91. package/dist/mcp/server.js +234 -89
  92. package/dist/mcp/tool-results.d.ts +26 -0
  93. package/dist/mcp/tool-results.js +81 -0
  94. package/dist/mcp/tool-surface.d.ts +65 -0
  95. package/dist/mcp/tool-surface.js +317 -0
  96. package/dist/mcp/tools/app-tools.js +9 -2
  97. package/dist/mcp/tools/asset-tools.js +55 -53
  98. package/dist/mcp/tools/audit-tools.js +21 -21
  99. package/dist/mcp/tools/debug-tools.js +6 -6
  100. package/dist/mcp/tools/fabricate-tools.js +6 -6
  101. package/dist/mcp/tools/generate-tools.js +76 -70
  102. package/dist/mcp/tools/project-tools.d.ts +9 -4
  103. package/dist/mcp/tools/project-tools.js +16 -10
  104. package/dist/mcp/tools/scene-tools.js +12 -23
  105. package/dist/mcp/tools/script-tools.js +9 -5
  106. package/dist/mcp/tools/with-engine.d.ts +6 -0
  107. package/dist/mcp/tools/with-engine.js +19 -0
  108. package/gemini-extension.json +4 -12
  109. package/hooks/pre-commit-doctor.sh +5 -4
  110. package/hooks/session-start.sh +24 -28
  111. package/integrations/claude-desktop/README.md +1 -1
  112. package/integrations/copilot-jetbrains/README.md +1 -1
  113. package/integrations/junie/README.md +1 -1
  114. package/integrations/lm-studio/README.md +1 -1
  115. package/integrations/trae/README.md +1 -1
  116. package/integrations/visual-studio/README.md +1 -1
  117. package/library/references/mcp-tools-reference/mcp-tools-reference.md +79 -51
  118. package/library/references/mcp-tools-reference/resource.yaml +1 -1
  119. package/library/references/product-map/resource.yaml +2 -2
  120. package/library/skills/3d-lighting/SKILL.md +53 -28
  121. package/library/skills/3d-lighting/resource.yaml +1 -1
  122. package/library/skills/README.md +119 -117
  123. package/library/skills/adaptive-music/SKILL.md +19 -23
  124. package/library/skills/adaptive-music/resource.yaml +1 -1
  125. package/library/skills/agent-playtesting/SKILL.md +1 -1
  126. package/library/skills/agent-playtesting/resource.yaml +1 -1
  127. package/library/skills/ai-characters-in-games/SKILL.md +1 -1
  128. package/library/skills/ai-characters-in-games/resource.yaml +1 -1
  129. package/library/skills/ambient-bed/SKILL.md +22 -13
  130. package/library/skills/ambient-bed/resource.yaml +1 -1
  131. package/library/skills/animated-loop/SKILL.md +41 -32
  132. package/library/skills/animated-loop/resource.yaml +1 -1
  133. package/library/skills/animation-tree/SKILL.md +1 -1
  134. package/library/skills/animation-tree/resource.yaml +1 -1
  135. package/library/skills/art-direction/SKILL.md +3 -3
  136. package/library/skills/art-direction/resource.yaml +1 -1
  137. package/library/skills/asset-strategy/SKILL.md +21 -4
  138. package/library/skills/asset-strategy/resource.yaml +2 -1
  139. package/library/skills/audio-direction/SKILL.md +10 -10
  140. package/library/skills/audio-direction/resource.yaml +1 -1
  141. package/library/skills/auto-fire-targeting/SKILL.md +1 -1
  142. package/library/skills/auto-fire-targeting/resource.yaml +1 -1
  143. package/library/skills/bounded-engine-runs/SKILL.md +1 -1
  144. package/library/skills/bounded-engine-runs/resource.yaml +1 -1
  145. package/library/skills/brainstorm-game/SKILL.md +1 -1
  146. package/library/skills/brainstorm-game/resource.yaml +1 -1
  147. package/library/skills/brainstorming/SKILL.md +1 -1
  148. package/library/skills/brainstorming/resource.yaml +1 -1
  149. package/library/skills/browse-templates/SKILL.md +1 -1
  150. package/library/skills/browse-templates/resource.yaml +1 -1
  151. package/library/skills/camera-rigs/SKILL.md +2 -2
  152. package/library/skills/camera-rigs/resource.yaml +1 -1
  153. package/library/skills/celeste-momentum-platforming/resource.yaml +1 -0
  154. package/library/skills/character-animation-wiring/SKILL.md +4 -4
  155. package/library/skills/character-animation-wiring/resource.yaml +1 -1
  156. package/library/skills/character-model/SKILL.md +55 -47
  157. package/library/skills/character-model/resource.yaml +1 -1
  158. package/library/skills/character-movement/SKILL.md +3 -3
  159. package/library/skills/character-movement/resource.yaml +1 -1
  160. package/library/skills/character-portrait/SKILL.md +24 -19
  161. package/library/skills/character-portrait/resource.yaml +1 -1
  162. package/library/skills/cinematic-cutscene/SKILL.md +58 -46
  163. package/library/skills/cinematic-cutscene/resource.yaml +1 -1
  164. package/library/skills/combat-basics/SKILL.md +1 -1
  165. package/library/skills/combat-basics/resource.yaml +1 -1
  166. package/library/skills/compatibility-renderer-traps/SKILL.md +1 -1
  167. package/library/skills/compatibility-renderer-traps/resource.yaml +1 -1
  168. package/library/skills/concept-art/SKILL.md +16 -12
  169. package/library/skills/concept-art/resource.yaml +1 -1
  170. package/library/skills/concept-to-level/SKILL.md +239 -0
  171. package/library/skills/concept-to-level/references/technical-rules.md +150 -0
  172. package/library/skills/concept-to-level/resource.yaml +44 -0
  173. package/library/skills/create-asset-sheet/SKILL.md +19 -13
  174. package/library/skills/create-asset-sheet/resource.yaml +1 -1
  175. package/library/skills/debug/SKILL.md +2 -2
  176. package/library/skills/debug/resource.yaml +1 -1
  177. package/library/skills/debugging-game-feel/SKILL.md +1 -1
  178. package/library/skills/debugging-game-feel/resource.yaml +1 -1
  179. package/library/skills/design-level/SKILL.md +23 -35
  180. package/library/skills/design-level/resource.yaml +1 -1
  181. package/library/skills/design-mechanic/SKILL.md +1 -1
  182. package/library/skills/design-mechanic/resource.yaml +1 -1
  183. package/library/skills/design-npc/SKILL.md +22 -24
  184. package/library/skills/design-npc/resource.yaml +1 -1
  185. package/library/skills/diagnosing-perf-regressions/SKILL.md +1 -1
  186. package/library/skills/diagnosing-perf-regressions/resource.yaml +1 -1
  187. package/library/skills/driving-the-editor-ui/SKILL.md +1 -1
  188. package/library/skills/driving-the-editor-ui/resource.yaml +1 -1
  189. package/library/skills/environment-kit/SKILL.md +20 -16
  190. package/library/skills/environment-kit/resource.yaml +1 -1
  191. package/library/skills/export-and-ship/SKILL.md +6 -6
  192. package/library/skills/export-and-ship/resource.yaml +1 -1
  193. package/library/skills/fabricating-assets/SKILL.md +7 -7
  194. package/library/skills/fabricating-assets/resource.yaml +3 -3
  195. package/library/skills/facial-and-lipsync/SKILL.md +14 -15
  196. package/library/skills/facial-and-lipsync/resource.yaml +1 -1
  197. package/library/skills/fps-controller/SKILL.md +33 -41
  198. package/library/skills/fps-controller/resource.yaml +1 -1
  199. package/library/skills/game-feel/SKILL.md +8 -8
  200. package/library/skills/game-feel/resource.yaml +1 -1
  201. package/library/skills/gameskill/SKILL.md +4 -4
  202. package/library/skills/gameskill/resource.yaml +1 -1
  203. package/library/skills/gdscript-patterns/SKILL.md +1 -1
  204. package/library/skills/gdscript-patterns/resource.yaml +1 -1
  205. package/library/skills/generate-motion/SKILL.md +30 -21
  206. package/library/skills/generate-motion/resource.yaml +1 -1
  207. package/library/skills/godogen-visual-proof-game-generation/SKILL.md +1 -1
  208. package/library/skills/godogen-visual-proof-game-generation/resource.yaml +1 -0
  209. package/library/skills/grow-analytics/SKILL.md +3 -3
  210. package/library/skills/grow-analytics/resource.yaml +1 -1
  211. package/library/skills/headless-scripting/SKILL.md +1 -1
  212. package/library/skills/headless-scripting/resource.yaml +1 -1
  213. package/library/skills/in-game-purchases/SKILL.md +1 -1
  214. package/library/skills/in-game-purchases/resource.yaml +1 -1
  215. package/library/skills/instantiate-asset-pack/SKILL.md +2 -2
  216. package/library/skills/instantiate-asset-pack/resource.yaml +1 -1
  217. package/library/skills/lumera-single-image-scene-reconstruction/resource.yaml +1 -0
  218. package/library/skills/make-game/SKILL.md +4 -4
  219. package/library/skills/make-game/references/2d-platformer.md +1 -1
  220. package/library/skills/make-game/references/3d-fps.md +1 -1
  221. package/library/skills/make-game/references/3d-horror.md +1 -1
  222. package/library/skills/make-game/references/3d-third-person.md +2 -2
  223. package/library/skills/make-game/resource.yaml +1 -1
  224. package/library/skills/multiplayer/SKILL.md +1 -1
  225. package/library/skills/multiplayer/resource.yaml +1 -1
  226. package/library/skills/multiplayer-movement/SKILL.md +1 -1
  227. package/library/skills/multiplayer-movement/resource.yaml +1 -1
  228. package/library/skills/multiplayer-project/SKILL.md +1 -1
  229. package/library/skills/multiplayer-project/resource.yaml +1 -1
  230. package/library/skills/multiplayer-publish/SKILL.md +8 -7
  231. package/library/skills/multiplayer-publish/resource.yaml +3 -3
  232. package/library/skills/multiplayer-state/SKILL.md +1 -1
  233. package/library/skills/multiplayer-state/resource.yaml +1 -1
  234. package/library/skills/multiplayer-testing/SKILL.md +1 -1
  235. package/library/skills/multiplayer-testing/resource.yaml +1 -1
  236. package/library/skills/music-track/SKILL.md +22 -13
  237. package/library/skills/music-track/resource.yaml +1 -1
  238. package/library/skills/navigate-summer/SKILL.md +11 -9
  239. package/library/skills/navigate-summer/resource.yaml +1 -1
  240. package/library/skills/new-project/SKILL.md +1 -1
  241. package/library/skills/new-project/resource.yaml +1 -1
  242. package/library/skills/organic-model/SKILL.md +24 -18
  243. package/library/skills/organic-model/resource.yaml +1 -1
  244. package/library/skills/pixel-art/SKILL.md +27 -23
  245. package/library/skills/pixel-art/resource.yaml +1 -1
  246. package/library/skills/play/SKILL.md +1 -1
  247. package/library/skills/play/resource.yaml +1 -1
  248. package/library/skills/playtesting-a-feature/SKILL.md +1 -1
  249. package/library/skills/playtesting-a-feature/resource.yaml +1 -1
  250. package/library/skills/procedural-animation/SKILL.md +20 -16
  251. package/library/skills/procedural-animation/resource.yaml +1 -1
  252. package/library/skills/prop-model/SKILL.md +25 -19
  253. package/library/skills/prop-model/resource.yaml +1 -1
  254. package/library/skills/psx-retro-rendering/resource.yaml +1 -0
  255. package/library/skills/publish-your-game/SKILL.md +16 -6
  256. package/library/skills/publish-your-game/resource.yaml +3 -3
  257. package/library/skills/realtime-wet-surfaces/resource.yaml +1 -0
  258. package/library/skills/release-readiness/SKILL.md +1 -1
  259. package/library/skills/release-readiness/resource.yaml +1 -1
  260. package/library/skills/remote-deploy/SKILL.md +1 -1
  261. package/library/skills/remote-deploy/resource.yaml +1 -1
  262. package/library/skills/retarget/SKILL.md +23 -20
  263. package/library/skills/retarget/resource.yaml +1 -1
  264. package/library/skills/running-in-the-cloud/SKILL.md +1 -1
  265. package/library/skills/running-in-the-cloud/resource.yaml +1 -1
  266. package/library/skills/save-load/SKILL.md +1 -1
  267. package/library/skills/save-load/resource.yaml +1 -1
  268. package/library/skills/scene-composition/SKILL.md +1 -1
  269. package/library/skills/scene-composition/resource.yaml +1 -1
  270. package/library/skills/scene-hierarchy-design/SKILL.md +2 -2
  271. package/library/skills/scene-hierarchy-design/resource.yaml +1 -1
  272. package/library/skills/scene-scripting/SKILL.md +66 -636
  273. package/library/skills/scene-scripting/references/ctx-api.md +184 -0
  274. package/library/skills/scene-scripting/references/recipes-2d-ui.md +193 -0
  275. package/library/skills/scene-scripting/references/recipes-3d.md +280 -0
  276. package/library/skills/scene-scripting/resource.yaml +4 -4
  277. package/library/skills/scene-to-level/SKILL.md +2 -2
  278. package/library/skills/scene-to-level/resource.yaml +1 -1
  279. package/library/skills/skill-create/resource.yaml +1 -0
  280. package/library/skills/skill-improve/resource.yaml +1 -0
  281. package/library/skills/skill-test/SKILL.md +2 -2
  282. package/library/skills/skill-test/resource.yaml +1 -0
  283. package/library/skills/skintokens-auto-rigging/resource.yaml +1 -0
  284. package/library/skills/skybox-panorama/SKILL.md +27 -21
  285. package/library/skills/skybox-panorama/resource.yaml +1 -1
  286. package/library/skills/sound-effect/SKILL.md +29 -20
  287. package/library/skills/sound-effect/resource.yaml +1 -1
  288. package/library/skills/spatial-placement/SKILL.md +14 -9
  289. package/library/skills/spatial-placement/resource.yaml +1 -1
  290. package/library/skills/sprite-sheet/SKILL.md +32 -27
  291. package/library/skills/sprite-sheet/resource.yaml +1 -1
  292. package/library/skills/store-art/SKILL.md +3 -3
  293. package/library/skills/store-art/resource.yaml +2 -2
  294. package/library/skills/store-listing/SKILL.md +3 -3
  295. package/library/skills/store-listing/resource.yaml +2 -2
  296. package/library/skills/summer-analytics/SKILL.md +7 -5
  297. package/library/skills/summer-analytics/resource.yaml +2 -2
  298. package/library/skills/summer-apps/SKILL.md +48 -32
  299. package/library/skills/summer-apps/manifest.md +1 -1
  300. package/library/skills/summer-apps/minimal-app.md +7 -7
  301. package/library/skills/summer-apps/resource.yaml +1 -1
  302. package/library/skills/summer-apps/sdk-reference.md +5 -5
  303. package/library/skills/summer-apps-design/SKILL.md +1 -1
  304. package/library/skills/summer-apps-design/resource.yaml +1 -1
  305. package/library/skills/summer-assets/SKILL.md +56 -0
  306. package/library/skills/summer-assets/resource.yaml +34 -0
  307. package/library/skills/summer-store/SKILL.md +1 -1
  308. package/library/skills/text-to-motion/SKILL.md +30 -23
  309. package/library/skills/text-to-motion/prompts-and-controls.md +5 -5
  310. package/library/skills/text-to-motion/resource.yaml +1 -1
  311. package/library/skills/text-to-motion/rigging-for-text-motion.md +2 -2
  312. package/library/skills/tileable-texture/SKILL.md +19 -15
  313. package/library/skills/tileable-texture/resource.yaml +1 -1
  314. package/library/skills/trailer-shot/SKILL.md +28 -24
  315. package/library/skills/trailer-shot/resource.yaml +1 -1
  316. package/library/skills/tune-performance/SKILL.md +6 -6
  317. package/library/skills/tune-performance/resource.yaml +1 -1
  318. package/library/skills/ui-basics/SKILL.md +41 -36
  319. package/library/skills/ui-basics/resource.yaml +1 -1
  320. package/library/skills/ui-graphics/SKILL.md +47 -38
  321. package/library/skills/ui-graphics/resource.yaml +1 -1
  322. package/library/skills/use-widget-asset/SKILL.md +1 -1
  323. package/library/skills/use-widget-asset/resource.yaml +1 -1
  324. package/library/skills/using-summer/SKILL.md +6 -5
  325. package/library/skills/using-summer/resource.yaml +1 -1
  326. package/library/skills/vehicle-model/SKILL.md +65 -57
  327. package/library/skills/vehicle-model/resource.yaml +1 -1
  328. package/library/skills/verification-before-completion/SKILL.md +1 -1
  329. package/library/skills/verification-before-completion/resource.yaml +1 -1
  330. package/library/skills/verifying-scenes/SKILL.md +2 -2
  331. package/library/skills/verifying-scenes/resource.yaml +1 -1
  332. package/library/skills/vfx-dissolve/SKILL.md +2 -2
  333. package/library/skills/vfx-dissolve/resource.yaml +1 -1
  334. package/library/skills/vfx-fire/SKILL.md +15 -41
  335. package/library/skills/vfx-fire/resource.yaml +1 -1
  336. package/library/skills/vfx-hit-spark/SKILL.md +1 -1
  337. package/library/skills/vfx-hit-spark/resource.yaml +1 -1
  338. package/library/skills/vfx-lightning/SKILL.md +7 -16
  339. package/library/skills/vfx-lightning/resource.yaml +1 -1
  340. package/library/skills/vfx-magic-glow/SKILL.md +23 -32
  341. package/library/skills/vfx-magic-glow/resource.yaml +1 -1
  342. package/library/skills/vfx-muzzle-flash/SKILL.md +20 -35
  343. package/library/skills/vfx-muzzle-flash/resource.yaml +1 -1
  344. package/library/skills/vfx-smoke/SKILL.md +13 -31
  345. package/library/skills/vfx-smoke/resource.yaml +1 -1
  346. package/library/skills/vfx-water-ripple/SKILL.md +12 -31
  347. package/library/skills/vfx-water-ripple/resource.yaml +1 -1
  348. package/library/skills/voice-line/SKILL.md +71 -40
  349. package/library/skills/voice-line/resource.yaml +1 -1
  350. package/library/skills/web-and-touch-input/SKILL.md +1 -1
  351. package/library/skills/web-and-touch-input/resource.yaml +1 -1
  352. package/library/skills/web-compatibility-look/SKILL.md +1 -1
  353. package/library/skills/web-compatibility-look/resource.yaml +1 -1
  354. package/library/skills/world-building-3d/SKILL.md +1 -1
  355. package/library/skills/world-building-3d/resource.yaml +1 -1
  356. package/library/skills/writing-skills/resource.yaml +1 -0
  357. package/library/tools/add-node/GUIDE.md +14 -0
  358. package/library/tools/align-distribute-3d/GUIDE.md +7 -0
  359. package/library/tools/app-call/resource.yaml +1 -1
  360. package/library/tools/app-guide/resource.yaml +2 -2
  361. package/library/tools/app-page/resource.yaml +1 -1
  362. package/library/tools/app-screenshot/resource.yaml +19 -1
  363. package/library/tools/app-tools/resource.yaml +1 -1
  364. package/library/tools/attach-to-surface/GUIDE.md +15 -0
  365. package/library/tools/batch/GUIDE.md +27 -0
  366. package/library/tools/camera-bookmark/GUIDE.md +12 -0
  367. package/library/tools/capture-gameplay/GUIDE.md +3 -0
  368. package/library/tools/capture-gameplay/resource.yaml +3 -3
  369. package/library/tools/check-job/resource.yaml +1 -1
  370. package/library/tools/clear-console/GUIDE.md +3 -0
  371. package/library/tools/connect-ports/GUIDE.md +9 -0
  372. package/library/tools/connect-signal/GUIDE.md +14 -0
  373. package/library/tools/create-debug-report/GUIDE.md +10 -0
  374. package/library/tools/create-scene/GUIDE.md +10 -0
  375. package/library/tools/debug-views/GUIDE.md +7 -0
  376. package/library/tools/enable-plugin/GUIDE.md +3 -0
  377. package/library/tools/export-game/GUIDE.md +3 -0
  378. package/library/tools/export-game/resource.yaml +3 -3
  379. package/library/tools/export-templates/GUIDE.md +3 -0
  380. package/library/tools/fabricate-3d/GUIDE.md +19 -0
  381. package/library/tools/frame-nodes/GUIDE.md +9 -0
  382. package/library/tools/frame-shot/GUIDE.md +9 -0
  383. package/library/tools/game-control/GUIDE.md +9 -0
  384. package/library/tools/game-input/GUIDE.md +9 -0
  385. package/library/tools/game-probe/GUIDE.md +9 -0
  386. package/library/tools/generate-3d/resource.yaml +3 -3
  387. package/library/tools/generate-motion/resource.yaml +2 -2
  388. package/library/tools/get-console/GUIDE.md +9 -0
  389. package/library/tools/get-console/resource.yaml +5 -0
  390. package/library/tools/get-debugger-errors/GUIDE.md +7 -0
  391. package/library/tools/get-debugger-errors/resource.yaml +5 -0
  392. package/library/tools/get-debugger-warnings/GUIDE.md +7 -0
  393. package/library/tools/get-debugger-warnings/resource.yaml +5 -0
  394. package/library/tools/get-diagnostics/GUIDE.md +13 -0
  395. package/library/tools/get-project-context/GUIDE.md +25 -0
  396. package/library/tools/get-runtime-tree/GUIDE.md +7 -0
  397. package/library/tools/get-runtime-tree/resource.yaml +5 -0
  398. package/library/tools/get-scene-tree/GUIDE.md +11 -0
  399. package/library/tools/get-scene-tree/resource.yaml +5 -0
  400. package/library/tools/get-script-errors/GUIDE.md +5 -0
  401. package/library/tools/grep/GUIDE.md +11 -0
  402. package/library/tools/import-asset/GUIDE.md +8 -0
  403. package/library/tools/import-asset-by-id/GUIDE.md +12 -0
  404. package/library/tools/import-from-url/GUIDE.md +10 -0
  405. package/library/tools/import-from-url-batch/GUIDE.md +3 -0
  406. package/library/tools/import-hdri/GUIDE.md +16 -0
  407. package/library/tools/input-map-bind/GUIDE.md +11 -0
  408. package/library/tools/inspect-asset/GUIDE.md +14 -0
  409. package/library/tools/inspect-asset/resource.yaml +5 -0
  410. package/library/tools/inspect-node/GUIDE.md +11 -0
  411. package/library/tools/inspect-node/resource.yaml +5 -0
  412. package/library/tools/inspect-resource/GUIDE.md +7 -0
  413. package/library/tools/inspect-resource/resource.yaml +5 -0
  414. package/library/tools/inspect-runtime-node/GUIDE.md +7 -0
  415. package/library/tools/inspect-runtime-node/resource.yaml +5 -0
  416. package/library/tools/instantiate-scene/GUIDE.md +12 -0
  417. package/library/tools/is-running/GUIDE.md +3 -0
  418. package/library/tools/measure/GUIDE.md +8 -0
  419. package/library/tools/navigation-probe/GUIDE.md +9 -0
  420. package/library/tools/open/resource.yaml +2 -2
  421. package/library/tools/open-main-scene/GUIDE.md +6 -0
  422. package/library/tools/open-scene/GUIDE.md +8 -0
  423. package/library/tools/place-adjacent/GUIDE.md +7 -0
  424. package/library/tools/play/GUIDE.md +13 -0
  425. package/library/tools/project-setting/GUIDE.md +9 -0
  426. package/library/tools/publish-build/resource.yaml +6 -6
  427. package/library/tools/raycast/GUIDE.md +7 -0
  428. package/library/tools/read-file/GUIDE.md +10 -0
  429. package/library/tools/read-library/resource.yaml +5 -0
  430. package/library/tools/recent-events/GUIDE.md +7 -0
  431. package/library/tools/remove-node/GUIDE.md +3 -0
  432. package/library/tools/repeat-along/GUIDE.md +5 -0
  433. package/library/tools/replace-node/GUIDE.md +9 -0
  434. package/library/tools/replace-text/GUIDE.md +5 -0
  435. package/library/tools/run-editor-script/GUIDE.md +16 -0
  436. package/library/tools/run-script/GUIDE.md +30 -0
  437. package/library/tools/run-script/resource.yaml +6 -3
  438. package/library/tools/runtime-animate/GUIDE.md +7 -0
  439. package/library/tools/runtime-call/GUIDE.md +7 -0
  440. package/library/tools/runtime-set/GUIDE.md +9 -0
  441. package/library/tools/runtime-spawn/GUIDE.md +9 -0
  442. package/library/tools/save-scene/GUIDE.md +3 -0
  443. package/library/tools/scene-audit/GUIDE.md +29 -0
  444. package/library/tools/screenshot/GUIDE.md +17 -0
  445. package/library/tools/select-node/GUIDE.md +3 -0
  446. package/library/tools/set-prop/GUIDE.md +23 -0
  447. package/library/tools/set-resource-property/GUIDE.md +8 -0
  448. package/library/tools/shot-sheet/GUIDE.md +7 -0
  449. package/library/tools/snap-to-surface/GUIDE.md +17 -0
  450. package/library/tools/snapshot-diff/GUIDE.md +7 -0
  451. package/library/tools/starcast/GUIDE.md +12 -0
  452. package/library/tools/stop/GUIDE.md +3 -0
  453. package/library/tools/test-placement/GUIDE.md +7 -0
  454. package/library/tools/ui-actions/GUIDE.md +12 -0
  455. package/library/tools/ui-activate/GUIDE.md +11 -0
  456. package/library/tools/ui-screenshot/GUIDE.md +9 -0
  457. package/library/tools/ui-tree/GUIDE.md +10 -0
  458. package/library/tools/wait-for-event/GUIDE.md +11 -0
  459. package/library/tools/world-snapshot/GUIDE.md +9 -0
  460. package/library/tools/write-file/GUIDE.md +5 -0
  461. package/library/tools/zoom/GUIDE.md +5 -0
  462. package/package.json +6 -4
  463. package/registry/generated/counts.json +2 -2
  464. package/registry/generated/gemini-extension.json +4 -12
  465. package/registry/generated/index.json +433 -339
  466. package/registry/generated/marketplace.claude.json +2 -13
  467. package/registry/generated/plugin.claude.json +23 -22
  468. package/registry/generated/plugin.codex.json +4 -12
  469. package/registry/generated/plugin.cursor.json +4 -12
  470. package/registry/generated/plugin.factory.json +4 -12
  471. package/registry/generated/server.json +34 -0
  472. package/registry/generated/skills-index.md +119 -117
  473. package/registry/generated/skills-registry.json +153 -115
  474. package/registry/operations/fixtures/invalid-deprecated-without-replacement.json +60 -0
  475. package/registry/operations/fixtures/invalid-name.json +60 -0
  476. package/registry/operations/fixtures/invalid-publish-without-owner.json +82 -0
  477. package/registry/operations/fixtures/invalid-spend-without-estimate.json +42 -0
  478. package/registry/operations/fixtures/invalid-unknown-field.json +61 -0
  479. package/registry/operations/fixtures/valid-player-facing.json +82 -0
  480. package/registry/operations/fixtures/valid-read.json +60 -0
  481. package/registry/operations/fixtures/valid-spend.json +43 -0
  482. package/registry/operations/legacy-names.json +1206 -0
  483. package/registry/schemas/operation.schema.json +318 -0
  484. package/registry/schemas/skill.schema.json +4 -0
  485. package/CLAUDE.md +0 -7
@@ -1,11 +1,11 @@
1
1
  ---
2
2
  name: cinematic-cutscene
3
- description: "Generate a non-interactive cutscene — reference-locked look, a 5-10s image-to-video shot, optional TTS dialogue — wired as a fading VideoStreamPlayer."
3
+ description: "Generate a non-interactive cutscene: a reference-locked 5-10s video shot with optional voiced dialogue."
4
4
  license: MIT
5
5
  compatibility: [Cursor, Claude Code, Windsurf, Codex]
6
6
  category: video
7
7
  user-invocable: true
8
- allowed-tools: Read Grep Glob Write Edit summer_generate_video summer_check_job summer_generate_image summer_generate_audio summer_search_assets summer_import_from_url summer_add_node summer_set_prop
8
+ allowed-tools: Read Grep Glob Write Edit summer_assets_generate_video summer_jobs_wait summer_assets_generate_image summer_assets_generate_audio summer_assets_search summer_import_from_url summer_add_node summer_set_prop summer_call
9
9
  paths: ["assets/video/**", "cinematics/**", "trailers/**"]
10
10
  ---
11
11
 
@@ -30,7 +30,7 @@ If the user wants 5 seconds of marketing footage, that's `trailer-shot`. If they
30
30
  - "Looping splash screen background" — `animated-loop`.
31
31
  - "Animated logo backdrop on the title screen" — `animated-loop`.
32
32
  - Real-time in-engine cinematic with the actual gameplay characters and camera — that's an AnimationPlayer job, not generated video. Route to `scene-composition`.
33
- - Voice-only narration over a static image — generate the dialogue with `summer_generate_audio` and use a static `TextureRect`, no video needed.
33
+ - Voice-only narration over a static image — generate the dialogue with `assets.generate_audio` and use a static `TextureRect`, no video needed.
34
34
 
35
35
  ## Steps
36
36
 
@@ -38,10 +38,10 @@ If the user wants 5 seconds of marketing footage, that's `trailer-shot`. If they
38
38
 
39
39
  ```
40
40
  Read .summer/GameSoul.md
41
- summer_search_assets(query="<character name> reference", assetType="2d_image", source="all")
41
+ assets.search({ query: "<character name> reference", assetType: "2d_image", scope: "all" })
42
42
  ```
43
43
 
44
- `summer_search_assets` has no video filter — `assetType` is one of `2d_image`, `animation`, `3d_model`, `audio`, `music`, `all`, and there is no video member. To find prior cutscene clips, list your own assets with `summer_list_my_assets(query="cutscene")` and read the titles.
44
+ `assets.search` has no video filter — `assetType` is one of `2d_image`, `animation`, `3d_model`, `audio`, `music`, `all`, and there is no video member. To find prior cutscene clips, search your own assets with `assets.search({ query: "cutscene", scope: "mine" })` and read the titles.
45
45
 
46
46
  If a reference image of the character already exists from a prior `concept-art` or `character-portrait` run, **reuse it** as the `imageUrl` — that single decision is the difference between the character looking like themselves and looking like a stranger.
47
47
 
@@ -51,32 +51,32 @@ Cutscenes longer than 10 seconds are **multiple shots**, not one take. Ask the u
51
51
 
52
52
  > Want this as one 10s shot, or three shots (e.g. wide → close on face → reaction)? Each shot is 5-10s. I'll generate a reference image once, then image-to-video each shot off of it.
53
53
 
54
- Default if the user is vague: **3 shots, 5s each, on kling**. Confirm before spending credits.
54
+ Default if the user is vague: **3 shots, 5s each, on kling**. Confirm before spending credits: `dryRun: true` on a shot's call returns its `estimate` (credits, balance, enough) and renders nothing.
55
55
 
56
56
  ### 3. Lock the look — generate a reference image first
57
57
 
58
- For any character or hero scene, generate a reference still with `summer_generate_image` *before* generating video. This still drives `imageUrl` on every subsequent shot, so the character is consistent across cuts.
58
+ For any character or hero scene, generate a reference still with `assets.generate_image` *before* generating video. This still drives `imageUrl` on every subsequent shot, so the character is consistent across cuts.
59
59
 
60
60
  ```
61
- summer_generate_image(
62
- prompt="<subject>, <setting>, cinematic lighting, film still, wide 16:9 framing, <art style from GameSoul.md>",
63
- model="nano-banana-2"
64
- )
61
+ assets.generate_image({
62
+ prompt: "<subject>, <setting>, cinematic lighting, film still, wide framing, <art style from GameSoul.md>",
63
+ model: "nano-banana-2",
64
+ aspectRatio: "16:9"
65
+ })
65
66
  ```
66
67
 
67
- `summer_generate_image` has no size or aspect argument — `options.image_size` is dropped without an error and every MCP image comes back at the server's 1:1 default. Ask for the framing in the prompt, or generate the reference in the Summer dashboard (which exposes aspect ratio) and pass its URL. For image-to-video this matters more than usual: the clip's framing is inherited from the reference, so a square reference gives you a square cutscene.
68
+ Set `aspectRatio` to the cutscene's framing (`16:9`, or `9:16` for mobile); `width` and `height` ask for a minimum size. For image-to-video this matters more than usual: the clip's framing is inherited from the reference, so a square reference gives you a square cutscene.
68
69
 
69
70
  Show the user the still and confirm it's the right look before video-ing it. Regenerating a still costs far less than regenerating a video.
70
71
 
71
72
  ### 4. Pick the model
72
73
 
73
- **This skill always passes `imageUrl`, which puts every call on the image-to-video route — and that route only accepts three models.** `kling-turbo` and `veo3` are text-to-video only; asking for either with an `imageUrl` set is a 400 `invalid_model`, not a silent downgrade.
74
+ **This skill always passes `imageUrl`, which puts every call on the image-to-video route.** `kling-turbo` and `veo3` are text-to-video only; asking for either with an `imageUrl` set is a 400 `invalid_model`, not a silent downgrade.
74
75
 
75
76
  | Model | i2v? | Speed | When |
76
77
  |---|---|---|---|
77
78
  | `ltx` | yes | ~30s | Iteration, blocking shots, B-roll, throwaway tests |
78
79
  | `kling` | yes | 2-4 min | Hero shots, character cutscenes, anything the player will sit and watch |
79
- | `minimax` | yes | 2-3 min | Stylized / anime-leaning content; better at non-photoreal looks than kling |
80
80
  | `kling-turbo` | **no** | 1-2 min | Text-to-video only — usable only if you drop the reference image |
81
81
  | `veo3` | **no** | 3-5 min | Text-to-video only — usable only if you drop the reference image |
82
82
 
@@ -85,24 +85,24 @@ Default policy: **`ltx` first** to validate the prompt and shot framing. If it l
85
85
  ### 5. Generate each shot
86
86
 
87
87
  ```
88
- summer_generate_video(
89
- prompt="<subject does <action>, <camera move>, <lighting>, cinematic, 16mm film grain>",
90
- model="kling",
91
- imageUrl="<reference image fileUrl from step 3>",
92
- duration=5,
93
- aspectRatio="16:9"
94
- )
88
+ assets.generate_video({
89
+ prompt: "<subject does <action>, <camera move>, <lighting>, cinematic, 16mm film grain>",
90
+ model: "kling",
91
+ imageUrl: "<reference image fileUrl from step 3>",
92
+ duration: 5,
93
+ aspectRatio: "16:9"
94
+ })
95
95
  ```
96
96
 
97
- `duration` accepts **only 5 or 10** — the server coerces anything else to 5. There is no 3s, 4s, 7s or 8s clip.
97
+ On `ltx` and `kling`, `duration` is 5 or 10 — anything else renders 5. The newer models in the `model` list render their nearest supported length.
98
98
 
99
- Video generation is **asynchronous**. The call returns immediately with `{ success, queued: true, jobId, model, resolvedModel, estimatedCost, duration }` and **no `fileUrl`** — the clip is rendered by a background worker. Poll for it:
99
+ `assets.generate_video` always answers at once with a job — `{ status: "running", job: { id } }` and **no `fileUrl`**; the clip is rendered by a background worker. Wait for it:
100
100
 
101
101
  ```
102
- summer_check_job(jobId="<jobId from the generate call>")
102
+ jobs.wait({ jobId: "<job.id from the generate call>", timeoutSeconds: 50 })
103
103
  ```
104
104
 
105
- Only once the job reports `completed` do you have an asset and a URL. Do not tell the user a shot is done off the back of the generate call — at that moment nothing has rendered yet.
105
+ Call `jobs.wait` again until `finished` is true. Only a finished job with state `done` has the asset and URL in its `result`. Do not tell the user a shot is done off the back of the generate call — at that moment nothing has rendered yet.
106
106
 
107
107
  `aspectRatio` is applied on the text-to-video path only; on image-to-video the framing comes from the reference image, so a `9:16` cutscene needs a `9:16` reference, not a `9:16` argument.
108
108
 
@@ -112,14 +112,14 @@ When the job completes, show the user the URL and ask:
112
112
 
113
113
  ### 6. Generate dialogue audio (if the scene has dialogue)
114
114
 
115
- Cutscene dialogue is TTS, not in the video model. The video model can render mouth motion that *looks* like talking, but the audio comes from `summer_generate_audio`. Generate it separately and an AnimationPlayer or your `cinematics/` controller scene syncs them.
115
+ Cutscene dialogue is TTS, not in the video model. The video model can render mouth motion that *looks* like talking, but the audio comes from `assets.generate_audio`. Generate it separately and an AnimationPlayer or your `cinematics/` controller scene syncs them.
116
116
 
117
117
  ```
118
- summer_generate_audio(
119
- capability="text_to_speech",
120
- text="They'll come for you at dawn. Run while you can.",
121
- voiceId="<from audio bible — see voice-line>"
122
- )
118
+ assets.generate_audio({
119
+ capability: "text_to_speech",
120
+ text: "They'll come for you at dawn. Run while you can.",
121
+ voiceId: "<from audio bible — see voice-line>"
122
+ })
123
123
  ```
124
124
 
125
125
  Lip-sync caveat: if the video shows the character clearly mouthing words and the audio is a different cadence, viewers notice. Either (a) keep the camera off the character's face during dialogue, (b) accept the asynchrony for a stylized look, or (c) use `veo3` and prompt the dialogue text directly into the video prompt for synced motion.
@@ -146,19 +146,27 @@ Then:
146
146
  summer_import_from_url(url="<hosted .ogv url>", path="res://assets/video/cinematics/intro_shot_01.ogv")
147
147
  ```
148
148
 
149
- Build a controller scene at `res://cinematics/Intro.tscn`. Every scene-mutating tool takes an explicit `scenePath`, and `summer_set_prop`'s property argument is named `key`, not `property`:
149
+ Build a controller scene at `res://cinematics/Intro.tscn`: create it, then build its nodes in one script (`scenePath` names the new scene; the editor's open tab comes back afterwards):
150
150
 
151
151
  ```
152
- summer_create_scene(path="res://cinematics/Intro.tscn", rootName="Intro", allow_temporary_scene_mutation=true)
153
- summer_add_node(scenePath="res://cinematics/Intro.tscn", parent=".", type="ColorRect", name="Fade") # black, alpha 1.0 → 0.0
154
- summer_add_node(scenePath="res://cinematics/Intro.tscn", parent=".", type="VideoStreamPlayer", name="Video")
155
- summer_set_prop(scenePath="res://cinematics/Intro.tscn", path="./Video", key="stream", value="res://assets/video/cinematics/intro_shot_01.ogv")
156
- summer_set_prop(scenePath="res://cinematics/Intro.tscn", path="./Video", key="autoplay", value=true)
157
- summer_set_prop(scenePath="res://cinematics/Intro.tscn", path="./Video", key="expand", value=true)
158
- summer_set_prop(scenePath="res://cinematics/Intro.tscn", path="./Fade", key="anchors_preset", value=15)
159
- summer_save_scene(scenePath="res://cinematics/Intro.tscn")
152
+ summer_create_scene(path="res://cinematics/Intro.tscn", rootName="Intro", rootType="Control")
153
+ summer_run_script(scenePath="res://cinematics/Intro.tscn", source="""
154
+ func run(ctx):
155
+ var video = ctx.add_node("VideoStreamPlayer", "Video", null, {
156
+ "stream": load("res://assets/video/cinematics/intro_shot_01.ogv"),
157
+ "autoplay": true,
158
+ "expand": true,
159
+ })
160
+ video.set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT)
161
+ var fade = ctx.add_node("ColorRect", "Fade", null, {"color": Color(0, 0, 0, 1)}) # black, alpha 1.0 -> 0.0
162
+ fade.set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT)
163
+ fade.mouse_filter = Control.MOUSE_FILTER_IGNORE
164
+ ctx.save_scene()
165
+ """)
160
166
  ```
161
167
 
168
+ `Fade` comes after `Video` in the tree, so it draws on top of it.
169
+
162
170
  Attach a `Tween` script that fades the `ColorRect` from black to clear over 0.5s on `_ready`, then back to black when `Video.finished` fires, then `queue_free()`s the scene. For multi-shot cutscenes, queue the next `VideoStreamPlayer` in the `finished` signal handler.
163
171
 
164
172
  For dialogue, add an `AudioStreamPlayer` sibling with the TTS clip and call `play()` in `_ready` after a small delay matching where the line lands in the video.
@@ -176,7 +184,7 @@ Pattern: `<subject> + <action> + <camera move> + <lighting> + <stylistic anchor>
176
184
  | Action beat (village burns) | `kling` | `medium wide of a thatched village engulfed in flames at night, embers rising, silhouettes running through smoke, hand-held camera, cinematic` | 5s |
177
185
  | Ending shot (hero walks away) | `kling` | `low wide shot of a cloaked figure walking away across a blasted plain at sunset, slow truck-back, golden hour, dust on the wind` | 5s |
178
186
  | Throwaway iteration / blocking | `ltx` | same prompt as above | 5s |
179
- | Anime / stylized cutscene | `minimax` | `anime-style young swordsman draws blade and steps forward, sakura petals, dramatic wind, Studio Ghibli soft painterly` | 5s |
187
+ | Anime / stylized cutscene | `kling` | `anime-style young swordsman draws blade and steps forward, sakura petals, dramatic wind, Studio Ghibli soft painterly` | 5s |
180
188
 
181
189
  ### Bad prompts and why
182
190
 
@@ -191,23 +199,27 @@ Pattern: `<subject> + <action> + <camera move> + <lighting> + <stylistic anchor>
191
199
  ## Anti-patterns
192
200
 
193
201
  - **Generating a 10s shot when you should chain two 5s shots.** Identity, hand consistency, and physics drift every additional second past ~6s. Two 5s shots cut together look better and cost the same.
194
- - **Skipping the reference image.** Generating four character cutscenes from text prompts alone produces four different-looking people. Always lock the look with `summer_generate_image` first, then `imageUrl` every subsequent video call.
202
+ - **Skipping the reference image.** Generating four character cutscenes from text prompts alone produces four different-looking people. Always lock the look with `assets.generate_image` first, then `imageUrl` every subsequent video call.
195
203
  - **Asking the video model to render dialogue without `veo3`.** `kling` and `ltx` will animate mouths but the motion does not match any audio. Use `veo3` if dialogue is on-camera, or keep the camera off the speaker.
196
204
  - **Using `kling` for blocking iterations.** Validate framing and prompt on the cheaper `ltx` first; move to `kling` once the composition lands.
197
205
  - **Putting the cutscene on a `VideoStreamPlayer` without a fade.** Cuts straight from gameplay to video are jarring. Always wrap in a `ColorRect` fade in/out.
198
- - **Treating `summer_generate_video` as synchronous.** It returns `{ queued: true, jobId }` and no URL. You must poll `summer_check_job` before there is anything to show or import.
206
+ - **Treating `assets.generate_video` as finished.** It answers `{ status: "running", job }` and no URL. Wait with `jobs.wait` until the job is done before there is anything to show or import.
199
207
  - **Importing the `.mp4` as-is.** The engine has no MP4 or WebM loader — only Ogg Theora (`.ogv`). Transcode first; an un-transcoded import fails and is rolled back.
200
- - **Asking for `duration=3` or `duration=8`.** Only 5 and 10 exist; anything else is silently coerced to 5.
208
+ - **Asking `ltx` or `kling` for `duration: 3` or `duration: 8`.** On those two only 5 and 10 exist; anything else renders 5.
201
209
  - **Pairing `imageUrl` with `kling-turbo` or `veo3`.** Neither has an image-to-video endpoint — that combination is a 400.
202
210
 
203
211
  ## Edge cases
204
212
 
205
- - **Vertical cutscene for a mobile target.** On the image-to-video path `aspectRatio` is not applied at all — the clip inherits the reference image's framing. So the reference *must* be 9:16, and MCP image generation cannot produce that: make it in the Summer dashboard, or crop a square generation to 9:16, then pass its URL as `imageUrl`.
213
+ - **Vertical cutscene for a mobile target.** On the image-to-video path `aspectRatio` is not applied at all — the clip inherits the reference image's framing. So the reference *must* be 9:16: generate it with `aspectRatio: "9:16"`, then pass its URL as `imageUrl`.
206
214
  - **Cutscene must match an in-engine character precisely.** No video model will hit pixel-perfect identity. Either (a) accept the artistic license, (b) render the cutscene in-engine with `AnimationPlayer` instead of generating it, or (c) generate a reference image *from* a screenshot of the in-engine character (image-to-image first, then image-to-video).
207
215
  - **Dialogue is too long for a 5s shot.** Either trim the line, or split: 5s of speaker, 5s of listener reaction (cheaper because the listener doesn't need synced lips).
208
216
  - **Cutscene needs to play and the player isn't looking.** Pause the gameplay timer, push a `Control` overlay with the `VideoStreamPlayer`, restore on finish.
209
217
  - **Multi-shot continuity.** Use the same reference image as `imageUrl` across all shots. If lighting differs by shot, generate one reference per lighting setup, not one per shot.
210
218
 
219
+ ## Without Summer Engine
220
+
221
+ In a session without Summer Engine tools (the assets profile; the `summer-assets` skill has the whole loop), do steps 1-6 and skip step 7 (`VideoStreamPlayer`). Skip the soul-file read in step 1 when the project has no `.summer/` folder. Save the file where the person asked with `out` (the `summer-assets` skill says how), and tell them the path and format. Each shot is an MP4 and each dialogue line an audio file; the person cuts them together in their own editor.
222
+
211
223
  ## Fallback (no MCP)
212
224
 
213
225
  If the MCP server isn't running, the user can do all of this in the Summer dashboard:
@@ -237,4 +249,4 @@ Once the cutscene is generated and wired:
237
249
  - `music-track` — score the cutscene.
238
250
  - `concept-art` — generate the reference image axis if no character reference exists yet.
239
251
  - `character-portrait` — produce a high-fidelity locked character portrait for use as `imageUrl`.
240
- - `../../references/mcp-tools-reference/mcp-tools-reference.md` — `summer_generate_video` parameter schema and error codes.
252
+ - `summer_docs_read` id `reference/mcp-tools-reference` — how to call `assets.generate_video`; `summer_search` returns its exact input.
@@ -1,7 +1,7 @@
1
1
  id: skill/cinematic-cutscene
2
2
  kind: skill
3
3
  version: 1.0.4
4
- summary: Generate a non-interactive cutscene — reference-locked look, a 5-10s image-to-video shot, optional TTS dialogue — wired as a fading VideoStreamPlayer.
4
+ summary: "Generate a non-interactive cutscene: a reference-locked 5-10s video shot with optional voiced dialogue."
5
5
  use_when:
6
6
  - generating a non-interactive cutscene clip — opening scene, story beat, character intro, ending
7
7
  - a story beat needs a short pre-rendered clip between gameplay sections — intro, transition, ending
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: combat-basics
3
- description: "Damage in Summer Engine: hitbox and hurtbox Areas on opposing layers, a reusable Health component, damage signals, knockback, hit feedback, projectiles."
3
+ description: "Damage: hitbox and hurtbox Areas, a reusable Health component, damage signals, knockback, projectiles."
4
4
  license: MIT
5
5
  compatibility: [Cursor, Claude Code, Codex, Windsurf, Gemini, OpenCode]
6
6
  category: gameplay-mechanics
@@ -1,7 +1,7 @@
1
1
  id: skill/combat-basics
2
2
  kind: skill
3
3
  version: 1.0.0
4
- summary: "Damage in Summer Engine: hitbox and hurtbox Areas on opposing layers, a reusable Health component, damage signals, knockback, hit feedback, projectiles."
4
+ summary: "Damage: hitbox and hurtbox Areas, a reusable Health component, damage signals, knockback, projectiles."
5
5
  use_when:
6
6
  - adding attacks, health and damage, or enemies that can be hit and hit back
7
7
  - adding projectiles or bullets — homing, piercing, area-of-effect, or pooling hundreds of them
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: compatibility-renderer-traps
3
- description: "Make a Forward+ Summer game also look right on the Compatibility renderer: instance-uniform budget, black MultiMesh colors, sRGB vertex colors."
3
+ description: "Make a Forward+ game look right on the Compatibility renderer: instance uniforms, MultiMesh, vertex colors."
4
4
  license: MIT
5
5
  compatibility: [Cursor, Claude Code, Windsurf, Codex]
6
6
  category: rendering-and-lighting
@@ -1,7 +1,7 @@
1
1
  id: skill/compatibility-renderer-traps
2
2
  kind: skill
3
3
  version: 1.0.0
4
- summary: "Make a Forward+ Summer game also look right on the Compatibility renderer: instance-uniform budget, black MultiMesh colors, sRGB vertex colors."
4
+ summary: "Make a Forward+ game look right on the Compatibility renderer: instance uniforms, MultiMesh, vertex colors."
5
5
  use_when:
6
6
  - a game must run on phones or weak GPUs that may use the Compatibility or Mobile renderer
7
7
  - objects render black, pale or stop animating on one renderer but not another
@@ -1,11 +1,11 @@
1
1
  ---
2
2
  name: concept-art
3
- description: "Explore art direction with 3-4 rough concept variants of a character, environment, or prop to pick a vibe before committing to a final asset."
3
+ description: "Explore art direction with 3-4 rough concept variants of a character, environment or prop."
4
4
  license: MIT
5
5
  compatibility: [Cursor, Claude Code, Windsurf, Codex]
6
6
  category: 2d-assets
7
7
  user-invocable: true
8
- allowed-tools: Read Grep Glob Write Edit summer_generate_image summer_search_assets summer_import_from_url
8
+ allowed-tools: Read Grep Glob Write Edit summer_assets_generate_image summer_assets_search summer_import_from_url summer_call
9
9
  paths: ["assets/**", "art/**", "concepts/**"]
10
10
  ---
11
11
 
@@ -44,7 +44,7 @@ If "final" → hand off to `character-portrait`. If "explore" → continue.
44
44
  ### 2. Search for prior concepts
45
45
 
46
46
  ```
47
- summer_search_assets(query="<subject> concept", assetType="2d_image", source="all")
47
+ assets.search({ query: "<subject> concept", assetType: "2d_image", scope: "all" })
48
48
  ```
49
49
 
50
50
  If something already exists, ask if the user wants to riff on it (img2img via `referenceImageUrl`) or start fresh.
@@ -68,16 +68,16 @@ State the axis to the user before generating: "I'll vary on **stylization** —
68
68
  Issue 3-4 calls in parallel, one per variant. Use the same subject phrasing across all four; only the style-modifier changes.
69
69
 
70
70
  ```
71
- summer_generate_image(
72
- prompt="<subject>. <axis variant 1>. concept art, evocative, rough painterly, atmospheric lighting, wide cinematic framing",
73
- model="nano-banana-2",
74
- style="none"
75
- )
71
+ assets.generate_image({
72
+ prompt: "<subject>. <axis variant 1>. concept art, evocative, rough painterly, atmospheric lighting, wide cinematic framing",
73
+ model: "nano-banana-2",
74
+ style: "none"
75
+ })
76
76
  ```
77
77
 
78
78
  `style: "none"` is intentional: only `cartoon` and `anime` append anything to the prompt, `realistic` and `none` append nothing, and any other value is coerced to `none`. So the preset cannot override the prompt's stylistic direction — it just contributes nothing, which is what concept art wants. All four variants' divergence has to come from the prompt.
79
79
 
80
- For a shape other than square, pass `aspectRatio` (`"16:9"`, `"9:16"`, ...) or `width` + `height`; the result reports the real width and height and the model that ran. Exploration images are thrown away, so square is usually fine. Background removal is the top-level `removeBackground` argument, not an `options` key.
80
+ For a shape other than square, pass `aspectRatio` (`"16:9"`, `"9:16"`, ...) or `width` + `height`; the result reports the real width and height and the model that ran. Exploration images are thrown away, so square is usually fine. Background removal is the `removeBackground` argument (there is no `options` object). Four variants are four charges: `dryRun: true` on one call shows its credits.
81
81
 
82
82
  ### 5. Present the batch
83
83
 
@@ -124,13 +124,17 @@ The structure: **subject + axis variant + "concept art" + lighting/atmosphere**.
124
124
  - **Subject is a fully described scene, not an asset.** You're producing key art, not asset reference. Pass `aspectRatio: "16:9"` (or `width: 1920, height: 1080` for store key art) and bias toward atmospheric.
125
125
  - **User wants the final to be 3D.** After they pick a direction, route to `asset-strategy` — concept-art images are not 3D-ready references (they have backgrounds, scene context, dramatic lighting baked in). The 3D pipeline needs its own clean white-background reference.
126
126
 
127
+ ## Without Summer Engine
128
+
129
+ In a session without Summer Engine tools (the assets profile; the `summer-assets` skill has the whole loop), every step works. Pass `out` with the person's folder so the batch lands there (the `summer-assets` skill says how), and skip `summer_import_from_url`.
130
+
127
131
  ## Fallback (no MCP)
128
132
 
129
133
  Print the 4 prompts and the call for each:
130
134
 
131
135
  ```
132
- summer_generate_image(prompt="<variant 1>", model="nano-banana-2", style="none")
133
- summer_generate_image(prompt="<variant 2>", ...)
136
+ assets.generate_image({ prompt: "<variant 1>", model: "nano-banana-2", style: "none" })
137
+ assets.generate_image({ prompt: "<variant 2>", ... })
134
138
  ...
135
139
  ```
136
140
 
@@ -150,4 +154,4 @@ Once the user picks a direction:
150
154
 
151
155
  - `asset-strategy` — meta-router that delegates here vs other 2d-assets skills.
152
156
  - `character-portrait` — the polished single-image counterpart.
153
- - `../../references/mcp-tools-reference/mcp-tools-reference.md` — `summer_generate_image` parameter schema.
157
+ - `summer_docs_read` id `reference/mcp-tools-reference` — how to call `assets.generate_image`.
@@ -1,7 +1,7 @@
1
1
  id: skill/concept-art
2
2
  kind: skill
3
3
  version: 1.0.2
4
- summary: Explore art direction with 3-4 rough concept variants of a character, environment, or prop to pick a vibe before committing to a final asset.
4
+ summary: "Explore art direction with 3-4 rough concept variants of a character, environment or prop."
5
5
  use_when:
6
6
  - exploring art direction with rough variants before committing to a final asset
7
7
  - the user wants a mood board, rough sketches, or 'what could this look like'
@@ -0,0 +1,239 @@
1
+ ---
2
+ name: concept-to-level
3
+ description: "Take a 3D map from concept art to a polished, shippable level, with the questions to ask the user, owned lanes, render checks and collision kept in step."
4
+ license: MIT
5
+ compatibility: [Cursor, Claude Code, Windsurf, Codex]
6
+ category: level-design
7
+ user-invocable: true
8
+ allowed-tools: Read Grep Glob Write Edit Bash summer_assets_generate_image summer_assets_generate_3d summer_jobs_wait summer_call summer_screenshot summer_get_scene_tree summer_inspect_node summer_set_prop summer_save_scene summer_get_diagnostics summer_get_script_errors
9
+ paths: ["**/*.tscn", "**/*.gdshader", "**/*.gdshaderinc", "level/**", "levels/**", "docs/**", ".summer/**"]
10
+ ---
11
+
12
+ # concept-to-level — from concept art to a polished level
13
+
14
+ Use this when a 3D map has to go from "here is the idea" to a level that
15
+ looks finished, plays right online and offline, and runs well. It is the
16
+ process and the judgment; the specialist skills it names do the leaf work.
17
+
18
+ Distilled from one long build of a 1v1 arena duel map (a white-marble drill
19
+ yard on a mountain peak above the clouds, with god hands that change the
20
+ map mid-match). Its mistakes are the reason most rules below exist.
21
+
22
+ **Core principle:** agree the look before you build it, build in lanes that
23
+ each own their files, and never call a lane done without a render you have
24
+ opened for the user.
25
+
26
+ ## When to use
27
+
28
+ - "Turn this concept art into the real map." (3D, shipping quality)
29
+ - "Rework this level's theme, keep the layout."
30
+ - "Polish this map: materials, props, sky, effects."
31
+ - Several agents will work on one map at once.
32
+
33
+ ## When NOT to use
34
+
35
+ - A 2D or quick playable scene from a reference image: `scene-to-level`.
36
+ - Designing layout, pacing and encounters on paper: `design-level`.
37
+ - One asset: `prop-model`, `environment-kit`, `organic-model`.
38
+ - Only picking a style: `concept-art`, `art-direction`.
39
+
40
+ ## Ask these before you build
41
+
42
+ Ask in batches of two or three, not all at once. Record the answers in the
43
+ design doc. Each line says why it matters and what broke when it was not
44
+ asked.
45
+
46
+ **Theme and fantasy**
47
+ - [ ] What is this place, who owns it, what is the player there? *Drives every
48
+ prop and material choice. "A drill yard where players are guests" gave
49
+ the map its whole prop list.*
50
+ - [ ] Which reference frames are the bar? Show 3-4 generated options and get
51
+ a pick. *A god power built from a text brief was rejected twice; three
52
+ concept images got a clear pick in one reply.*
53
+
54
+ **Layout and gameplay**
55
+ - [ ] What layout stays, what may change? May colliders, spawns and zones
56
+ move? *Decides whether you must recompile server collision and update
57
+ tests.*
58
+ - [ ] Which surfaces are walkable, lethal, or "risky perches"? Where are the
59
+ ring-outs? *Fall zones need their own checks.*
60
+ - [ ] Should dynamic events (moving hazards, raised platforms, collapsing
61
+ walls) feel big and slow or quick? Should the warning show where it lands?
62
+ *The first sliding-hazard warning drew the whole path on the floor; the
63
+ user found it too easy to dodge.*
64
+ - [ ] What should the fight feel like? *"A battle for the high ground" turned
65
+ a vague light platform into layered plates with jump routes.*
66
+
67
+ **Quality and readability**
68
+ - [ ] What is the quality bar for close-ups? *Users inspect props at arm's
69
+ length: flat untextured parts, floating chains and sticks clipping
70
+ surfaces all got flagged.*
71
+ - [ ] What must stay readable? Set a number (we used: player silhouettes keep
72
+ at least 60% of clean brightness under every effect).
73
+ - [ ] How dark or saturated may effects get? *"Dark and evil, red only in thin
74
+ veins" was a rule we had to learn after a too-red pass.*
75
+
76
+ **Platform and runtime**
77
+ - [ ] Target hardware and platforms (mobile? integrated laptops?) and frame
78
+ budget. *Measure early; one decorative set cost a quarter of all triangles.*
79
+ - [ ] Does the map run online? What does the online build strip? *Our online
80
+ map build removed particle nodes and ran no map scripts.*
81
+ - [ ] What must be baked versus procedural? (Baked = no CPU, cannot react;
82
+ procedural = can aim and track.) *The floating statue had to be baked; the
83
+ god hands had to aim procedurally.*
84
+
85
+ **Rules and process**
86
+ - [ ] Game rules that limit design (rewards, odds, trading, licences)? Which
87
+ files are off-limits to you?
88
+ - [ ] Deadlines and demos? *Before a demo: stop background work, commit only
89
+ verified lanes, keep fallbacks.*
90
+ - [ ] Commit, push and PR policy.
91
+
92
+ ## The pipeline
93
+
94
+ ### 1. Frames first
95
+
96
+ Generate several cheap options with `assets.generate_image` (see
97
+ `concept-art`): an aerial overview, eye level, one per hero element. Get a
98
+ pick. Save the picked frames in the repo next to the design doc and check
99
+ every lane's renders against them. When a lane stalls on taste, generate
100
+ three directions for that element and ask again; do not iterate blind.
101
+
102
+ ### 2. Design doc
103
+
104
+ One markdown file per map: theme, layout and what is kept, floor, walls,
105
+ backdrop, props, materials rule, effects, dynamic events, performance
106
+ budget, open questions. Every user answer goes in. Lanes read it; you
107
+ update it when the user changes direction.
108
+
109
+ ### 3. Blockout
110
+
111
+ Rough geometry for everything at final scale, with a visible "not final"
112
+ material. Remaining blockout material is the to-do list. Keep a stand-in
113
+ player capsule for scale in every render.
114
+
115
+ ### 4. Lanes
116
+
117
+ Split by system, one owner each:
118
+
119
+ | Lane | Owns |
120
+ |---|---|
121
+ | Floor | ground materials, inlays, spawn floors |
122
+ | Walls / kit | modular kit, ring or room assembly, wall collision |
123
+ | Backdrop | sky, distant terrain, clouds, fog, kill height |
124
+ | Props | cover pieces, set dressing, shared material library |
125
+ | Cloth | banners and flags with sway |
126
+ | Lighting and effects | sun, fire, glows, corruption-style map states |
127
+ | Events | dynamic hazards, their visuals, spec for the server |
128
+
129
+ The map scene is shared: every lane edits it only through the live editor,
130
+ saves only its own changes, and reports what it touched. See "Running it
131
+ with parallel agents" below.
132
+
133
+ ### 5. Materials rule
134
+
135
+ No flat, unshaded surface on any model. Every surface gets real PBR textures
136
+ or procedural detail. Specific rules that came from user feedback:
137
+
138
+ - Bake a cavity/edge mask per prop, and scale edge wear by part thickness:
139
+ thin bars and chain links read as clean grey plastic otherwise.
140
+ - Wood: plank UVs at real scale, grain along each board's long axis, darker
141
+ end grain, grime in the joints. Triplanar noise reads as cork.
142
+ - Forged iron near black, rough (0.6-0.8) so curved bands do not mirror the
143
+ sky; rust only in recesses.
144
+ - Brass: dark tarnish base, polish only on high points and real wear.
145
+ - One shared material library for the map; props reuse it.
146
+
147
+ ### 6. Verify every lane with renders
148
+
149
+ After each change, render fixed angles: the user's own angle if they sent a
150
+ screenshot, eye level from the play space, a far view, from above. Open the
151
+ images for the user. Compare to the frames. A lane is done when its renders
152
+ pass, not when its script ran.
153
+
154
+ ### 7. Keep gameplay in step
155
+
156
+ After any collider, spawn or zone change: recompile the server collision
157
+ artifact, update tests that hard-code positions, run the covering tests,
158
+ and only then commit. Moving a structure means re-running everything placed
159
+ relative to it (see the reference file).
160
+
161
+ ### 8. Commit per verified lane
162
+
163
+ Commit each lane when its renders and tests pass. Stage only that lane's
164
+ files. Never commit files the editor rewrites on its own unless you meant to
165
+ change them.
166
+
167
+ ## Hard-won technical rules
168
+
169
+ Short list; details and reasons in
170
+ [references/technical-rules.md](references/technical-rules.md).
171
+
172
+ 1. Never run heavy or reloading scripts in the live editor (recoding
173
+ shaders, reloading scenes, instantiating or freeing what an open scene
174
+ uses). It hung and crashed the editor. Build headless; import named files.
175
+ 2. Render previews from a separate short-lived engine process that loads
176
+ from disk; call `RenderingServer.force_draw()` before reading the image.
177
+ 3. One heavy process at a time, at low priority. Stop everything for demos.
178
+ 4. Online builds may strip particle nodes and map scripts. Make fire, sparks
179
+ and motes from shader-driven meshes; bake map animation into vertex
180
+ animation textures and set `custom_aabb`.
181
+ 5. Edit an open scene only through the live editor; never text-edit it on
182
+ disk while it is open.
183
+ 6. The editor rewrites some project files on its own. Commit surgically.
184
+ 7. Keep a fallback scene when swapping in an experimental asset.
185
+ 8. Generated 3D models need cleanup and a notices entry; third-party
186
+ textures need their source and licence recorded.
187
+ 9. Modular kits: zero coplanar overlaps, sealed seams, no see-through holes.
188
+ 10. Measure render cost early: triangles, draw calls, shadow casters, lights.
189
+
190
+ ## Running it with parallel agents
191
+
192
+ - One lane per agent, with the files it owns written down. Shared files (the
193
+ map scene, a shared material library) have one owner per change.
194
+ - Agents report with renders and exact file lists; the coordinator opens the
195
+ renders, checks them against the frames, and commits per lane.
196
+ - Relay user feedback with concrete fixes ("thin parts read as grey plastic:
197
+ scale edge wear by thickness"), not the raw complaint alone.
198
+ - When an agent cannot do something (a permission check blocked it), ask the
199
+ user; do not route around it.
200
+ - Keep the machine cool: one heavy job at a time across all agents.
201
+ - Before a demo: tell every agent to stop, commit only verified work, and
202
+ keep experiments out of the map.
203
+
204
+ See `dispatching-parallel-agents` for the general pattern.
205
+
206
+ ## Definition of polished
207
+
208
+ - [ ] Every surface has a real material; no blockout material left.
209
+ - [ ] No floating, clipping or interpenetrating parts at close range
210
+ (chains, cloth, props on floors, decals on walls).
211
+ - [ ] Renders from all fixed angles match the reference frames.
212
+ - [ ] Players stay readable under every effect and event.
213
+ - [ ] Spawns are centred, symmetric where the mode needs it, and face play.
214
+ - [ ] Collision matches the visuals (within a few cm); server collision
215
+ recompiled; tests pass.
216
+ - [ ] Fall zones kill, safe zones are safe, nothing catches falling players.
217
+ - [ ] Works with the online build's limits (no particles or scripts if
218
+ stripped).
219
+ - [ ] Render cost measured, biggest offenders known, low-end notes written.
220
+ - [ ] Third-party sources and generated assets recorded in the notices.
221
+ - [ ] Design doc matches what shipped.
222
+
223
+ ## Common mistakes
224
+
225
+ - Building a hero effect before agreeing its look. Generate options first.
226
+ - Splitting or regenerating a kit piece and overwriting the repo copy before
227
+ the scene that uses it is updated: parts vanish in the live map.
228
+ - Fixing one banner when all banners share the cause. Check the whole set.
229
+ - Calling a lane done from a headless log. Open a render.
230
+ - Moving a room and forgetting the decals, banners, rock and spawns placed
231
+ around it.
232
+
233
+ ## See also
234
+
235
+ - `concept-art`, `art-direction`, `design-level`, `scene-to-level`
236
+ - `environment-kit`, `fabricating-assets`, `prop-model`, `tileable-texture`
237
+ - `3d-lighting`, `vfx-fire`, `vfx-dissolve`, `procedural-animation`
238
+ - `headless-scripting`, `bounded-engine-runs`, `verifying-scenes`
239
+ - `tune-performance`, `dispatching-parallel-agents`