@playcraft/cli 0.0.39 → 0.0.41

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 (121) hide show
  1. package/README.md +66 -3
  2. package/dist/atom-plan/validate-atom-plan.js +298 -0
  3. package/dist/cli-root-help.js +1 -1
  4. package/dist/commands/3d.js +363 -0
  5. package/dist/commands/create.js +337 -0
  6. package/dist/commands/fix-ids.js +17 -3
  7. package/dist/commands/fix-ids.test.js +264 -0
  8. package/dist/commands/image.js +1337 -43
  9. package/dist/commands/login.js +60 -2
  10. package/dist/commands/recommend.js +1 -1
  11. package/dist/commands/remix.js +213 -0
  12. package/dist/commands/skills.js +1379 -0
  13. package/dist/commands/tools-3d.js +473 -0
  14. package/dist/commands/tools-generation.js +454 -0
  15. package/dist/commands/tools-project.js +400 -0
  16. package/dist/commands/tools-research.js +37 -0
  17. package/dist/commands/tools-research.test.js +216 -0
  18. package/dist/commands/tools-utils.js +164 -0
  19. package/dist/commands/tools.js +7 -616
  20. package/dist/config.js +2 -0
  21. package/dist/index.js +20 -2
  22. package/dist/utils/agent-api-client.js +52 -16
  23. package/package.json +9 -3
  24. package/project-template/.claude/agents/designer.md +116 -0
  25. package/project-template/.claude/agents/developer.md +133 -0
  26. package/project-template/.claude/agents/pm.md +164 -0
  27. package/project-template/.claude/agents/refs/README.md +67 -0
  28. package/project-template/.claude/agents/refs/designer-art-style-catalog.md +533 -0
  29. package/project-template/.claude/agents/refs/designer-color-audio-recipes.md +153 -0
  30. package/project-template/.claude/agents/refs/designer-deliverable-spec.md +167 -0
  31. package/project-template/.claude/agents/refs/designer-dimension-axis.md +27 -0
  32. package/project-template/.claude/agents/refs/designer-handoff-v2-checklist.md +68 -0
  33. package/project-template/.claude/agents/refs/designer-master-composite-recipes.md +216 -0
  34. package/project-template/.claude/agents/refs/designer-style-exploration-flow.md +37 -0
  35. package/project-template/.claude/agents/refs/developer-dev-handoff.md +109 -0
  36. package/project-template/.claude/agents/refs/developer-impl-cookbook.md +134 -0
  37. package/project-template/.claude/agents/refs/developer-phase1-flow.md +211 -0
  38. package/project-template/.claude/agents/refs/pm-workflow-detail.md +545 -0
  39. package/project-template/.claude/agents/refs/reviewer-six-dimension-eval.md +286 -0
  40. package/project-template/.claude/agents/refs/ta-3d-flip-recipe.md +85 -0
  41. package/project-template/.claude/agents/refs/ta-atlas-deliverable-standard.md +46 -0
  42. package/project-template/.claude/agents/refs/ta-batch-pipeline-recipes.md +120 -0
  43. package/project-template/.claude/agents/refs/ta-image-generation-detail.md +356 -0
  44. package/project-template/.claude/agents/refs/ta-image-ops-reference.md +495 -0
  45. package/project-template/.claude/agents/refs/ta-pipeline-cookbook.md +699 -0
  46. package/project-template/.claude/agents/refs/ta-tools-reference.md +111 -0
  47. package/project-template/.claude/agents/refs/ta-vfx-preset-catalog.md +365 -0
  48. package/project-template/.claude/agents/reviewer.md +103 -0
  49. package/project-template/.claude/agents/technical-artist.md +111 -0
  50. package/project-template/.claude/hooks/README.md +36 -0
  51. package/project-template/.claude/hooks/validate-atom-plan.mjs +224 -0
  52. package/project-template/.claude/hooks/validate-workflow-stop.mjs +258 -0
  53. package/project-template/.claude/settings.json +32 -0
  54. package/project-template/.claude/settings.local.json +4 -0
  55. package/project-template/.claude/skills/playcraft-ad-psychology/SKILL.md +182 -0
  56. package/project-template/.claude/skills/playcraft-art-style-guide/SKILL.md +123 -0
  57. package/project-template/.claude/skills/playcraft-asset-state-sheet/SKILL.md +141 -0
  58. package/project-template/.claude/skills/playcraft-audio-generation/SKILL.md +280 -0
  59. package/project-template/.claude/skills/playcraft-batch-pipeline/SKILL.md +184 -0
  60. package/project-template/.claude/skills/playcraft-build-optimizer/SKILL.md +306 -0
  61. package/project-template/.claude/skills/playcraft-image-generation/SKILL.md +229 -0
  62. package/project-template/.claude/skills/playcraft-image-generation/reference/build-sprite-sheet.template.mjs +123 -0
  63. package/project-template/.claude/skills/playcraft-image-generation/reference/compare-style.template.mjs +254 -0
  64. package/project-template/.claude/skills/playcraft-image-generation/reference/gen-batch-sprite.template.mjs +235 -0
  65. package/project-template/.claude/skills/playcraft-image-generation/reference/gen-batch.template.mjs +97 -0
  66. package/project-template/.claude/skills/playcraft-image-generation/reference/gen-edit-variants.template.mjs +118 -0
  67. package/project-template/.claude/skills/playcraft-image-generation/reference/process-batch.template.mjs +137 -0
  68. package/project-template/.claude/skills/playcraft-image-generation/reference/prompt-cookbook.md +397 -0
  69. package/project-template/.claude/skills/playcraft-image-generation/reference/validate-sprite-sheet.template.mjs +296 -0
  70. package/project-template/.claude/skills/playcraft-image-ops/SKILL.md +122 -0
  71. package/project-template/.claude/skills/playcraft-masking/SKILL.md +373 -0
  72. package/project-template/.claude/skills/playcraft-research/SKILL.md +212 -0
  73. package/project-template/.claude/skills/playcraft-sprite-generation/SKILL.md +423 -0
  74. package/project-template/.claude/skills/playcraft-storyboard/SKILL.md +148 -0
  75. package/project-template/.claude/skills/playcraft-style-qa/SKILL.md +270 -0
  76. package/project-template/.claude/skills/playcraft-text-rendering/SKILL.md +236 -0
  77. package/project-template/.claude/skills/playcraft-vfx-animation/SKILL.md +130 -0
  78. package/project-template/.claude/skills/playcraft-workflow/SKILL.md +396 -0
  79. package/project-template/.cursor/hooks.json +17 -0
  80. package/project-template/.cursor/rules/playcraft-orchestrator.mdc +87 -0
  81. package/project-template/.cursor/rules/playcraft-subagent-boundary.mdc +18 -0
  82. package/project-template/CLAUDE.md +240 -0
  83. package/project-template/assets/audio/bgm/.gitkeep +0 -0
  84. package/project-template/assets/audio/sfx/.gitkeep +0 -0
  85. package/project-template/assets/bundles/.gitkeep +0 -0
  86. package/project-template/assets/images/bg/.gitkeep +0 -0
  87. package/project-template/assets/images/reference/.gitkeep +0 -0
  88. package/project-template/assets/images/storyboard/.gitkeep +0 -0
  89. package/project-template/assets/images/tiles/.gitkeep +0 -0
  90. package/project-template/assets/images/ui/.gitkeep +0 -0
  91. package/project-template/assets/images/vfx/.gitkeep +0 -0
  92. package/project-template/assets/models/.gitkeep +0 -0
  93. package/project-template/docs/team/agent-conduct.md +105 -0
  94. package/project-template/docs/team/agent-runtime-matrix.md +62 -0
  95. package/project-template/docs/team/atom-plan-format.md +74 -0
  96. package/project-template/docs/team/collaboration.md +288 -0
  97. package/project-template/docs/team/core-model.md +50 -0
  98. package/project-template/docs/team/platform-capabilities.md +15 -0
  99. package/project-template/docs/team/workflow-changelog.md +51 -0
  100. package/project-template/docs/team/workflow-consistency-checklist.md +128 -0
  101. package/project-template/game/config/.gitkeep +0 -0
  102. package/project-template/game/gameplay/.gitkeep +0 -0
  103. package/project-template/game/scenes/.gitkeep +0 -0
  104. package/project-template/logs/.gitkeep +0 -0
  105. package/project-template/ta-workspace/logs/.gitkeep +0 -0
  106. package/project-template/ta-workspace/scripts/.gitkeep +0 -0
  107. package/project-template/ta-workspace/tmp/.gitkeep +0 -0
  108. package/project-template/templates/atom-plan.template.json +26 -0
  109. package/project-template/templates/atom-plan.template.md +76 -0
  110. package/project-template/templates/design-brief.template.md +195 -0
  111. package/project-template/templates/design-lens-checklist.reference.md +117 -0
  112. package/project-template/templates/design-methodology.md +99 -0
  113. package/project-template/templates/designer-log.template.md +98 -0
  114. package/project-template/templates/developer-log.template.md +140 -0
  115. package/project-template/templates/five-axis-framework.md +186 -0
  116. package/project-template/templates/intent-clarifications.template.md +58 -0
  117. package/project-template/templates/layout-spec.template.md +132 -0
  118. package/project-template/templates/project-state.template.md +219 -0
  119. package/project-template/templates/review-report.template.md +166 -0
  120. package/project-template/templates/style-exploration.template.md +93 -0
  121. package/project-template/templates/ta-log.template.md +205 -0
@@ -0,0 +1,423 @@
1
+ ---
2
+ name: playcraft-sprite-generation
3
+ description: PlayCraft 批量元素一次性生成完整指南。涵盖 sprite sheet / 元素拼图 / UI 组件集等所有"多元素同图生成"场景。包含 Canvas 规格计算、五段式 Prompt 模板、9 项核查清单、全量生成命令、逐格校验与定向修补流程、切割脚本模板,以及麻将 42-tile 完整示例。TA 在进行任何批量元素生成前必读。
4
+ triggers: sprite sheet,精灵图,批量生成,一次性生成,元素拼图,全量生成,tile sheet,icon sheet,UI组件集,grid generation,多元素同图,spritesheet,拼图生成,图标集,decompose-layers,crop,切割
5
+ ---
6
+
7
+ # PlayCraft 批量元素一次性生成指南
8
+
9
+ ## 0. 适用场景判断
10
+
11
+ **何时使用全量同图生成**:
12
+
13
+ | 场景 | 示例 | 推荐方式 |
14
+ | --------------------- | ----------------------------------------------- | ------------ |
15
+ | 同类型多元素(>3 个) | 42 张麻将牌、9 种水果、8 个图标 | 全量同图生成 |
16
+ | UI 组件集 | 按钮组(normal/hover/pressed × 3 种)、HUD 元素 | 全量同图生成 |
17
+ | 角色表情/姿态集 | 6 种表情、8 个方向 | 全量同图生成 |
18
+ | 同风格背景变体 | 3 个关卡背景 | 全量同图生成 |
19
+
20
+ **何时不适用**:
21
+
22
+ - 单个大尺寸资产(如 1080×1920 背景)→ 直接单独生成
23
+ - 元素间风格差异大(如写实 + 卡通混合)→ 分别生成
24
+ - 需要精确透明度/alpha 通道 → 生成后需 remove-background 处理
25
+
26
+ ### 生成后从同图提取单格(与 `playcraft-masking` 对齐)
27
+
28
+ | 布局 | 推荐提取方式 |
29
+ | ------------------------------------------- | ---------------------------------------------------------- |
30
+ | **规则网格 spritesheet**(本节主流程) | `playcraft image crop` + 下方切割脚本 |
31
+ | **散乱/非网格拼图** | `segment --boxes` 或 SAM3(慎用纯 text prompt) |
32
+ | **整张 Master Composite**(非 spritesheet) | `playcraft image decompose-layers`(302 整图分层,非逐格) |
33
+
34
+ > 网格图**不要**用 `decompose-layers` 代替 crop;整图分层也**不能**指定「只要第 N 格」。
35
+
36
+ ---
37
+
38
+ ## 1. Canvas 规格计算
39
+
40
+ ### 公式
41
+
42
+ ```
43
+ totalWidth = cols × cellWidth + (cols - 1) × gap
44
+ totalHeight = rows × cellHeight + (rows - 1) × gap
45
+
46
+ # 对齐到 16 的倍数(对 GPU 纹理和视频编码友好)
47
+ alignedWidth = ceil(totalWidth / 16) × 16
48
+ alignedHeight = ceil(totalHeight / 16) × 16
49
+
50
+ # 约束:不超过模型最大分辨率
51
+ assert alignedWidth ≤ 4096
52
+ assert alignedHeight ≤ 4096
53
+ ```
54
+
55
+ ### 快速参考表
56
+
57
+ | 元素数 | 推荐网格 | 单格尺寸(gap=10) | 画布尺寸 |
58
+ | ------ | -------- | ------------------ | --------------------- |
59
+ | 9 | 3×3 | 1024×1024 | 3092×3092 → 3104×3104 |
60
+ | 16 | 4×4 | 768×768 | 3102×3102 → 3104×3104 |
61
+ | 25 | 5×5 | 680×680 | 3440×3440 → 3440×3440 |
62
+ | 36 | 6×6 | 560×560 | 3410×3410 → 3424×3424 |
63
+ | 42 | 7×6 | 80×100 (small) | 624×656 → 624×656 |
64
+ | 42 | 7×6 | 540×540 | 3840×3290 → 3840×3296 |
65
+
66
+ > 建议优先使用大单格尺寸(≥540px),牺牲格数不如牺牲精度。如果元素数多(>36),可接受较小单格但不低于 80px。
67
+
68
+ ### gap 选择
69
+
70
+ - gap=0:元素紧贴,适合最终游戏用的 sprite sheet(开发者按像素切)
71
+ - gap=10-20:元素有间距,适合 AI 生成(防止跨格渲染污染)
72
+ - **推荐 AI 生成时 gap=10-20px**,切割后丢弃 gap 区域
73
+
74
+ ---
75
+
76
+ ## 2. 五段式 Prompt 模板
77
+
78
+ AI 生图 prompt 必须严格遵循五段式结构(Scene → Canvas → Element Set → Details → Constraints):
79
+
80
+ ```
81
+ Scene: [背景色 + hex + 用途,1-2 句].
82
+
83
+ Canvas: a strict [ROWS]-row by [COLS]-column spritesheet.
84
+ Final canvas size: [W]×[H] pixels (both multiples of 16).
85
+ Each element is exactly [CELL_W] pixels wide and [CELL_H] pixels tall.
86
+ Horizontal and vertical gaps between elements: [GAP] pixels.
87
+ All rows are left-aligned.
88
+
89
+ Element set: all [N] [ELEMENT_TYPE], each appearing exactly once, arranged in the following order:
90
+ - Row 1: [id_1 (标签)], [id_2 (标签)], ..., [id_COLS (标签)]
91
+ - Row 2: [id_COLS+1], ..., [id_2×COLS]
92
+ - ...
93
+ - Row [ROWS]: [remaining elements, mark empty cells if any]
94
+
95
+ Details:
96
+ - Every element is identical in size ([CELL_W]×[CELL_H] px) with [edge treatment].
97
+ - Material/texture: [具体材质描述].
98
+ - [Category 1] elements: [颜色 + 样式].
99
+ - [Category 2] elements: [颜色 + 样式].
100
+ - ...
101
+ - Art style: [风格关键词,引用 design-brief].
102
+
103
+ Constraints:
104
+ - No [unwanted_1], no [unwanted_2], no [unwanted_3].
105
+ - All symbols/text must be [质量要求].
106
+ - [其他技术约束].
107
+ ```
108
+
109
+ ### 五段式强制规则
110
+
111
+ | 段落 | 必须包含 | 禁止 |
112
+ | ----------- | ---------------------------- | ------------------------------ |
113
+ | Scene | 背景色 hex + 用途 | 不写风格(风格在 Details 段) |
114
+ | Canvas | 精确像素:画布/单格/gap/对齐 | 不写模糊尺寸如 "large" |
115
+ | Element Set | 逐行完整枚举 + 中文标签 | 不省略("etc." 或 "...") |
116
+ | Details | 按分类描述材质/颜色/风格 | 不写单一笼统描述覆盖所有 |
117
+ | Constraints | ≥3 条 "No xxx" | 不写正面描述(正面在 Details) |
118
+
119
+ ---
120
+
121
+ ## 3. Prompt 核查清单
122
+
123
+ 生成前对照以下 9 项逐一核查(在 `logs/ta-log.md` 中打勾),**全部通过才可执行生成命令**:
124
+
125
+ | # | 核查项 | 标准 |
126
+ | --- | ----------------------------- | --------------------------------------------------- |
127
+ | 1 | **Scene 段存在** | 背景色 hex 明确 |
128
+ | 2 | **Canvas 像素精确** | 画布/单格/gap 为精确数值,且是 16 倍数 |
129
+ | 3 | **Element Set 完整** | 逐行枚举数量 = assetMapping 总数,无遗漏无重复 |
130
+ | 4 | **Details 分类描述** | 每类元素有独立的颜色/材质描述,引用 layout-spec hex |
131
+ | 5 | **Details 引用 Style Intent** | 风格关键词来自 designer-log Style Intent Notes |
132
+ | 6 | **Constraints 负面约束** | ≥3 条 "No xxx",含 Anti-Pattern Notes 中的禁忌 |
133
+ | 7 | **Canvas ≤ 4096px** | 总尺寸不超过模型最大分辨率 |
134
+ | 8 | **--reference-image 指定** | 指向 ASR element sheet 或 Master Composite |
135
+ | 9 | **Prompt 已记录** | 完整 prompt 已写入 `logs/ta-log.md` |
136
+
137
+ **任何一项未通过 → 修正后重新核查。不可跳过。**
138
+
139
+ ---
140
+
141
+ ## 4. 全量生成命令
142
+
143
+ ```bash
144
+ playcraft tools generate-image \
145
+ --prompt "<五段式 prompt,已通过核查>" \
146
+ --output assets/images/[type]/spritesheet_[type].png \
147
+ --reference-image <asr-element-sheet-or-composite-path> \
148
+ --image-size 1K \
149
+ --image-model gpt-image-2
150
+
151
+ # 自动生成的 .json sidecar 记录完整 prompt + 配置
152
+ # 检查确认:
153
+ cat assets/images/[type]/spritesheet_[type].json
154
+ ```
155
+
156
+ ### `--image-size` 与画布尺寸的关系
157
+
158
+ `--image-size` 接受预设值 `1K`、`2K`、`4K`。实际输出像素由 `aspectRatio + imageSize` 联合决定——对 gpt-image-2: `1:1+4K`→2048x2048, `16:9+4K`→3840x2160, `1:1+1K`→1024x1024。
159
+
160
+ | 情况 | `--image-size` 设置 | 后续处理 |
161
+ | ---------------- | ------------------------------------ | -------------------------------------------------------- |
162
+ | 画布 ≤ 1024px | `1K` | 模型输出 ~1024px,**必须 resize 到目标画布尺寸后再切割** |
163
+ | 画布 1024–4096px | `4K` | 直接切割 |
164
+ | 需要最大精度 | `4K` + 放大单格尺寸使画布接近 4096px | 直接切割 |
165
+
166
+ **当模型输出 > 实际画布尺寸时的处理流程**:
167
+
168
+ ```bash
169
+ # 1. 生成(模型输出 ~1024px)
170
+ playcraft tools generate-image --prompt "..." --output tmp_sheet.png --image-size 1K ...
171
+
172
+ # 2. Resize 到实际画布尺寸(保持网格比例)
173
+ playcraft image resize --input tmp_sheet.png --width [alignedWidth] --height [alignedHeight] --output assets/images/[type]/spritesheet_[type].png
174
+
175
+ # 3. 然后正常切割
176
+ ```
177
+
178
+ > **推荐**:优先选择大单格尺寸方案(≥540px),使画布接近 4096×4096,避免先生成再缩放的精度损失。
179
+
180
+ ### 模型选择
181
+
182
+ | 模型 | 适用 | 注意 |
183
+ | ------------- | -------------------------------------- | ------------------ |
184
+ | gpt-image-2 | 首选——复杂布局、中文字符、多元素一致性 | 慢(~7-8 min),贵 |
185
+ | nano-banana-2 | 备选——简单图形、无文字元素 | 快,中文字符不可靠 |
186
+ | gemini-flash | 备选——色彩鲜艳场景 | 网格理解弱 |
187
+
188
+ **中文字符场景(麻将/汉字标签)必须用 gpt-image-2。**
189
+
190
+ ### 元素数超限时的分批策略
191
+
192
+ 当元素总数使画布无法在 4096px 内保持 ≥ 80px 单格时,需分批生成:
193
+
194
+ ```
195
+ 最大可容纳元素数 ≈ (4096 ÷ (cellSize + gap))²
196
+ # 例:cellSize=540, gap=10 → (4096÷550)² ≈ 49 个
197
+ # 例:cellSize=256, gap=10 → (4096÷266)² ≈ 237 个(但精度低)
198
+ ```
199
+
200
+ **分批原则**:
201
+
202
+ - 按元素类别分 sheet(如:萬子一张、條子一张),每张 sheet 内部风格一致
203
+ - 所有 sheet 使用**相同的 `--reference-image` + 相同模型**,保证跨 sheet 风格统一
204
+ - 在 `logs/ta-log.md` 中标注分批策略和每张 sheet 包含的元素清单
205
+
206
+ ---
207
+
208
+ ## 5. 逐格校验 + 定向修补
209
+
210
+ ### 校验标准
211
+
212
+ 生成后逐格对照 Element Set 清单检查:
213
+
214
+ | 校验项 | 通过标准 |
215
+ | ---------- | --------------------------------------------- |
216
+ | 元素存在 | 格内有完整元素,无空格、无残缺 |
217
+ | 符号正确 | 文字/图案与清单描述一致(无笔画错误、无乱码) |
218
+ | 尺寸一致 | 各格元素大小视觉统一(允许 ±5% 偏差) |
219
+ | 无跨格污染 | 元素不越界到相邻格 |
220
+ | 风格统一 | 颜色、材质、光照与其他格一致 |
221
+
222
+ ### 修补决策
223
+
224
+ | 错误比例 | 策略 |
225
+ | ------------------------------- | ------------------------------------- |
226
+ | ≤ 30%(如 42 格中 ≤ 12 格错误) | 逐格定向修补 |
227
+ | > 30% | 修改 prompt → 重新核查 → 重新全量生成 |
228
+
229
+ ### 定向修补流程
230
+
231
+ ```bash
232
+ # 用整张 sheet 作为 reference-image,保证修补格与其他格风格一致
233
+ playcraft tools generate-image \
234
+ --prompt "Single [ELEMENT_TYPE]: [错误格子的详细描述,从原 prompt Element Set 段摘取]. Same art style as reference. On solid [BG_COLOR] background. Centered in frame." \
235
+ --reference-image assets/images/[type]/spritesheet_[type].png \
236
+ --output ta-workspace/tmp/fix_[element_id].png \
237
+ --image-size 1K \
238
+ --image-model gpt-image-2
239
+ ```
240
+
241
+ **修补后**:resize 到 cellW×cellH → 替换到最终切割输出中(不修改原 sheet 文件):
242
+
243
+ ```bash
244
+ playcraft image resize \
245
+ --input ta-workspace/tmp/fix_[element_id].png \
246
+ --width [cellW] --height [cellH] \
247
+ --output assets/images/[type]/tile_[element_id].png
248
+ ```
249
+
250
+ ---
251
+
252
+ ## 6. 切割 + 替换 + 验证
253
+
254
+ ### 切割脚本模板
255
+
256
+ ```javascript
257
+ // ta-workspace/scripts/split-spritesheet.mjs
258
+ import { execSync } from "child_process";
259
+ import { existsSync, mkdirSync } from "fs";
260
+
261
+ const CONFIG = {
262
+ input: "assets/images/tiles/spritesheet_mahjong.png",
263
+ outputDir: "assets/images/tiles/",
264
+ cols: 7,
265
+ rows: 6,
266
+ cellW: 80,
267
+ cellH: 100,
268
+ gap: 10,
269
+ names: [
270
+ "1wan",
271
+ "2wan",
272
+ "3wan",
273
+ "4wan",
274
+ "5wan",
275
+ "6wan",
276
+ "7wan",
277
+ "8wan",
278
+ "9wan",
279
+ "1tiao",
280
+ "2tiao",
281
+ "3tiao",
282
+ "4tiao",
283
+ "5tiao",
284
+ "6tiao",
285
+ "7tiao",
286
+ "8tiao",
287
+ "9tiao",
288
+ "1tong",
289
+ "2tong",
290
+ "3tong",
291
+ "4tong",
292
+ "5tong",
293
+ "6tong",
294
+ "7tong",
295
+ "8tong",
296
+ "9tong",
297
+ "east",
298
+ "south",
299
+ "west",
300
+ "north",
301
+ "red_dragon",
302
+ "green_dragon",
303
+ "white_dragon",
304
+ "spring",
305
+ "summer",
306
+ "autumn",
307
+ "winter",
308
+ "plum",
309
+ "orchid",
310
+ "bamboo",
311
+ "chrysanthemum",
312
+ ],
313
+ };
314
+
315
+ mkdirSync(CONFIG.outputDir, { recursive: true });
316
+
317
+ for (let row = 0; row < CONFIG.rows; row++) {
318
+ for (let col = 0; col < CONFIG.cols; col++) {
319
+ const idx = row * CONFIG.cols + col;
320
+ if (idx >= CONFIG.names.length) break;
321
+
322
+ const x = col * (CONFIG.cellW + CONFIG.gap);
323
+ const y = row * (CONFIG.cellH + CONFIG.gap);
324
+ const name = CONFIG.names[idx];
325
+ const output = `${CONFIG.outputDir}tile_${name}.png`;
326
+
327
+ if (existsSync(output)) continue; // idempotent
328
+
329
+ execSync(
330
+ `playcraft image crop --input ${CONFIG.input} --x ${x} --y ${y} --width ${CONFIG.cellW} --height ${CONFIG.cellH} --output ${output}`,
331
+ );
332
+ console.log(`[${idx + 1}/${CONFIG.names.length}] ${output}`);
333
+ }
334
+ }
335
+ console.log("Done. Split complete.");
336
+ ```
337
+
338
+ ### 替换修补格
339
+
340
+ ```bash
341
+ # 修补的格子直接覆盖切割输出
342
+ cp ta-workspace/tmp/fix_east.png assets/images/tiles/tile_east.png
343
+ cp ta-workspace/tmp/fix_red_dragon.png assets/images/tiles/tile_red_dragon.png
344
+ ```
345
+
346
+ ### 最终验证
347
+
348
+ ```bash
349
+ # 逐文件检查尺寸一致
350
+ playcraft image info assets/images/tiles/tile_*.png
351
+
352
+ # 确认文件数量 = Element Set 清单数量
353
+ ls assets/images/tiles/tile_*.png | wc -l
354
+ ```
355
+
356
+ ---
357
+
358
+ ## 7. 完整示例:麻将 42-tile Sprite Sheet
359
+
360
+ ### Define
361
+
362
+ ```
363
+ 总元素数: 42
364
+ 网格布局: 7 cols × 6 rows = 42 cells (all used)
365
+ 单格尺寸: 80×100 px
366
+ Gap: 10 px
367
+ 画布尺寸: 7×80 + 6×10 = 620 → aligned 624 | 6×100 + 5×10 = 650 → aligned 656
368
+ 最终: 624×656 px
369
+ 背景: #00FF00 (green-screen)
370
+ 模型: gpt-image-2
371
+ 参考图: assets/images/storyboard/master_composite.png
372
+ ```
373
+
374
+ ### Prompt
375
+
376
+ ```
377
+ Scene: pure green background (#00FF00) for easy keying.
378
+
379
+ Canvas: a strict 6-row by 7-column spritesheet.
380
+ Final canvas size: 624×656 pixels (both multiples of 16).
381
+ Each tile is exactly 80 pixels wide and 100 pixels tall.
382
+ Horizontal and vertical gaps between tiles: 10 pixels.
383
+ All rows are left-aligned.
384
+
385
+ Tile set: all 42 standard Mahjong tiles, each appearing exactly once, arranged in the following order:
386
+ - Row 1: 1wan (一萬), 2wan (二萬), 3wan (三萬), 4wan (四萬), 5wan (五萬), 6wan (六萬), 7wan (七萬)
387
+ - Row 2: 8wan (八萬), 9wan (九萬), 1tiao (一條), 2tiao (二條), 3tiao (三條), 4tiao (四條), 5tiao (五條)
388
+ - Row 3: 6tiao (六條), 7tiao (七條), 8tiao (八條), 9tiao (九條), 1tong (一筒), 2tong (二筒), 3tong (三筒)
389
+ - Row 4: 4tong (四筒), 5tong (五筒), 6tong (六筒), 7tong (七筒), 8tong (八筒), 9tong (九筒), East wind (東)
390
+ - Row 5: South wind (南), West wind (西), North wind (北), Red dragon (中), Green dragon (發), White dragon (白), Spring (春)
391
+ - Row 6: Summer (夏), Autumn (秋), Winter (冬), Plum (梅), Orchid (蘭), Bamboo (竹), Chrysanthemum (菊)
392
+
393
+ Details:
394
+ - Every tile is identical in size (80×100 px) with 4px rounded corners and thin 1px dark border (#333333).
395
+ - Tile surface: brushed brass/bronze metallic texture with subtle reflections.
396
+ - Wan (萬) suit: Chinese numeral + "萬" character in dark red (#8B0000), traditional Kaiti calligraphy.
397
+ - Tiao (條) suit: stylized bamboo stalks in dark green (#1B5E20), count matches the number.
398
+ - Tong (筒) suit: ornamental coin/circle patterns in dark green (#2E4E2E) with concentric ring detail.
399
+ - Wind tiles (東南西北): large bold Chinese character in dark ink (#1A1A1A), centered.
400
+ - Dragon tiles: 中=red character on tile, 發=green character on tile, 白=blank/framed tile.
401
+ - Flower/Season tiles (春夏秋冬梅蘭竹菊): small botanical/seasonal illustration + Chinese character label at top.
402
+ - Art style: Chinese traditional aesthetic, elegant and clean, premium mobile game quality.
403
+
404
+ Constraints:
405
+ - No cast shadows behind tiles, no perspective distortion, no 3D rotation.
406
+ - No extra text, no labels outside tiles, no watermarks, no visible grid lines.
407
+ - No background texture — pure flat #00FF00.
408
+ - All Chinese characters must be sharp, legible, and correctly written (no garbled strokes).
409
+ - Strictly front-on orthographic view for all 42 tiles.
410
+ ```
411
+
412
+ ### 执行
413
+
414
+ ```bash
415
+ playcraft tools generate-image \
416
+ --prompt "<上述完整 prompt>" \
417
+ --output assets/images/tiles/spritesheet_mahjong.png \
418
+ --reference-image assets/images/storyboard/master_composite.png \
419
+ --image-size 1K \
420
+ --image-model gpt-image-2
421
+ ```
422
+
423
+ > 注:624×656 小于模型最小输出(~1024px),模型会自动适配。如需更高精度,可将单格放大到 540×540(画布 3840×3290)并使用 `--image-size 4K`。
@@ -0,0 +1,148 @@
1
+ ---
2
+ name: playcraft-storyboard
3
+ description: PlayCraft Master Composite 生成指南。5 格完整 9:16 H5 竖屏拼成一张审阅图(横排或网格均可)。Designer Phase 1 必读。
4
+ triggers: 故事板,storyboard,4帧,四帧,体验流,experience flow,合成图,composite,master composite,Hook场景,EndCard场景,故事板生成,storyboard generation,gameplay flow visual,concept panel,5面板
5
+ ---
6
+
7
+ # PlayCraft Master Composite 生成指南
8
+
9
+ ## 0. 核心尺寸原则(只看比例)
10
+
11
+ **每一格 = 一张完整 H5 竖屏,宽高比固定 9:16**(与 `layout-spec.md` 的 1080×1920 一致)。
12
+
13
+ **整张输出 = 5 张完整 H5 的拼接**——可以横排,也可以 2+3 网格等;**禁止**把 5 个竖屏塞进 1:1 / 3:2 画布导致单格变形。
14
+
15
+ ### 单格(H5 viewport)
16
+
17
+ | 字段 | 值 |
18
+ | -------- | -------------------------- |
19
+ | 宽高比 | **9:16**(宽/高 = 0.5625) |
20
+ | 合约参考 | 1080 × 1920 |
21
+
22
+ ### 整图(5 格横排,默认布局)
23
+
24
+ ```
25
+ ┌────┬────┬────┬────┬────┐
26
+ │9:16│9:16│9:16│9:16│9:16│ 每格等宽等高,互不裁切
27
+ └────┴────┴────┴────┴────┘
28
+ 总宽高比 = 5×9 : 16 = 45:16 (≈ 2.81,不是 10:3,不是 1:1)
29
+ ```
30
+
31
+ | 档位 | 单格尺寸 | 整图尺寸(5 横排) |
32
+ | --------------- | -------------- | ------------------------------------------ |
33
+ | 推荐 2K | **720 × 1280** | **3600 × 1280** |
34
+ | 4K(长边≤4096) | **819 × 1455** | **4096 × 1455** |
35
+ | 合约 1:1 缩放 | 1080 × 1920 | 5400 × 1920(超 4K 宽,需 302 或接受缩小) |
36
+
37
+ > **已废弃**:720×1080(2:3)、3600×1080、`--aspect-ratio 10:3` — 单格不是 H5,会压扁/拉长。
38
+
39
+ ### 可选布局(仍是 5 张完整 9:16)
40
+
41
+ | 布局 | 整图宽×高(单格 W×H) | 说明 |
42
+ | -------------------- | --------------------- | ---------------------------------------- |
43
+ | **1×5 横排**(默认) | `5W × H` | Gate #2 审阅最常用 |
44
+ | 2+3 网格 | `3W × 2H` | 上行 2 屏、下行 3 屏;prompt 须写明 grid |
45
+ | 5×1 竖排 | `W × 5H` | 过高,一般不推荐(易超 4096 高) |
46
+
47
+ 选用非横排时,prompt 必须写清 **grid layout**,且 **each cell still 9:16 full mobile screen**。
48
+
49
+ ---
50
+
51
+ ## 1. 五格内容(Panel 1–5)
52
+
53
+ > **术语**(与 `docs/team/collaboration.md` 一致):**Panel 1 = concept panel**(Main Gameplay,含全部元素类型 + 静态文字 + 完整 UI,TA 主提取源);**Panels 2–5 = storyboard panels**(体验流分镜,Developer 对照)。
54
+
55
+ | # | 面板 | 用途 |
56
+ | --- | --------------------------------- | ------------------ |
57
+ | 1 | Main Gameplay (**concept panel**) | 完整游戏截屏 |
58
+ | 2 | Key Hook | 高光 / combo |
59
+ | 3 | Onboarding HUD | 教学引导 |
60
+ | 4 | End Card | 结算 + Install CTA |
61
+ | 5 | CTA Always Visible | 游戏中 CTA 常驻 |
62
+
63
+ ---
64
+
65
+ ## 2. Prompt 公式
66
+
67
+ ```
68
+ Mobile game UI contact sheet: exactly 5 separate complete portrait mobile game screens.
69
+
70
+ CRITICAL SIZE: Each of the 5 cells is a full 9:16 H5 playable viewport (same proportions as 1080x1920). Cells must NOT be stretched or squashed. Equal cell width and height.
71
+
72
+ Layout: [five equal panels in one horizontal row | OR 2+3 grid as specified].
73
+
74
+ Panel 1 '1. Main Gameplay': ...
75
+ Panel 2 '2. Key Hook': ...
76
+ Panel 3 '3. Onboarding HUD': ...
77
+ Panel 4 '4. End Card': ...
78
+ Panel 5 '5. CTA Always Visible': ...
79
+
80
+ [STYLE_KEYWORDS]. Thin dividers between cells only. Numbered label on top of each cell.
81
+ Total image exactly [3600] pixels wide by [1280] pixels tall (five 720x1280 cells in a row).
82
+ ```
83
+
84
+ **必须约束词**:
85
+
86
+ - `each cell is a full 9:16 H5 viewport` / `1080x1920 proportions`
87
+ - `equal cell width and height` / `NOT stretched`
88
+ - 总像素与布局一致(横排:`3600x1280` 或 `4096x1455`)
89
+
90
+ ---
91
+
92
+ ## 3. 生成命令
93
+
94
+ ```bash
95
+ playcraft tools generate-image \
96
+ --prompt "<Section 2>" \
97
+ --output assets/images/storyboard/master_composite_option_[N].png \
98
+ --image-model mulerouter/gpt-image-2 \
99
+ --aspect-ratio 45:16 \
100
+ --image-size 2K \
101
+ --width 3600 \
102
+ --height 1280
103
+ ```
104
+
105
+ > **必须**使用 `mulerouter/gpt-image-2`(或已配置的 `302/...`)。**禁止**裸 `gpt-image-2`——fallback 会先走 `iegg-litellm`,成功时只能出 **1536×1024**,五格竖屏会被压扁。CLI 会在保存后自动校验像素,不合格直接失败。
106
+
107
+ **4K 档**:`--image-size 4K --width 4096 --height 1455`
108
+
109
+ | 参数 | 要求 |
110
+ | ---------------------- | ----------------------------------------------------- |
111
+ | `--aspect-ratio` | **`45:16`**(5 个 9:16 横排);**禁止 `1:1`、`10:3`** |
112
+ | `--width` / `--height` | **3600×1280**(2K)或 **4096×1455**(4K) |
113
+ | `--image-model` | **`mulerouter/gpt-image-2`**(强制,勿用裸模型名) |
114
+
115
+ ### 生成后验收(强制)
116
+
117
+ ```bash
118
+ playcraft image info --input assets/images/storyboard/master_composite_option_A.png
119
+ ```
120
+
121
+ | 检查项 | 横排 2K | 横排 4K |
122
+ | --------------------- | ---------------------- | -------------------- |
123
+ | 总尺寸 | 3600×1280(±3%) | 4096×1455(±3%) |
124
+ | 总宽高比 width/height | **≈ 2.81**(45/16) | **≈ 2.81** |
125
+ | 单格推算 | 宽/5 : 高 ≈ **9:16** | 宽/5 : 高 ≈ **9:16** |
126
+ | 视觉 | 圆钮正圆、竖屏 UI 不扁 | 同左 |
127
+
128
+ 不合格(1024×1024、1:1、总比例≈3.33 等)→ **必须重生成**。
129
+
130
+ ---
131
+
132
+ ## 4. 核查清单
133
+
134
+ | # | 项 | 标准 |
135
+ | --- | --------------- | --------------------------- |
136
+ | 1 | 5 个 Panel 描述 | 完整 |
137
+ | 2 | 单格 9:16 | prompt + 像素双约束 |
138
+ | 3 | CLI | `45:16` + 成对 width/height |
139
+ | 4 | image info | 通过上表 |
140
+ | 5 | 方案数 | ≥2(designer.md) |
141
+
142
+ ---
143
+
144
+ ## 5. 进阶
145
+
146
+ > **Read `refs/designer-master-composite-recipes.md`**
147
+
148
+ > **TA 从 MC 拆层/抠图**:读 `playcraft-masking` skill(`decompose-layers` 整图分层 vs `segment`/`crop` 单元素)。