@playcraft/cli 0.0.57 → 0.0.59

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 (225) hide show
  1. package/README.md +34 -16
  2. package/dist/cli-root-help.js +1 -0
  3. package/dist/commands/build-all.js +10 -9
  4. package/dist/commands/build.js +13 -12
  5. package/dist/commands/create.js +26 -33
  6. package/dist/commands/platform-skills.generated.js +19 -0
  7. package/dist/commands/skills.js +2 -0
  8. package/dist/commands/tools-generation.js +1 -1
  9. package/dist/commands/workspace-runtime.js +54 -0
  10. package/dist/index.js +3 -1
  11. package/dist/project-skills/commands.js +72 -0
  12. package/dist/project-skills/lifecycle.js +28 -0
  13. package/dist/project-skills/local-run.js +112 -0
  14. package/dist/project-skills/local-store.js +149 -0
  15. package/dist/project-skills/messages.js +72 -0
  16. package/dist/project-skills/reconcile.js +62 -0
  17. package/dist/project-skills/remote-cache.js +51 -0
  18. package/dist/project-skills/validation.js +19 -0
  19. package/dist/remix/clone.js +2 -0
  20. package/dist/remix/init-template.js +2 -0
  21. package/dist/remix/pull.js +2 -0
  22. package/dist/remix/push.js +21 -1
  23. package/dist/utils/agent-api-client.js +54 -17
  24. package/dist/utils/tool-operation-journal.js +54 -0
  25. package/dist/workspace-runtime/codex/app-server.js +395 -0
  26. package/dist/workspace-runtime/codex/config-toml.js +25 -0
  27. package/dist/workspace-runtime/codex/jsonrpc-stdio.js +106 -0
  28. package/dist/workspace-runtime/codex/loopback.js +59 -0
  29. package/dist/workspace-runtime/codex/native-adapter.js +3 -0
  30. package/dist/workspace-runtime/main.js +10 -0
  31. package/dist/workspace-runtime/persistence/journal.js +350 -0
  32. package/dist/workspace-runtime/processes/managed-writes.js +69 -0
  33. package/dist/workspace-runtime/serve.js +111 -0
  34. package/dist/workspace-runtime/server/auth.js +21 -0
  35. package/dist/workspace-runtime/server/dispatch.js +861 -0
  36. package/dist/workspace-runtime/server/execution-group.js +88 -0
  37. package/dist/workspace-runtime/server/http.js +561 -0
  38. package/dist/workspace-runtime/server/lock.js +53 -0
  39. package/dist/workspace-runtime/server/types.js +1 -0
  40. package/dist/workspace-runtime/workspaces/context-error.js +2 -0
  41. package/dist/workspace-runtime/workspaces/file-snapshot.js +213 -0
  42. package/dist/workspace-runtime/workspaces/files.js +143 -0
  43. package/dist/workspace-runtime/workspaces/git.js +242 -0
  44. package/dist/workspace-runtime/workspaces/json5-edit.js +170 -0
  45. package/dist/workspace-runtime/workspaces/parameters.js +272 -0
  46. package/dist/workspace-runtime/workspaces/prepare.js +364 -0
  47. package/dist/workspace-runtime/workspaces/registry.js +107 -0
  48. package/dist/workspace-runtime/workspaces/revisions.js +31 -0
  49. package/package.json +6 -3
  50. package/project-template-v2/.claude/agents/artist.md +82 -0
  51. package/project-template-v2/.claude/agents/developer.md +153 -0
  52. package/project-template-v2/.claude/agents/game-designer.md +264 -0
  53. package/project-template-v2/.claude/agents/refs/artist-art-style-catalog.md +533 -0
  54. package/project-template-v2/.claude/agents/refs/artist-color-audio-recipes.md +153 -0
  55. package/project-template-v2/.claude/agents/refs/artist-dimension-axis.md +27 -0
  56. package/project-template-v2/.claude/agents/refs/artist-master-composite-recipes.md +208 -0
  57. package/project-template-v2/.claude/agents/refs/atom-skill-library.md +81 -0
  58. package/project-template-v2/.claude/agents/refs/developer-impl-cookbook.md +432 -0
  59. package/project-template-v2/.claude/agents/refs/framework-5-component-filter.md +252 -0
  60. package/project-template-v2/.claude/agents/refs/framework-game-feel-juice.md +266 -0
  61. package/project-template-v2/.claude/agents/refs/framework-mda.md +147 -0
  62. package/project-template-v2/.claude/agents/refs/game-designer-gameplay-sufficiency.md +123 -0
  63. package/project-template-v2/.claude/agents/refs/ta-3d-flip-recipe.md +88 -0
  64. package/project-template-v2/.claude/agents/refs/ta-atlas-deliverable-standard.md +67 -0
  65. package/project-template-v2/.claude/agents/refs/ta-batch-pipeline-recipes.md +120 -0
  66. package/project-template-v2/.claude/agents/refs/ta-image-generation-detail.md +300 -0
  67. package/project-template-v2/.claude/agents/refs/ta-image-ops-reference.md +495 -0
  68. package/project-template-v2/.claude/agents/refs/ta-pipeline-cookbook.md +1141 -0
  69. package/project-template-v2/.claude/agents/refs/ta-tools-reference.md +111 -0
  70. package/project-template-v2/.claude/agents/refs/ta-vfx-preset-catalog.md +365 -0
  71. package/project-template-v2/.claude/agents/refs/threejs-cannon-pitfalls.md +412 -0
  72. package/project-template-v2/.claude/agents/reviewer.md +75 -0
  73. package/project-template-v2/.claude/agents/technical-artist.md +86 -0
  74. package/project-template-v2/.claude/hooks/snapshot-milestone.mjs +243 -0
  75. package/project-template-v2/.claude/hooks/user-prompt.mjs +133 -0
  76. package/project-template-v2/.claude/settings.json +33 -0
  77. package/project-template-v2/.claude/skills/brainstorming/SKILL.md +161 -0
  78. package/project-template-v2/.claude/skills/brainstorming/scripts/frame-template.html +270 -0
  79. package/project-template-v2/.claude/skills/brainstorming/scripts/helper.js +177 -0
  80. package/project-template-v2/.claude/skills/brainstorming/scripts/server.cjs +354 -0
  81. package/project-template-v2/.claude/skills/brainstorming/scripts/start-server.sh +148 -0
  82. package/project-template-v2/.claude/skills/brainstorming/scripts/stop-server.sh +56 -0
  83. package/project-template-v2/.claude/skills/brainstorming/scripts/wait-for-selection.sh +62 -0
  84. package/project-template-v2/.claude/skills/brainstorming/spec-document-reviewer-prompt.md +49 -0
  85. package/project-template-v2/.claude/skills/brainstorming/visual-companion.md +309 -0
  86. package/project-template-v2/.claude/skills/playcraft-ad-psychology/SKILL.md +182 -0
  87. package/project-template-v2/.claude/skills/playcraft-art-style-guide/SKILL.md +123 -0
  88. package/project-template-v2/.claude/skills/playcraft-asset-state-sheet/SKILL.md +205 -0
  89. package/project-template-v2/.claude/skills/playcraft-audio-generation/SKILL.md +280 -0
  90. package/project-template-v2/.claude/skills/playcraft-batch-pipeline/SKILL.md +184 -0
  91. package/project-template-v2/.claude/skills/playcraft-build-optimizer/SKILL.md +306 -0
  92. package/project-template-v2/.claude/skills/playcraft-image-generation/SKILL.md +298 -0
  93. package/project-template-v2/.claude/skills/playcraft-image-generation/reference/build-sprite-sheet.template.mjs +123 -0
  94. package/project-template-v2/.claude/skills/playcraft-image-generation/reference/compare-style.template.mjs +254 -0
  95. package/project-template-v2/.claude/skills/playcraft-image-generation/reference/gen-batch-sprite.template.mjs +324 -0
  96. package/project-template-v2/.claude/skills/playcraft-image-generation/reference/gen-batch.template.mjs +97 -0
  97. package/project-template-v2/.claude/skills/playcraft-image-generation/reference/gen-edit-variants.template.mjs +118 -0
  98. package/project-template-v2/.claude/skills/playcraft-image-generation/reference/process-batch.template.mjs +137 -0
  99. package/project-template-v2/.claude/skills/playcraft-image-generation/reference/prompt-cookbook.md +397 -0
  100. package/project-template-v2/.claude/skills/playcraft-image-generation/reference/validate-sprite-sheet.template.mjs +296 -0
  101. package/project-template-v2/.claude/skills/playcraft-image-ops/SKILL.md +122 -0
  102. package/project-template-v2/.claude/skills/playcraft-image-processing/SKILL.md +219 -0
  103. package/project-template-v2/.claude/skills/playcraft-masking/SKILL.md +373 -0
  104. package/project-template-v2/.claude/skills/playcraft-playable-optimization/SKILL.md +161 -0
  105. package/project-template-v2/.claude/skills/playcraft-research/SKILL.md +215 -0
  106. package/project-template-v2/.claude/skills/playcraft-skill-recommender/SKILL.md +382 -0
  107. package/project-template-v2/.claude/skills/playcraft-sprite-generation/SKILL.md +423 -0
  108. package/project-template-v2/.claude/skills/playcraft-sprite-remix/SKILL.md +158 -0
  109. package/project-template-v2/.claude/skills/playcraft-sprite-sheet/SKILL.md +100 -0
  110. package/project-template-v2/.claude/skills/playcraft-storyboard/SKILL.md +167 -0
  111. package/project-template-v2/.claude/skills/playcraft-style-qa/SKILL.md +270 -0
  112. package/project-template-v2/.claude/skills/playcraft-text-rendering/SKILL.md +236 -0
  113. package/project-template-v2/.claude/skills/playcraft-vfx-animation/SKILL.md +130 -0
  114. package/project-template-v2/.claude/skills/playwright-cli/SKILL.md +390 -0
  115. package/project-template-v2/.claude/skills/playwright-cli/references/element-attributes.md +23 -0
  116. package/project-template-v2/.claude/skills/playwright-cli/references/playwright-tests.md +39 -0
  117. package/project-template-v2/.claude/skills/playwright-cli/references/request-mocking.md +87 -0
  118. package/project-template-v2/.claude/skills/playwright-cli/references/running-code.md +240 -0
  119. package/project-template-v2/.claude/skills/playwright-cli/references/session-management.md +226 -0
  120. package/project-template-v2/.claude/skills/playwright-cli/references/spec-driven-testing.md +308 -0
  121. package/project-template-v2/.claude/skills/playwright-cli/references/storage-state.md +275 -0
  122. package/project-template-v2/.claude/skills/playwright-cli/references/test-generation.md +134 -0
  123. package/project-template-v2/.claude/skills/playwright-cli/references/tracing.md +142 -0
  124. package/project-template-v2/.claude/skills/playwright-cli/references/video-recording.md +153 -0
  125. package/project-template-v2/.claude/skills/session-analyzer/SKILL.md +386 -0
  126. package/project-template-v2/.claude/skills/session-analyzer/scripts/execution-breakdown.mjs +182 -0
  127. package/project-template-v2/.claude/skills/session-analyzer/scripts/find-turns.mjs +72 -0
  128. package/project-template-v2/.claude/skills/session-analyzer/scripts/heavy-output.mjs +121 -0
  129. package/project-template-v2/.claude/skills/session-analyzer/scripts/resolve-session.mjs +102 -0
  130. package/project-template-v2/.claude/skills/session-analyzer/scripts/subagent-stats.mjs +127 -0
  131. package/project-template-v2/.claude/skills/session-analyzer/scripts/subagent-tool-timeline.mjs +106 -0
  132. package/project-template-v2/.claude/skills/session-analyzer/scripts/time-gaps.mjs +128 -0
  133. package/project-template-v2/.claude/skills/session-analyzer/scripts/turn-timeline.mjs +67 -0
  134. package/project-template-v2/.claude/snapshot.mjs +263 -0
  135. package/project-template-v2/.playcraft/skills.lock.json +152 -0
  136. package/project-template-v2/CLAUDE.md +146 -0
  137. package/project-template-v2/assets/audio/bgm/.gitkeep +0 -0
  138. package/project-template-v2/assets/audio/sfx/.gitkeep +0 -0
  139. package/project-template-v2/assets/bundles/.gitkeep +0 -0
  140. package/project-template-v2/assets/images/bg/.gitkeep +0 -0
  141. package/project-template-v2/assets/images/reference/.gitkeep +0 -0
  142. package/project-template-v2/assets/images/storyboard/.gitkeep +0 -0
  143. package/project-template-v2/assets/images/tiles/.gitkeep +0 -0
  144. package/project-template-v2/assets/images/ui/.gitkeep +0 -0
  145. package/project-template-v2/assets/images/vfx/.gitkeep +0 -0
  146. package/project-template-v2/assets/models/.gitkeep +0 -0
  147. package/project-template-v2/docs/harness/iteration-1/context-flow.md +254 -0
  148. package/project-template-v2/docs/harness/iteration-1/generate-flow.md +91 -0
  149. package/project-template-v2/docs/harness/iteration-1/ideate-flow.md +214 -0
  150. package/project-template-v2/docs/harness/iteration-1/optimize-flow.md +75 -0
  151. package/project-template-v2/docs/harness/iteration-1/wrapup-flow.md +63 -0
  152. package/project-template-v2/docs/harness/iteration-2/context-flow.md +223 -0
  153. package/project-template-v2/docs/harness/iteration-2/generate-flow.md +129 -0
  154. package/project-template-v2/docs/harness/iteration-2/ideate-flow.md +267 -0
  155. package/project-template-v2/docs/harness/iteration-2/optimize-flow.md +164 -0
  156. package/project-template-v2/docs/harness/iteration-2/wrapup-flow.md +115 -0
  157. package/project-template-v2/docs/harness/orchestrator-flow.md +364 -0
  158. package/project-template-v2/docs/project-state.json +60 -0
  159. package/project-template-v2/docs/project-state.md +72 -0
  160. package/project-template-v2/docs/standards/README.md +225 -0
  161. package/project-template-v2/docs/standards/agent-behavior-standards.md +174 -0
  162. package/project-template-v2/docs/standards/artifacts/design-brief.md +19 -0
  163. package/project-template-v2/docs/standards/artifacts/design.md +22 -0
  164. package/project-template-v2/docs/standards/artifacts/game-code.md +41 -0
  165. package/project-template-v2/docs/standards/artifacts/todo-list.md +41 -0
  166. package/project-template-v2/docs/standards/iter1-agent-behavior-standards.md +343 -0
  167. package/project-template-v2/game/index.ts +18 -0
  168. package/project-template-v2/globals.d.ts +51 -0
  169. package/project-template-v2/index.css +34 -0
  170. package/project-template-v2/index.html +18 -0
  171. package/project-template-v2/main.ts +9 -0
  172. package/project-template-v2/package.json +46 -0
  173. package/project-template-v2/skills/_shared/scripts/dispatch-clear.mjs +31 -0
  174. package/project-template-v2/skills/_shared/scripts/dispatch-set.mjs +86 -0
  175. package/project-template-v2/skills/_shared/scripts/dod-check.mjs +153 -0
  176. package/project-template-v2/skills/_shared/scripts/handoff-append.mjs +70 -0
  177. package/project-template-v2/skills/_shared/scripts/lib/validator-artifacts.mjs +91 -0
  178. package/project-template-v2/skills/_shared/scripts/pipeline/dod-config.mjs +131 -0
  179. package/project-template-v2/skills/_shared/scripts/pipeline/index.mjs +80 -0
  180. package/project-template-v2/skills/_shared/scripts/pipeline/iteration-1-core.mjs +90 -0
  181. package/project-template-v2/skills/_shared/scripts/pipeline/iteration-2-wrap.mjs +93 -0
  182. package/project-template-v2/skills/_shared/scripts/pipeline/iteration-3-visual.mjs +23 -0
  183. package/project-template-v2/skills/_shared/scripts/render-project-state.mjs +230 -0
  184. package/project-template-v2/skills/_shared/scripts/state-advance-stage.mjs +58 -0
  185. package/project-template-v2/skills/_shared/scripts/state-get.mjs +339 -0
  186. package/project-template-v2/skills/_shared/scripts/state-handoff.mjs +39 -0
  187. package/project-template-v2/skills/_shared/scripts/state-set.mjs +94 -0
  188. package/project-template-v2/skills/_shared/scripts/state-store.mjs +783 -0
  189. package/project-template-v2/skills/_shared/scripts/todo-add.mjs +88 -0
  190. package/project-template-v2/skills/_shared/scripts/todo-get.mjs +130 -0
  191. package/project-template-v2/skills/_shared/scripts/todo-remove.mjs +33 -0
  192. package/project-template-v2/skills/_shared/scripts/todo-set.mjs +47 -0
  193. package/project-template-v2/skills/_shared/scripts/verify-asset-code-sync.mjs +268 -0
  194. package/project-template-v2/skills/_shared/scripts/verify-env.mjs +285 -0
  195. package/project-template-v2/skills/_shared/scripts/verify-placeholders.mjs +161 -0
  196. package/project-template-v2/skills/playable-autoplay/SKILL.md +176 -0
  197. package/project-template-v2/skills/playable-autoplay/agents/openai.yaml +4 -0
  198. package/project-template-v2/skills/playable-debug/SKILL.md +116 -0
  199. package/project-template-v2/skills/playable-debug/agents/openai.yaml +4 -0
  200. package/project-template-v2/skills/playable-debug/references/debug-config.md +40 -0
  201. package/project-template-v2/skills/playable-record/SKILL.md +140 -0
  202. package/project-template-v2/skills/playable-record/scripts/lib/dev-server.mjs +104 -0
  203. package/project-template-v2/skills/playable-record/scripts/lib/record-audio-bridge.js +141 -0
  204. package/project-template-v2/skills/playable-record/scripts/record-playable.mjs +425 -0
  205. package/project-template-v2/skills/playable-record/scripts/verify-contract.mjs +261 -0
  206. package/project-template-v2/skills/playable-record/scripts/verify-firstwin.mjs +398 -0
  207. package/project-template-v2/skills/playable-record/scripts/verify-fusion.mjs +322 -0
  208. package/project-template-v2/skills/playable-record/scripts/verify-lifecycle.mjs +105 -0
  209. package/project-template-v2/skills/playable-record/scripts/verify-vlm-video.mjs +230 -0
  210. package/project-template-v2/skills/playable-validate/SKILL.md +61 -0
  211. package/project-template-v2/skills/playable-validate/validation-rules.md +14 -0
  212. package/project-template-v2/skills/playable-verify-ui/SKILL.md +63 -0
  213. package/project-template-v2/skills/playable-verify-ui/scripts/lib/__init__.py +1 -0
  214. package/project-template-v2/skills/playable-verify-ui/scripts/lib/config_expr.js +218 -0
  215. package/project-template-v2/skills/playable-verify-ui/scripts/lib/node_utils.js +51 -0
  216. package/project-template-v2/skills/playable-verify-ui/scripts/lib/profile_loader.py +59 -0
  217. package/project-template-v2/skills/playable-verify-ui/scripts/lib/report.py +106 -0
  218. package/project-template-v2/skills/playable-verify-ui/scripts/lib/runtime_contract.js +116 -0
  219. package/project-template-v2/skills/playable-verify-ui/scripts/verify_fetch_antipatterns.py +59 -0
  220. package/project-template-v2/skills/playable-verify-ui/scripts/verify_hardcoded_layout.js +64 -0
  221. package/project-template-v2/skills/playable-verify-ui/scripts/verify_runtime_contract.js +58 -0
  222. package/project-template-v2/skills/playable-verify-ui/scripts/verify_text_overlap.py +333 -0
  223. package/project-template-v2/ta-workspace/scripts/.gitkeep +0 -0
  224. package/project-template-v2/tsconfig.json +20 -0
  225. package/project-template-v2/vite.config.ts +27 -0
@@ -0,0 +1,309 @@
1
+ # Visual Companion Guide
2
+
3
+ Browser-based visual brainstorming companion for showing mockups, diagrams, and options.
4
+
5
+ ## When to Use
6
+
7
+ Decide per-question, not per-session. The test: **would the user understand this better by seeing it than reading it?**
8
+
9
+ **Use the browser** when the content itself is visual:
10
+
11
+ - **UI mockups** — wireframes, layouts, navigation structures, component designs
12
+ - **Architecture diagrams** — system components, data flow, relationship maps
13
+ - **Side-by-side visual comparisons** — comparing two layouts, two color schemes, two design directions
14
+ - **Design polish** — when the question is about look and feel, spacing, visual hierarchy
15
+ - **Spatial relationships** — state machines, flowcharts, entity relationships rendered as diagrams
16
+
17
+ **Use the terminal** when the content is text or tabular:
18
+
19
+ - **Requirements and scope questions** — "what does X mean?", "which features are in scope?"
20
+ - **Conceptual A/B/C choices** — picking between approaches described in words
21
+ - **Tradeoff lists** — pros/cons, comparison tables
22
+ - **Technical decisions** — API design, data modeling, architectural approach selection
23
+ - **Clarifying questions** — anything where the answer is words, not a visual preference
24
+
25
+ A question _about_ a UI topic is not automatically a visual question. "What kind of wizard do you want?" is conceptual — use the terminal. "Which of these wizard layouts feels right?" is visual — use the browser.
26
+
27
+ ## How It Works
28
+
29
+ The server watches a directory for HTML files and serves the newest one to the browser. You write HTML content to `screen_dir`, the user sees it in their browser and can click to select options. Selections are recorded to `state_dir/events` that you read on your next turn.
30
+
31
+ **Content fragments vs full documents:** If your HTML file starts with `<!DOCTYPE` or `<html`, the server serves it as-is (just injects the helper script). Otherwise, the server automatically wraps your content in the frame template — adding the header, CSS theme, selection indicator, and all interactive infrastructure. **Write content fragments by default.** Only write full documents when you need complete control over the page.
32
+
33
+ ## Starting a Session
34
+
35
+ ```bash
36
+ # Start server with persistence (mockups saved to project)
37
+ scripts/start-server.sh --project-dir /path/to/project
38
+
39
+ # Returns: {"type":"server-started","port":52341,"url":"http://localhost:52341",
40
+ # "screen_dir":"/path/to/project/.superpowers/brainstorm/12345-1706000000/content",
41
+ # "state_dir":"/path/to/project/.superpowers/brainstorm/12345-1706000000/state"}
42
+ ```
43
+
44
+ Save `screen_dir` and `state_dir` from the response. Tell user to open the URL.
45
+
46
+ **Finding connection info:** The server writes its startup JSON to `$STATE_DIR/server-info`. If you launched the server in the background and didn't capture stdout, read that file to get the URL and port. When using `--project-dir`, check `<project>/.superpowers/brainstorm/` for the session directory.
47
+
48
+ **Note:** Pass the project root as `--project-dir` so mockups persist in `.superpowers/brainstorm/` and survive server restarts. Without it, files go to `/tmp` and get cleaned up. Remind the user to add `.superpowers/` to `.gitignore` if it's not already there.
49
+
50
+ **Launching the server by platform:**
51
+
52
+ **Claude Code (macOS / Linux):**
53
+
54
+ ```bash
55
+ # Default mode works — the script backgrounds the server itself
56
+ scripts/start-server.sh --project-dir /path/to/project
57
+ ```
58
+
59
+ **Claude Code (Windows):**
60
+
61
+ ```bash
62
+ # Windows auto-detects and uses foreground mode, which blocks the tool call.
63
+ # Use run_in_background: true on the Bash tool call so the server survives
64
+ # across conversation turns.
65
+ scripts/start-server.sh --project-dir /path/to/project
66
+ ```
67
+
68
+ When calling this via the Bash tool, set `run_in_background: true`. Then read `$STATE_DIR/server-info` on the next turn to get the URL and port.
69
+
70
+ **Codex:**
71
+
72
+ ```bash
73
+ # Codex reaps background processes. The script auto-detects CODEX_CI and
74
+ # switches to foreground mode. Run it normally — no extra flags needed.
75
+ scripts/start-server.sh --project-dir /path/to/project
76
+ ```
77
+
78
+ **Gemini CLI:**
79
+
80
+ ```bash
81
+ # Use --foreground and set is_background: true on your shell tool call
82
+ # so the process survives across turns
83
+ scripts/start-server.sh --project-dir /path/to/project --foreground
84
+ ```
85
+
86
+ **Other environments:** The server must keep running in the background across conversation turns. If your environment reaps detached processes, use `--foreground` and launch the command with your platform's background execution mechanism.
87
+
88
+ If the URL is unreachable from your browser (common in remote/containerized setups), bind a non-loopback host:
89
+
90
+ ```bash
91
+ scripts/start-server.sh \
92
+ --project-dir /path/to/project \
93
+ --host 0.0.0.0 \
94
+ --url-host localhost
95
+ ```
96
+
97
+ Use `--url-host` to control what hostname is printed in the returned URL JSON.
98
+
99
+ ## The Loop
100
+
101
+ 1. **Check server is alive**, then **write HTML** to a new file in `screen_dir`:
102
+ - Before each write, check that `$STATE_DIR/server-info` exists. If it doesn't (or `$STATE_DIR/server-stopped` exists), the server has shut down — restart it with `start-server.sh` before continuing. The server auto-exits after 30 minutes of inactivity.
103
+ - Use semantic filenames: `platform.html`, `visual-style.html`, `layout.html`
104
+ - **Never reuse filenames** — each screen gets a fresh file
105
+ - Use Write tool — **never use cat/heredoc** (dumps noise into terminal)
106
+ - Server automatically serves the newest file
107
+
108
+ 2. **Tell user what to expect, then block on `wait-for-selection.sh`:**
109
+ - Tell the user the URL and briefly describe what's on screen (e.g., "Showing 3 layout options")
110
+ - Immediately run `scripts/wait-for-selection.sh "$STATE_DIR"` — this blocks until the user acts in the browser
111
+ - **Do not end your turn asking the user to return to the terminal.** The script unblocks automatically.
112
+
113
+ ```bash
114
+ scripts/wait-for-selection.sh "$STATE_DIR"
115
+ # returns JSON like:
116
+ # {"type":"confirm","choices":[{"choice":"a","text":"Single Column"}],"other":"","timestamp":...}
117
+ # {"type":"reject","timestamp":...}
118
+ ```
119
+
120
+ 3. **Parse the result and continue:**
121
+ - `type === "confirm"` — `choices` has selected options (may be empty if user only typed), `other` has free-text input (may be empty)
122
+ - `type === "reject"` — user declined; treat as "none of these, let's reconsider"
123
+ - Either way, **continue immediately** without asking the user to type anything in the terminal
124
+
125
+ 4. **Iterate or advance** — if feedback changes current screen, write a new file (e.g., `layout-v2.html`). Only move to the next question when the current step is validated.
126
+
127
+ 5. **Unload when returning to terminal** — when the next step doesn't need the browser (e.g., a clarifying question, a tradeoff discussion), push a waiting screen to clear the stale content:
128
+
129
+ ```html
130
+ <!-- filename: waiting.html (or waiting-2.html, etc.) -->
131
+ <div style="display:flex;align-items:center;justify-content:center;min-height:60vh">
132
+ <p class="subtitle">Continuing in terminal...</p>
133
+ </div>
134
+ ```
135
+
136
+ This prevents the user from staring at a resolved choice while the conversation has moved on. When the next visual question comes up, push a new content file as usual.
137
+
138
+ 6. Repeat until done.
139
+
140
+ ## Writing Content Fragments
141
+
142
+ Write just the content that goes inside the page. The server wraps it in the frame template automatically (header, theme CSS, selection indicator, and all interactive infrastructure).
143
+
144
+ **Minimal example:**
145
+
146
+ ```html
147
+ <h2>Which layout works better?</h2>
148
+ <p class="subtitle">Consider readability and visual hierarchy</p>
149
+
150
+ <div class="options">
151
+ <div class="option" data-choice="a" onclick="toggleSelect(this)">
152
+ <div class="letter">A</div>
153
+ <div class="content">
154
+ <h3>Single Column</h3>
155
+ <p>Clean, focused reading experience</p>
156
+ </div>
157
+ </div>
158
+ <div class="option" data-choice="b" onclick="toggleSelect(this)">
159
+ <div class="letter">B</div>
160
+ <div class="content">
161
+ <h3>Two Column</h3>
162
+ <p>Sidebar navigation with main content</p>
163
+ </div>
164
+ </div>
165
+ </div>
166
+ ```
167
+
168
+ That's it. No `<html>`, no CSS, no `<script>` tags needed. The server provides all of that.
169
+
170
+ ## CSS Classes Available
171
+
172
+ The frame template provides these CSS classes for your content:
173
+
174
+ ### Options (A/B/C choices)
175
+
176
+ ```html
177
+ <div class="options">
178
+ <div class="option" data-choice="a" onclick="toggleSelect(this)">
179
+ <div class="letter">A</div>
180
+ <div class="content">
181
+ <h3>Title</h3>
182
+ <p>Description</p>
183
+ </div>
184
+ </div>
185
+ </div>
186
+ ```
187
+
188
+ **Multi-select:** Add `data-multiselect` to the container to let users select multiple options. Each click toggles the item. The indicator bar shows the count.
189
+
190
+ ```html
191
+ <div class="options" data-multiselect>
192
+ <!-- same option markup — users can select/deselect multiple -->
193
+ </div>
194
+ ```
195
+
196
+ ### Cards (visual designs)
197
+
198
+ ```html
199
+ <div class="cards">
200
+ <div class="card" data-choice="design1" onclick="toggleSelect(this)">
201
+ <div class="card-image"><!-- mockup content --></div>
202
+ <div class="card-body">
203
+ <h3>Name</h3>
204
+ <p>Description</p>
205
+ </div>
206
+ </div>
207
+ </div>
208
+ ```
209
+
210
+ ### Mockup container
211
+
212
+ ```html
213
+ <div class="mockup">
214
+ <div class="mockup-header">Preview: Dashboard Layout</div>
215
+ <div class="mockup-body"><!-- your mockup HTML --></div>
216
+ </div>
217
+ ```
218
+
219
+ ### Split view (side-by-side)
220
+
221
+ ```html
222
+ <div class="split">
223
+ <div class="mockup"><!-- left --></div>
224
+ <div class="mockup"><!-- right --></div>
225
+ </div>
226
+ ```
227
+
228
+ ### Pros/Cons
229
+
230
+ ```html
231
+ <div class="pros-cons">
232
+ <div class="pros">
233
+ <h4>Pros</h4>
234
+ <ul>
235
+ <li>Benefit</li>
236
+ </ul>
237
+ </div>
238
+ <div class="cons">
239
+ <h4>Cons</h4>
240
+ <ul>
241
+ <li>Drawback</li>
242
+ </ul>
243
+ </div>
244
+ </div>
245
+ ```
246
+
247
+ ### Mock elements (wireframe building blocks)
248
+
249
+ ```html
250
+ <div class="mock-nav">Logo | Home | About | Contact</div>
251
+ <div style="display: flex;">
252
+ <div class="mock-sidebar">Navigation</div>
253
+ <div class="mock-content">Main content area</div>
254
+ </div>
255
+ <button class="mock-button">Action Button</button>
256
+ <input class="mock-input" placeholder="Input field" />
257
+ <div class="placeholder">Placeholder area</div>
258
+ ```
259
+
260
+ ### Typography and sections
261
+
262
+ - `h2` — page title
263
+ - `h3` — section heading
264
+ - `.subtitle` — secondary text below title
265
+ - `.section` — content block with bottom margin
266
+ - `.label` — small uppercase label text
267
+
268
+ ## Browser Events Format
269
+
270
+ When the user clicks options in the browser, their interactions are recorded to `$STATE_DIR/events` (one JSON object per line). The file is cleared automatically when you push a new screen.
271
+
272
+ ```jsonl
273
+ {"type":"click","choice":"a","text":"Option A - Simple Layout","timestamp":1706000101}
274
+ {"type":"click","choice":"c","text":"Option C - Complex Grid","timestamp":1706000108}
275
+ {"type":"click","choice":"b","text":"Option B - Hybrid","timestamp":1706000115}
276
+ ```
277
+
278
+ The full event stream shows the user's exploration path — they may click multiple options before settling. The last `choice` event is typically the final selection, but the pattern of clicks can reveal hesitation or preferences worth asking about.
279
+
280
+ If `$STATE_DIR/events` doesn't exist, the user didn't interact with the browser — use only their terminal text.
281
+
282
+ ## Design Tips
283
+
284
+ - **Scale fidelity to the question** — wireframes for layout, polish for polish questions
285
+ - **Explain the question on each page** — "Which layout feels more professional?" not just "Pick one"
286
+ - **Iterate before advancing** — if feedback changes current screen, write a new version
287
+ - **2-4 options max** per screen
288
+ - **Use real content when it matters** — for a photography portfolio, use actual images (Unsplash). Placeholder content obscures design issues.
289
+ - **Keep mockups simple** — focus on layout and structure, not pixel-perfect design
290
+
291
+ ## File Naming
292
+
293
+ - Use semantic names: `platform.html`, `visual-style.html`, `layout.html`
294
+ - Never reuse filenames — each screen must be a new file
295
+ - For iterations: append version suffix like `layout-v2.html`, `layout-v3.html`
296
+ - Server serves newest file by modification time
297
+
298
+ ## Cleaning Up
299
+
300
+ ```bash
301
+ scripts/stop-server.sh $SESSION_DIR
302
+ ```
303
+
304
+ If the session used `--project-dir`, mockup files persist in `.superpowers/brainstorm/` for later reference. Only `/tmp` sessions get deleted on stop.
305
+
306
+ ## Reference
307
+
308
+ - Frame template (CSS reference): `scripts/frame-template.html`
309
+ - Helper script (client-side): `scripts/helper.js`
@@ -0,0 +1,182 @@
1
+ ---
2
+ name: playcraft-ad-psychology
3
+ description: 可玩广告心理设计指南。涵盖四大心理钩子(好奇心缺口/FOMO/即时满足/进度错觉)、60-30-10 色彩法则、CTA 设计规范、各阶段情感设计目标与常见错误。按游戏类型配色方案和音频情绪弧参数见 refs/artist-color-audio-recipes.md。
4
+ triggers: 广告心理,ad psychology,钩子,hook设计,FOMO,近胜,near-win,CTA设计,色彩法则,60-30-10,颜色策略,配色方案,情感弧,emotional arc,安装率,CTR,转化率,EndCard设计,进度条设计,游戏广告设计
5
+ ---
6
+
7
+ # 可玩广告心理设计完整指南
8
+
9
+ ## 0. 核心认知:优化目标是 CTR,不是游戏时长
10
+
11
+ **最重要的一句话**:可玩广告的成功指标是**安装点击率(CTR > 3%)**,不是玩家在广告内的游戏时长或互动率。
12
+
13
+ 这意味着:
14
+
15
+ - EndCard 不应该是"胜利满足感",而应该是"还没玩够"
16
+ - Tutorial 的目标不是让玩家学会玩,而是让玩家感到"我可以玩"
17
+ - Gameplay 不需要公平,需要的是让玩家觉得"再给我一次机会"
18
+ - 每一帧设计都要服务于最终的 CTA 点击
19
+
20
+ ---
21
+
22
+ ## 1. 四大心理钩子
23
+
24
+ ### 钩子 1:好奇心缺口(Curiosity Gap)
25
+
26
+ **心理原理**:人脑对"未完成"状态有强烈的认知驱动——看到一个悬而未决的问题,大脑会持续寻求解答。
27
+
28
+ **视觉设计指令**:
29
+
30
+ - Near-Win 状态:关键元素差一步就能达成(最后一块砖、差 1 颗星、进度条 95%)
31
+ - 不展示解法:只给出问题和"差一点"的状态,**不给解答**
32
+ - 制造张力:用视觉聚焦(模糊背景、高亮关键元素)引导注意力到未解决点
33
+
34
+ **Prompt 关键词**:`near win moment`, `almost there`, `one step away`, `progress bar at 95%`, `last piece missing`, `unresolved puzzle state`
35
+
36
+ **错误做法**:在 Gameplay 帧展示"已解决"的完美状态(会消除好奇心,减少安装动机)
37
+
38
+ ---
39
+
40
+ ### 钩子 2:FOMO + 损失厌恶(Fear of Missing Out)
41
+
42
+ **心理原理**:人对"失去"的感受比对"获得"的感受强 2 倍(Kahneman 损失厌恶理论)。
43
+
44
+ **视觉设计指令**:
45
+
46
+ - EndCard 展示"未拿到的奖励":宝箱半开、金币散落地面、奖励图标模糊显示
47
+ - 不展示胜利:不要"恭喜通关"、不要奖励动画播放完毕的满足状态
48
+ - 制造"差一步就错过"感:宝箱即将关闭、计时器快到零、稀有道具即将消失
49
+
50
+ **Prompt 关键词**:`treasure chest half open`, `rewards about to expire`, `coins scattered uncollected`, `rare item visible but unreachable`, `countdown almost zero`, `last chance visual`
51
+
52
+ **EndCard 设计原则**:
53
+
54
+ 1. 主视觉 = 最有价值的游戏内奖励(大宝箱/稀有角色/大金币堆)
55
+ 2. 这些奖励处于"触手可及但尚未到手"的状态
56
+ 3. CTA 按钮 = 唯一能拿到这些奖励的路径
57
+
58
+ ---
59
+
60
+ ### 钩子 3:即时满足(Instant Gratification)
61
+
62
+ **心理原理**:人类偏好立即的小奖励胜过未来的大奖励。Tutorial 阶段的核心任务是让玩家在 3-5 秒内体验到"做对了"的反馈。
63
+
64
+ **视觉设计指令**:
65
+
66
+ - Tutorial 帧必须"一眼看懂":画面信息密度最低(只显示 1-2 个可交互元素)
67
+ - 手势引导要大而清晰:手指点击图标 / 虚线箭头 / 高亮光圈,尺寸不小于元素的 1.5 倍
68
+ - 交互结果要夸张:正确操作的视觉反馈(爆炸、星星、得分)要比实际游戏中更夸张
69
+ - 色温略暖:相比 Hook 帧,Tutorial 帧整体色温偏暖,降低压迫感
70
+
71
+ **Prompt 关键词**:`large finger tap indicator`, `glowing highlight around target`, `bright tutorial arrow`, `warm color temperature`, `simplified single element focus`, `satisfying immediate feedback animation`
72
+
73
+ **Tutorial 禁忌**:
74
+
75
+ - 不要出现文字说明(玩家不读广告里的文字)
76
+ - 不要出现超过 3 个可交互元素(信息过载)
77
+ - 不要让 Tutorial 让玩家失败(第一次操作必须成功)
78
+
79
+ ---
80
+
81
+ ### 钩子 4:进度错觉(Progress Illusion)
82
+
83
+ **心理原理**:看到已完成的进度会激励继续完成,人们对"快完成了"比对"刚开始"更有动力。
84
+
85
+ **视觉设计指令**:
86
+
87
+ - 进度条设计在 75-90% 满格状态(而不是 0% 或 50%)
88
+ - 血条/能量条接近满格但不满(如 85%)
89
+ - 积分显示接近整数关卡(如 "980/1000" 而不是 "100/1000")
90
+ - 成就/收集类:显示"5/6 已收集"而不是"收集了 5 个"
91
+
92
+ **Prompt 关键词**:`progress bar 80% full`, `health bar nearly complete`, `score counter almost at milestone`, `collection 5 of 6 complete`, `achievement nearly unlocked`
93
+
94
+ ---
95
+
96
+ ## 2. 各阶段情感设计目标
97
+
98
+ | 阶段 | 时段 | 情感目标 | 关键视觉指标 |
99
+ | ------------ | ------ | ----------- | ---------------------------------- |
100
+ | **Hook** | 0–3s | 震撼 + 好奇 | 最高对比度,最大动感,主视觉冲击 |
101
+ | **Tutorial** | 3–10s | 安全 + 自信 | 最低信息密度,暖色调,大手势图标 |
102
+ | **Gameplay** | 10–25s | 沉浸 + 紧张 | 进度错觉,Near-Win,最高信息密度 |
103
+ | **EndCard** | 25–30s | 遗憾 + 渴望 | 奖励可见但未得,CTA 高对比,未竟感 |
104
+
105
+ ---
106
+
107
+ ## 3. 60-30-10 色彩法则(可玩广告版)
108
+
109
+ ### 三色分配
110
+
111
+ ```
112
+ 总画面配色 = 60% 主色(背景/场景) + 30% 辅色(游戏主元素) + 10% 强调色(CTA专用)
113
+ ```
114
+
115
+ **"对比稀缺性"原则**:强调色(10%)只出现在 CTA 按钮上时,玩家视线会被自动吸引到 CTA——强调色越少出现在其他地方,CTA 的吸引力越强。
116
+
117
+ **违规示例**:在游戏元素上大量使用橙色,然后 CTA 按钮也用橙色 → CTA 消失在视觉噪音中。
118
+
119
+ **正确示例**:游戏用蓝绿主色调,只有 CTA 按钮使用金橙色 → CTA 一眼突出。
120
+
121
+ ## 4. CTA 设计规范
122
+
123
+ ### 尺寸与位置
124
+
125
+ | 规范项 | 要求 | 原因 |
126
+ | ------------ | -------------------------- | -------------------------------- |
127
+ | 最小点击区域 | 48×48 px(设备物理像素) | 手指触控目标尺寸,防止误触 |
128
+ | 距屏幕边缘 | ≥ 48 px | 防止被平台 UI 遮挡,避免误触边框 |
129
+ | 视觉建议尺寸 | 200–400 px 宽(9:16 屏幕) | 足够显眼但不干扰游戏区域 |
130
+ | 位置 | 底部 1/4 区域,水平居中 | 符合拇指操作习惯 |
131
+
132
+ ### 对比度规范
133
+
134
+ CTA 按钮与其背景的对比度必须 **≥ 4.5:1**(WCAG AA 标准)。
135
+
136
+ ```
137
+ 常见合规组合(按钮色/背景色):
138
+ - 金橙 #F5A623 / 深蓝 #0D1B2A → 对比度 ~8.5:1 ✅
139
+ - 纯白 #FFFFFF / 主色按钮 → 白色文字在深色按钮上 ✅
140
+ - 鲜绿 #00C851 / 深灰 #222222 → 对比度 ~6.2:1 ✅
141
+ - 浅黄 #FFFF99 / 白色背景 → 对比度 ~1.2:1 ❌(不合规)
142
+ ```
143
+
144
+ 快速验证工具:告诉 Artist 用 `playcraft tools research --query "color contrast checker [color1] vs [color2]"` 快速查询。
145
+
146
+ ### 文案优先级
147
+
148
+ | 优先级 | 文案 | 适用场景 |
149
+ | --------- | -------------- | ------------------------- |
150
+ | 1(最优) | `Play Now` | 休闲/消除游戏(情感驱动) |
151
+ | 2 | `Install Free` | 强调免费降低决策成本 |
152
+ | 3 | `Download` | 通用,略弱于上两者 |
153
+ | 4(避免) | `Click Here` | 无情感引导,降低 CTR |
154
+
155
+ **Google Ads 限制**:不可将 "Download" 或 "Install" 文字**直接叠加在图片上**(会被审核拒绝)。应将文案放在按钮内的独立颜色区域。
156
+
157
+ ### CTA 动画建议
158
+
159
+ - 使用 `pulse` 动画(参考 `playcraft-vfx-animation` Skill)引导注意力
160
+ - 脉冲频率:1.5-2 秒一次(过快令人烦躁,过慢不引人注意)
161
+ - 第一次脉冲时机:EndCard 出现后 0.5 秒开始
162
+
163
+ ---
164
+
165
+ ## 5. 常见设计错误
166
+
167
+ | 错误 | 原因 | 正确做法 |
168
+ | -------------------------- | ----------------------------------------- | -------------------------------- |
169
+ | EndCard 展示胜利/满足状态 | 消除了 FOMO,玩家觉得"看完了,不用下载了" | 展示"差一步"的遗憾状态 |
170
+ | Tutorial 有文字说明 | 玩家不读广告文字 | 用图形化引导(手势图标/箭头) |
171
+ | CTA 颜色与游戏主色相同 | 对比稀缺性失效,CTA 不显眼 | CTA 用画面中唯一一种高对比强调色 |
172
+ | Gameplay 展示玩家失败 | 让玩家觉得游戏太难,不想下载 | 展示"即将成功"的 Near-Win 状态 |
173
+ | Hook 超过 3 秒才出现主视觉 | 用户已划走 | 0 帧就要高对比主视觉,无过渡铺垫 |
174
+ | 信息密度全帧均等 | 视觉无重点,注意力分散 | 每帧只有一个视觉焦点 |
175
+
176
+ ---
177
+
178
+ ## 6. 按游戏类型配色方案与音频情绪弧
179
+
180
+ 按游戏类型的配色方案(休闲消除、策略战争、益智解谜、RPG 奇幻,含 hex 值与情感定位)和完整音频情绪弧设计参数(BGM 各阶段 BPM、垂直重编排、SFX 时长标准、音频-视觉对齐检查清单):
181
+
182
+ 详见 `refs/artist-color-audio-recipes.md`。
@@ -0,0 +1,123 @@
1
+ ---
2
+ name: playcraft-art-style-guide
3
+ description: 可玩广告美术风格选择与应用指南。涵盖 9 种主流风格的视觉特征、选型决策树(按游戏类型/受众/品牌调性)、风格对生产流水线的影响、以及各风格的 prompt 核心策略。Artist 在 Phase 1 确定美术方向前必读。
4
+ triggers: 美术风格,art style,像素风,pixel art,写实,realistic,卡通,cartoon,扁平,flat,科技风,tech,科幻,sci-fi,赛博朋克,cyberpunk,奇幻,fantasy,中国风,chinese,水彩,watercolor,手绘,Q版,chibi,风格选择,style direction,视觉风格
5
+ ---
6
+
7
+ # PlayCraft 美术风格选择与应用指南
8
+
9
+ ## 0. 风格选择的设计思考
10
+
11
+ 美术风格不是"好看就行"——它直接影响:
12
+
13
+ - **CTR 表现**:风格与目标受众的审美期待是否匹配
14
+ - **生产成本**:不同风格对 AI 生图质量要求和后处理复杂度差异极大
15
+ - **文件体积**:像素风天然小,写实风天然大——直接影响 5MB 预算分配
16
+ - **TA 管线**:像素风需要整数倍缩放 + 限色板;写实风需要高分辨率 + 精细抠图
17
+
18
+ **风格决策时机**:Game Designer 在 `design-brief.md` 的 StyleDirection 中定义方向,Artist 在 Phase 1 具体化并生成样本验证。
19
+
20
+ ---
21
+
22
+ ## 1. 风格选型决策树
23
+
24
+ ```
25
+ 游戏类型 + 目标受众?
26
+ │
27
+ ├─ 休闲消除/益智 + 全年龄
28
+ │ ├─ 追求高辨识度/IP感 → Q版/Chibi
29
+ │ ├─ 追求简洁现代 → 扁平卡通
30
+ │ └─ 追求怀旧/独特 → 像素风
31
+ │
32
+ ├─ 卡牌/棋牌/麻将 + 成年用户
33
+ │ ├─ 中国市场 → 中国传统风
34
+ │ ├─ 全球市场/高端感 → 写实/半写实
35
+ │ └─ 年轻用户/轻量感 → 扁平卡通
36
+ │
37
+ ├─ 动作/射击/跑酷 + 年轻男性
38
+ │ ├─ 现代/都市 → 赛博朋克/科技风
39
+ │ ├─ 太空/未来 → 科幻风
40
+ │ └─ 魔法/剑与盾 → 奇幻风
41
+ │
42
+ ├─ 模拟经营/养成 + 女性/全年龄
43
+ │ ├─ 追求温暖治愈 → 水彩/手绘
44
+ │ ├─ 追求可爱萌系 → Q版/Chibi
45
+ │ └─ 追求清新文艺 → 扁平卡通
46
+ │
47
+ └─ RPG/冒险 + 核心玩家
48
+ ├─ 西方奇幻 → 奇幻风
49
+ ├─ 东方仙侠 → 中国传统风
50
+ └─ 暗黑/硬核 → 写实/半写实
51
+ ```
52
+
53
+ ---
54
+
55
+ ## 2. 九种风格速览
56
+
57
+ | # | 风格 | 视觉特征 | 体积倾向 | AI 生图难度 | 最佳模型 |
58
+ | --- | ------------------- | ------------------------------------ | -------- | ---------------- | -------------------- |
59
+ | 1 | **像素风** | 方块化、限色板(8-32色)、无抗锯齿 | 极小 | 中(需严格限色) | gpt-image-2 |
60
+ | 2 | **扁平卡通** | 粗描边、纯色填充、几何化、无渐变阴影 | 小 | 低 | 任意模型 |
61
+ | 3 | **Q版/Chibi** | 大头身比(2-3头)、圆润形状、夸张表情 | 小-中 | 低 | 任意模型 |
62
+ | 4 | **写实/半写实** | 真实光影、材质细节、自然比例 | 大 | 高(细节要求高) | gpt-image-2 |
63
+ | 5 | **中国传统风** | 水墨笔触、留白、金色装饰、书法元素 | 中 | 中(需文化细节) | gpt-image-2 |
64
+ | 6 | **赛博朋克/科技风** | 霓虹光、暗底、几何线条、HUD 叠加 | 中 | 中 | gpt-image-2 / gemini |
65
+ | 7 | **科幻风** | 金属质感、星空、全息UI、冷色调 | 中 | 中 | gpt-image-2 |
66
+ | 8 | **奇幻/魔法** | 发光粒子、魔法阵、饱和色彩、神秘光 | 中-大 | 中 | gpt-image-2 |
67
+ | 9 | **水彩/手绘** | 纸质纹理、渗透感、不规则边缘、柔和 | 中 | 中(边缘控制难) | gpt-image-2 |
68
+
69
+ ---
70
+
71
+ ## 3. 风格对 TA 管线的影响
72
+
73
+ | 风格 | 缩放策略 | 抠图难度 | VFX 适配 | 特殊注意 |
74
+ | ----------- | ------------------------------------- | ----------------- | ------------------------ | ------------------------------- |
75
+ | 像素风 | 整数倍(`--scale 2/4/8`),禁止分数缩放 | 低(硬边) | `pixelate` 后 VFX | 缩放后禁用抗锯齿 |
76
+ | 扁平卡通 | 任意缩放 | 低(粗描边清晰) | 所有 VFX 兼容 | 描边粗细要统一 |
77
+ | Q版/Chibi | 任意缩放 | 低-中 | 所有 VFX 兼容 | 头身比一致性 |
78
+ | 写实/半写实 | 只降不升(原图需高分辨率) | 高(毛发/半透明) | 写实 VFX 慎用卡通预设 | 需 AI 去背(--method ai) |
79
+ | 中国传统风 | 任意缩放 | 中(水墨渐变边) | glow/sparkle 适合 | 文字必须楷体/行书 |
80
+ | 赛博朋克 | 任意缩放 | 中(发光溢出) | glow/starburst 适合 | 发光边缘保留,不要过度 trim |
81
+ | 科幻风 | 任意缩放 | 中 | glow/impact_ring 适合 | 金属质感需 reference-image 锁定 |
82
+ | 奇幻/魔法 | 任意缩放 | 中(魔法粒子) | sparkle/glow/starburst | 粒子效果保留半透明 |
83
+ | 水彩/手绘 | 任意缩放 | 高(不规则边缘) | 慎用——VFX 可能破坏手绘感 | trim threshold 要高(30+) |
84
+
85
+ ---
86
+
87
+ ## 4. Prompt 核心策略(按风格)
88
+
89
+ 每种风格的 prompt 都遵循公式:`[主体] + [风格关键词] + [技术约束] + [负面约束]`
90
+
91
+ | 风格 | 核心关键词 | 必加约束 | 必加负面 |
92
+ | --------- | ------------------------------------------------------------------------------ | ----------------------- | ----------------------------------------------------- |
93
+ | 像素风 | `pixel art, 8-bit, limited N-color palette, sharp pixels, no anti-aliasing` | 指定色板数量 | `no smooth gradients, no anti-aliasing, no blur` |
94
+ | 扁平卡通 | `flat 2D vector, bold outlines, solid color fills, minimal shading` | 描边粗细(如 3px) | `no gradient, no 3D effect, no realistic shading` |
95
+ | Q版/Chibi | `chibi style, cute, 2.5-head proportion, round shapes, big eyes` | 头身比 | `no realistic proportion, no thin limbs` |
96
+ | 写实 | `photorealistic, detailed textures, natural lighting, high resolution` | 光源方向 | `no cartoon, no flat color, no cel-shading` |
97
+ | 中国传统 | `Chinese traditional ink painting, brush strokes, elegant, gold accents` | 留白比例 | `no western fantasy, no neon, no modern UI` |
98
+ | 赛博朋克 | `cyberpunk, neon glow, dark background, holographic, circuit patterns` | 发光色(如 cyan/magenta) | `no nature, no warm colors, no daylight` |
99
+ | 科幻 | `sci-fi, metallic surfaces, space, holographic UI, cold blue lighting` | 材质(金属/玻璃) | `no organic textures, no warm wood, no fantasy magic` |
100
+ | 奇幻 | `fantasy art, magical glow, ethereal, mystical atmosphere, rich colors` | 光源类型(魔法光) | `no modern technology, no sci-fi, no urban` |
101
+ | 水彩 | `watercolor painting, soft edges, paper texture, transparent washes, artistic` | 纸张纹理 | `no hard edges, no digital look, no sharp outlines` |
102
+
103
+ ---
104
+
105
+ ## 5. 风格一致性检查点
106
+
107
+ 生成样本后,对照以下维度确认风格执行是否到位:
108
+
109
+ | 维度 | 检查方法 | 不通过时调整 |
110
+ | -------- | ---------------------------- | ------------------------ |
111
+ | **色板** | 肉眼对比概念图主色 | prompt 加具体 hex 值 |
112
+ | **描边** | 放大看边缘处理 | 加/减 `bold outline Npx` |
113
+ | **光影** | 对比光源方向和阴影风格 | 明确光照描述 |
114
+ | **材质** | 对比表面纹理(哑光/光泽/粗糙) | 加材质修饰词 |
115
+ | **比例** | 对比元素间大小关系 | 加尺寸约束描述 |
116
+
117
+ ---
118
+
119
+ ## 6. 详细参考
120
+
121
+ 每种风格的完整 prompt 示例、模型推荐、TA 管线详细配置、常见错误与修正:
122
+
123
+ > **Read `refs/artist-art-style-catalog.md`**