@playcraft/cli 0.0.40 → 0.0.42
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.
- package/README.md +66 -3
- package/dist/atom-plan/validate-atom-plan.js +298 -0
- package/dist/cli-root-help.js +1 -1
- package/dist/commands/3d.js +363 -0
- package/dist/commands/create.js +337 -0
- package/dist/commands/image.js +1337 -43
- package/dist/commands/recommend.js +1 -1
- package/dist/commands/remix.js +213 -0
- package/dist/commands/skills.js +1379 -0
- package/dist/commands/tools-3d.js +473 -0
- package/dist/commands/tools-generation.js +452 -0
- package/dist/commands/tools-project.js +400 -0
- package/dist/commands/tools-research.js +37 -0
- package/dist/commands/tools-research.test.js +216 -0
- package/dist/commands/tools-utils.js +183 -0
- package/dist/commands/tools.js +7 -616
- package/dist/config.js +2 -0
- package/dist/index.js +19 -1
- package/dist/utils/version-checker.js +8 -11
- package/package.json +9 -3
- package/project-template/.claude/agents/designer.md +120 -0
- package/project-template/.claude/agents/developer.md +124 -0
- package/project-template/.claude/agents/pm.md +164 -0
- package/project-template/.claude/agents/refs/README.md +73 -0
- package/project-template/.claude/agents/refs/designer-art-style-catalog.md +533 -0
- package/project-template/.claude/agents/refs/designer-color-audio-recipes.md +153 -0
- package/project-template/.claude/agents/refs/designer-deliverable-spec.md +191 -0
- package/project-template/.claude/agents/refs/designer-dimension-axis.md +27 -0
- package/project-template/.claude/agents/refs/designer-handoff-v2-checklist.md +68 -0
- package/project-template/.claude/agents/refs/designer-master-composite-recipes.md +208 -0
- package/project-template/.claude/agents/refs/designer-style-exploration-flow.md +37 -0
- package/project-template/.claude/agents/refs/developer-dev-handoff.md +109 -0
- package/project-template/.claude/agents/refs/developer-impl-cookbook.md +134 -0
- package/project-template/.claude/agents/refs/developer-phase1-flow.md +136 -0
- package/project-template/.claude/agents/refs/pm-workflow-detail.md +551 -0
- package/project-template/.claude/agents/refs/reviewer-convergence-eval.md +130 -0
- package/project-template/.claude/agents/refs/reviewer-six-dimension-eval.md +6 -0
- package/project-template/.claude/agents/refs/ta-3d-flip-recipe.md +85 -0
- package/project-template/.claude/agents/refs/ta-atlas-deliverable-standard.md +67 -0
- package/project-template/.claude/agents/refs/ta-batch-pipeline-recipes.md +120 -0
- package/project-template/.claude/agents/refs/ta-image-generation-detail.md +356 -0
- package/project-template/.claude/agents/refs/ta-image-ops-reference.md +495 -0
- package/project-template/.claude/agents/refs/ta-pipeline-cookbook.md +1108 -0
- package/project-template/.claude/agents/refs/ta-tools-reference.md +111 -0
- package/project-template/.claude/agents/refs/ta-vfx-preset-catalog.md +365 -0
- package/project-template/.claude/agents/reviewer.md +127 -0
- package/project-template/.claude/agents/technical-artist.md +122 -0
- package/project-template/.claude/hooks/README.md +44 -0
- package/project-template/.claude/hooks/validate-atom-plan.mjs +224 -0
- package/project-template/.claude/hooks/validate-workflow-stop.mjs +343 -0
- package/project-template/.claude/settings.json +36 -0
- package/project-template/.claude/settings.local.json +4 -0
- package/project-template/.claude/skills/playcraft-ad-psychology/SKILL.md +182 -0
- package/project-template/.claude/skills/playcraft-art-style-guide/SKILL.md +123 -0
- package/project-template/.claude/skills/playcraft-asset-state-sheet/SKILL.md +141 -0
- package/project-template/.claude/skills/playcraft-audio-generation/SKILL.md +280 -0
- package/project-template/.claude/skills/playcraft-batch-pipeline/SKILL.md +184 -0
- package/project-template/.claude/skills/playcraft-build-optimizer/SKILL.md +306 -0
- package/project-template/.claude/skills/playcraft-image-generation/SKILL.md +279 -0
- package/project-template/.claude/skills/playcraft-image-generation/reference/build-sprite-sheet.template.mjs +123 -0
- package/project-template/.claude/skills/playcraft-image-generation/reference/compare-style.template.mjs +254 -0
- package/project-template/.claude/skills/playcraft-image-generation/reference/gen-batch-sprite.template.mjs +235 -0
- package/project-template/.claude/skills/playcraft-image-generation/reference/gen-batch.template.mjs +97 -0
- package/project-template/.claude/skills/playcraft-image-generation/reference/gen-edit-variants.template.mjs +118 -0
- package/project-template/.claude/skills/playcraft-image-generation/reference/process-batch.template.mjs +137 -0
- package/project-template/.claude/skills/playcraft-image-generation/reference/prompt-cookbook.md +397 -0
- package/project-template/.claude/skills/playcraft-image-generation/reference/validate-sprite-sheet.template.mjs +296 -0
- package/project-template/.claude/skills/playcraft-image-ops/SKILL.md +122 -0
- package/project-template/.claude/skills/playcraft-masking/SKILL.md +373 -0
- package/project-template/.claude/skills/playcraft-research/SKILL.md +212 -0
- package/project-template/.claude/skills/playcraft-sprite-generation/SKILL.md +423 -0
- package/project-template/.claude/skills/playcraft-storyboard/SKILL.md +167 -0
- package/project-template/.claude/skills/playcraft-style-qa/SKILL.md +270 -0
- package/project-template/.claude/skills/playcraft-text-rendering/SKILL.md +236 -0
- package/project-template/.claude/skills/playcraft-vfx-animation/SKILL.md +130 -0
- package/project-template/.claude/skills/playcraft-workflow/SKILL.md +485 -0
- package/project-template/.claude/skills/playwright-cli/SKILL.md +390 -0
- package/project-template/.claude/skills/playwright-cli/references/element-attributes.md +23 -0
- package/project-template/.claude/skills/playwright-cli/references/playwright-tests.md +39 -0
- package/project-template/.claude/skills/playwright-cli/references/request-mocking.md +87 -0
- package/project-template/.claude/skills/playwright-cli/references/running-code.md +240 -0
- package/project-template/.claude/skills/playwright-cli/references/session-management.md +226 -0
- package/project-template/.claude/skills/playwright-cli/references/spec-driven-testing.md +312 -0
- package/project-template/.claude/skills/playwright-cli/references/storage-state.md +275 -0
- package/project-template/.claude/skills/playwright-cli/references/test-generation.md +138 -0
- package/project-template/.claude/skills/playwright-cli/references/tracing.md +142 -0
- package/project-template/.claude/skills/playwright-cli/references/video-recording.md +157 -0
- package/project-template/.cursor/hooks.json +17 -0
- package/project-template/.cursor/rules/playcraft-orchestrator.mdc +137 -0
- package/project-template/.cursor/rules/playcraft-subagent-boundary.mdc +18 -0
- package/project-template/CLAUDE.md +280 -0
- package/project-template/assets/audio/bgm/.gitkeep +0 -0
- package/project-template/assets/audio/sfx/.gitkeep +0 -0
- package/project-template/assets/bundles/.gitkeep +0 -0
- package/project-template/assets/images/bg/.gitkeep +0 -0
- package/project-template/assets/images/reference/.gitkeep +0 -0
- package/project-template/assets/images/storyboard/.gitkeep +0 -0
- package/project-template/assets/images/tiles/.gitkeep +0 -0
- package/project-template/assets/images/ui/.gitkeep +0 -0
- package/project-template/assets/images/vfx/.gitkeep +0 -0
- package/project-template/assets/models/.gitkeep +0 -0
- package/project-template/docs/team/agent-conduct.md +121 -0
- package/project-template/docs/team/agent-runtime-matrix.md +62 -0
- package/project-template/docs/team/atom-plan-format.md +105 -0
- package/project-template/docs/team/collaboration.md +297 -0
- package/project-template/docs/team/core-model.md +50 -0
- package/project-template/docs/team/platform-capabilities.md +15 -0
- package/project-template/docs/team/workflow-changelog.md +65 -0
- package/project-template/docs/team/workflow-consistency-checklist.md +140 -0
- package/project-template/game/config/.gitkeep +0 -0
- package/project-template/game/gameplay/.gitkeep +0 -0
- package/project-template/game/scenes/.gitkeep +0 -0
- package/project-template/logs/.gitkeep +0 -0
- package/project-template/ta-workspace/logs/.gitkeep +0 -0
- package/project-template/ta-workspace/scripts/.gitkeep +0 -0
- package/project-template/ta-workspace/tmp/.gitkeep +0 -0
- package/project-template/templates/atom-plan.template.json +26 -0
- package/project-template/templates/atom-plan.template.md +108 -0
- package/project-template/templates/design-brief.template.md +195 -0
- package/project-template/templates/design-lens-checklist.reference.md +117 -0
- package/project-template/templates/design-methodology.md +99 -0
- package/project-template/templates/designer-log.template.md +114 -0
- package/project-template/templates/developer-log.template.md +134 -0
- package/project-template/templates/five-axis-framework.md +186 -0
- package/project-template/templates/intent-clarifications.template.md +58 -0
- package/project-template/templates/layout-spec.template.md +146 -0
- package/project-template/templates/project-state.template.md +237 -0
- package/project-template/templates/review-report.template.md +91 -0
- package/project-template/templates/style-exploration.template.md +93 -0
- package/project-template/templates/ta-log.template.md +343 -0
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: playcraft-research
|
|
3
|
+
description: PlayCraft 网络研究协议。当本地 Skill 库不足以覆盖需求时触发——包括遇到陌生玩法机制、不熟悉的美术风格、特定音频类型、算法实现参考、需要图片参考等场景。使用 playcraft tools research / fetch-url / search-image 命令(统一鉴权,无需配置额外 key)直接搜索网络,将研究成果融入活 DAG。
|
|
4
|
+
triggers: 本地skill不够,没有现成skill,找不到参考,不了解这个风格,不熟悉这个玩法,陌生机制,需要调研,搜索参考,互联网搜索,研究,需要图片参考,找参考图,视觉参考
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# PlayCraft 网络研究协议
|
|
8
|
+
|
|
9
|
+
## 可用工具(统一鉴权,无需额外配置)
|
|
10
|
+
|
|
11
|
+
使用 PlayCraft CLI 提供的三个搜索工具:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
# 文本研究 — Gemini + Google Search grounding,返回综合答案 + 引用来源
|
|
15
|
+
playcraft tools research --query "<问题>" [--focus <领域>] [--json]
|
|
16
|
+
|
|
17
|
+
# 读取 URL — Gemini 理解指定页面内容,返回结构化摘要
|
|
18
|
+
playcraft tools fetch-url --url "<URL>" [--query "<具体问题>"] [--json]
|
|
19
|
+
|
|
20
|
+
# 图片搜索 — Unsplash / Pexels 高质量图库,返回可直接用于 --reference-image 的 URL
|
|
21
|
+
playcraft tools search-image --query "<关键词(建议英文)>" [--source unsplash|pexels|auto] [--count 6] [--orientation landscape|portrait|square] [--json]
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
`--focus` 参数(research 命令):`gameplay` | `visual` | `audio` | `code` | `compliance`
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## 何时使用网络研究
|
|
29
|
+
|
|
30
|
+
**先本地,再网络**。网络研究是本地 Skill 发现的补充,不是替代。
|
|
31
|
+
|
|
32
|
+
| 场景 | 应做什么 |
|
|
33
|
+
|---|---|
|
|
34
|
+
| `playcraft skills match` 完整匹配 | 直接用,无需研究 |
|
|
35
|
+
| 部分匹配,缺少细节 | 用本地 Skill,补充网络研究缺失部分 |
|
|
36
|
+
| 完全无匹配 | **触发 `research` 文本研究** |
|
|
37
|
+
| 遇到陌生专业名词 | **触发 `research` 文本研究** |
|
|
38
|
+
| 需要最新数据(2024+ 最佳实践) | **触发 `research` 文本研究** |
|
|
39
|
+
| 需要视觉参考图(Phase 1 概念图 / 风格探索) | **触发 `search-image` 图片搜索** |
|
|
40
|
+
| 生成后不满意,想用参考图引导风格 | **触发 `search-image` → 结果 URL 直接传 `--reference-image`** |
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## 各角色研究标准流程
|
|
45
|
+
|
|
46
|
+
### PM — 玩法机制调研
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
# 理解陌生的玩法类型
|
|
50
|
+
playcraft tools research \
|
|
51
|
+
--query "match-3 mobile game level design best practices difficulty curve" \
|
|
52
|
+
--focus gameplay --json
|
|
53
|
+
|
|
54
|
+
# 了解可玩广告设计原则
|
|
55
|
+
playcraft tools research \
|
|
56
|
+
--query "playable ad game mechanics player retention 15 seconds hook" \
|
|
57
|
+
--focus gameplay --json
|
|
58
|
+
|
|
59
|
+
# 读取具体设计文章
|
|
60
|
+
playcraft tools fetch-url \
|
|
61
|
+
--url "https://www.gamedeveloper.com/design/..." \
|
|
62
|
+
--query "what are the key level design parameters"
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### Designer — 视觉/音频风格调研
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
# 搜索艺术风格生成参数
|
|
69
|
+
playcraft tools research \
|
|
70
|
+
--query "pixel art 8-bit game sprite limited color palette generation prompt keywords" \
|
|
71
|
+
--focus visual --json
|
|
72
|
+
|
|
73
|
+
# 读取调色板数据库
|
|
74
|
+
playcraft tools fetch-url \
|
|
75
|
+
--url "https://lospec.com/palette-list/..." \
|
|
76
|
+
--query "what are the exact hex colors and style characteristics"
|
|
77
|
+
|
|
78
|
+
# 搜索音频风格
|
|
79
|
+
playcraft tools research \
|
|
80
|
+
--query "chiptune BGM game music BPM range instruments characteristics" \
|
|
81
|
+
--focus audio --json
|
|
82
|
+
|
|
83
|
+
# ── 图片搜索(新增)─────────────────────────────────────────────────────────
|
|
84
|
+
|
|
85
|
+
# 搜索视觉参考图(用于 Phase 1 风格探索)
|
|
86
|
+
playcraft tools search-image \
|
|
87
|
+
--query "pixel art 8-bit forest game background" \
|
|
88
|
+
--source pexels --orientation portrait --json
|
|
89
|
+
|
|
90
|
+
# 搜索元素参考图(用于指导具体 asset 生成)
|
|
91
|
+
playcraft tools search-image \
|
|
92
|
+
--query "cute cartoon fruit character icon game UI" \
|
|
93
|
+
--count 4 --json
|
|
94
|
+
|
|
95
|
+
# 将搜索结果 URL 直接用作参考图(无需先下载)
|
|
96
|
+
playcraft tools generate-image \
|
|
97
|
+
--prompt "pixel art forest background, 8-bit style, limited color palette" \
|
|
98
|
+
--reference-image "https://images.unsplash.com/photo-xxxxx" \
|
|
99
|
+
--output assets/images/bg/background.png \
|
|
100
|
+
--aspect-ratio 9:16
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
> **关键提示**:`search-image` 返回的 `downloadUrl` 字段可直接传给 `--reference-image`,CLI 会自动下载,无需手动保存。`--json` 模式返回结构化列表,方便批量选用。
|
|
104
|
+
|
|
105
|
+
### Developer — 算法/技术实现调研
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
# 搜索具体实现
|
|
109
|
+
playcraft tools research \
|
|
110
|
+
--query "A* pathfinding javascript tile map Phaser 3 implementation performance" \
|
|
111
|
+
--focus code --json
|
|
112
|
+
|
|
113
|
+
# 读取官方文档
|
|
114
|
+
playcraft tools fetch-url \
|
|
115
|
+
--url "https://phaser.io/docs/3.60.0/Phaser.Physics.html" \
|
|
116
|
+
--query "how does StaticGroup work with tilemap collision"
|
|
117
|
+
|
|
118
|
+
# 搜索性能优化
|
|
119
|
+
playcraft tools research \
|
|
120
|
+
--query "Phaser 3 60fps mobile performance sprite batch rendering optimization" \
|
|
121
|
+
--focus code --json
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### Reviewer — 质量标准调研
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
# 平台合规要求
|
|
128
|
+
playcraft tools research \
|
|
129
|
+
--query "Google Ads playable ad HTML5 policy requirements file size 2026" \
|
|
130
|
+
--focus compliance --json
|
|
131
|
+
|
|
132
|
+
# 读取最新政策文档
|
|
133
|
+
playcraft tools fetch-url \
|
|
134
|
+
--url "https://support.google.com/google-ads/answer/..." \
|
|
135
|
+
--query "what are the technical requirements for playable ads"
|
|
136
|
+
|
|
137
|
+
# 性能基准
|
|
138
|
+
playcraft tools research \
|
|
139
|
+
--query "web game 60fps performance budget mobile device HTML5 2025" \
|
|
140
|
+
--focus compliance --json
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## 研究结果融入活 DAG
|
|
146
|
+
|
|
147
|
+
研究结果**必须写入 `atom-plan.md`**,否则其他 Agent 无法从中受益。
|
|
148
|
+
|
|
149
|
+
### 写入格式
|
|
150
|
+
|
|
151
|
+
```markdown
|
|
152
|
+
<!-- 在对应 atom 的 Asset/Impl Skill Context 下 -->
|
|
153
|
+
|
|
154
|
+
### {{atom_id}} — {{slot_name}}
|
|
155
|
+
- **本地 Skill**:无匹配(playcraft skills match 返回 0 结果)
|
|
156
|
+
- **文本研究结论**(若执行了 research / fetch-url):
|
|
157
|
+
- 命令:`playcraft tools research --query "..." --focus visual --json`
|
|
158
|
+
- 核心发现:{{1-3 句话,具体且可操作}}
|
|
159
|
+
- 关键参数:{{数值、关键词、具体配置}}
|
|
160
|
+
- 引用来源:{{URL}}
|
|
161
|
+
- **图片参考**(若执行了 search-image):
|
|
162
|
+
- 命令:`playcraft tools search-image --query "..." --json`
|
|
163
|
+
- 选用图片:{{description}} — {{downloadUrl}}
|
|
164
|
+
- 使用方式:作为 `--reference-image` 传入生成命令
|
|
165
|
+
- **实现/生成决策**:{{基于研究的具体方案}}
|
|
166
|
+
- **候选新 Skill**:`{{建议名称}}.{{bundleType}}` — {{为什么值得沉淀}}
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
### 示例:Designer 研究波普艺术 + 搜图参考
|
|
170
|
+
|
|
171
|
+
```markdown
|
|
172
|
+
### bg_atom — 背景图层
|
|
173
|
+
- 本地 Skill:无匹配
|
|
174
|
+
- 文本研究结论:
|
|
175
|
+
- 命令:`playcraft tools research --query "pop art game sprite color palette" --focus visual --json`
|
|
176
|
+
- 核心发现:波普艺术使用 4-6 色高饱和调色板,粗黑轮廓线,网点图案填充
|
|
177
|
+
- 关键参数:饱和度 >80%,互补色对比,轮廓线 3-5px
|
|
178
|
+
- 引用来源:lospec.com/palette-list/pop-art
|
|
179
|
+
- 图片参考:
|
|
180
|
+
- 命令:`playcraft tools search-image --query "pop art colorful bold graphic background" --source unsplash --json`
|
|
181
|
+
- 选用图片:Bold geometric pop art composition — https://images.unsplash.com/photo-xxxxx
|
|
182
|
+
- 使用方式:`--reference-image "https://images.unsplash.com/photo-xxxxx"`
|
|
183
|
+
- 生成决策:
|
|
184
|
+
- prompt: "pop art style, bold black outlines, halftone dots, vivid colors, {{element}}"
|
|
185
|
+
- style: "vibrant, graphic, flat colors, 1960s comic style"
|
|
186
|
+
- reference: 上方 Unsplash URL(CLI 自动下载)
|
|
187
|
+
- 候选新 Skill:`pop_art_sprite.aiimage`
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
## "候选新 Skill" 贡献循环
|
|
193
|
+
|
|
194
|
+
每次网络研究形成可复用方案,在 `atom-plan.md` 的 **DAG Revisions** 标注:
|
|
195
|
+
|
|
196
|
+
```markdown
|
|
197
|
+
### Revision N — {{Agent}} (propose-skill)
|
|
198
|
+
- **atomId**: {{atom_id}}
|
|
199
|
+
- **reason**: 本地无 Skill,通过网络研究形成可复用方案
|
|
200
|
+
- **change**: 建议创建:`{{skill_name}}.{{bundleType}}` — {{描述}},来源:{{URL}}
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
---
|
|
204
|
+
|
|
205
|
+
## 研究质量检查
|
|
206
|
+
|
|
207
|
+
| 检查项 | 要求 |
|
|
208
|
+
|---|---|
|
|
209
|
+
| **来源可信度** | 优先官方文档、行业权威;引用来源来自 `--json` 输出的 `citations` 字段 |
|
|
210
|
+
| **信息时效** | 优先 2024-2026 年内容(在 query 中加年份可提高准确性) |
|
|
211
|
+
| **可操作性** | 结论必须直接用于生成参数或代码,不能泛泛而谈 |
|
|
212
|
+
| **与 StyleDirection 一致** | 视觉研究须与 design-brief 的 StyleDirection 对齐 |
|
|
@@ -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`。
|