@playcraft/cli 0.0.56 → 0.0.58

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 (228) hide show
  1. package/README.md +41 -26
  2. package/REMIX.md +17 -5
  3. package/dist/cli-root-help.js +1 -0
  4. package/dist/commands/build-all.js +10 -9
  5. package/dist/commands/build.js +13 -12
  6. package/dist/commands/create.js +26 -33
  7. package/dist/commands/platform-skills.generated.js +19 -0
  8. package/dist/commands/remix.js +48 -2
  9. package/dist/commands/skills.js +2 -0
  10. package/dist/commands/tools-generation.js +1 -1
  11. package/dist/commands/workspace-runtime.js +54 -0
  12. package/dist/index.js +3 -1
  13. package/dist/project-skills/commands.js +72 -0
  14. package/dist/project-skills/lifecycle.js +28 -0
  15. package/dist/project-skills/local-run.js +112 -0
  16. package/dist/project-skills/local-store.js +149 -0
  17. package/dist/project-skills/messages.js +72 -0
  18. package/dist/project-skills/reconcile.js +62 -0
  19. package/dist/project-skills/remote-cache.js +51 -0
  20. package/dist/project-skills/validation.js +19 -0
  21. package/dist/remix/clone.js +4 -1
  22. package/dist/remix/init-template.js +2 -0
  23. package/dist/remix/local-git.js +56 -0
  24. package/dist/remix/pull.js +66 -0
  25. package/dist/remix/push.js +90 -0
  26. package/dist/utils/agent-api-client.js +54 -17
  27. package/dist/utils/tool-operation-journal.js +54 -0
  28. package/dist/workspace-runtime/codex/app-server.js +395 -0
  29. package/dist/workspace-runtime/codex/config-toml.js +25 -0
  30. package/dist/workspace-runtime/codex/jsonrpc-stdio.js +106 -0
  31. package/dist/workspace-runtime/codex/loopback.js +59 -0
  32. package/dist/workspace-runtime/codex/native-adapter.js +3 -0
  33. package/dist/workspace-runtime/main.js +10 -0
  34. package/dist/workspace-runtime/persistence/journal.js +350 -0
  35. package/dist/workspace-runtime/processes/managed-writes.js +69 -0
  36. package/dist/workspace-runtime/serve.js +111 -0
  37. package/dist/workspace-runtime/server/auth.js +21 -0
  38. package/dist/workspace-runtime/server/dispatch.js +861 -0
  39. package/dist/workspace-runtime/server/execution-group.js +88 -0
  40. package/dist/workspace-runtime/server/http.js +561 -0
  41. package/dist/workspace-runtime/server/lock.js +53 -0
  42. package/dist/workspace-runtime/server/types.js +1 -0
  43. package/dist/workspace-runtime/workspaces/context-error.js +2 -0
  44. package/dist/workspace-runtime/workspaces/file-snapshot.js +213 -0
  45. package/dist/workspace-runtime/workspaces/files.js +143 -0
  46. package/dist/workspace-runtime/workspaces/git.js +242 -0
  47. package/dist/workspace-runtime/workspaces/json5-edit.js +170 -0
  48. package/dist/workspace-runtime/workspaces/parameters.js +272 -0
  49. package/dist/workspace-runtime/workspaces/prepare.js +364 -0
  50. package/dist/workspace-runtime/workspaces/registry.js +107 -0
  51. package/dist/workspace-runtime/workspaces/revisions.js +31 -0
  52. package/package.json +6 -3
  53. package/project-template-v2/.claude/agents/artist.md +82 -0
  54. package/project-template-v2/.claude/agents/developer.md +153 -0
  55. package/project-template-v2/.claude/agents/game-designer.md +264 -0
  56. package/project-template-v2/.claude/agents/refs/artist-art-style-catalog.md +533 -0
  57. package/project-template-v2/.claude/agents/refs/artist-color-audio-recipes.md +153 -0
  58. package/project-template-v2/.claude/agents/refs/artist-dimension-axis.md +27 -0
  59. package/project-template-v2/.claude/agents/refs/artist-master-composite-recipes.md +208 -0
  60. package/project-template-v2/.claude/agents/refs/atom-skill-library.md +81 -0
  61. package/project-template-v2/.claude/agents/refs/developer-impl-cookbook.md +432 -0
  62. package/project-template-v2/.claude/agents/refs/framework-5-component-filter.md +252 -0
  63. package/project-template-v2/.claude/agents/refs/framework-game-feel-juice.md +266 -0
  64. package/project-template-v2/.claude/agents/refs/framework-mda.md +147 -0
  65. package/project-template-v2/.claude/agents/refs/game-designer-gameplay-sufficiency.md +123 -0
  66. package/project-template-v2/.claude/agents/refs/ta-3d-flip-recipe.md +88 -0
  67. package/project-template-v2/.claude/agents/refs/ta-atlas-deliverable-standard.md +67 -0
  68. package/project-template-v2/.claude/agents/refs/ta-batch-pipeline-recipes.md +120 -0
  69. package/project-template-v2/.claude/agents/refs/ta-image-generation-detail.md +300 -0
  70. package/project-template-v2/.claude/agents/refs/ta-image-ops-reference.md +495 -0
  71. package/project-template-v2/.claude/agents/refs/ta-pipeline-cookbook.md +1141 -0
  72. package/project-template-v2/.claude/agents/refs/ta-tools-reference.md +111 -0
  73. package/project-template-v2/.claude/agents/refs/ta-vfx-preset-catalog.md +365 -0
  74. package/project-template-v2/.claude/agents/refs/threejs-cannon-pitfalls.md +412 -0
  75. package/project-template-v2/.claude/agents/reviewer.md +75 -0
  76. package/project-template-v2/.claude/agents/technical-artist.md +86 -0
  77. package/project-template-v2/.claude/hooks/snapshot-milestone.mjs +243 -0
  78. package/project-template-v2/.claude/hooks/user-prompt.mjs +133 -0
  79. package/project-template-v2/.claude/settings.json +33 -0
  80. package/project-template-v2/.claude/skills/brainstorming/SKILL.md +161 -0
  81. package/project-template-v2/.claude/skills/brainstorming/scripts/frame-template.html +270 -0
  82. package/project-template-v2/.claude/skills/brainstorming/scripts/helper.js +177 -0
  83. package/project-template-v2/.claude/skills/brainstorming/scripts/server.cjs +354 -0
  84. package/project-template-v2/.claude/skills/brainstorming/scripts/start-server.sh +148 -0
  85. package/project-template-v2/.claude/skills/brainstorming/scripts/stop-server.sh +56 -0
  86. package/project-template-v2/.claude/skills/brainstorming/scripts/wait-for-selection.sh +62 -0
  87. package/project-template-v2/.claude/skills/brainstorming/spec-document-reviewer-prompt.md +49 -0
  88. package/project-template-v2/.claude/skills/brainstorming/visual-companion.md +309 -0
  89. package/project-template-v2/.claude/skills/playcraft-ad-psychology/SKILL.md +182 -0
  90. package/project-template-v2/.claude/skills/playcraft-art-style-guide/SKILL.md +123 -0
  91. package/project-template-v2/.claude/skills/playcraft-asset-state-sheet/SKILL.md +205 -0
  92. package/project-template-v2/.claude/skills/playcraft-audio-generation/SKILL.md +280 -0
  93. package/project-template-v2/.claude/skills/playcraft-batch-pipeline/SKILL.md +184 -0
  94. package/project-template-v2/.claude/skills/playcraft-build-optimizer/SKILL.md +306 -0
  95. package/project-template-v2/.claude/skills/playcraft-image-generation/SKILL.md +298 -0
  96. package/project-template-v2/.claude/skills/playcraft-image-generation/reference/build-sprite-sheet.template.mjs +123 -0
  97. package/project-template-v2/.claude/skills/playcraft-image-generation/reference/compare-style.template.mjs +254 -0
  98. package/project-template-v2/.claude/skills/playcraft-image-generation/reference/gen-batch-sprite.template.mjs +324 -0
  99. package/project-template-v2/.claude/skills/playcraft-image-generation/reference/gen-batch.template.mjs +97 -0
  100. package/project-template-v2/.claude/skills/playcraft-image-generation/reference/gen-edit-variants.template.mjs +118 -0
  101. package/project-template-v2/.claude/skills/playcraft-image-generation/reference/process-batch.template.mjs +137 -0
  102. package/project-template-v2/.claude/skills/playcraft-image-generation/reference/prompt-cookbook.md +397 -0
  103. package/project-template-v2/.claude/skills/playcraft-image-generation/reference/validate-sprite-sheet.template.mjs +296 -0
  104. package/project-template-v2/.claude/skills/playcraft-image-ops/SKILL.md +122 -0
  105. package/project-template-v2/.claude/skills/playcraft-image-processing/SKILL.md +219 -0
  106. package/project-template-v2/.claude/skills/playcraft-masking/SKILL.md +373 -0
  107. package/project-template-v2/.claude/skills/playcraft-playable-optimization/SKILL.md +161 -0
  108. package/project-template-v2/.claude/skills/playcraft-research/SKILL.md +215 -0
  109. package/project-template-v2/.claude/skills/playcraft-skill-recommender/SKILL.md +382 -0
  110. package/project-template-v2/.claude/skills/playcraft-sprite-generation/SKILL.md +423 -0
  111. package/project-template-v2/.claude/skills/playcraft-sprite-remix/SKILL.md +158 -0
  112. package/project-template-v2/.claude/skills/playcraft-sprite-sheet/SKILL.md +100 -0
  113. package/project-template-v2/.claude/skills/playcraft-storyboard/SKILL.md +167 -0
  114. package/project-template-v2/.claude/skills/playcraft-style-qa/SKILL.md +270 -0
  115. package/project-template-v2/.claude/skills/playcraft-text-rendering/SKILL.md +236 -0
  116. package/project-template-v2/.claude/skills/playcraft-vfx-animation/SKILL.md +130 -0
  117. package/project-template-v2/.claude/skills/playwright-cli/SKILL.md +390 -0
  118. package/project-template-v2/.claude/skills/playwright-cli/references/element-attributes.md +23 -0
  119. package/project-template-v2/.claude/skills/playwright-cli/references/playwright-tests.md +39 -0
  120. package/project-template-v2/.claude/skills/playwright-cli/references/request-mocking.md +87 -0
  121. package/project-template-v2/.claude/skills/playwright-cli/references/running-code.md +240 -0
  122. package/project-template-v2/.claude/skills/playwright-cli/references/session-management.md +226 -0
  123. package/project-template-v2/.claude/skills/playwright-cli/references/spec-driven-testing.md +308 -0
  124. package/project-template-v2/.claude/skills/playwright-cli/references/storage-state.md +275 -0
  125. package/project-template-v2/.claude/skills/playwright-cli/references/test-generation.md +134 -0
  126. package/project-template-v2/.claude/skills/playwright-cli/references/tracing.md +142 -0
  127. package/project-template-v2/.claude/skills/playwright-cli/references/video-recording.md +153 -0
  128. package/project-template-v2/.claude/skills/session-analyzer/SKILL.md +386 -0
  129. package/project-template-v2/.claude/skills/session-analyzer/scripts/execution-breakdown.mjs +182 -0
  130. package/project-template-v2/.claude/skills/session-analyzer/scripts/find-turns.mjs +72 -0
  131. package/project-template-v2/.claude/skills/session-analyzer/scripts/heavy-output.mjs +121 -0
  132. package/project-template-v2/.claude/skills/session-analyzer/scripts/resolve-session.mjs +102 -0
  133. package/project-template-v2/.claude/skills/session-analyzer/scripts/subagent-stats.mjs +127 -0
  134. package/project-template-v2/.claude/skills/session-analyzer/scripts/subagent-tool-timeline.mjs +106 -0
  135. package/project-template-v2/.claude/skills/session-analyzer/scripts/time-gaps.mjs +128 -0
  136. package/project-template-v2/.claude/skills/session-analyzer/scripts/turn-timeline.mjs +67 -0
  137. package/project-template-v2/.claude/snapshot.mjs +263 -0
  138. package/project-template-v2/.playcraft/skills.lock.json +152 -0
  139. package/project-template-v2/CLAUDE.md +146 -0
  140. package/project-template-v2/assets/audio/bgm/.gitkeep +0 -0
  141. package/project-template-v2/assets/audio/sfx/.gitkeep +0 -0
  142. package/project-template-v2/assets/bundles/.gitkeep +0 -0
  143. package/project-template-v2/assets/images/bg/.gitkeep +0 -0
  144. package/project-template-v2/assets/images/reference/.gitkeep +0 -0
  145. package/project-template-v2/assets/images/storyboard/.gitkeep +0 -0
  146. package/project-template-v2/assets/images/tiles/.gitkeep +0 -0
  147. package/project-template-v2/assets/images/ui/.gitkeep +0 -0
  148. package/project-template-v2/assets/images/vfx/.gitkeep +0 -0
  149. package/project-template-v2/assets/models/.gitkeep +0 -0
  150. package/project-template-v2/docs/harness/iteration-1/context-flow.md +254 -0
  151. package/project-template-v2/docs/harness/iteration-1/generate-flow.md +91 -0
  152. package/project-template-v2/docs/harness/iteration-1/ideate-flow.md +214 -0
  153. package/project-template-v2/docs/harness/iteration-1/optimize-flow.md +75 -0
  154. package/project-template-v2/docs/harness/iteration-1/wrapup-flow.md +63 -0
  155. package/project-template-v2/docs/harness/iteration-2/context-flow.md +223 -0
  156. package/project-template-v2/docs/harness/iteration-2/generate-flow.md +129 -0
  157. package/project-template-v2/docs/harness/iteration-2/ideate-flow.md +267 -0
  158. package/project-template-v2/docs/harness/iteration-2/optimize-flow.md +164 -0
  159. package/project-template-v2/docs/harness/iteration-2/wrapup-flow.md +115 -0
  160. package/project-template-v2/docs/harness/orchestrator-flow.md +364 -0
  161. package/project-template-v2/docs/project-state.json +60 -0
  162. package/project-template-v2/docs/project-state.md +72 -0
  163. package/project-template-v2/docs/standards/README.md +225 -0
  164. package/project-template-v2/docs/standards/agent-behavior-standards.md +174 -0
  165. package/project-template-v2/docs/standards/artifacts/design-brief.md +19 -0
  166. package/project-template-v2/docs/standards/artifacts/design.md +22 -0
  167. package/project-template-v2/docs/standards/artifacts/game-code.md +41 -0
  168. package/project-template-v2/docs/standards/artifacts/todo-list.md +41 -0
  169. package/project-template-v2/docs/standards/iter1-agent-behavior-standards.md +343 -0
  170. package/project-template-v2/game/index.ts +18 -0
  171. package/project-template-v2/globals.d.ts +51 -0
  172. package/project-template-v2/index.css +34 -0
  173. package/project-template-v2/index.html +18 -0
  174. package/project-template-v2/main.ts +9 -0
  175. package/project-template-v2/package.json +46 -0
  176. package/project-template-v2/skills/_shared/scripts/dispatch-clear.mjs +31 -0
  177. package/project-template-v2/skills/_shared/scripts/dispatch-set.mjs +86 -0
  178. package/project-template-v2/skills/_shared/scripts/dod-check.mjs +153 -0
  179. package/project-template-v2/skills/_shared/scripts/handoff-append.mjs +70 -0
  180. package/project-template-v2/skills/_shared/scripts/lib/validator-artifacts.mjs +91 -0
  181. package/project-template-v2/skills/_shared/scripts/pipeline/dod-config.mjs +131 -0
  182. package/project-template-v2/skills/_shared/scripts/pipeline/index.mjs +80 -0
  183. package/project-template-v2/skills/_shared/scripts/pipeline/iteration-1-core.mjs +90 -0
  184. package/project-template-v2/skills/_shared/scripts/pipeline/iteration-2-wrap.mjs +93 -0
  185. package/project-template-v2/skills/_shared/scripts/pipeline/iteration-3-visual.mjs +23 -0
  186. package/project-template-v2/skills/_shared/scripts/render-project-state.mjs +230 -0
  187. package/project-template-v2/skills/_shared/scripts/state-advance-stage.mjs +58 -0
  188. package/project-template-v2/skills/_shared/scripts/state-get.mjs +339 -0
  189. package/project-template-v2/skills/_shared/scripts/state-handoff.mjs +39 -0
  190. package/project-template-v2/skills/_shared/scripts/state-set.mjs +94 -0
  191. package/project-template-v2/skills/_shared/scripts/state-store.mjs +783 -0
  192. package/project-template-v2/skills/_shared/scripts/todo-add.mjs +88 -0
  193. package/project-template-v2/skills/_shared/scripts/todo-get.mjs +130 -0
  194. package/project-template-v2/skills/_shared/scripts/todo-remove.mjs +33 -0
  195. package/project-template-v2/skills/_shared/scripts/todo-set.mjs +47 -0
  196. package/project-template-v2/skills/_shared/scripts/verify-asset-code-sync.mjs +268 -0
  197. package/project-template-v2/skills/_shared/scripts/verify-env.mjs +285 -0
  198. package/project-template-v2/skills/_shared/scripts/verify-placeholders.mjs +161 -0
  199. package/project-template-v2/skills/playable-autoplay/SKILL.md +176 -0
  200. package/project-template-v2/skills/playable-autoplay/agents/openai.yaml +4 -0
  201. package/project-template-v2/skills/playable-debug/SKILL.md +116 -0
  202. package/project-template-v2/skills/playable-debug/agents/openai.yaml +4 -0
  203. package/project-template-v2/skills/playable-debug/references/debug-config.md +40 -0
  204. package/project-template-v2/skills/playable-record/SKILL.md +140 -0
  205. package/project-template-v2/skills/playable-record/scripts/lib/dev-server.mjs +104 -0
  206. package/project-template-v2/skills/playable-record/scripts/lib/record-audio-bridge.js +141 -0
  207. package/project-template-v2/skills/playable-record/scripts/record-playable.mjs +425 -0
  208. package/project-template-v2/skills/playable-record/scripts/verify-contract.mjs +261 -0
  209. package/project-template-v2/skills/playable-record/scripts/verify-firstwin.mjs +398 -0
  210. package/project-template-v2/skills/playable-record/scripts/verify-fusion.mjs +322 -0
  211. package/project-template-v2/skills/playable-record/scripts/verify-lifecycle.mjs +105 -0
  212. package/project-template-v2/skills/playable-record/scripts/verify-vlm-video.mjs +230 -0
  213. package/project-template-v2/skills/playable-validate/SKILL.md +61 -0
  214. package/project-template-v2/skills/playable-validate/validation-rules.md +14 -0
  215. package/project-template-v2/skills/playable-verify-ui/SKILL.md +63 -0
  216. package/project-template-v2/skills/playable-verify-ui/scripts/lib/__init__.py +1 -0
  217. package/project-template-v2/skills/playable-verify-ui/scripts/lib/config_expr.js +218 -0
  218. package/project-template-v2/skills/playable-verify-ui/scripts/lib/node_utils.js +51 -0
  219. package/project-template-v2/skills/playable-verify-ui/scripts/lib/profile_loader.py +59 -0
  220. package/project-template-v2/skills/playable-verify-ui/scripts/lib/report.py +106 -0
  221. package/project-template-v2/skills/playable-verify-ui/scripts/lib/runtime_contract.js +116 -0
  222. package/project-template-v2/skills/playable-verify-ui/scripts/verify_fetch_antipatterns.py +59 -0
  223. package/project-template-v2/skills/playable-verify-ui/scripts/verify_hardcoded_layout.js +64 -0
  224. package/project-template-v2/skills/playable-verify-ui/scripts/verify_runtime_contract.js +58 -0
  225. package/project-template-v2/skills/playable-verify-ui/scripts/verify_text_overlap.py +333 -0
  226. package/project-template-v2/ta-workspace/scripts/.gitkeep +0 -0
  227. package/project-template-v2/tsconfig.json +20 -0
  228. package/project-template-v2/vite.config.ts +27 -0
@@ -0,0 +1,373 @@
1
+ ---
2
+ name: playcraft-masking
3
+ description: PlayCraft 蒙版与智能抠图完整指南。涵盖 decompose-layers(302 Qwen 整图分层)、segment(SAM3 语义分割)的文本/框选模式、mask+rgba 输出、remove-background 选型、蒙版合成与轮廓描边。TA 在处理抠图、蒙版或背景替换任务前必读。
4
+ triggers: 蒙版,mask,抠图,去背景,remove-background,语义分割,segment,SAM,SAM3,decompose-layers,图层分层,layered,背景替换,透明背景,RGBA,floodfill,ai抠图,轮廓描边,背景分离,foreground,主体提取
5
+ ---
6
+
7
+ # PlayCraft 蒙版与智能抠图完整指南
8
+
9
+ ## 0. 工具速查
10
+
11
+ | 工具 | 适用场景 | 速度 | 质量 |
12
+ | -------------------------------------- | ------------------------------------------------- | ---------------------- | -------------------- |
13
+ | `remove-background --method floodfill` | 纯色背景(绿幕、白底、渐变色) | 快(本地) | 中等,边缘较硬 |
14
+ | `remove-background --method ai` | 任意复杂背景 | 慢(调后端) | 高,支持半透明/毛发 |
15
+ | `decompose-layers` | **整图**拆成 N 个语义 RGBA 层(Master Composite) | 慢(302,约 1–2 分钟) | 高,全尺寸分层 PNG |
16
+ | `segment` | 按 prompt **指定对象**抠图/蒙版 | 慢(SAM3) | 最高,产出 mask+rgba |
17
+
18
+ **决策逻辑**:
19
+
20
+ ```
21
+ 要从整张合成稿一次性拆出背景/角色/UI 等多层?
22
+ ├─ 是 → decompose-layers(需 Admin 配置 302 API Key;本地图需公网 URL 或 --input HTTPS)
23
+ └─ 否 → 背景是纯色/绿幕?
24
+ ├─ 是 → remove-background --method floodfill
25
+ └─ 否 → 需要 mask 文件供后续合成?
26
+ ├─ 是 → segment(或已知位置用 crop)
27
+ └─ 否 → remove-background --method ai
28
+ ```
29
+
30
+ **decompose-layers vs segment**:
31
+
32
+ - **decompose-layers**:无 per-object prompt,自动分层;适合 Master Composite 拆解;**不能**指定「只要第 3 格 tile」。ASR 优先用 `crop`。
33
+ - **segment**:开放词汇或框选单个对象;适合精确蒙版;密集网格上**禁止**纯 text prompt(见下文 §2)。
34
+
35
+ ---
36
+
37
+ ## 1. decompose-layers — 302 Qwen 整图语义分层
38
+
39
+ 将整张图拆成 `num_layers` 张带透明通道的 PNG(默认 4 层),用于 Master Composite 元素提取(ASR 优先 crop,不用本命令)。
40
+
41
+ ```bash
42
+ playcraft image decompose-layers \
43
+ --input assets/images/storyboard/master_composite.png \
44
+ --output-dir ta-workspace/tmp/layers \
45
+ --num-layers 4 \
46
+ --prompt ""
47
+
48
+ # 输入已是公网 URL 时(推荐本地 dev)
49
+ playcraft image decompose-layers \
50
+ --input "https://example.com/composite.png" \
51
+ --output-dir ./layers-out
52
+ ```
53
+
54
+ **配置**:Admin → 系统 → AI → `provider=302`、`modelKind=image` + API Key(与 302 生图共用,**不必**单独添加 qwen-image-layered 模型项)。
55
+
56
+ **输出**:`layer_00.png` … `layer_{N-1}.png` + `decompose-layers-meta.json`。
57
+
58
+ ---
59
+
60
+ ## 2. remove-background — 去背景
61
+
62
+ ### Floodfill 模式(纯色背景)
63
+
64
+ ```bash
65
+ # 基础用法(默认 floodfill,去除纯色背景)
66
+ playcraft image remove-background \
67
+ --input assets/images/tiles/tile_greenscreen.png \
68
+ --output assets/images/tiles/tile_transparent.png
69
+
70
+ # 调整容差(--tolerance,默认 30)
71
+ # 值越高,容错越大(适合渐变背景或有噪点的纯色背景)
72
+ playcraft image remove-background \
73
+ --input assets/images/character/character_white_bg.png \
74
+ --output assets/images/character/character_transparent.png \
75
+ --method floodfill \
76
+ --tolerance 50
77
+
78
+ # 边缘平滑度(--edge-smooth,默认 2,最大有效 4)
79
+ # 值越高,边缘越柔和(减少锯齿)
80
+ playcraft image remove-background \
81
+ --input assets/images/tiles/tile_white.png \
82
+ --output assets/images/tiles/tile_clean.png \
83
+ --tolerance 30 \
84
+ --edge-smooth 3
85
+ ```
86
+
87
+ **Floodfill 参数说明**:
88
+
89
+ | 参数 | 默认值 | 说明 |
90
+ | --------------- | ------ | -------------------------------------------------- |
91
+ | `--tolerance` | 30 | 颜色容差(0-255):背景色在此范围内的像素都被去掉 |
92
+ | `--edge-smooth` | 2 | 边缘平滑(0-4):对边缘 alpha 做高斯平滑,减少锯齿 |
93
+
94
+ **什么时候调大 tolerance**:
95
+
96
+ - 白色背景但图中有浅色元素 → tolerance 太大会误删内容,建议 20-30
97
+ - 绿幕背景有轻微渐变 → 可试 40-60
98
+ - 背景有明显噪点 → 50+
99
+
100
+ ### AI 模式(复杂背景)
101
+
102
+ ```bash
103
+ playcraft image remove-background \
104
+ --input assets/images/character/character_scene.png \
105
+ --output assets/images/character/character_cutout.png \
106
+ --method ai \
107
+ --model small # small(快)或 medium(精细)
108
+
109
+ # 跳过 alpha 精化(更快,边缘稍粗)
110
+ playcraft image remove-background \
111
+ --input source.png \
112
+ --output output.png \
113
+ --method ai \
114
+ --no-refine
115
+ ```
116
+
117
+ **AI 模式 vs Floodfill 选型表**:
118
+
119
+ | 特征 | 选 floodfill | 选 ai |
120
+ | -------------------------------- | ------------ | ----- |
121
+ | 背景是纯色(绿、白、蓝) | 是 | — |
122
+ | 背景有复杂纹理/渐变/场景 | — | 是 |
123
+ | 角色有半透明部分(衣物、头发丝) | — | 是 |
124
+ | 需要快速批量处理 | 是 | — |
125
+ | 追求最高精度 | — | 是 |
126
+
127
+ ---
128
+
129
+ ## 3. segment — SAM3 语义分割
130
+
131
+ `segment` 调用后端 SAM3 模型,对图片中的对象进行精确语义分割,产出**蒙版文件**(mask)和**透明抠图**(rgba)。
132
+
133
+ **适用场景**:
134
+
135
+ - 需要精确 mask 文件供后续合成操作使用
136
+ - 从游戏截图中精确分离多个游戏元素
137
+ - 需要不规则形状的蒙版(圆形徽章、异形 UI 元素)
138
+
139
+ ### ⚠️ 模式选择决策(必读)
140
+
141
+ > **对网格/已知布局图(如 ASR state sheets、authoring sprite sheets),严禁使用纯 text prompt!**
142
+ >
143
+ > text prompt 在多元素密集图上歧义极大——SAM3 无法准确区分"整个 tile 方块"和"方块内的水果 icon"。
144
+
145
+ ```
146
+ 提取目标的位置已知或可计算?
147
+ ├─ 是(网格布局、规则排列)
148
+ │ → 优先 playcraft image crop(最可靠,零 AI 歧义)
149
+ │ → 次选 segment --boxes(需要精确蒙版时)
150
+ │
151
+ ├─ 位置大致可估、需要精确蒙版
152
+ │ → segment --boxes(用近似 bbox 框选)
153
+ │
154
+ └─ 位置完全未知、元素形状不规则
155
+ → segment --text(最后手段)
156
+ → prompt 必须极其具体,包含位置/颜色/上下文描述
157
+ ```
158
+
159
+ **常见错误示例**:
160
+
161
+ - ❌ `--text "apple tile icon"` → 可能只切出苹果水果,丢失 tile 方块底板
162
+ - ❌ `--text "panda character"` → 图上有 panda face tile + panda 角色,返回多个 instance
163
+ - ✅ `--boxes '[[50,50,450,450]]'` → 框选已知位置的完整元素
164
+ - ✅ `playcraft image crop --x 50 --y 50 --width 400 --height 400` → 零歧义直切
165
+
166
+ ### 文本提示模式(仅用于位置未知、元素分布不规则场景)
167
+
168
+ ```bash
169
+ # 用文字描述要提取的对象(仅适用于元素位置无法提前计算的场景)
170
+ playcraft image segment \
171
+ --input assets/images/screenshot.png \
172
+ --text "the main character" \
173
+ --output-dir assets/images/segment_output/
174
+
175
+ # 提取特定游戏元素
176
+ playcraft image segment \
177
+ --input assets/images/game_scene.png \
178
+ --text "the treasure chest" \
179
+ --output-dir /tmp/segment/
180
+ ```
181
+
182
+ **text prompt 最佳实践**:
183
+
184
+ - 描述要尽可能具体:加颜色、位置、完整性描述
185
+ - ✅ `"the complete rounded square tile with green apple in top-left area"`
186
+ - ❌ `"apple tile icon"`(歧义:是苹果本身?还是整个 tile 方块?)
187
+ - 返回多个 instance 时,不要盲目取 score 最高的——检查 bbox 尺寸是否合理
188
+
189
+ ### 框选模式(多对象精确分割)
190
+
191
+ ```bash
192
+ # --boxes 接受 JSON 数组,每个元素为 [x1, y1, x2, y2](左上角和右下角坐标)
193
+ playcraft image segment \
194
+ --input assets/images/game_scene.png \
195
+ --boxes '[[50, 100, 200, 300], [350, 150, 500, 400]]' \
196
+ --box-labels '["player", "enemy"]' \
197
+ --output-dir /tmp/segment/
198
+
199
+ # 单个框(无需 box-labels 时)
200
+ playcraft image segment \
201
+ --input assets/images/tile_sheet.png \
202
+ --boxes '[[0, 0, 128, 128]]' \
203
+ --output-dir /tmp/segment/
204
+ ```
205
+
206
+ ### 输出结构
207
+
208
+ `segment` 在 `--output-dir` 下生成:
209
+
210
+ ```
211
+ segment_output/
212
+ ├── 00_mask.png # 二值蒙版(白=前景,黑=背景)
213
+ ├── 00_rgba.png # 透明背景抠图(直接可用)
214
+ ├── 01_mask.png # 第二个对象的蒙版(若多框)
215
+ ├── 01_rgba.png # 第二个对象的透明抠图
216
+ └── segment-meta.json # 分割元数据(坐标、置信度等)
217
+ ```
218
+
219
+ ### 阈值调节(边缘精细度)
220
+
221
+ ```bash
222
+ # --threshold(默认 0.3):越低保留越多细节,但可能包含噪点
223
+ # 越高边缘越干净,但可能丢失细节(毛发、透明边缘)
224
+ playcraft image segment \
225
+ --input game_scene.png \
226
+ --text "the hero character" \
227
+ --threshold 0.2 \ # 较低:保留更多边缘细节
228
+ --output-dir /tmp/segment/
229
+
230
+ # --mask-threshold:后端蒙版生成阈值(高级参数)
231
+ playcraft image segment \
232
+ --input source.png \
233
+ --text "the dragon" \
234
+ --threshold 0.3 \
235
+ --mask-threshold 0.5 \
236
+ --output-dir /tmp/segment/
237
+ ```
238
+
239
+ ### 仅生成蒙版(不要 rgba)
240
+
241
+ ```bash
242
+ # --no-rgba:跳过 rgba 生成,只输出 mask(更快)
243
+ playcraft image segment \
244
+ --input source.png \
245
+ --text "the background elements" \
246
+ --no-rgba \
247
+ --output-dir /tmp/masks/
248
+ ```
249
+
250
+ ---
251
+
252
+ ## 4. 蒙版合成工作流
253
+
254
+ ### 工作流 A:换背景(最常用)
255
+
256
+ ```bash
257
+ # 1. 用 segment 提取角色(带透明背景)
258
+ playcraft image segment \
259
+ --input assets/images/character_with_bg.png \
260
+ --text "the game character" \
261
+ --output-dir /tmp/char_segment/
262
+ # → 产出 /tmp/char_segment/00_rgba.png
263
+
264
+ # 2. 用 overlay 把角色合成到新背景上
265
+ playcraft image overlay \
266
+ --base assets/images/bg/new_background.png \
267
+ --overlay /tmp/char_segment/00_rgba.png \
268
+ --output assets/images/character_on_new_bg.png \
269
+ --gravity center
270
+ ```
271
+
272
+ ### 工作流 B:多层合成(背景 + 角色 + UI)
273
+
274
+ ```bash
275
+ # 层1:基础背景
276
+ cp assets/images/bg/background.png /tmp/composite.png
277
+
278
+ # 层2:叠加角色(居中偏下)
279
+ playcraft image overlay \
280
+ --base /tmp/composite.png \
281
+ --overlay assets/images/character/character_transparent.png \
282
+ --output /tmp/composite.png \
283
+ --gravity south
284
+
285
+ # 层3:叠加 UI 层(顶部)
286
+ playcraft image overlay \
287
+ --base /tmp/composite.png \
288
+ --overlay assets/images/ui/hud_overlay.png \
289
+ --output assets/images/final_scene.png \
290
+ --gravity north
291
+ ```
292
+
293
+ ### 工作流 C:轮廓描边效果
294
+
295
+ 用蒙版制作发光轮廓描边:
296
+
297
+ ```bash
298
+ # 1. 提取蒙版
299
+ playcraft image segment \
300
+ --input assets/images/character.png \
301
+ --text "character" \
302
+ --output-dir /tmp/seg/
303
+
304
+ # 2. 把蒙版 tint 为描边颜色(金色)
305
+ playcraft image tint \
306
+ --input /tmp/seg/00_mask.png \
307
+ --output /tmp/outline_colored.png \
308
+ --color "#FFD700"
309
+
310
+ # 3. 扩大描边层(pad 向外扩 4px)
311
+ playcraft image pad \
312
+ --input /tmp/outline_colored.png \
313
+ --output /tmp/outline_padded.png \
314
+ --all 4
315
+
316
+ # 4. 叠回:描边层在底,原图在上
317
+ playcraft image overlay \
318
+ --base /tmp/outline_padded.png \
319
+ --overlay /tmp/seg/00_rgba.png \
320
+ --output assets/images/character_outlined.png \
321
+ --gravity center
322
+ ```
323
+
324
+ ### 工作流 D:批量替换素材背景
325
+
326
+ ```bash
327
+ # 对多张带绿幕背景的素材批量去背
328
+ for f in assets/images/raw/tile_*_greenscreen.png; do
329
+ name=$(basename "$f" _greenscreen.png)
330
+ playcraft image remove-background \
331
+ --input "$f" \
332
+ --output "assets/images/tiles/${name}.png" \
333
+ --method floodfill \
334
+ --tolerance 40
335
+ done
336
+ ```
337
+
338
+ ---
339
+
340
+ ## 5. 常见问题排查
341
+
342
+ ### 边缘有绿色/白色残留(floodfill)
343
+
344
+ ```bash
345
+ # 原因:tolerance 太低,部分背景像素未被删除
346
+ # 修复:适当提高 tolerance(每次 +10 尝试)
347
+ playcraft image remove-background \
348
+ --input source.png --output output.png \
349
+ --tolerance 50 # 从 30 提升到 50
350
+ ```
351
+
352
+ ### segment 分割到了错误的对象
353
+
354
+ ```bash
355
+ # 原因:文本提示不够精确
356
+ # 修复方案 1:更具体的描述
357
+ --text "the blue warrior character in the center" # 加颜色/位置描述
358
+
359
+ # 修复方案 2:改用框选模式,精确框出目标区域
360
+ --boxes '[[x1, y1, x2, y2]]' # 先用 playcraft image info 确认图片尺寸
361
+ ```
362
+
363
+ ### rgba 输出有半透明噪点
364
+
365
+ ```bash
366
+ # 原因:threshold 太低
367
+ # 修复:提高 threshold(从 0.3 到 0.5)
368
+ playcraft image segment \
369
+ --input source.png \
370
+ --text "target object" \
371
+ --threshold 0.5 \
372
+ --output-dir /tmp/seg/
373
+ ```
@@ -0,0 +1,161 @@
1
+ ---
2
+ name: playcraft-playable-optimization
3
+ description: >-
4
+ Loop 3 optimization toolkit for PlayCraft playable ads: video validate loop,
5
+ image validator, headed MP4 recording, FX/animation polish, and L→G focus
6
+ playground. Use during development ready-state, ui_review/ui_rework, and the
7
+ optional ring 4 deep optimization after final Ring Gate.
8
+ allowed-tools:
9
+ - Bash(npm run state:get:*)
10
+ - Bash(npm run ensure:project:*)
11
+ - Bash(npm run verify:ui:*)
12
+ - Bash(npm run record:mp4:*)
13
+ - Bash(npm run playground:*)
14
+ - Bash(npm run sweep:L1:*)
15
+ - Bash(npm run sweep:G1:*)
16
+ - Bash(npm run repack:frames:*)
17
+ - Read
18
+ - Write
19
+ - Edit
20
+ ---
21
+
22
+ # PlayCraft Playable Optimization Toolkit
23
+
24
+ Abbreviations used here: UI (User Interface, 用户界面), MP4 (MPEG-4 Part 14, 视频容器格式), FX (Effects, 特效), ASR (Asset State Reference, 资产状态参考).
25
+
26
+ > **定位**:PlayCraft 三 loop 中 **Loop 3(优化模板)** 的执行引擎。不改 PlayCraft 的 Agent 编排,只提供工具 + 调用协议。
27
+ >
28
+ > **给谁用**:Developer(build 收尾)、Reviewer(ring 4 verify / optional optimization)、Developer / TA / Artist(ui_diff 修复)。
29
+
30
+ ---
31
+
32
+ ## 起手式(每次调用前必做)
33
+
34
+ ```bash
35
+ npm run state:get -- --json
36
+ npm run ensure:project
37
+ ```
38
+
39
+ 先读 `state:get`,只运行 `nextCommands` / `currentRingVerifiers` 中已经披露的工具。`ensure:project` 只做目录、脚本和依赖准备,不代表当前 Ring 必须跑 UI / MP4 验证。
40
+
41
+ `ensure:project` 会:
42
+
43
+ - 检查/创建 `recordings/`、`validate/`、`focus-lab/`、`playground/`。
44
+ - 若无 `playable.ui.profile.yaml` 则从 template 复制一份。
45
+ - 合并 `package.json` scripts。
46
+ - 自动 `npm install` + `npx playwright install chromium`(首次)。
47
+
48
+ PlayCraft 是 **Vite** 项目,`ensure-project` 会检测到 `vite.config.ts` + 根目录 `index.html`,不会要求 `game/index.html`。
49
+
50
+ ---
51
+
52
+ ## 与 PlayCraft growth-rings 的接点
53
+
54
+ | iteration / loop | 谁调用 | 调用什么 | 产出 |
55
+ | ----------------------------- | ----------------------- | --------------------------------------------------------------- | ------------------------------ |
56
+ | ring 1 `loop: build`(收尾) | Developer | `state:get` 披露的 contract/lifecycle/firstwin | 轻量 HOOK 生命周期 + 首关可胜 |
57
+ | ring 2+ `loop: build`(收尾) | Developer | 仅运行 `state:get.nextCommands` 中的 `verify:ui` / `record:mp4` | 当前 Ring 证据 |
58
+ | ring 4 `loop: verify` | Reviewer | `verify:ui` → `playwright-cli` 截图 | asset/layout 先行拦截 |
59
+ | ring 4 verify ui_diff fail | Developer / TA / Artist | 读 `playable-validate` 子 skill 做最小 fix | 修复后重跑 verify + record |
60
+ | ring 4 optional optimization | Reviewer / Orchestrator | `playable-validate` loop | `validate/PLAYABLE-*.md` + MP4 |
61
+
62
+ ---
63
+
64
+ ## 一句话指令表
65
+
66
+ | 用户/Agent 意图 | 命令/入口 |
67
+ | ------------------------ | ----------------------------------------------------------------------------- |
68
+ | 查看当前可运行命令 | `npm run state:get -- --json` |
69
+ | 整片优化到可交付 | 读 `skills/playable-validate/SKILL.md` § Agent 入口 |
70
+ | 检查 UI / atlas / layout | 仅当 `state:get.nextCommands` 披露:`npm run verify:ui` |
71
+ | 录完整局 headed MP4 | 仅当 `state:get.nextCommands` 披露:`npm run record:mp4 -- --headed --fps=60` |
72
+ | 只录某个 focus zone | `npm run record:focus -- --scope=PHASE --fixture=endcard-win --headed` |
73
+ | 优化 match 碎裂 FX | 读 `skills/playable-fx-decompose/SKILL.md` |
74
+ | 优化帧光效 / burst | 读 `skills/playable-fx-peak/SKILL.md` |
75
+ | 优化动效手感 | 读 `skills/playable-animate/SKILL.md` |
76
+ | 局部 L→G 穷举 | `npm run sweep:L1` / `npm run sweep:G1` |
77
+
78
+ ---
79
+
80
+ ## Vite 项目注意事项
81
+
82
+ PlayCraft 项目用 Vite,`record:mp4` 默认脚本已经带了 `--use-dev --url=http://localhost:3000/`。只在当前 Ring 已披露 `record:mp4` 时运行:
83
+
84
+ ```bash
85
+ npm run record:mp4 -- --headed --fps=60
86
+ ```
87
+
88
+ 这会:
89
+
90
+ 1. 在当前目录启动 `npm run dev`。
91
+ 2. 等待 `http://localhost:3000/` 可访问。
92
+ 3. 用 Playwright 打开该 URL 并录制。
93
+
94
+ 如果 Vite 端口不是 3000,改 `package.json` 里的 `record:mp4` 脚本,或手动:
95
+
96
+ ```bash
97
+ # 终端 1
98
+ npm run dev
99
+
100
+ # 终端 2 / Agent
101
+ npm run record:mp4 -- --url=http://localhost:5173/ --headed --fps=60
102
+ ```
103
+
104
+ ---
105
+
106
+ ## 录制前提:游戏需暴露 harness 契约
107
+
108
+ Recorder / `verify:contract` 以 **`window.__playable`** 为 pass 标准(见 `game/contract/` + `publishPlayableRuntime()`):
109
+
110
+ ```js
111
+ window.__playable.autoPlay(); // 一键推进到 ENDCARD
112
+ window.__playable.getState(); // { currentPhase, isGameOver }
113
+ window.__playable.getCanvas?.(); // 可选,供录屏取 canvas
114
+ window.__playable.hideDebugUi?.(); // 可选,录屏前隐藏 debug UI
115
+ ```
116
+
117
+ `window.__game` 可保留为引擎句柄(如 Phaser.Game),但**不得**在其上挂载 `start` / `autoPlay` 等 harness 方法。
118
+
119
+ **Legacy 路径(仅 warn,2026-Q3 移除)**:旧项目若仍只暴露 `MainScene._onDebugAutoPlay()` + `sceneManager`,verify 仍可通过但会提示迁移到 `window.__playable`。
120
+
121
+ ---
122
+
123
+ ## 标准工作流(按 gate 披露执行)
124
+
125
+ ```
126
+ npm run state:get -- --json
127
+ npm run ensure:project
128
+ # Run only commands disclosed by state:get.nextCommands.
129
+ # Then review MP4 evidence, make the smallest fix, and rerun disclosed gates.
130
+ ```
131
+
132
+ ---
133
+
134
+ ## 输出规范
135
+
136
+ - MP4 证据:`recordings/playable-YYYYMMDD-HHmmss.mp4`
137
+ - 报告:`validate/PLAYABLE-YYYYMMDD-HHmmss.md`
138
+ - Focus 录屏:`recordings/focus/...`
139
+ - 给用户/ orchestrator:结论 + 证据路径 + 1–3 条 vs 基线
140
+
141
+ ---
142
+
143
+ ## 依赖
144
+
145
+ - Node.js 18+
146
+ - Python 3 + `pip install pyyaml jsonschema pillow`
147
+ - ffmpeg(`brew install ffmpeg`)
148
+ - Playwright Chromium(由 `ensure-project` 自动安装)
149
+
150
+ ---
151
+
152
+ ## 相关文件
153
+
154
+ - `skills/playable-validate/SKILL.md` — 整片优化主入口
155
+ - `skills/playable-verify-ui/SKILL.md` — Image Validator
156
+ - `skills/playable-record/SKILL.md` — 录屏
157
+ - `skills/playable-debug/SKILL.md` — 一键通关
158
+ - `skills/playable-fx-peak/SKILL.md` — 帧光效
159
+ - `skills/playable-fx-decompose/SKILL.md` — 碎裂
160
+ - `skills/playable-animate/SKILL.md` — 动效手感
161
+ - `skills/playable-focus/SKILL.md` — L→G playground