@playcraft/cli 0.0.44 → 0.0.47
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/atom-tree/build-skeleton.js +180 -0
- package/dist/atom-tree/fusion-hints.js +86 -0
- package/dist/atom-tree/selection.js +402 -0
- package/dist/commands/build-all.js +33 -5
- package/dist/commands/build.js +7 -1
- package/dist/commands/create.js +774 -50
- package/dist/commands/image.js +11 -0
- package/dist/commands/prad.js +61 -0
- package/dist/commands/remix.js +20 -0
- package/dist/commands/skills.js +961 -185
- package/dist/commands/tools-detect.js +56 -0
- package/dist/commands/tools-generation.js +21 -0
- package/dist/commands/tools-video-review.js +100 -0
- package/dist/commands/tools.js +4 -0
- package/dist/index.js +2 -0
- package/dist/prad/atom-ref.js +23 -0
- package/dist/prad/check.js +377 -0
- package/dist/prad/check.test.js +49 -0
- package/dist/prad/explain.js +109 -0
- package/dist/prad/load-spec.js +23 -0
- package/dist/prad/paths.js +83 -0
- package/dist/prad/skills-index.js +60 -0
- package/dist/remix/init-template.js +80 -0
- package/dist/scaffold/compose.js +211 -0
- package/engine-packs/phaser/game/adapters/phaser.ts +52 -0
- package/engine-packs/phaser/game/config/game-config.ts +46 -0
- package/engine-packs/phaser/game/contract/publish.ts +141 -0
- package/engine-packs/phaser/game/contract/types.ts +34 -0
- package/engine-packs/phaser/game/index.ts +81 -0
- package/engine-packs/phaser/game/runtime-contract.ts +28 -0
- package/engine-packs/phaser/manifest.json +1 -0
- package/engine-packs/phaser/package.deps.json +1 -0
- package/engine-packs/threejs/game/config/.gitkeep +0 -0
- package/engine-packs/threejs/game/config/game-config.ts +46 -0
- package/engine-packs/threejs/game/contract/publish.ts +141 -0
- package/engine-packs/threejs/game/contract/types.ts +34 -0
- package/engine-packs/threejs/game/gameplay/.gitkeep +0 -0
- package/engine-packs/threejs/game/index.ts +76 -0
- package/engine-packs/threejs/game/runtime-contract.ts +15 -0
- package/engine-packs/threejs/game/scenes/.gitkeep +0 -0
- package/engine-packs/threejs/manifest.json +1 -0
- package/engine-packs/threejs/package.deps.json +8 -0
- package/package.json +18 -4
- package/project-template/.claude/agents/artist.md +101 -0
- package/project-template/.claude/agents/developer.md +90 -93
- package/project-template/.claude/agents/game-designer.md +192 -0
- package/project-template/.claude/agents/refs/README.md +57 -51
- package/project-template/.claude/agents/refs/{designer-color-audio-recipes.md → artist-color-audio-recipes.md} +2 -2
- package/project-template/.claude/agents/refs/{designer-deliverable-spec.md → artist-deliverable-spec.md} +57 -57
- package/project-template/.claude/agents/refs/{designer-dimension-axis.md → artist-dimension-axis.md} +5 -5
- package/project-template/.claude/agents/refs/{designer-handoff-v2-checklist.md → artist-handoff-v2-checklist.md} +15 -15
- package/project-template/.claude/agents/refs/artist-legacy-fallback.md +14 -0
- package/project-template/.claude/agents/refs/{designer-master-composite-recipes.md → artist-master-composite-recipes.md} +3 -3
- package/project-template/.claude/agents/refs/artist-style-exploration-flow.md +55 -0
- package/project-template/.claude/agents/refs/developer-dev-handoff.md +83 -40
- package/project-template/.claude/agents/refs/developer-impl-cookbook.md +365 -67
- package/project-template/.claude/agents/refs/developer-legacy-fallback.md +15 -0
- package/project-template/.claude/agents/refs/developer-phase1-flow.md +131 -85
- package/project-template/.claude/agents/refs/framework-5-component-filter.md +252 -0
- package/project-template/.claude/agents/refs/framework-game-feel-juice.md +266 -0
- package/project-template/.claude/agents/refs/framework-mda.md +147 -0
- package/project-template/.claude/agents/refs/game-designer-gameplay-sufficiency.md +123 -0
- package/project-template/.claude/agents/refs/game-designer-legacy-fallback.md +15 -0
- package/project-template/.claude/agents/refs/game-designer-workflow-detail.md +69 -0
- package/project-template/.claude/agents/refs/implementation-plan-guide.md +316 -0
- package/project-template/.claude/agents/refs/reviewer-convergence-eval.md +247 -33
- package/project-template/.claude/agents/refs/reviewer-legacy-fallback.md +14 -0
- package/project-template/.claude/agents/refs/skill-selector-guide.md +465 -0
- package/project-template/.claude/agents/refs/skill-value-layers.md +145 -0
- package/project-template/.claude/agents/refs/storyboard-generation-guide.md +110 -0
- package/project-template/.claude/agents/refs/ta-atlas-deliverable-standard.md +4 -4
- package/project-template/.claude/agents/refs/ta-pipeline-cookbook.md +101 -104
- package/project-template/.claude/agents/refs/technical-artist-legacy-fallback.md +14 -0
- package/project-template/.claude/agents/reviewer.md +81 -95
- package/project-template/.claude/agents/technical-artist.md +71 -95
- package/project-template/.claude/hooks/README.md +83 -35
- package/project-template/.claude/hooks/asr-coverage-validate.mjs +19 -19
- package/project-template/.claude/hooks/block-developer-preflight.mjs +185 -0
- package/project-template/.claude/hooks/block-ring1-tasklist.mjs +95 -0
- package/project-template/.claude/hooks/gate-dispatcher.mjs +78 -0
- package/project-template/.claude/hooks/gate-runner.mjs +557 -0
- package/project-template/.claude/hooks/gate.mjs +170 -0
- package/project-template/.claude/hooks/snapshot-milestone.mjs +246 -0
- package/project-template/.claude/hooks/user-prompt.mjs +193 -0
- package/project-template/.claude/hooks/validate-atom-tree-selection.mjs +281 -0
- package/project-template/.claude/hooks/validate-workflow-stop.mjs +1535 -95
- package/project-template/.claude/settings.json +54 -9
- package/project-template/.claude/skills/brainstorming/SKILL.md +161 -0
- package/project-template/.claude/skills/brainstorming/scripts/frame-template.html +270 -0
- package/project-template/.claude/skills/brainstorming/scripts/helper.js +177 -0
- package/project-template/.claude/skills/brainstorming/scripts/server.cjs +354 -0
- package/project-template/.claude/skills/brainstorming/scripts/start-server.sh +148 -0
- package/project-template/.claude/skills/brainstorming/scripts/stop-server.sh +56 -0
- package/project-template/.claude/skills/brainstorming/scripts/wait-for-selection.sh +62 -0
- package/project-template/.claude/skills/brainstorming/spec-document-reviewer-prompt.md +49 -0
- package/project-template/.claude/skills/brainstorming/visual-companion.md +309 -0
- package/project-template/.claude/skills/playcraft-ad-psychology/SKILL.md +3 -3
- package/project-template/.claude/skills/playcraft-art-style-guide/SKILL.md +3 -3
- package/project-template/.claude/skills/playcraft-asset-state-sheet/SKILL.md +35 -25
- package/project-template/.claude/skills/playcraft-audio-generation/SKILL.md +15 -15
- package/project-template/.claude/skills/playcraft-build-optimizer/SKILL.md +5 -5
- package/project-template/.claude/skills/playcraft-image-generation/SKILL.md +5 -5
- package/project-template/.claude/skills/playcraft-image-generation/reference/compare-style.template.mjs +5 -5
- package/project-template/.claude/skills/playcraft-image-generation/reference/gen-batch-sprite.template.mjs +116 -27
- package/project-template/.claude/skills/playcraft-image-generation/reference/prompt-cookbook.md +1 -1
- package/project-template/.claude/skills/playcraft-image-processing/SKILL.md +219 -0
- package/project-template/.claude/skills/playcraft-playable-optimization/SKILL.md +161 -0
- package/project-template/.claude/skills/playcraft-research/SKILL.md +24 -21
- package/project-template/.claude/skills/playcraft-skill-recommender/SKILL.md +331 -0
- package/project-template/.claude/skills/playcraft-sprite-generation/SKILL.md +48 -48
- package/project-template/.claude/skills/playcraft-sprite-remix/SKILL.md +158 -0
- package/project-template/.claude/skills/playcraft-sprite-sheet/SKILL.md +100 -0
- package/project-template/.claude/skills/playcraft-storyboard/SKILL.md +4 -4
- package/project-template/.claude/skills/playcraft-style-qa/SKILL.md +45 -45
- package/project-template/.claude/skills/playcraft-text-rendering/SKILL.md +27 -27
- package/project-template/.claude/skills/session-analyzer/SKILL.md +386 -0
- package/project-template/.claude/skills/session-analyzer/scripts/execution-breakdown.mjs +182 -0
- package/project-template/.claude/skills/session-analyzer/scripts/find-turns.mjs +72 -0
- package/project-template/.claude/skills/session-analyzer/scripts/heavy-output.mjs +121 -0
- package/project-template/.claude/skills/session-analyzer/scripts/resolve-session.mjs +103 -0
- package/project-template/.claude/skills/session-analyzer/scripts/subagent-stats.mjs +127 -0
- package/project-template/.claude/skills/session-analyzer/scripts/subagent-tool-timeline.mjs +106 -0
- package/project-template/.claude/skills/session-analyzer/scripts/time-gaps.mjs +128 -0
- package/project-template/.claude/skills/session-analyzer/scripts/turn-timeline.mjs +67 -0
- package/project-template/.claude/snapshot.mjs +350 -0
- package/project-template/.codebuddy/settings.json +53 -0
- package/project-template/.cursor/hooks.json +1 -1
- package/project-template/.cursor/rules/playcraft-orchestrator.mdc +91 -86
- package/project-template/.cursor/rules/playcraft-subagent-boundary.mdc +16 -5
- package/project-template/CHANGELOG.md +105 -0
- package/project-template/CLAUDE.md +58 -254
- package/project-template/docs/DESIGN.md +65 -0
- package/project-template/docs/intent-clarifications.md +58 -0
- package/project-template/docs/pipeline-overview.md +69 -0
- package/project-template/docs/project-state.md +211 -0
- package/project-template/docs/team/agent-conduct.md +51 -105
- package/project-template/docs/team/agent-runtime-matrix.md +60 -74
- package/project-template/docs/team/atom-tree-format.md +169 -0
- package/project-template/docs/team/collaboration.md +319 -225
- package/project-template/docs/team/core-model.md +80 -46
- package/project-template/docs/team/game-designer-migration-todo.md +8 -0
- package/project-template/docs/team/harness-legacy-deprecation.md +23 -0
- package/project-template/docs/team/platform-capabilities.md +16 -13
- package/project-template/docs/team/workflow-changelog.md +95 -23
- package/project-template/docs/team/workflow-consistency-checklist.md +93 -45
- package/project-template/focus-lab/.gitkeep +0 -0
- package/project-template/game/.playcraft-scaffold-pending +0 -0
- package/project-template/game/index.ts +18 -0
- package/project-template/globals.d.ts +51 -0
- package/project-template/index.css +34 -0
- package/project-template/index.html +18 -0
- package/project-template/main.ts +9 -0
- package/project-template/package.json +79 -0
- package/project-template/skills/README.md +52 -0
- package/project-template/skills/_shared/agent-prep.md +136 -0
- package/project-template/skills/_shared/requirements.txt +1 -0
- package/project-template/skills/_shared/scripts/__pycache__/placeholder_audio_lib.cpython-311.pyc +0 -0
- package/project-template/skills/_shared/scripts/__pycache__/placeholder_lib.cpython-311.pyc +0 -0
- package/project-template/skills/_shared/scripts/build-evidence-gate.mjs +87 -0
- package/project-template/skills/_shared/scripts/context-budget.mjs +215 -0
- package/project-template/skills/_shared/scripts/create-playable.mjs +140 -0
- package/project-template/skills/_shared/scripts/dev-start.mjs +151 -0
- package/project-template/skills/_shared/scripts/disclosure-config.mjs +480 -0
- package/project-template/skills/_shared/scripts/ensure-project.mjs +532 -0
- package/project-template/skills/_shared/scripts/gen-placeholder-audio.py +345 -0
- package/project-template/skills/_shared/scripts/gen-placeholder.py +244 -0
- package/project-template/skills/_shared/scripts/harness-smoke.mjs +257 -0
- package/project-template/skills/_shared/scripts/lib/validator-artifacts.mjs +129 -0
- package/project-template/skills/_shared/scripts/placeholder-pack-sheet.mjs +67 -0
- package/project-template/skills/_shared/scripts/placeholder_audio_lib.py +142 -0
- package/project-template/skills/_shared/scripts/placeholder_lib.py +993 -0
- package/project-template/skills/_shared/scripts/render-project-state.mjs +278 -0
- package/project-template/skills/_shared/scripts/ring-config.mjs +252 -0
- package/project-template/skills/_shared/scripts/skills-check.mjs +176 -0
- package/project-template/skills/_shared/scripts/slice-set.mjs +77 -0
- package/project-template/skills/_shared/scripts/state-advance-ring.mjs +63 -0
- package/project-template/skills/_shared/scripts/state-get.mjs +215 -0
- package/project-template/skills/_shared/scripts/state-handoff.mjs +120 -0
- package/project-template/skills/_shared/scripts/state-set.mjs +113 -0
- package/project-template/skills/_shared/scripts/state-store.mjs +893 -0
- package/project-template/skills/_shared/scripts/sync-template-skills.mjs +112 -0
- package/project-template/skills/_shared/scripts/verify-asset-code-sync.mjs +265 -0
- package/project-template/skills/_shared/scripts/verify-atom-conformance.mjs +181 -0
- package/project-template/skills/_shared/scripts/verify-env.mjs +285 -0
- package/project-template/skills/_shared/scripts/verify-placeholders.mjs +161 -0
- package/project-template/skills/_shared/scripts/workflow-doctor.mjs +348 -0
- package/project-template/skills/playable-animate/SKILL.md +52 -0
- package/project-template/skills/playable-animate/agents/openai.yaml +4 -0
- package/project-template/skills/playable-animate/references/board-refresh.md +30 -0
- package/project-template/skills/playable-animate/references/diagnosis-checklist.md +25 -0
- package/project-template/skills/playable-animate/references/entrance-sequencing.md +33 -0
- package/project-template/skills/playable-animate/references/interaction-timing.md +23 -0
- package/project-template/skills/playable-art/SKILL.md +203 -0
- package/project-template/skills/playable-art/agents/openai.yaml +4 -0
- package/project-template/skills/playable-art/references/alpha-postprocess.md +46 -0
- package/project-template/skills/playable-art/references/cta-art-spec.md +59 -0
- package/project-template/skills/playable-art/references/layout-proportions.md +30 -0
- package/project-template/skills/playable-art/references/prompt-patterns.md +83 -0
- package/project-template/skills/playable-art/references/reference-comparison.md +30 -0
- package/project-template/skills/playable-art/references/sheet-import-v2.md +91 -0
- package/project-template/skills/playable-art/scripts/__pycache__/import-gpt-art-sheets-v2.cpython-311.pyc +0 -0
- package/project-template/skills/playable-art/scripts/__pycache__/import_gpt_art_pipeline.cpython-311.pyc +0 -0
- package/project-template/skills/playable-art/scripts/__pycache__/review-processed-assets.cpython-311.pyc +0 -0
- package/project-template/skills/playable-art/scripts/build-atlas.py +332 -0
- package/project-template/skills/playable-art/scripts/chroma-key.py +50 -0
- package/project-template/skills/playable-art/scripts/extract-alpha-split.py +65 -0
- package/project-template/skills/playable-art/scripts/extract-dual-bg-alpha.py +118 -0
- package/project-template/skills/playable-art/scripts/import-gpt-art-sheets-v2.py +403 -0
- package/project-template/skills/playable-art/scripts/import-gpt-art-sheets.py +280 -0
- package/project-template/skills/playable-art/scripts/import-gpt-tile-sheet.py +114 -0
- package/project-template/skills/playable-art/scripts/import_gpt_art_pipeline.py +321 -0
- package/project-template/skills/playable-art/scripts/import_gpt_art_sheets_v2_test.py +126 -0
- package/project-template/skills/playable-art/scripts/placeholder_common.py +98 -0
- package/project-template/skills/playable-art/scripts/remove-bg.py +91 -0
- package/project-template/skills/playable-art/scripts/review-processed-assets.py +468 -0
- package/project-template/skills/playable-art/scripts/review_processed_assets_test.py +116 -0
- package/project-template/skills/playable-art/scripts/verify-alpha-clean.py +105 -0
- package/project-template/skills/playable-debug/SKILL.md +116 -0
- package/project-template/skills/playable-debug/agents/openai.yaml +4 -0
- package/project-template/skills/playable-debug/references/debug-config.md +40 -0
- package/project-template/skills/playable-focus/SKILL.md +148 -0
- package/project-template/skills/playable-focus/scripts/bootstrap-playground.mjs +84 -0
- package/project-template/skills/playable-focus/scripts/extract-focus-frames.mjs +87 -0
- package/project-template/skills/playable-focus/scripts/generate-focus-reports.mjs +121 -0
- package/project-template/skills/playable-focus/scripts/playground.mjs +390 -0
- package/project-template/skills/playable-focus/templates/focus-lab/frame.html +39 -0
- package/project-template/skills/playable-focus/templates/focus-lab/harness/clean-stage.js +114 -0
- package/project-template/skills/playable-focus/templates/focus-lab/harness/frame-lab-scene.js +94 -0
- package/project-template/skills/playable-focus/templates/focus-lab/harness/particle-lab-scene.js +224 -0
- package/project-template/skills/playable-focus/templates/focus-lab/model.html +16 -0
- package/project-template/skills/playable-focus/templates/focus-lab/particle.html +38 -0
- package/project-template/skills/playable-focus/templates/focus-lab/shatter.html +47 -0
- package/project-template/skills/playable-focus/templates/playground/registry.template.json +55 -0
- package/project-template/skills/playable-focus/templates/playground/vfx-catalog.template.json +280 -0
- package/project-template/skills/playable-fx-decompose/SKILL.md +212 -0
- package/project-template/skills/playable-fx-decompose/examples.md +89 -0
- package/project-template/skills/playable-fx-decompose/reference.md +201 -0
- package/project-template/skills/playable-fx-decompose/requirements.txt +2 -0
- package/project-template/skills/playable-fx-decompose/scripts/build-blank-tile-crack.py +192 -0
- package/project-template/skills/playable-fx-decompose/scripts/fix-shard-debris-frames.py +60 -0
- package/project-template/skills/playable-fx-decompose/scripts/generate-shard-debris.py +276 -0
- package/project-template/skills/playable-fx-peak/SKILL.md +237 -0
- package/project-template/skills/playable-fx-peak/requirements.txt +2 -0
- package/project-template/skills/playable-fx-peak/scripts/fix-frame-edges.py +70 -0
- package/project-template/skills/playable-fx-peak/scripts/repack-frame-sequence.py +526 -0
- package/project-template/skills/playable-fx-peak/scripts/validate-frame-anchors.py +130 -0
- package/project-template/skills/playable-placeholder/SKILL.md +239 -0
- package/project-template/skills/playable-record/SKILL.md +166 -0
- package/project-template/skills/playable-record/scripts/lib/build-artifact.mjs +92 -0
- package/project-template/skills/playable-record/scripts/lib/dev-server.mjs +104 -0
- package/project-template/skills/playable-record/scripts/lib/record-audio-bridge.js +141 -0
- package/project-template/skills/playable-record/scripts/lib/slice-structure-verify.mjs +199 -0
- package/project-template/skills/playable-record/scripts/record-playable.mjs +583 -0
- package/project-template/skills/playable-record/scripts/verify-build.mjs +185 -0
- package/project-template/skills/playable-record/scripts/verify-contract.mjs +261 -0
- package/project-template/skills/playable-record/scripts/verify-firstwin.mjs +398 -0
- package/project-template/skills/playable-record/scripts/verify-fusion.mjs +320 -0
- package/project-template/skills/playable-record/scripts/verify-lifecycle.mjs +78 -0
- package/project-template/skills/playable-record/scripts/verify-slice-artist.mjs +53 -0
- package/project-template/skills/playable-record/scripts/verify-slice-ta.mjs +53 -0
- package/project-template/skills/playable-record/scripts/verify-slice.mjs +142 -0
- package/project-template/skills/playable-record/scripts/verify-visual-ring.mjs +250 -0
- package/project-template/skills/playable-record/scripts/verify-visual-ring1.mjs +190 -0
- package/project-template/skills/playable-record/scripts/verify-vlm-video.mjs +227 -0
- package/project-template/skills/playable-validate/SKILL.md +260 -0
- package/project-template/skills/playable-validate/references/checklist-detail.md +36 -0
- package/project-template/skills/playable-validate/references/single-html-bundle.md +76 -0
- package/project-template/skills/playable-validate/validation-rules.md +200 -0
- package/project-template/skills/playable-verify-ui/SKILL.md +295 -0
- package/project-template/skills/playable-verify-ui/examples/asset-manifest.example.json +36 -0
- package/project-template/skills/playable-verify-ui/examples/mahjong-match.profile.yaml +334 -0
- package/project-template/skills/playable-verify-ui/profiles/template.profile.yaml +84 -0
- package/project-template/skills/playable-verify-ui/reference.md +165 -0
- package/project-template/skills/playable-verify-ui/references/phaser-patterns.md +67 -0
- package/project-template/skills/playable-verify-ui/references/scaling-decision-tree.md +51 -0
- package/project-template/skills/playable-verify-ui/requirements.txt +7 -0
- package/project-template/skills/playable-verify-ui/schema/asset-manifest.schema.json +68 -0
- package/project-template/skills/playable-verify-ui/schema/playable-ui-profile.schema.json +171 -0
- package/project-template/skills/playable-verify-ui/scripts/__pycache__/asset_manifest.cpython-311.pyc +0 -0
- package/project-template/skills/playable-verify-ui/scripts/__pycache__/verify_slice_plan.cpython-311.pyc +0 -0
- package/project-template/skills/playable-verify-ui/scripts/__pycache__/verify_vision_evidence.cpython-311.pyc +0 -0
- package/project-template/skills/playable-verify-ui/scripts/asset_manifest.py +231 -0
- package/project-template/skills/playable-verify-ui/scripts/lib/__init__.py +1 -0
- package/project-template/skills/playable-verify-ui/scripts/lib/config_expr.js +218 -0
- package/project-template/skills/playable-verify-ui/scripts/lib/node_utils.js +51 -0
- package/project-template/skills/playable-verify-ui/scripts/lib/profile_loader.py +59 -0
- package/project-template/skills/playable-verify-ui/scripts/lib/report.py +106 -0
- package/project-template/skills/playable-verify-ui/scripts/lib/runtime_contract.js +116 -0
- package/project-template/skills/playable-verify-ui/scripts/measure_frame_content.py +77 -0
- package/project-template/skills/playable-verify-ui/scripts/run_all.py +265 -0
- package/project-template/skills/playable-verify-ui/scripts/verify_asset_sizes.py +77 -0
- package/project-template/skills/playable-verify-ui/scripts/verify_assets_present.py +62 -0
- package/project-template/skills/playable-verify-ui/scripts/verify_atlas_budget.py +84 -0
- package/project-template/skills/playable-verify-ui/scripts/verify_atlas_frames.py +79 -0
- package/project-template/skills/playable-verify-ui/scripts/verify_bg_clean.py +365 -0
- package/project-template/skills/playable-verify-ui/scripts/verify_doc_asset_sync.py +90 -0
- package/project-template/skills/playable-verify-ui/scripts/verify_fetch_antipatterns.py +59 -0
- package/project-template/skills/playable-verify-ui/scripts/verify_game_config_load.js +54 -0
- package/project-template/skills/playable-verify-ui/scripts/verify_hardcoded_layout.js +64 -0
- package/project-template/skills/playable-verify-ui/scripts/verify_layout_regions.js +110 -0
- package/project-template/skills/playable-verify-ui/scripts/verify_profile_schema.py +37 -0
- package/project-template/skills/playable-verify-ui/scripts/verify_ring1_visual.py +211 -0
- package/project-template/skills/playable-verify-ui/scripts/verify_runtime_contract.js +58 -0
- package/project-template/skills/playable-verify-ui/scripts/verify_script_load_order.js +73 -0
- package/project-template/skills/playable-verify-ui/scripts/verify_slice_plan.py +238 -0
- package/project-template/skills/playable-verify-ui/scripts/verify_slice_plan_test.py +125 -0
- package/project-template/skills/playable-verify-ui/scripts/verify_text_overlap.py +333 -0
- package/project-template/skills/playable-verify-ui/scripts/verify_tile_consistency.py +323 -0
- package/project-template/skills/playable-verify-ui/scripts/verify_vision_evidence.py +894 -0
- package/project-template/skills/playable-verify-ui/scripts/verify_vision_evidence_test.py +122 -0
- package/project-template/skills/playable-verify-ui/scripts/verify_visual.py +422 -0
- package/project-template/templates/{designer-log.template.md → artist-log.template.md} +26 -31
- package/project-template/templates/atom-tree.template.json +133 -0
- package/project-template/templates/design-brief.template.md +59 -162
- package/project-template/templates/design-lens-checklist.reference.md +14 -14
- package/project-template/templates/design-methodology.md +25 -25
- package/project-template/templates/design.template.md +50 -0
- package/project-template/templates/developer-log.template.md +187 -63
- package/project-template/templates/five-axis-framework.md +89 -44
- package/project-template/templates/gen-placeholder-audio.template.mjs +63 -0
- package/project-template/templates/gen-placeholders.template.mjs +81 -0
- package/project-template/templates/intent-clarifications.template.md +7 -7
- package/project-template/templates/layout-spec.template.md +32 -20
- package/project-template/templates/plan.template.md +80 -0
- package/project-template/templates/project-state.template.md +90 -191
- package/project-template/templates/review-report.template.md +208 -24
- package/project-template/templates/style-exploration.template.md +8 -8
- package/project-template/templates/ta-log.template.md +58 -35
- package/project-template/tsconfig.json +20 -0
- package/project-template/vite.config.ts +27 -0
- package/project-templates/phaser/.claude/agents/artist.md +101 -0
- package/project-templates/phaser/.claude/agents/developer.md +123 -0
- package/project-templates/phaser/.claude/agents/game-designer.md +192 -0
- package/project-templates/phaser/.claude/agents/refs/README.md +77 -0
- package/project-templates/phaser/.claude/agents/refs/artist-art-style-catalog.md +533 -0
- package/project-templates/phaser/.claude/agents/refs/artist-color-audio-recipes.md +153 -0
- package/project-templates/phaser/.claude/agents/refs/artist-deliverable-spec.md +230 -0
- package/project-templates/phaser/.claude/agents/refs/artist-dimension-axis.md +27 -0
- package/project-templates/phaser/.claude/agents/refs/artist-handoff-v2-checklist.md +76 -0
- package/project-templates/phaser/.claude/agents/refs/artist-legacy-fallback.md +14 -0
- package/project-templates/phaser/.claude/agents/refs/artist-master-composite-recipes.md +208 -0
- package/project-templates/phaser/.claude/agents/refs/artist-style-exploration-flow.md +55 -0
- package/project-templates/phaser/.claude/agents/refs/developer-dev-handoff.md +152 -0
- package/project-templates/phaser/.claude/agents/refs/developer-impl-cookbook.md +432 -0
- package/project-templates/phaser/.claude/agents/refs/developer-legacy-fallback.md +15 -0
- package/project-templates/phaser/.claude/agents/refs/developer-phase1-flow.md +404 -0
- package/project-templates/phaser/.claude/agents/refs/framework-5-component-filter.md +252 -0
- package/project-templates/phaser/.claude/agents/refs/framework-game-feel-juice.md +266 -0
- package/project-templates/phaser/.claude/agents/refs/framework-mda.md +147 -0
- package/project-templates/phaser/.claude/agents/refs/game-designer-gameplay-sufficiency.md +123 -0
- package/project-templates/phaser/.claude/agents/refs/game-designer-legacy-fallback.md +15 -0
- package/project-templates/phaser/.claude/agents/refs/game-designer-workflow-detail.md +69 -0
- package/project-templates/phaser/.claude/agents/refs/implementation-plan-guide.md +309 -0
- package/project-templates/phaser/.claude/agents/refs/reviewer-convergence-eval.md +350 -0
- package/project-templates/phaser/.claude/agents/refs/reviewer-legacy-fallback.md +14 -0
- package/project-templates/phaser/.claude/agents/refs/reviewer-six-dimension-eval.md +6 -0
- package/project-templates/phaser/.claude/agents/refs/skill-selector-guide.md +465 -0
- package/project-templates/phaser/.claude/agents/refs/skill-value-layers.md +145 -0
- package/project-templates/phaser/.claude/agents/refs/storyboard-generation-guide.md +110 -0
- package/project-templates/phaser/.claude/agents/refs/ta-3d-flip-recipe.md +88 -0
- package/project-templates/phaser/.claude/agents/refs/ta-atlas-deliverable-standard.md +67 -0
- package/project-templates/phaser/.claude/agents/refs/ta-batch-pipeline-recipes.md +120 -0
- package/project-templates/phaser/.claude/agents/refs/ta-image-generation-detail.md +300 -0
- package/project-templates/phaser/.claude/agents/refs/ta-image-ops-reference.md +495 -0
- package/project-templates/phaser/.claude/agents/refs/ta-pipeline-cookbook.md +1141 -0
- package/project-templates/phaser/.claude/agents/refs/ta-tools-reference.md +111 -0
- package/project-templates/phaser/.claude/agents/refs/ta-vfx-preset-catalog.md +365 -0
- package/project-templates/phaser/.claude/agents/refs/technical-artist-legacy-fallback.md +14 -0
- package/project-templates/phaser/.claude/agents/reviewer.md +116 -0
- package/project-templates/phaser/.claude/agents/technical-artist.md +100 -0
- package/project-templates/phaser/.claude/hooks/README.md +120 -0
- package/project-templates/phaser/.claude/hooks/asr-coverage-validate.mjs +381 -0
- package/project-templates/phaser/.claude/hooks/block-developer-preflight.mjs +185 -0
- package/project-templates/phaser/.claude/hooks/block-ring1-tasklist.mjs +95 -0
- package/project-templates/phaser/.claude/hooks/gate-dispatcher.mjs +78 -0
- package/project-templates/phaser/.claude/hooks/gate-runner.mjs +557 -0
- package/project-templates/phaser/.claude/hooks/gate.mjs +171 -0
- package/project-templates/phaser/.claude/hooks/snapshot-milestone.mjs +247 -0
- package/project-templates/phaser/.claude/hooks/user-prompt.mjs +194 -0
- package/project-templates/phaser/.claude/hooks/validate-atom-tree-selection.mjs +281 -0
- package/project-templates/phaser/.claude/hooks/validate-workflow-stop.mjs +1889 -0
- package/project-templates/phaser/.claude/settings.json +81 -0
- package/project-templates/phaser/.claude/skills/brainstorming/SKILL.md +161 -0
- package/project-templates/phaser/.claude/skills/brainstorming/scripts/frame-template.html +270 -0
- package/project-templates/phaser/.claude/skills/brainstorming/scripts/helper.js +177 -0
- package/project-templates/phaser/.claude/skills/brainstorming/scripts/server.cjs +354 -0
- package/project-templates/phaser/.claude/skills/brainstorming/scripts/start-server.sh +148 -0
- package/project-templates/phaser/.claude/skills/brainstorming/scripts/stop-server.sh +56 -0
- package/project-templates/phaser/.claude/skills/brainstorming/scripts/wait-for-selection.sh +62 -0
- package/project-templates/phaser/.claude/skills/brainstorming/spec-document-reviewer-prompt.md +49 -0
- package/project-templates/phaser/.claude/skills/brainstorming/visual-companion.md +309 -0
- package/project-templates/phaser/.claude/skills/playcraft-ad-psychology/SKILL.md +182 -0
- package/project-templates/phaser/.claude/skills/playcraft-art-style-guide/SKILL.md +123 -0
- package/project-templates/phaser/.claude/skills/playcraft-asset-state-sheet/SKILL.md +205 -0
- package/project-templates/phaser/.claude/skills/playcraft-audio-generation/SKILL.md +280 -0
- package/project-templates/phaser/.claude/skills/playcraft-batch-pipeline/SKILL.md +184 -0
- package/project-templates/phaser/.claude/skills/playcraft-build-optimizer/SKILL.md +306 -0
- package/project-templates/phaser/.claude/skills/playcraft-image-generation/SKILL.md +298 -0
- package/project-templates/phaser/.claude/skills/playcraft-image-generation/reference/build-sprite-sheet.template.mjs +123 -0
- package/project-templates/phaser/.claude/skills/playcraft-image-generation/reference/compare-style.template.mjs +254 -0
- package/project-templates/phaser/.claude/skills/playcraft-image-generation/reference/gen-batch-sprite.template.mjs +324 -0
- package/project-templates/phaser/.claude/skills/playcraft-image-generation/reference/gen-batch.template.mjs +97 -0
- package/project-templates/phaser/.claude/skills/playcraft-image-generation/reference/gen-edit-variants.template.mjs +118 -0
- package/project-templates/phaser/.claude/skills/playcraft-image-generation/reference/process-batch.template.mjs +137 -0
- package/project-templates/phaser/.claude/skills/playcraft-image-generation/reference/prompt-cookbook.md +397 -0
- package/project-templates/phaser/.claude/skills/playcraft-image-generation/reference/validate-sprite-sheet.template.mjs +296 -0
- package/project-templates/phaser/.claude/skills/playcraft-image-ops/SKILL.md +122 -0
- package/project-templates/phaser/.claude/skills/playcraft-image-processing/SKILL.md +219 -0
- package/project-templates/phaser/.claude/skills/playcraft-masking/SKILL.md +373 -0
- package/project-templates/phaser/.claude/skills/playcraft-playable-optimization/SKILL.md +161 -0
- package/project-templates/phaser/.claude/skills/playcraft-research/SKILL.md +215 -0
- package/project-templates/phaser/.claude/skills/playcraft-skill-recommender/SKILL.md +331 -0
- package/project-templates/phaser/.claude/skills/playcraft-sprite-generation/SKILL.md +423 -0
- package/project-templates/phaser/.claude/skills/playcraft-sprite-remix/SKILL.md +158 -0
- package/project-templates/phaser/.claude/skills/playcraft-sprite-sheet/SKILL.md +100 -0
- package/project-templates/phaser/.claude/skills/playcraft-storyboard/SKILL.md +167 -0
- package/project-templates/phaser/.claude/skills/playcraft-style-qa/SKILL.md +270 -0
- package/project-templates/phaser/.claude/skills/playcraft-text-rendering/SKILL.md +236 -0
- package/project-templates/phaser/.claude/skills/playcraft-vfx-animation/SKILL.md +130 -0
- package/project-templates/phaser/.claude/skills/playwright-cli/SKILL.md +390 -0
- package/project-templates/phaser/.claude/skills/playwright-cli/references/element-attributes.md +23 -0
- package/project-templates/phaser/.claude/skills/playwright-cli/references/playwright-tests.md +39 -0
- package/project-templates/phaser/.claude/skills/playwright-cli/references/request-mocking.md +87 -0
- package/project-templates/phaser/.claude/skills/playwright-cli/references/running-code.md +240 -0
- package/project-templates/phaser/.claude/skills/playwright-cli/references/session-management.md +226 -0
- package/project-templates/phaser/.claude/skills/playwright-cli/references/spec-driven-testing.md +308 -0
- package/project-templates/phaser/.claude/skills/playwright-cli/references/storage-state.md +275 -0
- package/project-templates/phaser/.claude/skills/playwright-cli/references/test-generation.md +134 -0
- package/project-templates/phaser/.claude/skills/playwright-cli/references/tracing.md +142 -0
- package/project-templates/phaser/.claude/skills/playwright-cli/references/video-recording.md +153 -0
- package/project-templates/phaser/.claude/skills/session-analyzer/SKILL.md +386 -0
- package/project-templates/phaser/.claude/skills/session-analyzer/scripts/execution-breakdown.mjs +182 -0
- package/project-templates/phaser/.claude/skills/session-analyzer/scripts/find-turns.mjs +72 -0
- package/project-templates/phaser/.claude/skills/session-analyzer/scripts/heavy-output.mjs +121 -0
- package/project-templates/phaser/.claude/skills/session-analyzer/scripts/resolve-session.mjs +103 -0
- package/project-templates/phaser/.claude/skills/session-analyzer/scripts/subagent-stats.mjs +127 -0
- package/project-templates/phaser/.claude/skills/session-analyzer/scripts/subagent-tool-timeline.mjs +106 -0
- package/project-templates/phaser/.claude/skills/session-analyzer/scripts/time-gaps.mjs +128 -0
- package/project-templates/phaser/.claude/skills/session-analyzer/scripts/turn-timeline.mjs +67 -0
- package/project-templates/phaser/.claude/snapshot.mjs +257 -0
- package/project-templates/phaser/.cursor/hooks.json +17 -0
- package/project-templates/phaser/.cursor/rules/playcraft-orchestrator.mdc +142 -0
- package/project-templates/phaser/.cursor/rules/playcraft-subagent-boundary.mdc +29 -0
- package/project-templates/phaser/.playcraft-engine +1 -0
- package/project-templates/phaser/CHANGELOG.md +105 -0
- package/project-templates/phaser/CLAUDE.md +84 -0
- package/project-templates/phaser/assets/audio/bgm/.gitkeep +0 -0
- package/project-templates/phaser/assets/audio/sfx/.gitkeep +0 -0
- package/project-templates/phaser/assets/bundles/.gitkeep +0 -0
- package/project-templates/phaser/assets/images/bg/.gitkeep +0 -0
- package/project-templates/phaser/assets/images/reference/.gitkeep +0 -0
- package/project-templates/phaser/assets/images/storyboard/.gitkeep +0 -0
- package/project-templates/phaser/assets/images/tiles/.gitkeep +0 -0
- package/project-templates/phaser/assets/images/ui/.gitkeep +0 -0
- package/project-templates/phaser/assets/images/vfx/.gitkeep +0 -0
- package/project-templates/phaser/assets/models/.gitkeep +0 -0
- package/project-templates/phaser/docs/DESIGN.md +65 -0
- package/project-templates/phaser/docs/intent-clarifications.md +58 -0
- package/project-templates/phaser/docs/pipeline-overview.md +69 -0
- package/project-templates/phaser/docs/project-state.md +211 -0
- package/project-templates/phaser/docs/scaffold-manifest.md +10 -0
- package/project-templates/phaser/docs/team/agent-conduct.md +67 -0
- package/project-templates/phaser/docs/team/agent-runtime-matrix.md +80 -0
- package/project-templates/phaser/docs/team/atom-tree-format.md +114 -0
- package/project-templates/phaser/docs/team/collaboration.md +391 -0
- package/project-templates/phaser/docs/team/core-model.md +85 -0
- package/project-templates/phaser/docs/team/game-designer-migration-todo.md +8 -0
- package/project-templates/phaser/docs/team/harness-legacy-deprecation.md +23 -0
- package/project-templates/phaser/docs/team/platform-capabilities.md +18 -0
- package/project-templates/phaser/docs/team/workflow-changelog.md +137 -0
- package/project-templates/phaser/docs/team/workflow-consistency-checklist.md +240 -0
- package/project-templates/phaser/focus-lab/.gitkeep +0 -0
- package/project-templates/phaser/game/adapters/phaser.ts +52 -0
- package/project-templates/phaser/game/config/.gitkeep +0 -0
- package/project-templates/phaser/game/config/game-config.ts +46 -0
- package/project-templates/phaser/game/contract/publish.ts +141 -0
- package/project-templates/phaser/game/contract/types.ts +34 -0
- package/project-templates/phaser/game/gameplay/.gitkeep +0 -0
- package/project-templates/phaser/game/index.ts +81 -0
- package/project-templates/phaser/game/runtime-contract.ts +28 -0
- package/project-templates/phaser/game/scenes/.gitkeep +0 -0
- package/project-templates/phaser/globals.d.ts +51 -0
- package/project-templates/phaser/index.css +34 -0
- package/project-templates/phaser/index.html +18 -0
- package/project-templates/phaser/main.ts +9 -0
- package/project-templates/phaser/package.json +79 -0
- package/project-templates/phaser/skills/README.md +52 -0
- package/project-templates/phaser/skills/_shared/agent-prep.md +136 -0
- package/project-templates/phaser/skills/_shared/requirements.txt +1 -0
- package/project-templates/phaser/skills/_shared/scripts/build-evidence-gate.mjs +87 -0
- package/project-templates/phaser/skills/_shared/scripts/context-budget.mjs +215 -0
- package/project-templates/phaser/skills/_shared/scripts/create-playable.mjs +140 -0
- package/project-templates/phaser/skills/_shared/scripts/dev-start.mjs +151 -0
- package/project-templates/phaser/skills/_shared/scripts/disclosure-config.mjs +480 -0
- package/project-templates/phaser/skills/_shared/scripts/ensure-project.mjs +532 -0
- package/project-templates/phaser/skills/_shared/scripts/gen-placeholder-audio.py +345 -0
- package/project-templates/phaser/skills/_shared/scripts/gen-placeholder.py +244 -0
- package/project-templates/phaser/skills/_shared/scripts/harness-smoke.mjs +257 -0
- package/project-templates/phaser/skills/_shared/scripts/lib/validator-artifacts.mjs +129 -0
- package/project-templates/phaser/skills/_shared/scripts/placeholder-pack-sheet.mjs +67 -0
- package/project-templates/phaser/skills/_shared/scripts/placeholder_audio_lib.py +142 -0
- package/project-templates/phaser/skills/_shared/scripts/placeholder_lib.py +993 -0
- package/project-templates/phaser/skills/_shared/scripts/render-project-state.mjs +278 -0
- package/project-templates/phaser/skills/_shared/scripts/ring-config.mjs +252 -0
- package/project-templates/phaser/skills/_shared/scripts/skills-check.mjs +176 -0
- package/project-templates/phaser/skills/_shared/scripts/slice-set.mjs +77 -0
- package/project-templates/phaser/skills/_shared/scripts/state-advance-ring.mjs +63 -0
- package/project-templates/phaser/skills/_shared/scripts/state-get.mjs +215 -0
- package/project-templates/phaser/skills/_shared/scripts/state-handoff.mjs +120 -0
- package/project-templates/phaser/skills/_shared/scripts/state-set.mjs +113 -0
- package/project-templates/phaser/skills/_shared/scripts/state-store.mjs +893 -0
- package/project-templates/phaser/skills/_shared/scripts/sync-template-skills.mjs +112 -0
- package/project-templates/phaser/skills/_shared/scripts/verify-asset-code-sync.mjs +265 -0
- package/project-templates/phaser/skills/_shared/scripts/verify-atom-conformance.mjs +181 -0
- package/project-templates/phaser/skills/_shared/scripts/verify-env.mjs +285 -0
- package/project-templates/phaser/skills/_shared/scripts/verify-placeholders.mjs +161 -0
- package/project-templates/phaser/skills/_shared/scripts/workflow-doctor.mjs +348 -0
- package/project-templates/phaser/skills/playable-animate/SKILL.md +52 -0
- package/project-templates/phaser/skills/playable-animate/agents/openai.yaml +4 -0
- package/project-templates/phaser/skills/playable-animate/references/board-refresh.md +30 -0
- package/project-templates/phaser/skills/playable-animate/references/diagnosis-checklist.md +25 -0
- package/project-templates/phaser/skills/playable-animate/references/entrance-sequencing.md +33 -0
- package/project-templates/phaser/skills/playable-animate/references/interaction-timing.md +23 -0
- package/project-templates/phaser/skills/playable-art/SKILL.md +203 -0
- package/project-templates/phaser/skills/playable-art/agents/openai.yaml +4 -0
- package/project-templates/phaser/skills/playable-art/references/alpha-postprocess.md +46 -0
- package/project-templates/phaser/skills/playable-art/references/cta-art-spec.md +59 -0
- package/project-templates/phaser/skills/playable-art/references/layout-proportions.md +30 -0
- package/project-templates/phaser/skills/playable-art/references/prompt-patterns.md +83 -0
- package/project-templates/phaser/skills/playable-art/references/reference-comparison.md +30 -0
- package/project-templates/phaser/skills/playable-art/references/sheet-import-v2.md +91 -0
- package/project-templates/phaser/skills/playable-art/scripts/build-atlas.py +332 -0
- package/project-templates/phaser/skills/playable-art/scripts/chroma-key.py +50 -0
- package/project-templates/phaser/skills/playable-art/scripts/extract-alpha-split.py +65 -0
- package/project-templates/phaser/skills/playable-art/scripts/extract-dual-bg-alpha.py +118 -0
- package/project-templates/phaser/skills/playable-art/scripts/import-gpt-art-sheets-v2.py +403 -0
- package/project-templates/phaser/skills/playable-art/scripts/import-gpt-art-sheets.py +280 -0
- package/project-templates/phaser/skills/playable-art/scripts/import-gpt-tile-sheet.py +114 -0
- package/project-templates/phaser/skills/playable-art/scripts/import_gpt_art_pipeline.py +321 -0
- package/project-templates/phaser/skills/playable-art/scripts/import_gpt_art_sheets_v2_test.py +126 -0
- package/project-templates/phaser/skills/playable-art/scripts/placeholder_common.py +98 -0
- package/project-templates/phaser/skills/playable-art/scripts/remove-bg.py +91 -0
- package/project-templates/phaser/skills/playable-art/scripts/review-processed-assets.py +468 -0
- package/project-templates/phaser/skills/playable-art/scripts/review_processed_assets_test.py +116 -0
- package/project-templates/phaser/skills/playable-art/scripts/verify-alpha-clean.py +105 -0
- package/project-templates/phaser/skills/playable-debug/SKILL.md +116 -0
- package/project-templates/phaser/skills/playable-debug/agents/openai.yaml +4 -0
- package/project-templates/phaser/skills/playable-debug/references/debug-config.md +40 -0
- package/project-templates/phaser/skills/playable-focus/SKILL.md +148 -0
- package/project-templates/phaser/skills/playable-focus/scripts/bootstrap-playground.mjs +84 -0
- package/project-templates/phaser/skills/playable-focus/scripts/extract-focus-frames.mjs +87 -0
- package/project-templates/phaser/skills/playable-focus/scripts/generate-focus-reports.mjs +121 -0
- package/project-templates/phaser/skills/playable-focus/scripts/playground.mjs +390 -0
- package/project-templates/phaser/skills/playable-focus/templates/focus-lab/frame.html +39 -0
- package/project-templates/phaser/skills/playable-focus/templates/focus-lab/harness/clean-stage.js +114 -0
- package/project-templates/phaser/skills/playable-focus/templates/focus-lab/harness/frame-lab-scene.js +94 -0
- package/project-templates/phaser/skills/playable-focus/templates/focus-lab/harness/particle-lab-scene.js +224 -0
- package/project-templates/phaser/skills/playable-focus/templates/focus-lab/model.html +16 -0
- package/project-templates/phaser/skills/playable-focus/templates/focus-lab/particle.html +38 -0
- package/project-templates/phaser/skills/playable-focus/templates/focus-lab/shatter.html +47 -0
- package/project-templates/phaser/skills/playable-fx-decompose/SKILL.md +212 -0
- package/project-templates/phaser/skills/playable-fx-decompose/examples.md +89 -0
- package/project-templates/phaser/skills/playable-fx-decompose/reference.md +201 -0
- package/project-templates/phaser/skills/playable-fx-decompose/requirements.txt +2 -0
- package/project-templates/phaser/skills/playable-fx-decompose/scripts/build-blank-tile-crack.py +192 -0
- package/project-templates/phaser/skills/playable-fx-decompose/scripts/fix-shard-debris-frames.py +60 -0
- package/project-templates/phaser/skills/playable-fx-decompose/scripts/generate-shard-debris.py +276 -0
- package/project-templates/phaser/skills/playable-fx-peak/SKILL.md +237 -0
- package/project-templates/phaser/skills/playable-fx-peak/requirements.txt +2 -0
- package/project-templates/phaser/skills/playable-fx-peak/scripts/fix-frame-edges.py +70 -0
- package/project-templates/phaser/skills/playable-fx-peak/scripts/repack-frame-sequence.py +526 -0
- package/project-templates/phaser/skills/playable-fx-peak/scripts/validate-frame-anchors.py +130 -0
- package/project-templates/phaser/skills/playable-placeholder/SKILL.md +239 -0
- package/project-templates/phaser/skills/playable-record/SKILL.md +166 -0
- package/project-templates/phaser/skills/playable-record/scripts/lib/build-artifact.mjs +92 -0
- package/project-templates/phaser/skills/playable-record/scripts/lib/dev-server.mjs +104 -0
- package/project-templates/phaser/skills/playable-record/scripts/lib/record-audio-bridge.js +141 -0
- package/project-templates/phaser/skills/playable-record/scripts/lib/slice-structure-verify.mjs +199 -0
- package/project-templates/phaser/skills/playable-record/scripts/record-playable.mjs +583 -0
- package/project-templates/phaser/skills/playable-record/scripts/verify-build.mjs +185 -0
- package/project-templates/phaser/skills/playable-record/scripts/verify-contract.mjs +261 -0
- package/project-templates/phaser/skills/playable-record/scripts/verify-firstwin.mjs +398 -0
- package/project-templates/phaser/skills/playable-record/scripts/verify-fusion.mjs +320 -0
- package/project-templates/phaser/skills/playable-record/scripts/verify-lifecycle.mjs +78 -0
- package/project-templates/phaser/skills/playable-record/scripts/verify-slice-artist.mjs +53 -0
- package/project-templates/phaser/skills/playable-record/scripts/verify-slice-ta.mjs +53 -0
- package/project-templates/phaser/skills/playable-record/scripts/verify-slice.mjs +142 -0
- package/project-templates/phaser/skills/playable-record/scripts/verify-visual-ring.mjs +250 -0
- package/project-templates/phaser/skills/playable-record/scripts/verify-visual-ring1.mjs +190 -0
- package/project-templates/phaser/skills/playable-record/scripts/verify-vlm-video.mjs +227 -0
- package/project-templates/phaser/skills/playable-validate/SKILL.md +260 -0
- package/project-templates/phaser/skills/playable-validate/references/checklist-detail.md +36 -0
- package/project-templates/phaser/skills/playable-validate/references/single-html-bundle.md +76 -0
- package/project-templates/phaser/skills/playable-validate/validation-rules.md +200 -0
- package/project-templates/phaser/skills/playable-verify-ui/SKILL.md +295 -0
- package/project-templates/phaser/skills/playable-verify-ui/examples/asset-manifest.example.json +36 -0
- package/project-templates/phaser/skills/playable-verify-ui/examples/mahjong-match.profile.yaml +334 -0
- package/project-templates/phaser/skills/playable-verify-ui/profiles/template.profile.yaml +84 -0
- package/project-templates/phaser/skills/playable-verify-ui/reference.md +165 -0
- package/project-templates/phaser/skills/playable-verify-ui/references/phaser-patterns.md +67 -0
- package/project-templates/phaser/skills/playable-verify-ui/references/scaling-decision-tree.md +51 -0
- package/project-templates/phaser/skills/playable-verify-ui/requirements.txt +7 -0
- package/project-templates/phaser/skills/playable-verify-ui/schema/asset-manifest.schema.json +68 -0
- package/project-templates/phaser/skills/playable-verify-ui/schema/playable-ui-profile.schema.json +171 -0
- package/project-templates/phaser/skills/playable-verify-ui/scripts/asset_manifest.py +231 -0
- package/project-templates/phaser/skills/playable-verify-ui/scripts/lib/__init__.py +1 -0
- package/project-templates/phaser/skills/playable-verify-ui/scripts/lib/config_expr.js +218 -0
- package/project-templates/phaser/skills/playable-verify-ui/scripts/lib/node_utils.js +51 -0
- package/project-templates/phaser/skills/playable-verify-ui/scripts/lib/profile_loader.py +59 -0
- package/project-templates/phaser/skills/playable-verify-ui/scripts/lib/report.py +106 -0
- package/project-templates/phaser/skills/playable-verify-ui/scripts/lib/runtime_contract.js +116 -0
- package/project-templates/phaser/skills/playable-verify-ui/scripts/measure_frame_content.py +77 -0
- package/project-templates/phaser/skills/playable-verify-ui/scripts/run_all.py +265 -0
- package/project-templates/phaser/skills/playable-verify-ui/scripts/verify_asset_sizes.py +77 -0
- package/project-templates/phaser/skills/playable-verify-ui/scripts/verify_assets_present.py +62 -0
- package/project-templates/phaser/skills/playable-verify-ui/scripts/verify_atlas_budget.py +84 -0
- package/project-templates/phaser/skills/playable-verify-ui/scripts/verify_atlas_frames.py +79 -0
- package/project-templates/phaser/skills/playable-verify-ui/scripts/verify_bg_clean.py +365 -0
- package/project-templates/phaser/skills/playable-verify-ui/scripts/verify_doc_asset_sync.py +90 -0
- package/project-templates/phaser/skills/playable-verify-ui/scripts/verify_fetch_antipatterns.py +59 -0
- package/project-templates/phaser/skills/playable-verify-ui/scripts/verify_game_config_load.js +54 -0
- package/project-templates/phaser/skills/playable-verify-ui/scripts/verify_hardcoded_layout.js +64 -0
- package/project-templates/phaser/skills/playable-verify-ui/scripts/verify_layout_regions.js +110 -0
- package/project-templates/phaser/skills/playable-verify-ui/scripts/verify_profile_schema.py +37 -0
- package/project-templates/phaser/skills/playable-verify-ui/scripts/verify_ring1_visual.py +211 -0
- package/project-templates/phaser/skills/playable-verify-ui/scripts/verify_runtime_contract.js +58 -0
- package/project-templates/phaser/skills/playable-verify-ui/scripts/verify_script_load_order.js +73 -0
- package/project-templates/phaser/skills/playable-verify-ui/scripts/verify_slice_plan.py +238 -0
- package/project-templates/phaser/skills/playable-verify-ui/scripts/verify_slice_plan_test.py +125 -0
- package/project-templates/phaser/skills/playable-verify-ui/scripts/verify_text_overlap.py +333 -0
- package/project-templates/phaser/skills/playable-verify-ui/scripts/verify_tile_consistency.py +323 -0
- package/project-templates/phaser/skills/playable-verify-ui/scripts/verify_vision_evidence.py +894 -0
- package/project-templates/phaser/skills/playable-verify-ui/scripts/verify_vision_evidence_test.py +122 -0
- package/project-templates/phaser/skills/playable-verify-ui/scripts/verify_visual.py +422 -0
- package/project-templates/phaser/ta-workspace/scripts/.gitkeep +0 -0
- package/project-templates/phaser/templates/artist-log.template.md +182 -0
- package/project-templates/phaser/templates/atom-tree.template.json +133 -0
- package/project-templates/phaser/templates/design-brief.template.md +92 -0
- package/project-templates/phaser/templates/design-lens-checklist.reference.md +117 -0
- package/project-templates/phaser/templates/design-methodology.md +99 -0
- package/project-templates/phaser/templates/design.template.md +50 -0
- package/project-templates/phaser/templates/developer-log.template.md +258 -0
- package/project-templates/phaser/templates/five-axis-framework.md +194 -0
- package/project-templates/phaser/templates/gen-placeholder-audio.template.mjs +63 -0
- package/project-templates/phaser/templates/gen-placeholders.template.mjs +81 -0
- package/project-templates/phaser/templates/intent-clarifications.template.md +58 -0
- package/project-templates/phaser/templates/layout-spec.template.md +198 -0
- package/project-templates/phaser/templates/plan.template.md +80 -0
- package/project-templates/phaser/templates/project-state.template.md +136 -0
- package/project-templates/phaser/templates/review-report.template.md +275 -0
- package/project-templates/phaser/templates/style-exploration.template.md +93 -0
- package/project-templates/phaser/templates/ta-log.template.md +394 -0
- package/project-templates/phaser/tsconfig.json +20 -0
- package/project-templates/phaser/vite.config.ts +27 -0
- package/project-templates/threejs/.claude/agents/artist.md +101 -0
- package/project-templates/threejs/.claude/agents/developer.md +123 -0
- package/project-templates/threejs/.claude/agents/game-designer.md +192 -0
- package/project-templates/threejs/.claude/agents/refs/README.md +77 -0
- package/project-templates/threejs/.claude/agents/refs/artist-art-style-catalog.md +533 -0
- package/project-templates/threejs/.claude/agents/refs/artist-color-audio-recipes.md +153 -0
- package/project-templates/threejs/.claude/agents/refs/artist-deliverable-spec.md +230 -0
- package/project-templates/threejs/.claude/agents/refs/artist-dimension-axis.md +27 -0
- package/project-templates/threejs/.claude/agents/refs/artist-handoff-v2-checklist.md +76 -0
- package/project-templates/threejs/.claude/agents/refs/artist-legacy-fallback.md +14 -0
- package/project-templates/threejs/.claude/agents/refs/artist-master-composite-recipes.md +208 -0
- package/project-templates/threejs/.claude/agents/refs/artist-style-exploration-flow.md +55 -0
- package/project-templates/threejs/.claude/agents/refs/developer-dev-handoff.md +152 -0
- package/project-templates/threejs/.claude/agents/refs/developer-impl-cookbook.md +432 -0
- package/project-templates/threejs/.claude/agents/refs/developer-legacy-fallback.md +15 -0
- package/project-templates/threejs/.claude/agents/refs/developer-phase1-flow.md +404 -0
- package/project-templates/threejs/.claude/agents/refs/framework-5-component-filter.md +252 -0
- package/project-templates/threejs/.claude/agents/refs/framework-game-feel-juice.md +266 -0
- package/project-templates/threejs/.claude/agents/refs/framework-mda.md +147 -0
- package/project-templates/threejs/.claude/agents/refs/game-designer-gameplay-sufficiency.md +123 -0
- package/project-templates/threejs/.claude/agents/refs/game-designer-legacy-fallback.md +15 -0
- package/project-templates/threejs/.claude/agents/refs/game-designer-workflow-detail.md +69 -0
- package/project-templates/threejs/.claude/agents/refs/implementation-plan-guide.md +309 -0
- package/project-templates/threejs/.claude/agents/refs/reviewer-convergence-eval.md +350 -0
- package/project-templates/threejs/.claude/agents/refs/reviewer-legacy-fallback.md +14 -0
- package/project-templates/threejs/.claude/agents/refs/reviewer-six-dimension-eval.md +6 -0
- package/project-templates/threejs/.claude/agents/refs/skill-selector-guide.md +465 -0
- package/project-templates/threejs/.claude/agents/refs/skill-value-layers.md +145 -0
- package/project-templates/threejs/.claude/agents/refs/storyboard-generation-guide.md +110 -0
- package/project-templates/threejs/.claude/agents/refs/ta-3d-flip-recipe.md +88 -0
- package/project-templates/threejs/.claude/agents/refs/ta-atlas-deliverable-standard.md +67 -0
- package/project-templates/threejs/.claude/agents/refs/ta-batch-pipeline-recipes.md +120 -0
- package/project-templates/threejs/.claude/agents/refs/ta-image-generation-detail.md +300 -0
- package/project-templates/threejs/.claude/agents/refs/ta-image-ops-reference.md +495 -0
- package/project-templates/threejs/.claude/agents/refs/ta-pipeline-cookbook.md +1141 -0
- package/project-templates/threejs/.claude/agents/refs/ta-tools-reference.md +111 -0
- package/project-templates/threejs/.claude/agents/refs/ta-vfx-preset-catalog.md +365 -0
- package/project-templates/threejs/.claude/agents/refs/technical-artist-legacy-fallback.md +14 -0
- package/project-templates/threejs/.claude/agents/reviewer.md +116 -0
- package/project-templates/threejs/.claude/agents/technical-artist.md +100 -0
- package/project-templates/threejs/.claude/hooks/README.md +120 -0
- package/project-templates/threejs/.claude/hooks/asr-coverage-validate.mjs +381 -0
- package/project-templates/threejs/.claude/hooks/block-developer-preflight.mjs +185 -0
- package/project-templates/threejs/.claude/hooks/block-ring1-tasklist.mjs +95 -0
- package/project-templates/threejs/.claude/hooks/gate-dispatcher.mjs +78 -0
- package/project-templates/threejs/.claude/hooks/gate-runner.mjs +557 -0
- package/project-templates/threejs/.claude/hooks/gate.mjs +171 -0
- package/project-templates/threejs/.claude/hooks/snapshot-milestone.mjs +247 -0
- package/project-templates/threejs/.claude/hooks/user-prompt.mjs +194 -0
- package/project-templates/threejs/.claude/hooks/validate-atom-tree-selection.mjs +281 -0
- package/project-templates/threejs/.claude/hooks/validate-workflow-stop.mjs +1889 -0
- package/project-templates/threejs/.claude/settings.json +81 -0
- package/project-templates/threejs/.claude/skills/brainstorming/SKILL.md +161 -0
- package/project-templates/threejs/.claude/skills/brainstorming/scripts/frame-template.html +270 -0
- package/project-templates/threejs/.claude/skills/brainstorming/scripts/helper.js +177 -0
- package/project-templates/threejs/.claude/skills/brainstorming/scripts/server.cjs +354 -0
- package/project-templates/threejs/.claude/skills/brainstorming/scripts/start-server.sh +148 -0
- package/project-templates/threejs/.claude/skills/brainstorming/scripts/stop-server.sh +56 -0
- package/project-templates/threejs/.claude/skills/brainstorming/scripts/wait-for-selection.sh +62 -0
- package/project-templates/threejs/.claude/skills/brainstorming/spec-document-reviewer-prompt.md +49 -0
- package/project-templates/threejs/.claude/skills/brainstorming/visual-companion.md +309 -0
- package/project-templates/threejs/.claude/skills/playcraft-ad-psychology/SKILL.md +182 -0
- package/project-templates/threejs/.claude/skills/playcraft-art-style-guide/SKILL.md +123 -0
- package/project-templates/threejs/.claude/skills/playcraft-asset-state-sheet/SKILL.md +205 -0
- package/project-templates/threejs/.claude/skills/playcraft-audio-generation/SKILL.md +280 -0
- package/project-templates/threejs/.claude/skills/playcraft-batch-pipeline/SKILL.md +184 -0
- package/project-templates/threejs/.claude/skills/playcraft-build-optimizer/SKILL.md +306 -0
- package/project-templates/threejs/.claude/skills/playcraft-image-generation/SKILL.md +298 -0
- package/project-templates/threejs/.claude/skills/playcraft-image-generation/reference/build-sprite-sheet.template.mjs +123 -0
- package/project-templates/threejs/.claude/skills/playcraft-image-generation/reference/compare-style.template.mjs +254 -0
- package/project-templates/threejs/.claude/skills/playcraft-image-generation/reference/gen-batch-sprite.template.mjs +324 -0
- package/project-templates/threejs/.claude/skills/playcraft-image-generation/reference/gen-batch.template.mjs +97 -0
- package/project-templates/threejs/.claude/skills/playcraft-image-generation/reference/gen-edit-variants.template.mjs +118 -0
- package/project-templates/threejs/.claude/skills/playcraft-image-generation/reference/process-batch.template.mjs +137 -0
- package/project-templates/threejs/.claude/skills/playcraft-image-generation/reference/prompt-cookbook.md +397 -0
- package/project-templates/threejs/.claude/skills/playcraft-image-generation/reference/validate-sprite-sheet.template.mjs +296 -0
- package/project-templates/threejs/.claude/skills/playcraft-image-ops/SKILL.md +122 -0
- package/project-templates/threejs/.claude/skills/playcraft-image-processing/SKILL.md +219 -0
- package/project-templates/threejs/.claude/skills/playcraft-masking/SKILL.md +373 -0
- package/project-templates/threejs/.claude/skills/playcraft-playable-optimization/SKILL.md +161 -0
- package/project-templates/threejs/.claude/skills/playcraft-research/SKILL.md +215 -0
- package/project-templates/threejs/.claude/skills/playcraft-skill-recommender/SKILL.md +331 -0
- package/project-templates/threejs/.claude/skills/playcraft-sprite-generation/SKILL.md +423 -0
- package/project-templates/threejs/.claude/skills/playcraft-sprite-remix/SKILL.md +158 -0
- package/project-templates/threejs/.claude/skills/playcraft-sprite-sheet/SKILL.md +100 -0
- package/project-templates/threejs/.claude/skills/playcraft-storyboard/SKILL.md +167 -0
- package/project-templates/threejs/.claude/skills/playcraft-style-qa/SKILL.md +270 -0
- package/project-templates/threejs/.claude/skills/playcraft-text-rendering/SKILL.md +236 -0
- package/project-templates/threejs/.claude/skills/playcraft-vfx-animation/SKILL.md +130 -0
- package/project-templates/threejs/.claude/skills/playwright-cli/SKILL.md +390 -0
- package/project-templates/threejs/.claude/skills/playwright-cli/references/element-attributes.md +23 -0
- package/project-templates/threejs/.claude/skills/playwright-cli/references/playwright-tests.md +39 -0
- package/project-templates/threejs/.claude/skills/playwright-cli/references/request-mocking.md +87 -0
- package/project-templates/threejs/.claude/skills/playwright-cli/references/running-code.md +240 -0
- package/project-templates/threejs/.claude/skills/playwright-cli/references/session-management.md +226 -0
- package/project-templates/threejs/.claude/skills/playwright-cli/references/spec-driven-testing.md +308 -0
- package/project-templates/threejs/.claude/skills/playwright-cli/references/storage-state.md +275 -0
- package/project-templates/threejs/.claude/skills/playwright-cli/references/test-generation.md +134 -0
- package/project-templates/threejs/.claude/skills/playwright-cli/references/tracing.md +142 -0
- package/project-templates/threejs/.claude/skills/playwright-cli/references/video-recording.md +153 -0
- package/project-templates/threejs/.claude/skills/session-analyzer/SKILL.md +386 -0
- package/project-templates/threejs/.claude/skills/session-analyzer/scripts/execution-breakdown.mjs +182 -0
- package/project-templates/threejs/.claude/skills/session-analyzer/scripts/find-turns.mjs +72 -0
- package/project-templates/threejs/.claude/skills/session-analyzer/scripts/heavy-output.mjs +121 -0
- package/project-templates/threejs/.claude/skills/session-analyzer/scripts/resolve-session.mjs +103 -0
- package/project-templates/threejs/.claude/skills/session-analyzer/scripts/subagent-stats.mjs +127 -0
- package/project-templates/threejs/.claude/skills/session-analyzer/scripts/subagent-tool-timeline.mjs +106 -0
- package/project-templates/threejs/.claude/skills/session-analyzer/scripts/time-gaps.mjs +128 -0
- package/project-templates/threejs/.claude/skills/session-analyzer/scripts/turn-timeline.mjs +67 -0
- package/project-templates/threejs/.claude/snapshot.mjs +257 -0
- package/project-templates/threejs/.cursor/hooks.json +17 -0
- package/project-templates/threejs/.cursor/rules/playcraft-orchestrator.mdc +142 -0
- package/project-templates/threejs/.cursor/rules/playcraft-subagent-boundary.mdc +29 -0
- package/project-templates/threejs/.playcraft-engine +1 -0
- package/project-templates/threejs/CHANGELOG.md +105 -0
- package/project-templates/threejs/CLAUDE.md +84 -0
- package/project-templates/threejs/assets/audio/bgm/.gitkeep +0 -0
- package/project-templates/threejs/assets/audio/sfx/.gitkeep +0 -0
- package/project-templates/threejs/assets/bundles/.gitkeep +0 -0
- package/project-templates/threejs/assets/images/bg/.gitkeep +0 -0
- package/project-templates/threejs/assets/images/reference/.gitkeep +0 -0
- package/project-templates/threejs/assets/images/storyboard/.gitkeep +0 -0
- package/project-templates/threejs/assets/images/tiles/.gitkeep +0 -0
- package/project-templates/threejs/assets/images/ui/.gitkeep +0 -0
- package/project-templates/threejs/assets/images/vfx/.gitkeep +0 -0
- package/project-templates/threejs/assets/models/.gitkeep +0 -0
- package/project-templates/threejs/docs/DESIGN.md +65 -0
- package/project-templates/threejs/docs/intent-clarifications.md +58 -0
- package/project-templates/threejs/docs/pipeline-overview.md +69 -0
- package/project-templates/threejs/docs/project-state.md +211 -0
- package/project-templates/threejs/docs/scaffold-manifest.md +10 -0
- package/project-templates/threejs/docs/team/agent-conduct.md +67 -0
- package/project-templates/threejs/docs/team/agent-runtime-matrix.md +80 -0
- package/project-templates/threejs/docs/team/atom-tree-format.md +114 -0
- package/project-templates/threejs/docs/team/collaboration.md +391 -0
- package/project-templates/threejs/docs/team/core-model.md +85 -0
- package/project-templates/threejs/docs/team/game-designer-migration-todo.md +8 -0
- package/project-templates/threejs/docs/team/harness-legacy-deprecation.md +23 -0
- package/project-templates/threejs/docs/team/platform-capabilities.md +18 -0
- package/project-templates/threejs/docs/team/workflow-changelog.md +137 -0
- package/project-templates/threejs/docs/team/workflow-consistency-checklist.md +240 -0
- package/project-templates/threejs/focus-lab/.gitkeep +0 -0
- package/project-templates/threejs/game/config/.gitkeep +0 -0
- package/project-templates/threejs/game/config/game-config.ts +46 -0
- package/project-templates/threejs/game/contract/publish.ts +141 -0
- package/project-templates/threejs/game/contract/types.ts +34 -0
- package/project-templates/threejs/game/gameplay/.gitkeep +0 -0
- package/project-templates/threejs/game/index.ts +76 -0
- package/project-templates/threejs/game/runtime-contract.ts +15 -0
- package/project-templates/threejs/game/scenes/.gitkeep +0 -0
- package/project-templates/threejs/globals.d.ts +51 -0
- package/project-templates/threejs/index.css +34 -0
- package/project-templates/threejs/index.html +18 -0
- package/project-templates/threejs/main.ts +9 -0
- package/project-templates/threejs/package.json +79 -0
- package/project-templates/threejs/skills/README.md +52 -0
- package/project-templates/threejs/skills/_shared/agent-prep.md +136 -0
- package/project-templates/threejs/skills/_shared/requirements.txt +1 -0
- package/project-templates/threejs/skills/_shared/scripts/build-evidence-gate.mjs +87 -0
- package/project-templates/threejs/skills/_shared/scripts/context-budget.mjs +215 -0
- package/project-templates/threejs/skills/_shared/scripts/create-playable.mjs +140 -0
- package/project-templates/threejs/skills/_shared/scripts/dev-start.mjs +151 -0
- package/project-templates/threejs/skills/_shared/scripts/disclosure-config.mjs +480 -0
- package/project-templates/threejs/skills/_shared/scripts/ensure-project.mjs +532 -0
- package/project-templates/threejs/skills/_shared/scripts/gen-placeholder-audio.py +345 -0
- package/project-templates/threejs/skills/_shared/scripts/gen-placeholder.py +244 -0
- package/project-templates/threejs/skills/_shared/scripts/harness-smoke.mjs +257 -0
- package/project-templates/threejs/skills/_shared/scripts/lib/validator-artifacts.mjs +129 -0
- package/project-templates/threejs/skills/_shared/scripts/placeholder-pack-sheet.mjs +67 -0
- package/project-templates/threejs/skills/_shared/scripts/placeholder_audio_lib.py +142 -0
- package/project-templates/threejs/skills/_shared/scripts/placeholder_lib.py +993 -0
- package/project-templates/threejs/skills/_shared/scripts/render-project-state.mjs +278 -0
- package/project-templates/threejs/skills/_shared/scripts/ring-config.mjs +252 -0
- package/project-templates/threejs/skills/_shared/scripts/skills-check.mjs +176 -0
- package/project-templates/threejs/skills/_shared/scripts/slice-set.mjs +77 -0
- package/project-templates/threejs/skills/_shared/scripts/state-advance-ring.mjs +63 -0
- package/project-templates/threejs/skills/_shared/scripts/state-get.mjs +215 -0
- package/project-templates/threejs/skills/_shared/scripts/state-handoff.mjs +120 -0
- package/project-templates/threejs/skills/_shared/scripts/state-set.mjs +113 -0
- package/project-templates/threejs/skills/_shared/scripts/state-store.mjs +893 -0
- package/project-templates/threejs/skills/_shared/scripts/sync-template-skills.mjs +112 -0
- package/project-templates/threejs/skills/_shared/scripts/verify-asset-code-sync.mjs +265 -0
- package/project-templates/threejs/skills/_shared/scripts/verify-atom-conformance.mjs +181 -0
- package/project-templates/threejs/skills/_shared/scripts/verify-env.mjs +285 -0
- package/project-templates/threejs/skills/_shared/scripts/verify-placeholders.mjs +161 -0
- package/project-templates/threejs/skills/_shared/scripts/workflow-doctor.mjs +348 -0
- package/project-templates/threejs/skills/playable-animate/SKILL.md +52 -0
- package/project-templates/threejs/skills/playable-animate/agents/openai.yaml +4 -0
- package/project-templates/threejs/skills/playable-animate/references/board-refresh.md +30 -0
- package/project-templates/threejs/skills/playable-animate/references/diagnosis-checklist.md +25 -0
- package/project-templates/threejs/skills/playable-animate/references/entrance-sequencing.md +33 -0
- package/project-templates/threejs/skills/playable-animate/references/interaction-timing.md +23 -0
- package/project-templates/threejs/skills/playable-art/SKILL.md +203 -0
- package/project-templates/threejs/skills/playable-art/agents/openai.yaml +4 -0
- package/project-templates/threejs/skills/playable-art/references/alpha-postprocess.md +46 -0
- package/project-templates/threejs/skills/playable-art/references/cta-art-spec.md +59 -0
- package/project-templates/threejs/skills/playable-art/references/layout-proportions.md +30 -0
- package/project-templates/threejs/skills/playable-art/references/prompt-patterns.md +83 -0
- package/project-templates/threejs/skills/playable-art/references/reference-comparison.md +30 -0
- package/project-templates/threejs/skills/playable-art/references/sheet-import-v2.md +91 -0
- package/project-templates/threejs/skills/playable-art/scripts/build-atlas.py +332 -0
- package/project-templates/threejs/skills/playable-art/scripts/chroma-key.py +50 -0
- package/project-templates/threejs/skills/playable-art/scripts/extract-alpha-split.py +65 -0
- package/project-templates/threejs/skills/playable-art/scripts/extract-dual-bg-alpha.py +118 -0
- package/project-templates/threejs/skills/playable-art/scripts/import-gpt-art-sheets-v2.py +403 -0
- package/project-templates/threejs/skills/playable-art/scripts/import-gpt-art-sheets.py +280 -0
- package/project-templates/threejs/skills/playable-art/scripts/import-gpt-tile-sheet.py +114 -0
- package/project-templates/threejs/skills/playable-art/scripts/import_gpt_art_pipeline.py +321 -0
- package/project-templates/threejs/skills/playable-art/scripts/import_gpt_art_sheets_v2_test.py +126 -0
- package/project-templates/threejs/skills/playable-art/scripts/placeholder_common.py +98 -0
- package/project-templates/threejs/skills/playable-art/scripts/remove-bg.py +91 -0
- package/project-templates/threejs/skills/playable-art/scripts/review-processed-assets.py +468 -0
- package/project-templates/threejs/skills/playable-art/scripts/review_processed_assets_test.py +116 -0
- package/project-templates/threejs/skills/playable-art/scripts/verify-alpha-clean.py +105 -0
- package/project-templates/threejs/skills/playable-debug/SKILL.md +116 -0
- package/project-templates/threejs/skills/playable-debug/agents/openai.yaml +4 -0
- package/project-templates/threejs/skills/playable-debug/references/debug-config.md +40 -0
- package/project-templates/threejs/skills/playable-focus/SKILL.md +148 -0
- package/project-templates/threejs/skills/playable-focus/scripts/bootstrap-playground.mjs +84 -0
- package/project-templates/threejs/skills/playable-focus/scripts/extract-focus-frames.mjs +87 -0
- package/project-templates/threejs/skills/playable-focus/scripts/generate-focus-reports.mjs +121 -0
- package/project-templates/threejs/skills/playable-focus/scripts/playground.mjs +390 -0
- package/project-templates/threejs/skills/playable-focus/templates/focus-lab/frame.html +39 -0
- package/project-templates/threejs/skills/playable-focus/templates/focus-lab/harness/clean-stage.js +114 -0
- package/project-templates/threejs/skills/playable-focus/templates/focus-lab/harness/frame-lab-scene.js +94 -0
- package/project-templates/threejs/skills/playable-focus/templates/focus-lab/harness/particle-lab-scene.js +224 -0
- package/project-templates/threejs/skills/playable-focus/templates/focus-lab/model.html +16 -0
- package/project-templates/threejs/skills/playable-focus/templates/focus-lab/particle.html +38 -0
- package/project-templates/threejs/skills/playable-focus/templates/focus-lab/shatter.html +47 -0
- package/project-templates/threejs/skills/playable-fx-decompose/SKILL.md +212 -0
- package/project-templates/threejs/skills/playable-fx-decompose/examples.md +89 -0
- package/project-templates/threejs/skills/playable-fx-decompose/reference.md +201 -0
- package/project-templates/threejs/skills/playable-fx-decompose/requirements.txt +2 -0
- package/project-templates/threejs/skills/playable-fx-decompose/scripts/build-blank-tile-crack.py +192 -0
- package/project-templates/threejs/skills/playable-fx-decompose/scripts/fix-shard-debris-frames.py +60 -0
- package/project-templates/threejs/skills/playable-fx-decompose/scripts/generate-shard-debris.py +276 -0
- package/project-templates/threejs/skills/playable-fx-peak/SKILL.md +237 -0
- package/project-templates/threejs/skills/playable-fx-peak/requirements.txt +2 -0
- package/project-templates/threejs/skills/playable-fx-peak/scripts/fix-frame-edges.py +70 -0
- package/project-templates/threejs/skills/playable-fx-peak/scripts/repack-frame-sequence.py +526 -0
- package/project-templates/threejs/skills/playable-fx-peak/scripts/validate-frame-anchors.py +130 -0
- package/project-templates/threejs/skills/playable-placeholder/SKILL.md +239 -0
- package/project-templates/threejs/skills/playable-record/SKILL.md +166 -0
- package/project-templates/threejs/skills/playable-record/scripts/lib/build-artifact.mjs +92 -0
- package/project-templates/threejs/skills/playable-record/scripts/lib/dev-server.mjs +104 -0
- package/project-templates/threejs/skills/playable-record/scripts/lib/record-audio-bridge.js +141 -0
- package/project-templates/threejs/skills/playable-record/scripts/lib/slice-structure-verify.mjs +199 -0
- package/project-templates/threejs/skills/playable-record/scripts/record-playable.mjs +583 -0
- package/project-templates/threejs/skills/playable-record/scripts/verify-build.mjs +185 -0
- package/project-templates/threejs/skills/playable-record/scripts/verify-contract.mjs +261 -0
- package/project-templates/threejs/skills/playable-record/scripts/verify-firstwin.mjs +398 -0
- package/project-templates/threejs/skills/playable-record/scripts/verify-fusion.mjs +320 -0
- package/project-templates/threejs/skills/playable-record/scripts/verify-lifecycle.mjs +78 -0
- package/project-templates/threejs/skills/playable-record/scripts/verify-slice-artist.mjs +53 -0
- package/project-templates/threejs/skills/playable-record/scripts/verify-slice-ta.mjs +53 -0
- package/project-templates/threejs/skills/playable-record/scripts/verify-slice.mjs +142 -0
- package/project-templates/threejs/skills/playable-record/scripts/verify-visual-ring.mjs +250 -0
- package/project-templates/threejs/skills/playable-record/scripts/verify-visual-ring1.mjs +190 -0
- package/project-templates/threejs/skills/playable-record/scripts/verify-vlm-video.mjs +227 -0
- package/project-templates/threejs/skills/playable-validate/SKILL.md +260 -0
- package/project-templates/threejs/skills/playable-validate/references/checklist-detail.md +36 -0
- package/project-templates/threejs/skills/playable-validate/references/single-html-bundle.md +76 -0
- package/project-templates/threejs/skills/playable-validate/validation-rules.md +200 -0
- package/project-templates/threejs/skills/playable-verify-ui/SKILL.md +295 -0
- package/project-templates/threejs/skills/playable-verify-ui/examples/asset-manifest.example.json +36 -0
- package/project-templates/threejs/skills/playable-verify-ui/examples/mahjong-match.profile.yaml +334 -0
- package/project-templates/threejs/skills/playable-verify-ui/profiles/template.profile.yaml +84 -0
- package/project-templates/threejs/skills/playable-verify-ui/reference.md +165 -0
- package/project-templates/threejs/skills/playable-verify-ui/references/phaser-patterns.md +67 -0
- package/project-templates/threejs/skills/playable-verify-ui/references/scaling-decision-tree.md +51 -0
- package/project-templates/threejs/skills/playable-verify-ui/requirements.txt +7 -0
- package/project-templates/threejs/skills/playable-verify-ui/schema/asset-manifest.schema.json +68 -0
- package/project-templates/threejs/skills/playable-verify-ui/schema/playable-ui-profile.schema.json +171 -0
- package/project-templates/threejs/skills/playable-verify-ui/scripts/asset_manifest.py +231 -0
- package/project-templates/threejs/skills/playable-verify-ui/scripts/lib/__init__.py +1 -0
- package/project-templates/threejs/skills/playable-verify-ui/scripts/lib/config_expr.js +218 -0
- package/project-templates/threejs/skills/playable-verify-ui/scripts/lib/node_utils.js +51 -0
- package/project-templates/threejs/skills/playable-verify-ui/scripts/lib/profile_loader.py +59 -0
- package/project-templates/threejs/skills/playable-verify-ui/scripts/lib/report.py +106 -0
- package/project-templates/threejs/skills/playable-verify-ui/scripts/lib/runtime_contract.js +116 -0
- package/project-templates/threejs/skills/playable-verify-ui/scripts/measure_frame_content.py +77 -0
- package/project-templates/threejs/skills/playable-verify-ui/scripts/run_all.py +265 -0
- package/project-templates/threejs/skills/playable-verify-ui/scripts/verify_asset_sizes.py +77 -0
- package/project-templates/threejs/skills/playable-verify-ui/scripts/verify_assets_present.py +62 -0
- package/project-templates/threejs/skills/playable-verify-ui/scripts/verify_atlas_budget.py +84 -0
- package/project-templates/threejs/skills/playable-verify-ui/scripts/verify_atlas_frames.py +79 -0
- package/project-templates/threejs/skills/playable-verify-ui/scripts/verify_bg_clean.py +365 -0
- package/project-templates/threejs/skills/playable-verify-ui/scripts/verify_doc_asset_sync.py +90 -0
- package/project-templates/threejs/skills/playable-verify-ui/scripts/verify_fetch_antipatterns.py +59 -0
- package/project-templates/threejs/skills/playable-verify-ui/scripts/verify_game_config_load.js +54 -0
- package/project-templates/threejs/skills/playable-verify-ui/scripts/verify_hardcoded_layout.js +64 -0
- package/project-templates/threejs/skills/playable-verify-ui/scripts/verify_layout_regions.js +110 -0
- package/project-templates/threejs/skills/playable-verify-ui/scripts/verify_profile_schema.py +37 -0
- package/project-templates/threejs/skills/playable-verify-ui/scripts/verify_ring1_visual.py +211 -0
- package/project-templates/threejs/skills/playable-verify-ui/scripts/verify_runtime_contract.js +58 -0
- package/project-templates/threejs/skills/playable-verify-ui/scripts/verify_script_load_order.js +73 -0
- package/project-templates/threejs/skills/playable-verify-ui/scripts/verify_slice_plan.py +238 -0
- package/project-templates/threejs/skills/playable-verify-ui/scripts/verify_slice_plan_test.py +125 -0
- package/project-templates/threejs/skills/playable-verify-ui/scripts/verify_text_overlap.py +333 -0
- package/project-templates/threejs/skills/playable-verify-ui/scripts/verify_tile_consistency.py +323 -0
- package/project-templates/threejs/skills/playable-verify-ui/scripts/verify_vision_evidence.py +894 -0
- package/project-templates/threejs/skills/playable-verify-ui/scripts/verify_vision_evidence_test.py +122 -0
- package/project-templates/threejs/skills/playable-verify-ui/scripts/verify_visual.py +422 -0
- package/project-templates/threejs/ta-workspace/scripts/.gitkeep +0 -0
- package/project-templates/threejs/templates/artist-log.template.md +182 -0
- package/project-templates/threejs/templates/atom-tree.template.json +133 -0
- package/project-templates/threejs/templates/design-brief.template.md +92 -0
- package/project-templates/threejs/templates/design-lens-checklist.reference.md +117 -0
- package/project-templates/threejs/templates/design-methodology.md +99 -0
- package/project-templates/threejs/templates/design.template.md +50 -0
- package/project-templates/threejs/templates/developer-log.template.md +258 -0
- package/project-templates/threejs/templates/five-axis-framework.md +194 -0
- package/project-templates/threejs/templates/gen-placeholder-audio.template.mjs +63 -0
- package/project-templates/threejs/templates/gen-placeholders.template.mjs +81 -0
- package/project-templates/threejs/templates/intent-clarifications.template.md +58 -0
- package/project-templates/threejs/templates/layout-spec.template.md +198 -0
- package/project-templates/threejs/templates/plan.template.md +80 -0
- package/project-templates/threejs/templates/project-state.template.md +136 -0
- package/project-templates/threejs/templates/review-report.template.md +275 -0
- package/project-templates/threejs/templates/style-exploration.template.md +93 -0
- package/project-templates/threejs/templates/ta-log.template.md +394 -0
- package/project-templates/threejs/tsconfig.json +20 -0
- package/project-templates/threejs/vite.config.ts +27 -0
- package/dist/atom-plan/validate-atom-plan.js +0 -298
- package/project-template/.claude/agents/designer.md +0 -124
- package/project-template/.claude/agents/pm.md +0 -166
- package/project-template/.claude/agents/refs/designer-style-exploration-flow.md +0 -67
- package/project-template/.claude/agents/refs/pm-workflow-detail.md +0 -567
- package/project-template/.claude/hooks/validate-atom-plan.mjs +0 -224
- package/project-template/.claude/skills/playcraft-workflow/SKILL.md +0 -485
- package/project-template/docs/team/atom-plan-format.md +0 -173
- package/project-template/templates/atom-plan.template.json +0 -44
- package/project-template/templates/atom-plan.template.md +0 -108
- /package/dist/{atom-plan → asr}/validate-asr-coverage.js +0 -0
- /package/{project-template → engine-packs/phaser}/game/config/.gitkeep +0 -0
- /package/{project-template → engine-packs/phaser}/game/gameplay/.gitkeep +0 -0
- /package/{project-template → engine-packs/phaser}/game/scenes/.gitkeep +0 -0
- /package/project-template/.claude/agents/refs/{designer-art-style-catalog.md → artist-art-style-catalog.md} +0 -0
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: playable-art
|
|
3
|
+
description: >-
|
|
4
|
+
GPT-image-2 art import for playables (steps ①②). Agent MUST run ensure-project,
|
|
5
|
+
write/read design constraints, import v2 pipeline, build-atlas, review processed
|
|
6
|
+
assets visually, verify:ui:assets.
|
|
7
|
+
Use when user asks to replace placeholder tiles/UI with generated art.
|
|
8
|
+
User never runs import scripts manually.
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Playable GPT Art Pipeline
|
|
12
|
+
|
|
13
|
+
> **用户**:「用 gpt art pipeline 替换当前占位美术 / 生成 tile atlas」
|
|
14
|
+
> **Agent**:ensure-project → 读约束 → import → build-atlas → review:assets → verify。
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Agent 入口
|
|
19
|
+
|
|
20
|
+
### 0. 自举
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
npm run ensure:project
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
确认/编写约束:`docs/vds.md`、`playable.ui.profile.yaml` assets 段、或 skill 内 `references/`。
|
|
27
|
+
|
|
28
|
+
### 1. 读 art contract
|
|
29
|
+
|
|
30
|
+
扫描 `assets/manifest.json`、atlas JSON、现有 frame 名 — **不改名**。
|
|
31
|
+
|
|
32
|
+
### 2. 导入链(Agent 执行)
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
# ensure-project 已合并 package.json 时可:
|
|
36
|
+
npm run mark:slices # 可选预检:只生成 slice-plan 和标注图,不写最终切图
|
|
37
|
+
npm run import:gpt-art # 若无则 node ../skills/.../import-gpt-art-sheets-v2.py
|
|
38
|
+
npm run build-atlas
|
|
39
|
+
npm run review:assets # 必做:生成处理后图片/视频 contact sheet,agent 必须查看
|
|
40
|
+
npm run verify:ui:assets
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
需 API 时读环境 `WAVESPEED_API_KEY`;无 key 则 chroma 本地 fallback(见 references)。
|
|
44
|
+
透明资产必须先选 `alphaStrategy`(见 [references/alpha-postprocess.md](references/alpha-postprocess.md)),并保留 raw 输入到 `assets/reference/raw/`。
|
|
45
|
+
|
|
46
|
+
### 3. Image Gate
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
npm run verify:ui
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
PASS 后交 video-validate-loop 录屏定案(静态 PASS ≠ 合成 PASS)。
|
|
53
|
+
|
|
54
|
+
### 4. 硬边 UI / soft glow FX 分工
|
|
55
|
+
|
|
56
|
+
- 本 skill:tile、HUD、CTA atlas(#ff00ff contain)
|
|
57
|
+
- 帧动画 ADD 光效 → `playable-fx-peak`(出图 prompt + repack 见该 skill § GPT 出图与 A/B)
|
|
58
|
+
|
|
59
|
+
### 5. Alpha Postprocess Strategy
|
|
60
|
+
|
|
61
|
+
AI 生图通常没有可信透明底。每个需要透明的 UI / sprite / VFX(Visual Effects, 视觉特效)资产必须在生成前选择一种 `alphaStrategy`:
|
|
62
|
+
|
|
63
|
+
| alphaStrategy | 用途 | 后处理 | 何时切换 |
|
|
64
|
+
| ----------------- | ------------------------------------------------------ | ------------------------------------------------------------------------------------- | ---------------------------------------------- |
|
|
65
|
+
| `chroma` | 硬边 UI(User Interface, 用户界面)、文字、普通 sprite | 绿/蓝/品红纯色底 → floodfill / chroma key → RGBA (Red Green Blue Alpha, 红绿蓝透明度) | 有色边残留 → 换 key 色或转 `rgb-alpha-split` |
|
|
66
|
+
| `dual-bg-diff` | 半透明边缘、抗锯齿、轻柔阴影 | 两张同构图不同底色 → 差分 matte → residual gate | 几何漂移 / 双主体 → 重生或转 `rgb-alpha-split` |
|
|
67
|
+
| `rgb-alpha-split` | 稳定透明 sprite、UI、VFX | 左半 RGB (Red Green Blue, 红绿蓝),右半 Alpha 灰度 → 合成 RGBA | 模型无法画准灰度 matte 时退回 `chroma` |
|
|
68
|
+
| `black-add` | glow、粒子、光环、光柱 | 黑底保留,运行时 ADD blend | 需要 NORMAL blend 时转 `rgb-alpha-split` |
|
|
69
|
+
|
|
70
|
+
脚本入口:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
python3 skills/playable-art/scripts/extract-alpha-split.py <split.png> <out.png>
|
|
74
|
+
python3 skills/playable-art/scripts/extract-dual-bg-alpha.py <green.png> <blue.png> <out.png> --bg-a 00ff00 --bg-b 0000ff
|
|
75
|
+
python3 skills/playable-art/scripts/verify-alpha-clean.py <out.png> --json
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## Reference Matching(对照参考图)
|
|
81
|
+
|
|
82
|
+
> 原 `playable-ui-reference-matching` 已并入。
|
|
83
|
+
|
|
84
|
+
1. 截当前实现 + 读 `reference/` 参考图
|
|
85
|
+
2. 按层级对比:HUD → board → CTA → combo/reward → 背景景深
|
|
86
|
+
3. 判断差距类型:layout / 素材质量 / 比例 / 层级 / 色 / 交互态
|
|
87
|
+
4. **先改高影响区**,再微调;不要孤立调单个元素
|
|
88
|
+
5. 1080×1920 视口浏览器截图验收
|
|
89
|
+
|
|
90
|
+
规则:大区域用 design canvas 比例;preserve aspect ratio;CTA/HUD/board 为构图锚点。
|
|
91
|
+
|
|
92
|
+
详见 [references/reference-comparison.md](references/reference-comparison.md)、[references/layout-proportions.md](references/layout-proportions.md)。
|
|
93
|
+
|
|
94
|
+
## Workflow
|
|
95
|
+
|
|
96
|
+
1. Inspect the project art contract: atlas frame names, source PNG paths, target dimensions, build script, and verification command.
|
|
97
|
+
2. Generate GPT-image-2 sheets using the selected `alphaStrategy`; default to `chroma` only for hard-edge assets.
|
|
98
|
+
3. Save original sheets under `assets/reference/raw/` before any background removal or slicing.
|
|
99
|
+
4. Import with **v2 pipeline** (recommended):
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
export WAVESPEED_API_KEY=... # optional; chroma fallback if unset
|
|
103
|
+
npm run import:gpt-art # scripts/import-gpt-art-sheets-v2.py
|
|
104
|
+
npm run build-atlas
|
|
105
|
+
npm run review:assets
|
|
106
|
+
npm run verify:ui:assets
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
V2 steps: **remove bg / alpha extraction → mark slices → segment elements (not grid cells) → contain-scale → center**. See [references/sheet-import-v2.md](references/sheet-import-v2.md) and [references/alpha-postprocess.md](references/alpha-postprocess.md).
|
|
110
|
+
|
|
111
|
+
5. Inspect `assets/reference/marked/*-slice-marks.png`, `assets/reference/slice-plan.json`, `assets/atlas/*.png`, and `validate/art-review/processed-images-contact-sheet.png` for clipping, residue, wrong orientation, and distorted text.
|
|
112
|
+
6. Run `npm run verify:ui` before finishing.
|
|
113
|
+
|
|
114
|
+
**Do not use legacy grid inset importer** for wide plaques/toasts — it clips left/right ornaments.
|
|
115
|
+
|
|
116
|
+
## Generation Rules
|
|
117
|
+
|
|
118
|
+
- Ask GPT-image-2 for sprite sheets, not individual scattered art, when assets share style and dimensions.
|
|
119
|
+
- Use exact grid language: `strict 4 columns x 3 rows`, `exactly N centered sprites`, `unused cells empty`.
|
|
120
|
+
- For `chroma`, require `perfectly flat #ff00ff background`, `no dividers`, `no watermark`, `no shadows outside each sprite cell`.
|
|
121
|
+
- For `dual-bg-diff`, generate two geometry-identical images with different flat backgrounds; if geometry cannot be held stable, use `rgb-alpha-split`.
|
|
122
|
+
- For `rgb-alpha-split`, require a left RGB image and right grayscale Alpha matte; white means opaque and black means transparent.
|
|
123
|
+
- For `black-add`, require pure black `#000000`, generous spacing, and no cropped glow.
|
|
124
|
+
- Require generous padding. For wide plaques/toasts, prefer fewer columns or single-image overrides so text is not clipped at cell edges.
|
|
125
|
+
- For text-bearing UI, say `preserve aspect ratio, not stretched, not clipped`.
|
|
126
|
+
- Keep Chinese text short and explicit. Check generated text manually; regenerate bad text instead of trying to repair it by scaling.
|
|
127
|
+
- For directional/tutorial assets, specify orientation and anchor intent, e.g. `finger points downward; fingertip at bottom`.
|
|
128
|
+
|
|
129
|
+
See `references/prompt-patterns.md` for compact prompts.
|
|
130
|
+
|
|
131
|
+
## Import Rules
|
|
132
|
+
|
|
133
|
+
- Mark First, Slice Second: v2 importer must generate `assets/reference/slice-plan.json` and `assets/reference/marked/*-slice-marks.png` before writing `assets/images/**`. These programmatic marks make clipping visible to VLM (Vision-Language Model, 视觉语言模型) review and give the slicer deterministic `safeSliceBox` coordinates.
|
|
134
|
+
- Use `npm run mark:slices` when you want to inspect the marks before importing. It must not overwrite final sliced assets.
|
|
135
|
+
- Review After Processing: after any image or video transform, run `npm run review:assets` and inspect the generated contact sheet before using the result in game code. Passing scripts is not acceptance; visual review evidence is acceptance.
|
|
136
|
+
- Always keep source art aspect ratio. Use **contain**: scale uniformly to fit inside the fixed target rectangle, then center on transparent canvas.
|
|
137
|
+
- Do not use cover or stretch for UI plaques, toasts, buttons, or digits; it will distort text and decorative borders.
|
|
138
|
+
- Use chroma-key removal for `#ff00ff`, then crop to alpha.
|
|
139
|
+
- Use `extract-alpha-split.py` for `rgb-alpha-split`; reject non-even source widths or non-grayscale-looking alpha halves.
|
|
140
|
+
- Use `extract-dual-bg-alpha.py` for `dual-bg-diff`; reject geometry residual failures and regenerate or switch strategy.
|
|
141
|
+
- Use `black-add` for additive glow VFX that lose halo during background removal; verify with `playable-fx-peak` clean harness.
|
|
142
|
+
- Remove small disconnected components to eliminate grid fragments, key-color fringe, and random GPT leftovers.
|
|
143
|
+
- Use `icon` mode for single-subject art such as hand icons, gifts, particles, shards, and glows; keep only the largest connected component.
|
|
144
|
+
- Use `digit` mode for number sheets: crop from strong alpha/core first, then contain-fit so `1` does not appear tiny or all digits drift in size.
|
|
145
|
+
- Use overrides for bad cells instead of repeatedly accepting a flawed sheet. Store single regenerated assets under `assets/reference/` and import them over the sheet-derived frame.
|
|
146
|
+
|
|
147
|
+
## Scripts
|
|
148
|
+
|
|
149
|
+
This skill includes scripts that are meant to be copied into a target playable project:
|
|
150
|
+
|
|
151
|
+
- `scripts/import-gpt-art-sheets.py`: configurable importer for UI, rewards, digits, glow digits, and fx sheets.
|
|
152
|
+
- `scripts/import-gpt-art-sheets-v2.py --mark-only`: programmatic slice marking. It emits `slice-plan.json` and marked reference sheets without writing final sprites.
|
|
153
|
+
- `scripts/review-processed-assets.py`: creates `validate/art-review/processed-images-contact-sheet.png`, optional video thumbnails, and `processed-assets-review.json` after asset processing.
|
|
154
|
+
- `scripts/import-gpt-tile-sheet.py`: importer for Mahjong tile sheets.
|
|
155
|
+
- `scripts/extract-alpha-split.py`: converts side-by-side RGB + Alpha matte art into RGBA.
|
|
156
|
+
- `scripts/extract-dual-bg-alpha.py`: extracts RGBA from two geometry-matched flat-background renders.
|
|
157
|
+
- `scripts/verify-alpha-clean.py`: fails missing alpha, fully opaque outputs, and common chroma/white/black edge residue.
|
|
158
|
+
|
|
159
|
+
After copying, update:
|
|
160
|
+
|
|
161
|
+
- `SPECS`: sheet filename, grid size, frame names, output paths, target dimensions.
|
|
162
|
+
- `OVERRIDES`: single-frame replacements for clipped text, wrong orientation, or bad cells.
|
|
163
|
+
- Any project-specific paths if the project does not use `assets/reference` and `assets/images`.
|
|
164
|
+
|
|
165
|
+
Run:
|
|
166
|
+
|
|
167
|
+
```bash
|
|
168
|
+
python3 scripts/import-gpt-art-sheets.py
|
|
169
|
+
npm run mark:slices
|
|
170
|
+
python3 scripts/import-gpt-tile-sheet.py
|
|
171
|
+
npm run build-atlas
|
|
172
|
+
npm run review:assets
|
|
173
|
+
npm run verify:ui
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
If the project has no verification script, at least run the atlas build, inspect atlas PNGs, and load the game in a browser.
|
|
177
|
+
|
|
178
|
+
## Common Fixes
|
|
179
|
+
|
|
180
|
+
- **CTA end caps look oval / button too wide:** regenerate with ~2.3:1 aspect, no baked text; see [references/cta-art-spec.md](references/cta-art-spec.md).
|
|
181
|
+
- **Text is stretched:** remove stretch/cover logic; use contain only; regenerate if the source text is already warped.
|
|
182
|
+
- **Sprite is clipped:** regenerate that sheet with more padding or create a single-image override.
|
|
183
|
+
- **Grid line appears in atlas:** increase cell inset and connected-component filtering.
|
|
184
|
+
- **Green / blue / magenta fringe:** switch chroma color or regenerate as `rgb-alpha-split`.
|
|
185
|
+
- **White antialias edge:** use `dual-bg-diff` or `rgb-alpha-split`; then run `verify-alpha-clean.py`.
|
|
186
|
+
- **Dual-bg double subject:** geometry drift; regenerate with a fixed reference or switch to `rgb-alpha-split`.
|
|
187
|
+
- **Glow halo clipped:** use `black-add` and route through `playable-fx-peak`.
|
|
188
|
+
- **Small icon has random fragments:** use icon mode and keep largest component only.
|
|
189
|
+
- **Digit `1` is too small:** crop from strong alpha/core and contain-fit; do not force nonuniform scaling.
|
|
190
|
+
- **Timer colon shows as `x`:** colon dots split into two blobs during segmentation; ensure `merge_stacked_fragments` + row-band sort run before blob selection. See [references/sheet-import-v2.md](references/sheet-import-v2.md#digit-symbols-colon-shows-as-x).
|
|
191
|
+
- **Hand points the wrong way:** create an orientation-specific override and preserve the game’s expected origin/anchor.
|
|
192
|
+
- **Atlas exceeds budget:** prefer optimized PNG save; for large GPT UI atlases, indexed PNG quantization may be acceptable after visual inspection.
|
|
193
|
+
|
|
194
|
+
## Final Validation
|
|
195
|
+
|
|
196
|
+
Before finishing:
|
|
197
|
+
|
|
198
|
+
- Inspect `assets/atlas/*.png`, not only individual source PNGs.
|
|
199
|
+
- Inspect `validate/art-review/processed-images-contact-sheet.png` after imports, atlas builds, alpha extraction, video conversion, or overrides.
|
|
200
|
+
- Confirm all target frame sizes still match the project manifest/profile.
|
|
201
|
+
- Confirm generated text is readable at in-game display size.
|
|
202
|
+
- Confirm no sprite has visible chroma-key residue, clipped edges, or orientation errors.
|
|
203
|
+
- Run the project verification command and report remaining warnings separately from failures.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Alpha Postprocess Strategy
|
|
2
|
+
|
|
3
|
+
AI image generation usually does not return reliable transparent pixels. Every transparent runtime asset must choose one alpha strategy before bulk generation, then preserve the raw input under `assets/reference/raw/` and produce an RGBA (Red Green Blue Alpha, 红绿蓝透明度) PNG/WebP for runtime use.
|
|
4
|
+
|
|
5
|
+
## Strategy Matrix
|
|
6
|
+
|
|
7
|
+
| Strategy | Use for | Generation requirement | Postprocess | Fallback |
|
|
8
|
+
| -------- | ------- | ---------------------- | ----------- | -------- |
|
|
9
|
+
| `chroma` | Hard-edge UI (User Interface, 用户界面), text, regular sprites | Pure green, blue, or magenta background that does not conflict with the subject palette | Flood-fill / chroma key removal, then dark-bg overlay verify | `rgb-alpha-split` when edge residue remains |
|
|
10
|
+
| `dual-bg-diff` | Antialiased edges, soft shadows, semi-transparent objects | Two geometry-identical renders with different flat backgrounds | Difference matte extraction with geometry residual check | Regenerate or switch to `rgb-alpha-split` when geometry drifts |
|
|
11
|
+
| `rgb-alpha-split` | Stable sprites, UI, VFX (Visual Effects, 视觉特效) needing precise transparency | One image split left/right: left is RGB (Red Green Blue, 红绿蓝), right is grayscale Alpha | Copy left RGB, use right luminance as alpha | `chroma` only for hard-edge assets |
|
|
12
|
+
| `black-add` | Glow, rings, particles, beams | Pure black `#000000` background with generous spacing | Keep black-backed sheet and use ADD blend at runtime | `rgb-alpha-split` if NORMAL blend is required |
|
|
13
|
+
|
|
14
|
+
## Prompt Requirements
|
|
15
|
+
|
|
16
|
+
- `chroma`: name the exact key color and say `perfectly flat`, `no texture`, `no shadow on background`.
|
|
17
|
+
- `dual-bg-diff`: generate two images with identical composition and different flat backgrounds; if the model cannot keep geometry fixed, do not use this strategy.
|
|
18
|
+
- `rgb-alpha-split`: ask for a single image where the left half is the full-color sprite and the right half is the matching grayscale alpha matte; white means opaque, black means transparent.
|
|
19
|
+
- `black-add`: ask for pure black background, no cropped glow, and enough spacing between frames.
|
|
20
|
+
|
|
21
|
+
## Script Entrypoints
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
python3 skills/playable-art/scripts/extract-alpha-split.py \
|
|
25
|
+
assets/reference/raw/ui_alpha_split.png assets/images/ui/button.png
|
|
26
|
+
|
|
27
|
+
python3 skills/playable-art/scripts/extract-dual-bg-alpha.py \
|
|
28
|
+
assets/reference/raw/icon_green.png assets/reference/raw/icon_blue.png assets/images/ui/icon.png \
|
|
29
|
+
--bg-a 00ff00 --bg-b 0000ff
|
|
30
|
+
|
|
31
|
+
python3 skills/playable-art/scripts/verify-alpha-clean.py assets/images/ui/icon.png --json
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Validator Routing
|
|
35
|
+
|
|
36
|
+
Image Validator feedback should route failures to production skills:
|
|
37
|
+
|
|
38
|
+
| Symptom | Recommended route |
|
|
39
|
+
| ------- | ----------------- |
|
|
40
|
+
| Green / blue / magenta fringe | `playable-art`: switch `chroma` color or use `rgb-alpha-split` |
|
|
41
|
+
| White edge or dirty antialiasing | `playable-art`: use `dual-bg-diff` or `rgb-alpha-split` |
|
|
42
|
+
| Dual-bg residual / double subject | `playable-art`: regenerate with fixed reference or switch to `rgb-alpha-split` |
|
|
43
|
+
| Halo clipped after remove-bg | `playable-fx-peak`: use `black-add` and headed clean harness |
|
|
44
|
+
| Crack / damage tied to wrong tile face | `playable-fx-decompose`: rebuild overlay from blank reference |
|
|
45
|
+
|
|
46
|
+
Video Validator feedback should include `timestamp -> visible symptom -> severity -> recommended skill -> recommended alphaStrategy`. Video alpha is currently a production convention, not a full encoding pipeline; use `chroma-video`, `dual-bg-video`, `rgb-alpha-video`, or `opaque-video` in TA logs to document the chosen method.
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# CTA Button Art Spec
|
|
2
|
+
|
|
3
|
+
避免「图+字」布局阶段反复翻车。出图时按此约束,少靠运行时拉伸补救。
|
|
4
|
+
|
|
5
|
+
## Target Proportions
|
|
6
|
+
|
|
7
|
+
| 属性 | 推荐 | 避免 |
|
|
8
|
+
| ------ | ----------------------------- | -------------------------- |
|
|
9
|
+
| 宽高比 | **2.0–2.6 : 1**(如 520×200) | >3.5:1 超宽胶囊(820×190) |
|
|
10
|
+
| 文字 | **不 bake 进底图** | 与「立即下载」合成在图里 |
|
|
11
|
+
| 端饰 | 圆形宝石、祥云耳比例饱满 | 扁椭圆耳 |
|
|
12
|
+
|
|
13
|
+
运行时默认 **等比缩放**;超宽素材只能等比缩小,无法「只变窄不变形」。
|
|
14
|
+
|
|
15
|
+
## 9-Slice Friendly Structure
|
|
16
|
+
|
|
17
|
+
若必须支持宽度可调:
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
[左耳 cap 固定 ~120px][中间红条可平铺][右耳 cap 固定 ~120px]
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
- 左右 cap 含完整祥云/流苏,**不要**与中间红条共用变形区域
|
|
24
|
+
- 中间条纹理可水平无缝重复
|
|
25
|
+
- 上下金边在 cap 内闭合
|
|
26
|
+
|
|
27
|
+
## Content Safe Zone(导出前标注)
|
|
28
|
+
|
|
29
|
+
在 PSD / 生成 prompt 中留出:
|
|
30
|
+
|
|
31
|
+
| 边 | 约占帧高 |
|
|
32
|
+
| ---------------------- | ---------------------- |
|
|
33
|
+
| top | 18–22% |
|
|
34
|
+
| bottom | 20–24%(下金边常更厚) |
|
|
35
|
+
| left/right(无图标时) | 各 12–15% |
|
|
36
|
+
|
|
37
|
+
带左侧图标 HUD 条:左侧 30–35% 留给图标,文字区在右 55%。
|
|
38
|
+
|
|
39
|
+
## Generation Prompt — CTA Single Frame
|
|
40
|
+
|
|
41
|
+
```text
|
|
42
|
+
Single Chinese cute mobile game CTA button on perfectly flat #ff00ff background.
|
|
43
|
+
Horizontal pill button, aspect ratio about 2.3:1 (moderately wide, NOT ultra-wide banner).
|
|
44
|
+
Ornate fixed left and right gold cloud end caps with round green gems and red tassels.
|
|
45
|
+
Center is plain red lacquer band for overlay text — do NOT render text on the button.
|
|
46
|
+
Caps must look circular, not stretched ovals. Huge padding inside the red band.
|
|
47
|
+
Fully visible, upright, no clipping, no watermark.
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Import
|
|
51
|
+
|
|
52
|
+
- **contain** 放入目标矩形,禁止 stretch
|
|
53
|
+
- 若 sheet cell 过宽:单独 override 导出 `ui/cta_btn.png`
|
|
54
|
+
- 导入后:`npm run verify:ui:layout`;必要时设 `CTA_TEXT_Y_RATIO`
|
|
55
|
+
- 图+字 inset 实测:`python3 skills/playable-verify-ui/scripts/measure_frame_content.py assets/atlas/ui.png assets/atlas/ui.json ui_cta_btn`
|
|
56
|
+
|
|
57
|
+
## Related
|
|
58
|
+
|
|
59
|
+
- [playable-verify-ui](../playable-verify-ui/SKILL.md) — layout / Frame+Text
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Layout Proportions
|
|
2
|
+
|
|
3
|
+
Use proportions for large playable UI elements.
|
|
4
|
+
|
|
5
|
+
## Screen Regions
|
|
6
|
+
|
|
7
|
+
- Top HUD: reserve enough height for readable timer/progress panels.
|
|
8
|
+
- Board: keep the play area central but leave a deliberate lower feedback band.
|
|
9
|
+
- Bottom CTA: make it a real visual anchor, not small text.
|
|
10
|
+
- Combo/reward feedback: give it a dedicated band so it does not overlap the board or CTA.
|
|
11
|
+
|
|
12
|
+
## Sizing Rules
|
|
13
|
+
|
|
14
|
+
- Base major dimensions on `DESIGN_WIDTH` and `DESIGN_HEIGHT`.
|
|
15
|
+
- Compute badge height from source aspect ratio when using bitmap art.
|
|
16
|
+
- Keep hit zones at least as large as the visible button.
|
|
17
|
+
- Recalculate dependent positions after increasing sizes.
|
|
18
|
+
|
|
19
|
+
## Image Aspect
|
|
20
|
+
|
|
21
|
+
- Check source dimensions before resizing.
|
|
22
|
+
- Use `targetH = targetW / sourceAspect` for fixed-width scaling.
|
|
23
|
+
- Use `targetW = targetH * sourceAspect` for fixed-height scaling.
|
|
24
|
+
- Use contain-style sizing when both max width and max height matter.
|
|
25
|
+
|
|
26
|
+
## Disabled Or Blocked States
|
|
27
|
+
|
|
28
|
+
- Avoid alpha-only states for stacked boards.
|
|
29
|
+
- Prefer tint plus solid overlay so hidden content does not show through.
|
|
30
|
+
- Preserve readable symbols on disabled pieces.
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# Prompt Patterns
|
|
2
|
+
|
|
3
|
+
Use these as compact starting points. Replace names, counts, and text with the project’s exact frame contract.
|
|
4
|
+
|
|
5
|
+
## Shared Sheet Constraints
|
|
6
|
+
|
|
7
|
+
```text
|
|
8
|
+
Create a clean sprite sheet on a perfectly flat #ff00ff chroma-key background.
|
|
9
|
+
Strict <cols> columns x <rows> rows grid, exactly <n> centered sprites, unused cells empty.
|
|
10
|
+
Each sprite is fully visible, upright, isolated, and has huge padding inside its cell.
|
|
11
|
+
No cell dividers, no background texture, no watermark, no extra sprites.
|
|
12
|
+
Style: premium casual mobile game UI, cohesive with <theme>, polished 2.5D, readable at in-game size.
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Mahjong Tiles
|
|
16
|
+
|
|
17
|
+
```text
|
|
18
|
+
Chinese cute Mahjong tile sprite sheet, strict 4 columns x 3 rows.
|
|
19
|
+
Order: wan_1, wan_2, wan_3, tong_1, tong_2, tong_3, tiao_1, tiao_2, tiao_3, gold, back, empty.
|
|
20
|
+
Rounded ivory ceramic faces, emerald green border, large traditional Mahjong symbols, soft bevels.
|
|
21
|
+
No English, no labels outside the tiles, no cropped tiles.
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## UI Sheet
|
|
25
|
+
|
|
26
|
+
```text
|
|
27
|
+
Chinese cute mobile Mahjong UI sprite sheet, strict 3 columns x 3 rows.
|
|
28
|
+
Order: CTA button (no text, red band only), downward tutorial finger icon, gold selection ring, win panel 胜利, lose panel 再试一次, title plaque 麻将对对碰, loading plaque 加载中.
|
|
29
|
+
Keep all plaques aspect-preserving, not stretched, not clipped.
|
|
30
|
+
CTA: moderately wide pill ~2.3:1, fixed round end caps — see references/cta-art-spec.md.
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## CTA Button (single override — preferred)
|
|
34
|
+
|
|
35
|
+
When sheet cell forces an ultra-wide CTA, regenerate as override:
|
|
36
|
+
|
|
37
|
+
```text
|
|
38
|
+
Single Chinese cute mobile game CTA button on perfectly flat #ff00ff background.
|
|
39
|
+
Aspect ratio about 2.3:1 — moderately wide pill, NOT an ultra-wide banner.
|
|
40
|
+
Fixed ornate left/right gold cloud caps with round green gems; center plain red band.
|
|
41
|
+
Do NOT bake text on the button; runtime overlays 立即下载.
|
|
42
|
+
Circular end caps, huge internal padding, fully visible, no clipping.
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Rewards Sheet
|
|
46
|
+
|
|
47
|
+
```text
|
|
48
|
+
Chinese cute Mahjong rewards sprite sheet, strict 4 columns x 2 rows.
|
|
49
|
+
Order: 连击 compact plaque, gift icon, 连击开启 toast, 火力全开 toast, 超级连击 toast, 幸运奖励 bonus card, 连击奖励 bonus card, 超级奖励 bonus card.
|
|
50
|
+
Huge padding; long toast plaques must not touch cell edges.
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
If long toast text clips in a sheet, regenerate that frame as a single-image override:
|
|
54
|
+
|
|
55
|
+
```text
|
|
56
|
+
Single Chinese cute Mahjong reward toast sprite on perfectly flat #ff00ff background.
|
|
57
|
+
Centered compact horizontal red lacquer plaque with gold trim, text: 连击开启.
|
|
58
|
+
Huge padding around the plaque, no clipping, no stretching, fully visible.
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Digits
|
|
62
|
+
|
|
63
|
+
```text
|
|
64
|
+
Golden mobile game digit sprite sheet on flat #ff00ff.
|
|
65
|
+
Strict 5 columns x 3 rows. Order: 0,1,2,3,4,5,6,7,8,9,x,:,/.
|
|
66
|
+
Only the symbols, same visual height, readable at 48x64, no labels.
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
For glow digits:
|
|
70
|
+
|
|
71
|
+
```text
|
|
72
|
+
Glowing golden digit sprite sheet on flat #ff00ff.
|
|
73
|
+
Strict 5 columns x 2 rows. Order: 0,1,2,3,4,5,6,7,8,9.
|
|
74
|
+
Same visual height and glow weight for every digit.
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## FX
|
|
78
|
+
|
|
79
|
+
```text
|
|
80
|
+
Game FX sprite sheet on flat #ff00ff, strict 3 columns x 2 rows.
|
|
81
|
+
Order: small golden particle orb, vertical sparkle streak, large shard, medium shard, small shard, rounded rectangular selection glow frame.
|
|
82
|
+
Transparent-friendly, crisp edges, no labels.
|
|
83
|
+
```
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Reference Comparison
|
|
2
|
+
|
|
3
|
+
Use this checklist when comparing a playable to reference art.
|
|
4
|
+
|
|
5
|
+
## Composition
|
|
6
|
+
|
|
7
|
+
- Identify the three strongest visual anchors in the reference.
|
|
8
|
+
- Check whether the implementation gives the same anchors similar weight.
|
|
9
|
+
- Compare top, middle, and bottom zones separately.
|
|
10
|
+
- Look for dead space, crowded zones, and elements that steal focus.
|
|
11
|
+
|
|
12
|
+
## Asset Quality
|
|
13
|
+
|
|
14
|
+
- Reference art often gets quality from thick borders, bevels, highlights, and drop shadows.
|
|
15
|
+
- Code-drawn replacements can fix structure but rarely fully match hand-painted asset quality.
|
|
16
|
+
- If a key object remains weak after code styling, recommend generating or importing a better bitmap asset.
|
|
17
|
+
|
|
18
|
+
## Common Gaps
|
|
19
|
+
|
|
20
|
+
- Top HUD is too flat or too thin.
|
|
21
|
+
- CTA is too small or looks like background text.
|
|
22
|
+
- Board pieces are too transparent, causing visual noise.
|
|
23
|
+
- Combo/reward text overlaps badges or particles.
|
|
24
|
+
- Background has decoration but lacks foreground/midground/depth staging.
|
|
25
|
+
|
|
26
|
+
## Verification
|
|
27
|
+
|
|
28
|
+
- Compare screenshots at the same viewport.
|
|
29
|
+
- Judge first impression before inspecting details.
|
|
30
|
+
- Check whether the user can immediately identify timer, progress, playable board, and CTA.
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# Sheet Import V2 — Why Elements Were Clipped
|
|
2
|
+
|
|
3
|
+
## Root Cause (legacy `import-gpt-art-sheets.py`)
|
|
4
|
+
|
|
5
|
+
1. **Fixed grid + inset shrink** — each cell cropped with `inset` (UI sheet ~44px/side). Wide plaques lose lanterns/tassels/cloud ears.
|
|
6
|
+
2. **`crop_to_alpha(edge_pad=2)` shrinks inward** — trims 2px off each detected edge again.
|
|
7
|
+
3. **Order tied to grid index** — not to actual sprite bounds.
|
|
8
|
+
|
|
9
|
+
Reference sheets are complete; atlas clips came from import math, not GPT output.
|
|
10
|
+
|
|
11
|
+
## V2 Pipeline (`import-gpt-art-sheets-v2.py`)
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
reference/*.png
|
|
15
|
+
→ (1) remove background [WaveSpeed API | chroma fallback]
|
|
16
|
+
→ (2) connected-component blobs (per element)
|
|
17
|
+
→ (3) mark slices: contentBox + safeSliceBox + marked sheet
|
|
18
|
+
→ (4) reading-order sort + drop noise fragments
|
|
19
|
+
→ (5) crop safeSliceBox with outward pad
|
|
20
|
+
→ (6) contain-scale + center in target frame
|
|
21
|
+
→ assets/images/**
|
|
22
|
+
→ npm run build-atlas
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Mark First, Slice Second
|
|
26
|
+
|
|
27
|
+
V2 now generates deterministic slice evidence before writing sprites:
|
|
28
|
+
|
|
29
|
+
- `assets/reference/slice-plan.json` — machine-readable slice plan in JSON (JavaScript Object Notation, JavaScript 对象表示法), including `contentBox`, `safeSliceBox`, `contentMarginInsideSafe`, `touchesSourceEdge`, and per-mark `issues[]`.
|
|
30
|
+
- `assets/reference/marked/*-slice-marks.png` — source sheet with red content boxes and green/yellow safe boxes. Yellow means the source is close to a clipping risk.
|
|
31
|
+
|
|
32
|
+
This gives VLM (Vision-Language Model, 视觉语言模型) review a much clearer target: instead of asking whether the whole sheet “looks okay,” it can inspect each safe slice. The same plan also drives the importer, so the visual mark and the actual crop use the same coordinates.
|
|
33
|
+
|
|
34
|
+
Run only the marking stage when you want to inspect before slicing:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
npm run mark:slices
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
If `slice-plan.json` reports `source_clipped` or `slice_margin_tight`, regenerate the source sheet or add a single-frame override before accepting the import. Do not hide a clipped source by scaling it down after the cut.
|
|
41
|
+
|
|
42
|
+
## WaveSpeed Background Remover
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
# 推荐:项目根目录 .env(已加入 .gitignore)
|
|
46
|
+
# WAVESPEED_API_KEY=your_key
|
|
47
|
+
|
|
48
|
+
npm run import:gpt-art
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
- API: `POST https://api.wavespeed.ai/api/v3/wavespeed-ai/image-background-remover`
|
|
52
|
+
- Cached cleaned sheets: `assets/reference/cleaned/<source>.png`
|
|
53
|
+
- Without API key: falls back to magenta chroma removal
|
|
54
|
+
|
|
55
|
+
## Commands
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
npm run mark:slices # mark only, writes no final sprites
|
|
59
|
+
npm run import:gpt-art # v2 (recommended)
|
|
60
|
+
npm run import:gpt-art:legacy # old grid importer
|
|
61
|
+
npm run build-atlas
|
|
62
|
+
npm run verify:ui:assets
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## When Blob Count Mismatches
|
|
66
|
+
|
|
67
|
+
Script warns `found N blobs, expected M` and drops smallest fragments. If order wrong:
|
|
68
|
+
|
|
69
|
+
- Regenerate sheet with clearer magenta gaps between cells
|
|
70
|
+
- Or add single-frame overrides under `assets/reference/`
|
|
71
|
+
|
|
72
|
+
## Digit Symbols: Colon Shows as `x`
|
|
73
|
+
|
|
74
|
+
**Symptom:** Timer displays `01x00` instead of `01:00` — `colon.png` contains an `X` graphic.
|
|
75
|
+
|
|
76
|
+
**Cause:** V2 segmentation splits the colon (`:`) into **two small dot blobs**. Dropping the smallest fragment shifts `x` / `:` / `/` reading order.
|
|
77
|
+
|
|
78
|
+
**Fix (in `import_gpt_art_pipeline.py`):**
|
|
79
|
+
|
|
80
|
+
1. `merge_stacked_fragments()` — merge vertically stacked blobs when **both** areas are under ~9000px² and horizontally aligned.
|
|
81
|
+
2. `sort_blobs_reading_order()` — use equal `rows` bands from min/max `cy`, not `cy // max(height)` (avoids bottom-row mis-sort when `x` is 8px lower than colon).
|
|
82
|
+
|
|
83
|
+
**Verify after import:**
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
# colon.png must be two stacked dots, not X
|
|
87
|
+
open assets/images/digits/colon.png
|
|
88
|
+
npm run build-atlas && npm run build:html
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
If still wrong, override `assets/images/digits/colon.png` from reference sheet manually, then rebuild atlas.
|