@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,122 @@
1
+ ---
2
+ name: playcraft-image-ops
3
+ description: TA 图形操作生产上下文指南。按可玩广告流水线阶段(提取/标准化/变换/合成/验证)组织 playcraft image 子命令,说明 WHEN 和 WHY 而非仅 HOW。完整 CLI 参数速查表见 refs/ta-image-ops-reference.md。
4
+ triggers: 裁剪,crop,叠图,合成,overlay,扩画布,pad,去白边,trim,旋转,rotate,翻转,flip,模糊,blur,色调,tint,灰度,grayscale,反色,negate,居中裁,等比裁,图层叠加,画布,像素级操作,图形处理,decompose-layers,图层分层,提取,extract
5
+ ---
6
+
7
+ # PlayCraft 图形操作 — 生产上下文指南
8
+
9
+ ## 0. 在流水线中的位置
10
+
11
+ 所有命令均为 `playcraft image <子命令>` 格式,基于 sharp 本地处理,无需后端。
12
+
13
+ ```
14
+ TA Production Pipeline:
15
+ Extract (从 Composite/ASR 提取)
16
+ -> decompose-layers (302 整图语义分层,Master Composite;见 playcraft-masking skill)
17
+ -> crop (ASR 网格 / 已知 bbox 的像素级裁切)
18
+ -> segment (SAM3 单对象蒙版,见 playcraft-masking skill)
19
+
20
+ Process (标准化处理)
21
+ -> trim (去除多余透明边)
22
+ -> resize (统一到 assetSpec 尺寸)
23
+ -> pad (补齐到等宽画布)
24
+ -> remove-background -> 见 playcraft-masking skill
25
+
26
+ Transform (变体生成)
27
+ -> flip horizontal (左右镜像,节省生成成本)
28
+ -> rotate (方向调整)
29
+ -> tint (色调变体 / 禁用状态)
30
+ -> grayscale (锁定 / 未解锁状态)
31
+
32
+ Compose (合成叠加)
33
+ -> overlay (多层合成:背景 + 角色 + UI)
34
+
35
+ Verify (验证)
36
+ -> info (检查尺寸 / 格式 / 文件大小)
37
+ -> convert (最终格式转换 -- 生产阶段保持 PNG)
38
+ ```
39
+
40
+ ---
41
+
42
+ ## 1. 按阶段命令速查
43
+
44
+ | Stage | Command | One-liner | Key Param |
45
+ | --------- | ------------------ | --------------------------------------------------------------------------------- | ---------------------------------- |
46
+ | Extract | `decompose-layers` | `playcraft image decompose-layers --input X --output-dir ./layers --num-layers 4` | 后端 302;`--input` 宜为 HTTPS URL |
47
+ | Extract | `crop` | `playcraft image crop --input X --output Y --x N --y N --width W --height H` | x,y = 左上角原点 |
48
+ | Process | `trim` | `playcraft image trim --input X --output Y --threshold 10` | threshold: 0-255 |
49
+ | Process | `resize` | `playcraft image resize --input X --output Y --width W --height H` | 或 `--scale 0.5` |
50
+ | Process | `pad` | `playcraft image pad --input X --output Y --all 16` | 或 --top/bottom/left/right |
51
+ | Transform | `flip` | `playcraft image flip --input X --output Y --direction horizontal` | horizontal / vertical |
52
+ | Transform | `rotate` | `playcraft image rotate --input X --output Y --angle 90` | 角度(顺时针),背景默认透明 |
53
+ | Transform | `tint` | `playcraft image tint --input X --output Y --color "#FFD700"` | hex 颜色值 |
54
+ | Transform | `grayscale` | `playcraft image grayscale --input X --output Y` | 无额外参数 |
55
+ | Compose | `overlay` | `playcraft image overlay --base BG --overlay FG --output Y --gravity center` | 或 --x --y 精确坐标 |
56
+ | Verify | `info` | `playcraft image info --input X` | --json 供脚本解析 |
57
+ | Verify | `convert` | `playcraft image convert --input X --output Y --format webp --quality 85` | 生产阶段保持 PNG |
58
+
59
+ **overlay gravity 值**:center(默认) / north / south / east / west / northeast / northwest / southeast / southwest。
60
+ 指定 --x + --y 时 gravity 被忽略,叠加图左上角放置在底图 (x, y) 坐标处。
61
+
62
+ ---
63
+
64
+ ## 2. 最常用配方
65
+
66
+ ### 配方 A:标准化精灵尺寸 (trim -> info -> pad)
67
+
68
+ **场景**:AI 生成或分割提取的素材尺寸不一,需要统一到 assetSpec 指定的画布大小。
69
+
70
+ ```bash
71
+ playcraft image trim --input raw_sprite.png --output /tmp/trimmed.png
72
+ playcraft image info --input /tmp/trimmed.png --json
73
+ # 根据 info 输出计算 pad 值:top/bottom = (目标高 - 当前高) / 2,left/right 同理
74
+ playcraft image pad --input /tmp/trimmed.png --output assets/images/tiles/sprite_128x128.png \
75
+ --top 8 --bottom 8 --left 16 --right 16
76
+ ```
77
+
78
+ **为什么这个顺序**:先 trim 去掉 AI 生成图的冗余透明边,再 pad 到精确尺寸。反过来做会把冗余透明边也算进画布。
79
+
80
+ ### 配方 B:多层合成 (overlay chain: bg -> character -> UI)
81
+
82
+ **场景**:将背景、角色、UI 元素按层合成为最终画面。Layout Spec 中的 composite 通常需要这个流程。
83
+
84
+ ```bash
85
+ playcraft image overlay --base assets/images/bg/background.png \
86
+ --overlay assets/images/character.png --output /tmp/step1.png --gravity center
87
+ playcraft image overlay --base /tmp/step1.png \
88
+ --overlay assets/images/ui/cta_button.png --output assets/images/final.png --gravity south
89
+ ```
90
+
91
+ **为什么逐层叠加**:overlay 每次只接受一个叠加层。从最底层开始,每一步的输出作为下一步的 base,保证 z-order 正确。
92
+
93
+ ### 配方 C:镜像动画帧 (flip horizontal)
94
+
95
+ **场景**:已有 run_right 动画序列帧,需要 run_left。翻转比重新生成节省时间和 API 调用。
96
+
97
+ ```bash
98
+ for f in assets/images/character/run_right_*.png; do
99
+ name=$(basename "$f" .png)
100
+ playcraft image flip --input "$f" \
101
+ --output "assets/images/character/${name/right/left}.png" \
102
+ --direction horizontal
103
+ done
104
+ ```
105
+
106
+ **为什么用 flip 而不重新生成**:AI 生成的镜像帧可能出现风格不一致,而 flip 保证像素级对称,且零 API 成本。
107
+
108
+ ---
109
+
110
+ ## 3. 关键注意事项
111
+
112
+ - **crop 不支持 batch**:`playcraft image batch --steps` 中 crop 会报 `unsupported command`。批量裁切用 for 循环或 Node.js 脚本。
113
+ - **生产阶段保持 PNG**:所有中间产物和最终资产用 PNG。WebP/AVIF 转换交给构建阶段 `playcraft build --convert-webp`。
114
+ - **tint 是混合不是替换**:深色图像 tint 效果弱,需要颜色替换时用 overlay + 纯色图层。
115
+ - **居中裁公式**:`x = (原图宽 - 目标宽) / 2`,`y = (原图高 - 目标高) / 2`(取整)。
116
+
117
+ ---
118
+
119
+ ## 4. 完整参考
120
+
121
+ 完整 CLI 参数速查表、所有 gravity 值、rotation 选项、滤镜命令(blur / negate)及更多组合配方:
122
+ 读取 `refs/ta-image-ops-reference.md`。
@@ -0,0 +1,219 @@
1
+ ---
2
+ name: playcraft-image-processing
3
+ description: 可玩广告流程步骤 6。对生成的图片进行后处理:缩放、裁剪、旋转、翻转、填充、格式转换、滤镜、合成等。所有操作通过 `playcraft image` CLI 命令在沙箱本地执行,无需 backend,速度快。
4
+ compatibility: agent,opencode
5
+ ---
6
+
7
+ ## Skill Definition
8
+
9
+ tools:
10
+
11
+ - bash
12
+ - read
13
+ prompt_extension: |
14
+ 你是图像处理工程师。不得向 /project/ 写入;所有输出路径必须在 ta-workspace(技术美术角色)。
15
+ 通过 bash 工具运行 `playcraft image <command>` CLI 命令进行图片处理,所有操作在沙箱本地执行,无需往返 backend。
16
+
17
+ ## 我做什么
18
+
19
+ - 对生成的图片进行后处理,使其符合游戏引擎和可玩广告的规格
20
+ - 支持:缩放、裁剪、旋转、翻转、填充边距、格式转换、灰度化、模糊、色调叠加、反色、图片合成、像素化、自动裁边
21
+
22
+ ## 何时用我
23
+
24
+ 当 `playcraft tools generate-image` 生成的图片需要进一步处理时:
25
+
26
+ - 尺寸不符合纹理要求(如需 2 的幂次、特定分辨率)
27
+ - 需要像素风效果
28
+ - 需要旋转/镜像翻转(如左右角色复用同一张图)
29
+ - 需要统一多帧尺寸后合并精灵图
30
+ - 需要格式转换(png → webp 优化体积)
31
+ - 需要裁掉透明边界、叠加合成等
32
+
33
+ ## 命令速查
34
+
35
+ 所有命令格式:`playcraft image <command> --input <路径> --output <路径> [选项]`
36
+
37
+ ### 几何变换
38
+
39
+ ```bash
40
+ # 缩放(支持比例或指定宽高)
41
+ playcraft image resize --input src.png --output out.png --scale 0.5
42
+ playcraft image resize --input src.png --output out.png --width 512 --height 512 --fit contain
43
+
44
+ # 裁剪(指定区域)
45
+ playcraft image crop --input src.png --output out.png --x 0 --y 0 --width 256 --height 256
46
+
47
+ # 旋转(任意角度,默认背景透明)
48
+ playcraft image rotate --input src.png --output out.png --angle 90
49
+ playcraft image rotate --input src.png --output out.png --angle 45 --background "#ffffff"
50
+
51
+ # 镜像翻转
52
+ playcraft image flip --input src.png --output out.png --direction horizontal
53
+ playcraft image flip --input src.png --output out.png --direction vertical
54
+
55
+ # 扩展画布/加边距(统一精灵尺寸常用)
56
+ playcraft image pad --input src.png --output out.png --all 16
57
+ playcraft image pad --input src.png --output out.png --top 8 --bottom 8 --left 0 --right 0
58
+
59
+ # 自动裁掉透明/纯色边界
60
+ playcraft image trim --input src.png --output out.png --threshold 10
61
+ ```
62
+
63
+ ### 格式与质量
64
+
65
+ ```bash
66
+ # 格式转换 + 压缩质量(png/jpg/webp/avif)
67
+ playcraft image convert --input src.png --output out.webp --quality 85
68
+ playcraft image convert --input src.jpg --output out.png
69
+ ```
70
+
71
+ ### 滤镜与色彩
72
+
73
+ ```bash
74
+ # 灰度化
75
+ playcraft image grayscale --input src.png --output out.png
76
+
77
+ # 高斯模糊(背景虚化等)
78
+ playcraft image blur --input src.png --output out.png --sigma 5
79
+
80
+ # 色调叠加(做角色不同颜色变体)
81
+ playcraft image tint --input src.png --output out.png --color "#ff4400"
82
+
83
+ # 反色
84
+ playcraft image negate --input src.png --output out.png
85
+
86
+ # 像素化(像素风格)
87
+ playcraft image pixelate --input src.png --output out.png --pixel-size 8
88
+ ```
89
+
90
+ ### 合成
91
+
92
+ ```bash
93
+ # 将一张图叠在另一张图上(居中对齐)
94
+ playcraft image overlay --base bg.png --overlay icon.png --output out.png
95
+
96
+ # 指定坐标叠加
97
+ playcraft image overlay --base bg.png --overlay icon.png --output out.png --x 100 --y 200
98
+ ```
99
+
100
+ ### 语义分割(SAM3)
101
+
102
+ 通过 SAM3(Segment Anything Model 3)对图片进行**开放词汇语义分割**:用文字或框 prompt 精确抠出任意对象,返回 mask 和 RGBA 透明图。
103
+ 需要经由 backend 代理,首次冷启动约 15s,热启动约 5-10s。
104
+
105
+ ```bash
106
+ # ── 单 prompt — 文本 ──
107
+ # 找到图中所有"logo"区域,输出 mask + RGBA
108
+ playcraft image segment \
109
+ --input ta-workspace/banner.png \
110
+ --text "logo" \
111
+ --output-dir ta-workspace/segment-out
112
+
113
+ # ── 单 prompt — 框选区域 ──
114
+ # 用 [x1,y1,x2,y2] 绝对像素坐标指定目标区域
115
+ playcraft image segment \
116
+ --input ta-workspace/banner.png \
117
+ --boxes "[[50,100,300,400]]" \
118
+ --output-dir ta-workspace/segment-out
119
+
120
+ # ── 多 prompt 批量(一次调用,多个目标)──
121
+ playcraft image segment \
122
+ --input ta-workspace/banner.png \
123
+ --prompts '[{"text":"icon"},{"text":"button"},{"text":"logo"}]' \
124
+ --output-dir ta-workspace/segment-out
125
+
126
+ # ── 调节得分阈值(默认 0.3,越低召回越多)──
127
+ playcraft image segment \
128
+ --input ta-workspace/hero.png \
129
+ --text "character" \
130
+ --threshold 0.2 \
131
+ --output-dir ta-workspace/segment-out
132
+
133
+ # ── 不需要 RGBA 抠图,只要 mask ──
134
+ playcraft image segment \
135
+ --input ta-workspace/hero.png \
136
+ --text "character" \
137
+ --no-rgba \
138
+ --output-dir ta-workspace/segment-out
139
+ ```
140
+
141
+ **输出目录结构**:
142
+
143
+ ```
144
+ segment-out/
145
+ prompt_0_logo/
146
+ 00_mask.png ← 二值 mask(白色为前景)
147
+ 00_rgba.png ← RGBA 透明抠图
148
+ 01_mask.png ← 同一 prompt 的第二个实例(若有多个)
149
+ 01_rgba.png
150
+ prompt_1_button/
151
+ 00_mask.png
152
+ 00_rgba.png
153
+ segment-meta.json ← 汇总:image_size、prompts、instances count、scores、bbox
154
+ ```
155
+
156
+ **使用要点**:
157
+
158
+ - **冷启动**:SAM3 缩容后首次调用约 15s,命令会自动等待,无需手动 ping
159
+ - **热启动**:模型就绪后约 5-10s 完成分割
160
+ - **抠图直接可用**:`rgba.png` 已是透明背景,可直接用于游戏资产,无需再跑 `remove-background`
161
+ - **多实例**:同一 prompt 可能检测到多个对象(如图中有 3 个 logo),每个实例单独输出 `00_`、`01_`…
162
+ - **bbox 信息**:`segment-meta.json` 包含每个实例的 bbox 坐标,可用于后续裁切定位
163
+
164
+ **与 remove-background 的对比**:
165
+
166
+ | 场景 | 推荐方案 |
167
+ | -------------------------------------------------- | -------------------------------------- |
168
+ | 去除纯色/渐变/棋盘格背景(AI 生成图) | `remove-background --method floodfill` |
169
+ | 去除复杂真实照片背景 | `remove-background --method ai` |
170
+ | **精确分割特定对象**(如从 UI 截图中提取某个按钮) | `segment --text "button"` |
171
+ | **批量提取多个不同对象** | `segment --prompts '[...]'` |
172
+ | **需要 mask 做遮罩特效** | `segment`(直接输出 mask.png) |
173
+
174
+ ### 背景移除
175
+
176
+ 支持两种方法,根据图片类型选择:
177
+
178
+ ```bash
179
+ # ── floodfill(默认)— 本地执行,AI 生成素材首选 ──
180
+ # 从边缘 flood-fill 移除纯色/渐变/棋盘格背景,前景纹理零损失
181
+ playcraft image remove-background --input ta-workspace/hero_raw.png --output ta-workspace/hero.png
182
+
183
+ # 调节容差(背景与前景颜色接近时增大)
184
+ playcraft image remove-background --input ta-workspace/tile.png --output ta-workspace/tile.png --tolerance 40
185
+
186
+ # 关闭边缘平滑(需要硬边像素风时)
187
+ playcraft image remove-background --input ta-workspace/pixel_art.png --output ta-workspace/pixel_art.png --edge-smooth 0
188
+
189
+ # ── ai — 调用 backend AI 模型,复杂背景照片用 ──
190
+ playcraft image remove-background --input ta-workspace/photo.jpg --output ta-workspace/photo.png --method ai
191
+ ```
192
+
193
+ **方法选择指南**:
194
+ | 方法 | 适用场景 | 速度 | 纹理保真度 |
195
+ |------|---------|------|-----------|
196
+ | `floodfill`(默认) | AI 生成的素材(纯色/灰色/棋盘格背景) | <0.5s | 零损失 |
197
+ | `ai` | 真实照片、复杂背景 | ~1-3s | 可能褪色 |
198
+
199
+ > **注意**:`--method ai` 会调用 backend API(需要沙箱 token);`floodfill` 完全本地执行。
200
+
201
+ ## 可玩广告常见规格
202
+
203
+ - 纹理尺寸:建议 2 的幂次(256×256、512×512、1024×1024)
204
+ - 像素风:`--pixel-size 8` 到 `16` 常见
205
+ - WebP 转换:通常比 PNG 小 30–50%,可玩广告体积敏感时优先用 webp
206
+ - 统一精灵帧尺寸:先 `resize` → 再 `sprite-sheet` 合并
207
+
208
+ ## 典型流程
209
+
210
+ ```bash
211
+ # 生成图片 → 缩放到规格 → 转 webp 压缩
212
+ playcraft tools generate-image --prompt "cute hero character, transparent background" --output ta-workspace/hero_raw.png
213
+ playcraft image resize --input ta-workspace/hero_raw.png --output ta-workspace/hero_512.png --width 512 --height 512 --fit contain
214
+ playcraft image convert --input ta-workspace/hero_512.png --output ta-workspace/hero_512.webp --quality 85
215
+
216
+ # 制作角色颜色变体
217
+ playcraft image tint --input ta-workspace/hero_512.png --output ta-workspace/hero_blue.png --color "#0055ff"
218
+ playcraft image tint --input ta-workspace/hero_512.png --output ta-workspace/hero_red.png --color "#ff2200"
219
+ ```