summer-engine 3.4.0 → 3.4.1
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/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/.cursor-plugin/plugin.json +1 -1
- package/.factory-plugin/plugin.json +1 -1
- package/.opencode/INSTALL.md +8 -8
- package/.opencode/plugins/summer.js +2 -2
- package/AGENTS.md +7 -7
- package/CHANGELOG.md +14 -0
- package/GEMINI.md +1 -1
- package/NOTICE +1 -1
- package/README.md +30 -34
- package/assets/autopilot/run.sh +2 -2
- package/assets/navigation/web-routes.json +1 -1
- package/commands/gameskill.md +2 -2
- package/commands/summer.md +25 -25
- package/dist/cli/commands/open.d.ts +1 -1
- package/dist/cli/commands/run.d.ts +1 -1
- package/dist/cli/commands/run.js +1 -1
- package/dist/cli/commands/skills.js +2 -2
- package/dist/core/api-client.d.ts +5 -6
- package/dist/core/api-client.js +12 -15
- package/dist/core/auth.js +2 -2
- package/dist/core/capabilities/asset-import.d.ts +0 -1
- package/dist/core/capabilities/camera-view.d.ts +1 -1
- package/dist/core/capabilities/camera-view.js +2 -2
- package/dist/core/capabilities/connect-signal.d.ts +1 -2
- package/dist/core/capabilities/connect-signal.js +1 -2
- package/dist/core/capabilities/console-read.d.ts +2 -2
- package/dist/core/capabilities/console-read.js +2 -2
- package/dist/core/capabilities/engine-receipt.d.ts +5 -7
- package/dist/core/capabilities/engine-receipt.js +7 -9
- package/dist/core/capabilities/export-game.js +3 -3
- package/dist/core/capabilities/export-presets.d.ts +1 -1
- package/dist/core/capabilities/export-presets.js +1 -1
- package/dist/core/capabilities/fabricate-mesh.d.ts +2 -3
- package/dist/core/capabilities/fabricate-mesh.js +2 -3
- package/dist/core/capabilities/frame-quality.d.ts +4 -4
- package/dist/core/capabilities/frame-quality.js +4 -4
- package/dist/core/capabilities/grep.d.ts +1 -1
- package/dist/core/capabilities/grep.js +1 -1
- package/dist/core/capabilities/navigation/open.d.ts +1 -1
- package/dist/core/capabilities/navigation/open.js +1 -1
- package/dist/core/capabilities/navigation/render-product-map.js +1 -1
- package/dist/core/capabilities/navigation/targets.js +2 -2
- package/dist/core/capabilities/placement-batch.d.ts +1 -1
- package/dist/core/capabilities/placement-batch.js +2 -2
- package/dist/core/capabilities/play-determinism.d.ts +1 -1
- package/dist/core/capabilities/play-determinism.js +1 -1
- package/dist/core/capabilities/publish-build.d.ts +1 -1
- package/dist/core/capabilities/publish-build.js +4 -6
- package/dist/core/capabilities/publish-download.d.ts +1 -2
- package/dist/core/capabilities/publish-download.js +2 -3
- package/dist/core/capabilities/replace-node.d.ts +1 -3
- package/dist/core/capabilities/replace-node.js +1 -3
- package/dist/core/capabilities/runtime-control.d.ts +5 -7
- package/dist/core/capabilities/runtime-control.js +7 -9
- package/dist/core/capabilities/scene-batch.d.ts +1 -1
- package/dist/core/capabilities/scene-batch.js +1 -1
- package/dist/core/capabilities/scene-kind.js +1 -1
- package/dist/core/capabilities/scene-readback.d.ts +3 -4
- package/dist/core/capabilities/scene-readback.js +3 -4
- package/dist/core/capabilities/scene-script.d.ts +2 -2
- package/dist/core/capabilities/scene-script.js +2 -2
- package/dist/core/capabilities/seeing/shot-store.d.ts +1 -1
- package/dist/core/capabilities/seeing/shot-store.js +1 -1
- package/dist/core/capabilities/summer-bundle.d.ts +2 -3
- package/dist/core/capabilities/summer-bundle.js +2 -3
- package/dist/core/capabilities/surface-snap.d.ts +1 -1
- package/dist/core/capabilities/surface-snap.js +1 -1
- package/dist/core/capabilities/tool-dispatch.js +1 -1
- package/dist/core/capabilities/ui-control.d.ts +1 -2
- package/dist/core/capabilities/ui-control.js +1 -2
- package/dist/core/capabilities/world-snapshot.d.ts +1 -1
- package/dist/core/capabilities/world-snapshot.js +1 -1
- package/dist/core/capability-skew.d.ts +2 -3
- package/dist/core/capability-skew.js +4 -5
- package/dist/core/feedback/client.js +1 -1
- package/dist/core/launch-posture.d.ts +3 -3
- package/dist/core/launch-posture.js +3 -3
- package/dist/core/library-read.js +1 -2
- package/dist/core/templates.d.ts +1 -2
- package/dist/core/templates.js +1 -2
- package/dist/mcp/server.d.ts +2 -2
- package/dist/mcp/server.js +2 -2
- package/dist/mcp/tools/creator-tools.js +1 -1
- package/dist/mcp/tools/debug-tools.js +1 -1
- package/dist/mcp/tools/generate-tools.js +7 -7
- package/dist/mcp/tools/navigation-tools.d.ts +1 -1
- package/dist/mcp/tools/navigation-tools.js +1 -1
- package/dist/mcp/tools/spatial-tools.js +1 -1
- package/dist/mcp/tools/visual-tools.js +2 -2
- package/dist/mcp/tools/with-engine.d.ts +1 -2
- package/dist/mcp/tools/with-engine.js +1 -2
- package/gemini-extension.json +1 -1
- package/hooks/session-start.sh +2 -2
- package/integrations/README.md +70 -76
- package/integrations/claude/README.md +0 -3
- package/integrations/codex/README.md +1 -2
- package/integrations/copilot-jetbrains/README.md +1 -1
- package/integrations/cursor/README.md +1 -2
- package/integrations/factory/README.md +15 -11
- package/integrations/mistral-vibe/README.md +1 -1
- package/integrations/opencode/README.md +1 -1
- package/integrations/roo-code/README.md +1 -1
- package/integrations/rovo-dev/README.md +1 -1
- package/integrations/trae/README.md +1 -1
- package/integrations/windsurf/README.md +3 -3
- package/library/references/collaborative-protocol/collaborative-protocol.md +5 -5
- package/library/references/gd-style/gd-style.md +4 -6
- package/library/references/godot-version/godot-version.md +3 -3
- package/library/references/headless-routing/headless-routing.md +2 -2
- package/library/references/mcp-fresh-chat-playbook/mcp-fresh-chat-playbook.md +2 -2
- package/library/references/mcp-tools-reference/mcp-tools-reference.md +15 -14
- package/library/references/product-map/product-map.md +1 -1
- package/library/references/public-surface-language/public-surface-language.md +1 -1
- package/library/references/summer-folder/summer-folder.md +1 -1
- package/library/skills/3d-lighting/SKILL.md +4 -4
- package/library/skills/README.md +5 -5
- package/library/skills/adaptive-music/SKILL.md +7 -7
- package/library/skills/ai-characters-in-games/SKILL.md +1 -1
- package/library/skills/ambient-bed/SKILL.md +12 -14
- package/library/skills/animated-loop/SKILL.md +42 -42
- package/library/skills/animation-tree/SKILL.md +6 -6
- package/library/skills/art-direction/SKILL.md +8 -11
- package/library/skills/asset-strategy/SKILL.md +3 -3
- package/library/skills/audio-direction/SKILL.md +8 -10
- package/library/skills/auto-fire-targeting/SKILL.md +4 -3
- package/library/skills/bounded-engine-runs/SKILL.md +6 -7
- package/library/skills/brainstorm-game/SKILL.md +5 -5
- package/library/skills/brainstorming/SKILL.md +9 -15
- package/library/skills/celeste-momentum-platforming/SKILL.md +8 -13
- package/library/skills/celeste-momentum-platforming/resource.yaml +1 -1
- package/library/skills/character-animation-wiring/SKILL.md +2 -2
- package/library/skills/character-model/SKILL.md +15 -26
- package/library/skills/character-movement/SKILL.md +1 -1
- package/library/skills/character-movement/references/movement-3d.md +1 -1
- package/library/skills/character-portrait/SKILL.md +4 -4
- package/library/skills/cinematic-cutscene/SKILL.md +38 -38
- package/library/skills/combat-basics/SKILL.md +1 -1
- package/library/skills/compatibility-renderer-traps/SKILL.md +2 -2
- package/library/skills/concept-art/SKILL.md +3 -3
- package/library/skills/create-asset-sheet/SKILL.md +12 -31
- package/library/skills/debug/SKILL.md +5 -4
- package/library/skills/debugging-game-feel/SKILL.md +1 -4
- package/library/skills/debugging-game-feel/resource.yaml +1 -1
- package/library/skills/design-level/SKILL.md +5 -5
- package/library/skills/design-mechanic/SKILL.md +6 -6
- package/library/skills/design-npc/SKILL.md +8 -15
- package/library/skills/diagnosing-perf-regressions/SKILL.md +5 -10
- package/library/skills/dispatching-parallel-agents/SKILL.md +1 -19
- package/library/skills/environment-kit/SKILL.md +5 -5
- package/library/skills/export-and-ship/SKILL.md +23 -24
- package/library/skills/fabricating-assets/SKILL.md +1 -1
- package/library/skills/facial-and-lipsync/SKILL.md +5 -5
- package/library/skills/fps-controller/SKILL.md +17 -16
- package/library/skills/fps-controller/resource.yaml +0 -2
- package/library/skills/game-feel/SKILL.md +6 -7
- package/library/skills/gameskill/SKILL.md +3 -3
- package/library/skills/gdscript-patterns/SKILL.md +3 -3
- package/library/skills/generate-motion/SKILL.md +5 -22
- package/library/skills/godogen-visual-proof-game-generation/SKILL.md +72 -90
- package/library/skills/godogen-visual-proof-game-generation/resource.yaml +0 -1
- package/library/skills/headless-scripting/SKILL.md +8 -8
- package/library/skills/instantiate-asset-pack/SKILL.md +7 -3
- package/library/skills/investigating-bugs/SKILL.md +3 -11
- package/library/skills/investigating-bugs/condition-based-waiting.md +0 -10
- package/library/skills/investigating-bugs/root-cause-tracing.md +0 -8
- package/library/skills/lumera-single-image-scene-reconstruction/SKILL.md +15 -15
- package/library/skills/lumera-single-image-scene-reconstruction/resource.yaml +0 -1
- package/library/skills/make-game/SKILL.md +3 -5
- package/library/skills/make-game/references/2d-platformer.md +1 -1
- package/library/skills/multiplayer-project/SKILL.md +1 -1
- package/library/skills/multiplayer-testing/SKILL.md +4 -4
- package/library/skills/music-track/SKILL.md +40 -38
- package/library/skills/new-project/SKILL.md +4 -6
- package/library/skills/organic-model/SKILL.md +9 -9
- package/library/skills/pixel-art/SKILL.md +6 -6
- package/library/skills/play/SKILL.md +3 -4
- package/library/skills/playtesting-a-feature/SKILL.md +4 -6
- package/library/skills/procedural-animation/SKILL.md +10 -11
- package/library/skills/prop-model/SKILL.md +4 -4
- package/library/skills/psx-retro-rendering/SKILL.md +20 -20
- package/library/skills/psx-retro-rendering/resource.yaml +2 -3
- package/library/skills/realtime-wet-surfaces/SKILL.md +15 -15
- package/library/skills/realtime-wet-surfaces/resource.yaml +1 -2
- package/library/skills/remote-deploy/SKILL.md +20 -21
- package/library/skills/retarget/SKILL.md +19 -23
- package/library/skills/running-in-the-cloud/SKILL.md +5 -5
- package/library/skills/scene-composition/SKILL.md +5 -5
- package/library/skills/scene-hierarchy-design/SKILL.md +3 -3
- package/library/skills/scene-hierarchy-design/resource.yaml +0 -1
- package/library/skills/scene-scripting/SKILL.md +3 -3
- package/library/skills/scene-to-level/SKILL.md +28 -31
- package/library/skills/skill-create/SKILL.md +1 -1
- package/library/skills/skill-improve/SKILL.md +9 -9
- package/library/skills/skill-test/SKILL.md +10 -10
- package/library/skills/skintokens-auto-rigging/SKILL.md +18 -18
- package/library/skills/skintokens-auto-rigging/resource.yaml +3 -3
- package/library/skills/skybox-panorama/SKILL.md +8 -9
- package/library/skills/sound-effect/SKILL.md +19 -19
- package/library/skills/spatial-placement/SKILL.md +2 -2
- package/library/skills/spatial-placement/references/kit-placement-tools.md +12 -22
- package/library/skills/sprite-sheet/SKILL.md +10 -10
- package/library/skills/summer-analytics/SKILL.md +3 -3
- package/library/skills/summer-friends/SKILL.md +10 -10
- package/library/skills/summer-leaderboards/SKILL.md +6 -6
- package/library/skills/summer-match-results/SKILL.md +13 -13
- package/library/skills/summer-matchmaking/SKILL.md +11 -11
- package/library/skills/summer-parties/SKILL.md +9 -9
- package/library/skills/summer-player-data/SKILL.md +12 -12
- package/library/skills/summer-store/SKILL.md +6 -6
- package/library/skills/summer-world-chat/SKILL.md +9 -9
- package/library/skills/summer-world-saves/SKILL.md +7 -7
- package/library/skills/text-to-motion/rigging-for-text-motion.md +1 -1
- package/library/skills/tileable-texture/SKILL.md +1 -1
- package/library/skills/trailer-shot/SKILL.md +36 -36
- package/library/skills/tune-performance/SKILL.md +13 -13
- package/library/skills/tune-performance/resource.yaml +1 -1
- package/library/skills/ui-graphics/SKILL.md +7 -7
- package/library/skills/use-widget-asset/SKILL.md +7 -7
- package/library/skills/using-summer/SKILL.md +5 -7
- package/library/skills/vehicle-model/SKILL.md +6 -7
- package/library/skills/vehicle-model/resource.yaml +2 -2
- package/library/skills/verification-before-completion/SKILL.md +5 -6
- package/library/skills/vfx-dissolve/SKILL.md +4 -4
- package/library/skills/vfx-fire/SKILL.md +6 -6
- package/library/skills/vfx-fire/_building-blocks/additive-billboard-particles.md +3 -3
- package/library/skills/vfx-hit-spark/SKILL.md +4 -4
- package/library/skills/vfx-hit-spark/_building-blocks/additive-billboard-particles.md +3 -3
- package/library/skills/vfx-lightning/SKILL.md +5 -5
- package/library/skills/vfx-lightning/_building-blocks/additive-billboard-particles.md +3 -3
- package/library/skills/vfx-lightning/_building-blocks/trauma-shake-snippet.md +9 -3
- package/library/skills/vfx-magic-glow/SKILL.md +4 -4
- package/library/skills/vfx-magic-glow/_building-blocks/additive-billboard-particles.md +3 -3
- package/library/skills/vfx-muzzle-flash/SKILL.md +5 -5
- package/library/skills/vfx-muzzle-flash/_building-blocks/additive-billboard-particles.md +3 -3
- package/library/skills/vfx-muzzle-flash/_building-blocks/trauma-shake-snippet.md +9 -3
- package/library/skills/vfx-smoke/SKILL.md +5 -5
- package/library/skills/vfx-water-ripple/SKILL.md +2 -2
- package/library/skills/vfx-water-ripple/_building-blocks/additive-billboard-particles.md +3 -3
- package/library/skills/voice-line/SKILL.md +9 -9
- package/library/skills/world-building-3d/references/spatial-tools.md +2 -2
- package/library/skills/writing-plans/SKILL.md +4 -4
- package/library/skills/writing-skills/SKILL.md +8 -8
- package/library/tools/creator-publish/resource.yaml +4 -4
- package/library/tools/creator-releases/resource.yaml +5 -5
- package/library/tools/publish-build/resource.yaml +5 -1
- package/package.json +1 -1
- package/registry/generated/gemini-extension.json +1 -1
- package/registry/generated/index.json +130 -130
- package/registry/generated/marketplace.claude.json +1 -1
- package/registry/generated/plugin.claude.json +1 -1
- package/registry/generated/plugin.codex.json +1 -1
- package/registry/generated/plugin.cursor.json +1 -1
- package/registry/generated/plugin.factory.json +1 -1
- package/registry/generated/skills-index.md +5 -5
- package/registry/generated/skills-registry.json +5 -5
- package/registry/schemas/domains.json +1 -1
|
@@ -13,68 +13,61 @@ tags:
|
|
|
13
13
|
confidence: extracted
|
|
14
14
|
---
|
|
15
15
|
|
|
16
|
-
# Godogen-Style Autonomous Game Generation + Visual Proof QC in SummerEngine
|
|
17
16
|
|
|
18
|
-
|
|
17
|
+
# Godogen-Style Game Generation with Visual Proof QC in Summer Engine
|
|
19
18
|
|
|
20
|
-
|
|
19
|
+
## Outcome
|
|
21
20
|
|
|
22
|
-
|
|
21
|
+
Take a **short game description** and produce a **runnable, visually verified game**. The method comes from the open-source Godogen project: *judge the result from the running game, never from a clean compile*. Every iteration ends with a screenshot or short proof clip from the running game, and the host coding agent reviews those frames against the brief itself. There is no separate verifier model.
|
|
23
22
|
|
|
24
23
|
## When to Use
|
|
25
24
|
|
|
26
|
-
- Building complete small
|
|
27
|
-
-
|
|
28
|
-
- Unattended generation runs where the deliverable must include proof (15–20s recording) instead of "it compiled, trust me."
|
|
25
|
+
- Building a complete small game or prototype from a natural-language brief (mechanics, art style, camera and HUD in one prompt).
|
|
26
|
+
- The agent says the game works but never looked at it running. You need an agent that *sees* the running game and reports concrete visual defects.
|
|
27
|
+
- Unattended generation runs where the deliverable must include proof (a 15–20s recording) instead of "it compiled, trust me."
|
|
29
28
|
- Asset generation for the game (references, textures, 3D models, animated sprites) as part of the same pipeline.
|
|
30
29
|
|
|
31
30
|
## When NOT to Use
|
|
32
31
|
|
|
33
|
-
- Hand-authored, large-scope production work
|
|
34
|
-
-
|
|
35
|
-
- Quick
|
|
36
|
-
|
|
37
|
-
## Core Principles (extracted)
|
|
38
|
-
|
|
39
|
-
1. **godogen → game repo → game.** The generator itself is not a game. You publish a thin scaffold into a fresh game repo; the agent then builds the actual game *inside* that repo from a short engine guide.
|
|
40
|
-
|
|
41
|
-
2. **Thin runtime, smart agent.** The published repo is intentionally minimal: one engine-agnostic runtime manifest (`prompts/runtime.md`), a one-page per-engine guide (`engines/godot.md`), and a single cross-engine asset-generation skill (`asset-gen/`). The model plans, scaffolds, and decomposes the work itself — there are no planner/decomposer/architecture skill files anymore (dropped 2026-07-02).
|
|
42
|
-
|
|
43
|
-
3. **Proof over claims.** "The agent judges results from the running game (a live URL or a recorded clip), not from a clean compile, so visible defects drive the next iteration."
|
|
32
|
+
- Hand-authored, large-scope production work. This is a generator loop, not a replacement for deliberate design iteration.
|
|
33
|
+
- No GPU capture path. The QC loop is worthless if frames come from a software renderer (see Failure Modes).
|
|
34
|
+
- Quick logic fixes with no visual component. Running and capturing is overhead there.
|
|
44
35
|
|
|
45
|
-
|
|
36
|
+
## Core Principles (from Godogen)
|
|
46
37
|
|
|
47
|
-
|
|
38
|
+
1. **Generator repo → game repo → game.** The generator itself is not a game. It publishes a thin scaffold into a fresh game repo; the agent then builds the actual game *inside* that repo from a short engine guide.
|
|
39
|
+
2. **Thin runtime, smart agent.** The published repo is minimal: one runtime manifest (`prompts/runtime.md`), a one-page engine guide, and one asset-generation skill (`asset-gen/`). The model plans, scaffolds and decomposes the work itself; there are no planner or architecture skill files.
|
|
40
|
+
3. **Proof over claims.** The agent judges results from the running game (a live build or a recorded clip), not from a clean compile, so visible defects drive the next iteration.
|
|
41
|
+
4. **The host agent verifies from captured frames.** Godogen dropped a separate verification model because it added no signal. One strong coding agent looking at real screenshots is enough.
|
|
42
|
+
5. **Two involvement modes, chosen by how the task is framed.** Watch the live game and steer at decision points, or run unattended and receive a 15–20s proof recording at the end, watched back before done.
|
|
43
|
+
6. **Engine-specific runtime traps live in the engine guide.** Defects that survive a compile but fail at runtime are written down where the agent reads them during the run.
|
|
48
44
|
|
|
49
|
-
|
|
45
|
+
## Mapping to Summer Engine
|
|
50
46
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
| Godogen concept | SummerEngine adaptation |
|
|
47
|
+
| Godogen concept | Summer Engine equivalent |
|
|
54
48
|
|---|---|
|
|
55
|
-
|
|
|
56
|
-
| `prompts/runtime.md` manifest |
|
|
57
|
-
|
|
|
58
|
-
| `asset-gen/` skill |
|
|
59
|
-
|
|
|
60
|
-
|
|
|
61
|
-
|
|
62
|
-
**Language note:** Godogen generates Godot games in **C#/.NET** (migrated from GDScript on 2026-04-06) because `dotnet build` gives a cheap, reliable compile gate. If SummerEngine stays GDScript, you need an equivalent cheap gate — e.g. `godot --headless --check-only` script parsing — before the visual stage, since the whole point is: compile gate first, *then* visual proof, never one instead of the other.
|
|
49
|
+
| Publish step that renders the agent files into a game repo | `summer create <template>` plus the installed Summer skills; `.summer/` holds the brief (`GameSoul.md`) and build plan |
|
|
50
|
+
| `prompts/runtime.md` manifest | `.summer/build-plan.md`: delivery contract and involvement mode |
|
|
51
|
+
| One-page engine guide | A project skill with capture recipes, runtime traps and scene conventions (`gameskill` captures new traps) |
|
|
52
|
+
| `asset-gen/` skill | `asset-strategy` and the Summer generation tools |
|
|
53
|
+
| Compile gate (`dotnet build` for C#) | `summer_get_script_errors` per file, then `summer_get_diagnostics` |
|
|
54
|
+
| Proof recording (ffmpeg + xvfb) | `summer_play`, `summer_screenshot target:"game"`, `summer_game_probe`; frame sequences from a `RunVerification` probe's `save_frame`; optional ffmpeg clip |
|
|
63
55
|
|
|
64
|
-
|
|
56
|
+
**Language note:** Godogen generates C# games because `dotnet build` is a cheap, reliable compile gate. Summer games use GDScript, so the gate is `summer_get_script_errors` on each changed file. The order is the point: compile gate first, *then* visual proof, never one instead of the other.
|
|
65
57
|
|
|
66
|
-
|
|
58
|
+
## Repo Shape
|
|
67
59
|
|
|
68
60
|
```
|
|
69
61
|
my-summer-game/
|
|
70
|
-
├── AGENTS.md # host-agent entry
|
|
71
|
-
├──
|
|
72
|
-
├──
|
|
62
|
+
├── AGENTS.md # host-agent entry
|
|
63
|
+
├── .summer/
|
|
64
|
+
│ ├── GameSoul.md # the brief
|
|
65
|
+
│ └── build-plan.md # delivery contract + involvement mode
|
|
73
66
|
└── .agents/skills/
|
|
74
|
-
└──
|
|
67
|
+
└── <project-guide>/ # capture recipes, runtime traps, conventions
|
|
75
68
|
```
|
|
76
69
|
|
|
77
|
-
In-
|
|
70
|
+
In-game capture harness, for runs outside the editor:
|
|
78
71
|
|
|
79
72
|
```
|
|
80
73
|
Main (Node)
|
|
@@ -85,9 +78,9 @@ Main (Node)
|
|
|
85
78
|
# saves PNGs to user://proof/ on trigger
|
|
86
79
|
```
|
|
87
80
|
|
|
88
|
-
## Capture Harness (GDScript
|
|
81
|
+
## Capture Harness (GDScript)
|
|
89
82
|
|
|
90
|
-
|
|
83
|
+
Godogen's own capture code is not public; this is an adaptation. Inside a Summer session, prefer `summer_screenshot target:"game"` and `RunVerification` frames, and use this autoload for unattended runs outside the editor.
|
|
91
84
|
|
|
92
85
|
```gdscript
|
|
93
86
|
extends Node
|
|
@@ -135,89 +128,78 @@ func _on_frame_post_draw() -> void:
|
|
|
135
128
|
pass # hook if you need exact-frame capture timing
|
|
136
129
|
```
|
|
137
130
|
|
|
138
|
-
|
|
131
|
+
Encode the PNG sequence (resolve `user://` to its absolute path first):
|
|
139
132
|
|
|
140
133
|
```bash
|
|
141
|
-
ffmpeg -framerate 2 -i
|
|
134
|
+
ffmpeg -framerate 2 -i <user_dir>/proof/%03d_rec.png -c:v libx264 -pix_fmt yuv420p proof.mp4
|
|
142
135
|
```
|
|
143
136
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
## The Visual QC Loop (the core deliverable)
|
|
137
|
+
Unattended Linux runs need a real display for real rendering: run the engine under `xvfb-run -a`.
|
|
147
138
|
|
|
148
|
-
|
|
139
|
+
## The Visual QC Loop
|
|
149
140
|
|
|
150
141
|
```
|
|
151
142
|
1. BUILD/EDIT agent applies a change to the game
|
|
152
|
-
2. COMPILE GATE
|
|
153
|
-
3. RUN + CAPTURE
|
|
143
|
+
2. COMPILE GATE summer_get_script_errors on changed files, then summer_get_diagnostics
|
|
144
|
+
3. RUN + CAPTURE summer_play, then capture frames at defined triggers
|
|
154
145
|
4. SELF-REVIEW host agent inspects captured frames against the brief
|
|
155
146
|
5. DEFECT LIST structured findings: {location, expected, observed, severity}
|
|
156
147
|
6. DECIDE no blocking defects → go to 7; else → back to 1 with the list
|
|
157
|
-
7. PROOF 15–20s recording,
|
|
148
|
+
7. PROOF 15–20s recording, watched back before done
|
|
158
149
|
```
|
|
159
150
|
|
|
160
151
|
Rules that make it work:
|
|
161
152
|
|
|
162
|
-
- **Bounded.** Hard cap on rounds (see Tunables).
|
|
163
|
-
- **Same agent verifies.** Do not add a separate verifier model
|
|
164
|
-
- **Defects must be visible.** The review
|
|
165
|
-
- **Engine traps belong in the guide.** Recurring "survives compile, fails at runtime" defects
|
|
153
|
+
- **Bounded.** Hard cap on rounds (see Tunables). The run closes with a proof recording; it does not iterate forever.
|
|
154
|
+
- **Same agent verifies.** Do not add a separate verifier model. Godogen tried it and dropped it.
|
|
155
|
+
- **Defects must be visible.** The review asks for concrete visual observations tied to the brief ("character sprite missing; brief asks for chunky iconic sprites"), not "looks wrong".
|
|
156
|
+
- **Engine traps belong in the guide.** Recurring "survives compile, fails at runtime" defects go into the project guide so the agent reads them before they happen again.
|
|
166
157
|
|
|
167
|
-
## Asset Generation
|
|
168
|
-
|
|
169
|
-
| Need | Tool | Notes |
|
|
170
|
-
|---|---|---|
|
|
171
|
-
| Precise references & characters | Gemini (`GOOGLE_API_KEY`, google-genai) | high-fidelity image generation |
|
|
172
|
-
| Textures & simple objects | xAI Grok (`XAI_API_KEY`) | image/video generation |
|
|
173
|
-
| Image-to-3D, rigged biped animation | Tripo3D (`TRIPO3D_API_KEY`) | 3D conversion |
|
|
174
|
-
| Animated sprites | Grok video → frame extraction (ffmpeg) → loop detection → background removal | BiRefNet multi-signal matting (since 2026-03-25); imagemagick for resize/flip/crop |
|
|
158
|
+
## Asset Generation
|
|
175
159
|
|
|
176
|
-
|
|
160
|
+
Godogen calls external image, video and image-to-3D providers with their own API keys, then cuts animated sprites from generated video (frame extraction, loop detection, background removal, imagemagick for resize and crop). In Summer, route asset work through `asset-strategy` and the Summer generation tools (`summer_generate_image`, `summer_generate_3d`, `summer_generate_video`) instead of wiring provider keys into the project.
|
|
177
161
|
|
|
178
162
|
## Implementation Steps
|
|
179
163
|
|
|
180
|
-
1. **Write the thin runtime
|
|
181
|
-
2. **Set up
|
|
182
|
-
3. **
|
|
183
|
-
4. **
|
|
184
|
-
5. **
|
|
185
|
-
6. **
|
|
186
|
-
7. **Support both involvement modes**:
|
|
187
|
-
8. **Optionally move runs to a server**: tmux/screen for long sessions, GPU instance for faster render+capture, remote-control interface to steer mid-run.
|
|
164
|
+
1. **Write the thin runtime**: the brief in `.summer/GameSoul.md`, the delivery contract and involvement mode in `.summer/build-plan.md`, and a one-page project guide (how to run, how to capture, known runtime traps). Grow the guide every time a defect survives the compile gate.
|
|
165
|
+
2. **Set up capture**: inside a Summer session, `summer_play` plus `summer_screenshot target:"game"`. For unattended Linux runs, add xvfb, ffmpeg and vulkan-tools, and check the GPU path with `vulkaninfo --summary`. A software-renderer fallback on a GPU host is a misconfiguration to fix before trusting any QC frame.
|
|
166
|
+
3. **Add `ProofCapture`** (GDScript above) as an autoload when capturing outside the editor; wire triggers to scene-loaded, state-changed and recording mode.
|
|
167
|
+
4. **Run the compile gate** before every capture round.
|
|
168
|
+
5. **Run the QC loop**: capture → self-review → structured defect list → fix → re-capture, capped at `max_qc_rounds`. The review receives the original brief plus the latest frames and outputs findings in a fixed JSON shape.
|
|
169
|
+
6. **Close with proof**: after the loop passes, record 15–20s, encode with ffmpeg, and have the agent watch the clip back before declaring done.
|
|
170
|
+
7. **Support both involvement modes**: for an open-ended task, show the live game early and checkpoint at taste, scope and cost decisions; for a finished brief, run unattended and close with proof.
|
|
188
171
|
|
|
189
172
|
## Tunables
|
|
190
173
|
|
|
191
|
-
| Parameter | Meaning |
|
|
174
|
+
| Parameter | Meaning | Reference value |
|
|
192
175
|
|---|---|---|
|
|
193
|
-
| `max_qc_rounds` | hard cap on capture→fix iterations | bounded
|
|
176
|
+
| `max_qc_rounds` | hard cap on capture→fix iterations | bounded, never open-ended |
|
|
194
177
|
| Proof clip length | recording at the end of a run | 15–20 s |
|
|
195
|
-
| Capture triggers | when screenshots fire (scene load / state change / timer) |
|
|
196
|
-
| Record fps | frame rate of the QC strip | 2 fps is enough for review
|
|
197
|
-
| Verification model | which agent reviews frames | host agent itself
|
|
178
|
+
| Capture triggers | when screenshots fire (scene load / state change / timer) | defined in the project guide |
|
|
179
|
+
| Record fps | frame rate of the QC strip | 2 fps is enough for review |
|
|
180
|
+
| Verification model | which agent reviews frames | the host agent itself; no separate verifier |
|
|
198
181
|
| Involvement mode | live-steered vs unattended | chosen by task framing |
|
|
199
182
|
|
|
200
183
|
## Failure Modes & Gotchas
|
|
201
184
|
|
|
202
|
-
- **Trusting a clean compile.** The
|
|
203
|
-
- **Software-renderer frames.** SwiftShader
|
|
204
|
-
- **Unbounded verification loops.** Without `max_qc_rounds` the agent iterates forever on taste-level nitpicks. Close with proof
|
|
205
|
-
- **Adding a separate verifier model.** Godogen tried
|
|
206
|
-
- **Capturing before the frame settles.** Grab the viewport after `frame_post_draw
|
|
207
|
-
- **
|
|
208
|
-
- **
|
|
209
|
-
- **Stale claims.** The X post mentions "850+ GDScript classes" language reference, but the project migrated to C# in April 2026 — verify current repo state before copying specifics.
|
|
185
|
+
- **Trusting a clean compile.** The compile gate is necessary, never sufficient.
|
|
186
|
+
- **Software-renderer frames.** SwiftShader, llvmpipe and lavapipe output looks wrong and misleads the QC loop. On a GPU host it means the capture path is misconfigured.
|
|
187
|
+
- **Unbounded verification loops.** Without `max_qc_rounds` the agent iterates forever on taste-level nitpicks. Close with proof.
|
|
188
|
+
- **Adding a separate verifier model.** Godogen tried it and found no extra signal.
|
|
189
|
+
- **Capturing before the frame settles.** Grab the viewport after `frame_post_draw` or a short delay, or screenshots show half-rendered scenes and produce false defects.
|
|
190
|
+
- **Headless noise.** Headless runs can print harmless RID warnings on quit. Do not let the QC loop treat engine noise as defects.
|
|
191
|
+
- **An all-black screenshot** usually means the viewport had not redrawn. Recapture before calling it a defect.
|
|
210
192
|
|
|
211
193
|
## Verification
|
|
212
194
|
|
|
213
|
-
Not
|
|
195
|
+
Not yet verified in Summer Engine. To validate an implementation:
|
|
214
196
|
|
|
215
|
-
1.
|
|
216
|
-
2. Run a small
|
|
217
|
-
3.
|
|
197
|
+
1. Scaffold a project and confirm the agent builds a runnable game from the brief and the one-page guide alone.
|
|
198
|
+
2. Run a small brief end to end; confirm the pipeline produces a running build, not just code.
|
|
199
|
+
3. Introduce a visible defect (a broken sprite, a missing material); confirm the self-review finds it from captured frames and fixes it within the round cap.
|
|
218
200
|
4. Confirm the run closes with a 15–20s proof clip that the agent reviews before marking done.
|
|
219
|
-
5. Confirm the compile gate runs before every capture round and that frames come from hardware rendering
|
|
201
|
+
5. Confirm the compile gate runs before every capture round and that frames come from hardware rendering.
|
|
220
202
|
|
|
221
203
|
## Confidence
|
|
222
204
|
|
|
223
|
-
`extracted
|
|
205
|
+
`extracted`. The architecture (thin runtime, manifest, engine guide, asset-gen), proof over claims, self-verification from captured frames, the dropped verifier model, the C# rationale, the capture tooling and the two involvement modes come from Godogen's public README, CHANGELOG and setup notes. The `ProofCapture` script, the QC-loop JSON protocol and the Summer mapping are adaptations; Godogen's internal prompt and guide files are not public.
|
|
@@ -9,7 +9,6 @@ use_when:
|
|
|
9
9
|
- "set up headless capture so an unattended generation run ends with a 15-20 second proof clip"
|
|
10
10
|
do_not_use_when:
|
|
11
11
|
- "large hand-authored production work, purely logical code fixes with no visual component, or hosts with no GPU or headless capture path"
|
|
12
|
-
- "intake from the gamedev-knowledge pipeline (source-cited, pipeline-validated, not yet exercised in-engine by the Summer team) — verify results in the engine as you would any technique"
|
|
13
12
|
facets:
|
|
14
13
|
lifecycle:
|
|
15
14
|
- build
|
|
@@ -21,7 +21,7 @@ This is the widest capability surface you have, and it is the one you are least
|
|
|
21
21
|
<engine-binary> --headless --disable-crash-handler --path <project-dir> -s res://<script>.gd
|
|
22
22
|
```
|
|
23
23
|
|
|
24
|
-
**Always pass `--disable-crash-handler` on an agent-driven run.** Summer's handler shells out to `atos` from inside a signal handler; when anything does go wrong it turns a clean failure into a hang or a cascade
|
|
24
|
+
**Always pass `--disable-crash-handler` on an agent-driven run.** Summer's handler shells out to `atos` from inside a signal handler; when anything does go wrong it turns a clean failure into a hang or a cascade of crashes.
|
|
25
25
|
|
|
26
26
|
### Lint before you boot
|
|
27
27
|
|
|
@@ -53,7 +53,7 @@ Exit codes lie in both directions here.
|
|
|
53
53
|
<EXTREMELY-IMPORTANT>
|
|
54
54
|
**Every engine launch you make is `--headless`.** The user did not ask you to open anything. A window that appears unasked steals focus, interrupts whatever they were doing, and is indistinguishable from a crash or a bug from their side. This is a product rule, not a convenience.
|
|
55
55
|
|
|
56
|
-
The one exception is the verify instance, and it is safe precisely because it is not visible: `--summer-verify` opens a real rendering window that is **hidden, `NO_FOCUS`, and positioned at `(-32000,-32000)
|
|
56
|
+
The one exception is the verify instance, and it is safe precisely because it is not visible: `--summer-verify` opens a real rendering window that is **hidden, `NO_FOCUS`, and positioned at `(-32000,-32000)`**. That is why it can produce real pixels without ever appearing. Never reproduce the "I need a renderer" reasoning by launching a plain windowed editor — use `--summer-verify`.
|
|
57
57
|
|
|
58
58
|
If you genuinely believe the user needs to see the editor, ask them first.
|
|
59
59
|
</EXTREMELY-IMPORTANT>
|
|
@@ -73,12 +73,12 @@ If neither is available (an older engine build that predates `engineBinaryPath`,
|
|
|
73
73
|
| Linux | `~/.summer/engine/summer-linux-x86_64`, or `$SUMMER_ENGINE_BINARY` (see `running-in-the-cloud`) |
|
|
74
74
|
|
|
75
75
|
<EXTREMELY-IMPORTANT>
|
|
76
|
-
There is no `godot` binary on a Summer user's machine. `godot --headless`, `godot4`, `/usr/local/bin/godot` — none of these exist. A command built on that name fails with "command not found"
|
|
76
|
+
There is no `godot` binary on a Summer user's machine. `godot --headless`, `godot4`, `/usr/local/bin/godot` — none of these exist. A command built on that name fails with "command not found" for every user, and no amount of retrying changes it.
|
|
77
77
|
</EXTREMELY-IMPORTANT>
|
|
78
78
|
|
|
79
79
|
### The script must extend `SceneTree` or `MainLoop`
|
|
80
80
|
|
|
81
|
-
`-s` does not load an arbitrary script.
|
|
81
|
+
`-s` does not load an arbitrary script. The engine instantiates it as the process's main loop, and rejects anything that is not one.
|
|
82
82
|
|
|
83
83
|
```gdscript
|
|
84
84
|
extends SceneTree
|
|
@@ -92,7 +92,7 @@ func _initialize():
|
|
|
92
92
|
|
|
93
93
|
Always call `quit()`. There is no other exit.
|
|
94
94
|
|
|
95
|
-
**The trap:** a script extending `Node` (the reflex, since almost all GDScript does) is a wedge, not an error. The engine's rejection path calls `OS.alert()`, and on macOS that is an `NSAlert` `runModal` with **no headless guard
|
|
95
|
+
**The trap:** a script extending `Node` (the reflex, since almost all GDScript does) is a wedge, not an error. The engine's rejection path calls `OS.alert()`, and on macOS that is an `NSAlert` `runModal` with **no headless guard**. The process blocks forever on a modal dialog that has no window to appear in. You get **no output at all** and a hung process that must be killed. Measured: five orphaned processes accumulated in one session before the cause was found.
|
|
96
96
|
|
|
97
97
|
If a headless run produces zero output and never returns, check the first line of your script before you check anything else.
|
|
98
98
|
|
|
@@ -262,13 +262,13 @@ Measured on 0.5.55: `port 6550 -> 6551`, new token, editor still alive on 6550 a
|
|
|
262
262
|
|
|
263
263
|
So on a shipped build: run `--import` against a throwaway copy where you can, warn the user before running it against their open project, and tell them to restart the editor afterwards if their agent connection drops.
|
|
264
264
|
|
|
265
|
-
|
|
265
|
+
A later engine fix stops batch-mode invocations (`--import`, `--summer-verify`, `--export-*`, `-s`, `--headless`, `--quit-after`) from publishing. On a build with that fix this warning does not apply; if you cannot tell which build is installed, follow the precautions above. Plain `--headless -s` never started the server on any build, so everything else in this skill is unaffected.
|
|
266
266
|
</EXTREMELY-IMPORTANT>
|
|
267
267
|
|
|
268
268
|
Two lifecycle facts that decide the shape of every headless run:
|
|
269
269
|
|
|
270
270
|
- **There is a hard work-completion floor between 3 and 5 seconds.** Fresh project, 8 small PNGs, editor killed at N seconds: at **3s, 0/8 imports landed in 10/10 cycles** — it boots, gets killed mid-scan, and accomplishes nothing. At **5s, 8/8 landed every cycle.** Never give an import a 3-second budget.
|
|
271
|
-
- **`--headless --editor` is not a filesystem watcher.** It never notices files created after boot — 6 assets added 12s in, 45s wait, 0 imported. The rescan is driven by `NOTIFICATION_APPLICATION_FOCUS_IN
|
|
271
|
+
- **`--headless --editor` is not a filesystem watcher.** It never notices files created after boot — 6 assets added 12s in, 45s wait, 0 imported. The rescan is driven by `NOTIFICATION_APPLICATION_FOCUS_IN`, and headless never fires a focus event. A long-lived headless editor serves a boot-time snapshot forever.
|
|
272
272
|
|
|
273
273
|
Both ends of the lifecycle are broken, differently: short runs do no work, long ones go stale. **Boot → act → exit is the only shape that works today.**
|
|
274
274
|
|
|
@@ -379,7 +379,7 @@ Four measured instances of the same shape:
|
|
|
379
379
|
|
|
380
380
|
1. Write the script with `summer_write_file` (or your own shell) into the project.
|
|
381
381
|
2. Get the binary from `summer_get_project_context` → `engineBinaryPath`.
|
|
382
|
-
3. Run it. **Read stdout
|
|
382
|
+
3. Run it. **Read stdout and stderr**: your `print()` output is on stdout, script errors are on stderr, and a script that failed to parse still exits 0.
|
|
383
383
|
4. Verify the artifact exists on disk and check the `ResourceSaver.save()` return value. "The script ran" is not "the resource was written".
|
|
384
384
|
5. If you wrote raw asset files, run `--import`.
|
|
385
385
|
6. Delete throwaway scripts. Do not leave `probe_temp_3.gd` in a user's project.
|
|
@@ -27,7 +27,7 @@ For wiring individual widget slices (9-slice panels, progress bars, toggles), th
|
|
|
27
27
|
|
|
28
28
|
- User wants a single slice → import it directly as a `Sprite2D` (or `use-widget-asset` if it's a UI widget).
|
|
29
29
|
- User wants to **generate** a new pack → `create-asset-sheet`.
|
|
30
|
-
- User wants to apply a slice as a material/texture on a 3D mesh → not the pack flow; see `
|
|
30
|
+
- User wants to apply a slice as a material/texture on a 3D mesh → not the pack flow; see `asset-strategy`.
|
|
31
31
|
|
|
32
32
|
## Pack JSON shape
|
|
33
33
|
|
|
@@ -98,12 +98,15 @@ Delegate the actual wiring (percentage-to-pixel conversion, node-specific props)
|
|
|
98
98
|
|
|
99
99
|
## Examples
|
|
100
100
|
|
|
101
|
+
Both examples are `summer_batch` arguments; `scenePath` names the scene that receives the nodes.
|
|
102
|
+
|
|
101
103
|
### Example 1 — Standalone slice import
|
|
102
104
|
|
|
103
105
|
Pack has one non-composite slice, `crate_wooden`, no widget metadata. Place it at scene origin:
|
|
104
106
|
|
|
105
107
|
```json
|
|
106
108
|
{
|
|
109
|
+
"scenePath": "res://scenes/level.tscn",
|
|
107
110
|
"ops": [
|
|
108
111
|
{
|
|
109
112
|
"op": "AddNode",
|
|
@@ -138,6 +141,7 @@ Pack has a composite parent `settings_panel` (filtered out) plus three children:
|
|
|
138
141
|
|
|
139
142
|
```json
|
|
140
143
|
{
|
|
144
|
+
"scenePath": "res://ui/settings.tscn",
|
|
141
145
|
"ops": [
|
|
142
146
|
{
|
|
143
147
|
"op": "AddNode",
|
|
@@ -224,7 +228,7 @@ Pack has a composite parent `settings_panel` (filtered out) plus three children:
|
|
|
224
228
|
|
|
225
229
|
After this, hand `panel_bg` and `apply_button` to `use-widget-asset` to set `patch_margin_*` from their `widget.frameMargins`.
|
|
226
230
|
|
|
227
|
-
Note the ops format: `position` is the **
|
|
231
|
+
Note the ops format: `position` is the **engine variant string** `"Vector2(0, 0)"`, not a JSON object. `z_index` is a bare integer. This is the format Summer Engine expects — see `../../references/mcp-tools-reference/mcp-tools-reference.md`.
|
|
228
232
|
|
|
229
233
|
## Failure modes
|
|
230
234
|
|
|
@@ -240,4 +244,4 @@ Note the ops format: `position` is the **Godot string** `"Vector2(0, 0)"`, not a
|
|
|
240
244
|
|
|
241
245
|
- `create-asset-sheet` — production side; how the pack was made.
|
|
242
246
|
- `use-widget-asset` — wiring an individual widget slice (NinePatchRect, TextureProgressBar geometry).
|
|
243
|
-
- `
|
|
247
|
+
- `asset-strategy` — broader find-or-generate -> import -> apply flow.
|
|
@@ -230,9 +230,9 @@ If you catch yourself thinking:
|
|
|
230
230
|
|
|
231
231
|
**ALL of these mean: STOP. Return to Phase 1.**
|
|
232
232
|
|
|
233
|
-
**If 3+ fixes failed:** Question the architecture (
|
|
233
|
+
**If 3+ fixes failed:** Question the architecture (Phase 4, step 5)
|
|
234
234
|
|
|
235
|
-
## the
|
|
235
|
+
## Signals From the User That You're Doing It Wrong
|
|
236
236
|
|
|
237
237
|
**Watch for these redirections:**
|
|
238
238
|
- "Is that not happening?" - You assumed without verifying
|
|
@@ -274,7 +274,7 @@ If systematic investigation reveals issue is truly environmental, timing-depende
|
|
|
274
274
|
3. Implement appropriate handling (retry, timeout, error message)
|
|
275
275
|
4. Add monitoring/logging for future investigation
|
|
276
276
|
|
|
277
|
-
**But:**
|
|
277
|
+
**But:** most "no root cause" cases are incomplete investigation.
|
|
278
278
|
|
|
279
279
|
## Supporting Techniques
|
|
280
280
|
|
|
@@ -288,11 +288,3 @@ These techniques are part of systematic debugging and available in this director
|
|
|
288
288
|
- **verification-before-completion** - Verify fix worked before claiming success
|
|
289
289
|
- **debug** - The Summer-specific triage loop (script errors → console → debugger → probe)
|
|
290
290
|
- **playtesting-a-feature** - When the fix is a gameplay behaviour that has to be walked
|
|
291
|
-
|
|
292
|
-
## Real-World Impact
|
|
293
|
-
|
|
294
|
-
From debugging sessions:
|
|
295
|
-
- Systematic approach: 15-30 minutes to fix
|
|
296
|
-
- Random fixes approach: 2-3 hours of thrashing
|
|
297
|
-
- First-time fix rate: 95% vs 40%
|
|
298
|
-
- New bugs introduced: Near zero vs common
|
|
@@ -79,8 +79,6 @@ async function waitFor<T>(
|
|
|
79
79
|
}
|
|
80
80
|
```
|
|
81
81
|
|
|
82
|
-
See `condition-based-waiting-example.ts` in this directory for complete implementation with domain-specific helpers (`waitForEvent`, `waitForEventCount`, `waitForEventMatch`) from actual debugging session.
|
|
83
|
-
|
|
84
82
|
## Common Mistakes
|
|
85
83
|
|
|
86
84
|
**Bad: Polling too fast:** `setTimeout(check, 1)` - wastes CPU
|
|
@@ -105,11 +103,3 @@ await new Promise(r => setTimeout(r, 200)); // Then: wait for timed behavior
|
|
|
105
103
|
1. First wait for triggering condition
|
|
106
104
|
2. Based on known timing (not guessing)
|
|
107
105
|
3. Comment explaining WHY
|
|
108
|
-
|
|
109
|
-
## Real-World Impact
|
|
110
|
-
|
|
111
|
-
From debugging session (2025-10-03):
|
|
112
|
-
- Fixed 15 flaky tests across 3 files
|
|
113
|
-
- Pass rate: 60% → 100%
|
|
114
|
-
- Execution time: 40% faster
|
|
115
|
-
- No more race conditions
|
|
@@ -153,11 +153,3 @@ digraph principle {
|
|
|
153
153
|
**Before operation:** Log before the dangerous operation, not after it fails
|
|
154
154
|
**Include context:** Directory, cwd, environment variables, timestamps
|
|
155
155
|
**Capture stack:** `new Error().stack` shows complete call chain
|
|
156
|
-
|
|
157
|
-
## Real-World Impact
|
|
158
|
-
|
|
159
|
-
From debugging session (2025-10-03):
|
|
160
|
-
- Found root cause through 5-level trace
|
|
161
|
-
- Fixed at source (getter validation)
|
|
162
|
-
- Added 4 layers of defense
|
|
163
|
-
- 1847 tests passed, zero pollution
|
|
@@ -13,13 +13,13 @@ tags:
|
|
|
13
13
|
confidence: extracted
|
|
14
14
|
---
|
|
15
15
|
|
|
16
|
-
# Single-Image → Editable Scene Reconstruction (Lumera-style) in
|
|
16
|
+
# Single-Image → Editable Scene Reconstruction (Lumera-style) in Summer Engine
|
|
17
17
|
|
|
18
18
|
## Outcome
|
|
19
19
|
|
|
20
|
-
Turn one reference image into an **editable, engine-native scene** in
|
|
20
|
+
Turn one reference image into an **editable, engine-native scene** in Summer Engine: individual `MeshInstance3D` objects with transforms, countable parametric light nodes, and an HDR environment probe — not a fused point cloud, Gaussian splat, or baked texture. This adapts the Lumera pipeline (arXiv:2607.20889, Tsinghua AIRSUN lab), which was built on another engine, to Summer Engine.
|
|
21
21
|
|
|
22
|
-
**
|
|
22
|
+
**Caveat:** Lumera has no public code, and the paper lists engine-portable extraction as future work. This skill documents the architecture and the parts an agent can build in Summer Engine today (assembly, scene representation, refinement loop, evaluation), and flags the parts that require external model components (VLM box/light parsers, per-object mesh generator, HDR estimator).
|
|
23
23
|
|
|
24
24
|
## When to Use
|
|
25
25
|
|
|
@@ -44,11 +44,11 @@ Lumera's stages (from paper abstract + appendices):
|
|
|
44
44
|
3. **Per-object mesh reconstruction** — a mesh per parsed box.
|
|
45
45
|
4. **HDR environment estimation** — environment probe (IntrinsicHDR partially compensates for SkyLight/unseen near-camera lights).
|
|
46
46
|
5. **Bounded agentic refinement loop** — dual-agent (geometry stage, then light stage) edits + verifies against the reference image.
|
|
47
|
-
6. **Assembly** — emit engine-native scene (
|
|
47
|
+
6. **Assembly** — emit an engine-native scene (`.tscn` in Summer Engine).
|
|
48
48
|
|
|
49
|
-
Dataset backing it: Lumera-2K, 2,513
|
|
49
|
+
Dataset backing it: Lumera-2K, 2,513 game-engine projects → 3.73M components, 63M object instances, 102.6K parametric lights, 95.1K camera views.
|
|
50
50
|
|
|
51
|
-
## Scene / Node Shape (
|
|
51
|
+
## Scene / Node Shape (Summer Engine target)
|
|
52
52
|
|
|
53
53
|
The assembly stage should emit this node tree so output stays inspectable/editable:
|
|
54
54
|
|
|
@@ -65,10 +65,10 @@ ReconstructedScene (Node3D)
|
|
|
65
65
|
├── OmniLight3D / SpotLight3D / DirectionalLight3D × M
|
|
66
66
|
│ # position/rotation from (x,y,z); color from (r,g,b);
|
|
67
67
|
│ # light_energy from I (mind log-scale calibration, see Tunables)
|
|
68
|
-
└── (
|
|
68
|
+
└── (the sky-light equivalent is carried by WorldEnvironment)
|
|
69
69
|
```
|
|
70
70
|
|
|
71
|
-
Keep objects and lights as **separate siblings under named containers
|
|
71
|
+
Keep objects and lights as **separate siblings under named containers**. That separation is what makes the scene editable rather than just looking 3D.
|
|
72
72
|
|
|
73
73
|
## Implementation Steps
|
|
74
74
|
|
|
@@ -97,15 +97,15 @@ Add a **repair layer** on ingest: drop/fix invalid labels, non-positive sizes, d
|
|
|
97
97
|
|
|
98
98
|
### 2. Box + light parsing (external VLM components)
|
|
99
99
|
|
|
100
|
-
Lumera-Box/Lumera-Light are VLMs SFT'd on Lumera-2K; there is no public checkpoint. Options: use a hosted VLM prompted to emit the JSON tuples above, or fine-tune an open VLM on your own engine-exported scenes (
|
|
100
|
+
Lumera-Box/Lumera-Light are VLMs SFT'd on Lumera-2K; there is no public checkpoint. Options: use a hosted VLM prompted to emit the JSON tuples above, or fine-tune an open VLM on your own engine-exported scenes (`.tscn` scenes are text and easy to export; this is the "build Lumera-2K for your engine" step the paper identifies as missing for other engines).
|
|
101
101
|
|
|
102
102
|
### 3. Per-object mesh generation + HDR environment estimation
|
|
103
103
|
|
|
104
|
-
Also external model components in Lumera (per-object mesh reconstruction; IntrinsicHDR-style environment estimation). For a
|
|
104
|
+
Also external model components in Lumera (per-object mesh reconstruction; IntrinsicHDR-style environment estimation). For a Summer Engine blockout you can substitute: box mesh (`BoxMesh` sized to the parsed box) per object and a generated/estimated panorama `Sky`. Swap in real reconstructed meshes later without changing the schema.
|
|
105
105
|
|
|
106
106
|
### 4. Assembly: write a `.tscn`
|
|
107
107
|
|
|
108
|
-
Deterministic GDScript/tool script: instantiate the node shape above from the repaired records.
|
|
108
|
+
Deterministic GDScript/tool script: instantiate the node shape above from the repaired records. A `.tscn` is text, so generating it directly keeps the output diffable and versionable. Save with `PackedScene.pack()` / `ResourceSaver.save()` from an editor tool.
|
|
109
109
|
|
|
110
110
|
### 5. Bounded dual-agent refinement loop
|
|
111
111
|
|
|
@@ -148,17 +148,17 @@ Reproduce the paper's metrics on held-out scenes so improvements are measurable:
|
|
|
148
148
|
- **Per-light localization is weak** (F1 0.209 @ 0.5 m) while scene-level light *count* recall is strong (0.998). Frame the output as "right number of lights, roughly right places."
|
|
149
149
|
- **SkyLight / near-camera lights whose source is off-screen** are not supervised; the environment probe (IntrinsicHDR) only partially compensates.
|
|
150
150
|
- **Large outdoor scenes drift geometrically** (~17 m Chamfer-L2); consider joint camera+geometry calibration if you need metric outdoor consistency.
|
|
151
|
-
- **Engine conventions don't transfer for free
|
|
151
|
+
- **Engine conventions don't transfer for free.** The dataset's light conventions come from another engine; Summer Engine's light units and probes differ, so recalibrate intensity and validate the representation on Summer-native scenes.
|
|
152
152
|
|
|
153
153
|
## Verification
|
|
154
154
|
|
|
155
|
-
Not
|
|
155
|
+
Not yet verified in Summer Engine. To validate an implementation:
|
|
156
156
|
|
|
157
157
|
1. Assemble a scene from a test image; confirm the `.tscn` contains separate, selectable `MeshInstance3D`s and light nodes (editability check).
|
|
158
158
|
2. Move/replace one mesh and re-tune one light in the editor without breaking the scene.
|
|
159
|
-
3. Run the evaluation harness (§6) against a held-out set of known
|
|
159
|
+
3. Run the evaluation harness (§6) against a held-out set of known scenes and compare to the reference numbers above.
|
|
160
160
|
4. Confirm the refinement loop terminates within `T_g`/`T_l` and the history window never exceeds the VLM context budget.
|
|
161
161
|
|
|
162
162
|
## Confidence
|
|
163
163
|
|
|
164
|
-
`extracted` — Architecture, metrics, refinement-loop design, and limitations are drawn directly from the arXiv paper (abstract, intro, appendices H.7–I as retrieved; middle method sections were truncated and are not documented here) and the author's announcement post. The
|
|
164
|
+
`extracted` — Architecture, metrics, refinement-loop design, and limitations are drawn directly from the arXiv paper (abstract, intro, appendices H.7–I as retrieved; middle method sections were truncated and are not documented here) and the author's announcement post. The Summer Engine node mapping and GDScript schema are adaptations, not from the sources; no public Lumera code exists to reference.
|
|
@@ -10,7 +10,6 @@ use_when:
|
|
|
10
10
|
do_not_use_when:
|
|
11
11
|
- "you only need a visual backdrop (a splat or depth-mesh bake is cheaper), large unbounded outdoor scenes, or exact light positions and intensities"
|
|
12
12
|
- "Lumera itself has no public code; the VLM box/light parsers, per-object mesh generator, and HDR estimator are external components you must supply"
|
|
13
|
-
- "intake from the gamedev-knowledge pipeline (source-cited, pipeline-validated, not yet exercised in-engine by the Summer team) — verify results in the engine as you would any technique"
|
|
14
13
|
facets:
|
|
15
14
|
lifecycle:
|
|
16
15
|
- build
|
|
@@ -40,9 +40,9 @@ Distilled blueprints for common genres live in this skill's `references/` folder
|
|
|
40
40
|
| Third-person action / 3D platformer | `references/3d-third-person.md` | `references/3d-third-person-systems.md` | Node3D / CharacterBody3D / SpringArm3D |
|
|
41
41
|
| First-person horror | `references/3d-horror.md` | `references/3d-horror-systems.md` | Node3D / CharacterBody3D / Camera3D on Head |
|
|
42
42
|
|
|
43
|
-
No playbook (racing, sandbox, sim): build fresh through the phases below. The playbooks lean on these system skills — load one when its mechanic comes up: `character-movement`, `camera-rigs`, `combat-basics`, `save-load`, `ui-basics`, `
|
|
43
|
+
No playbook (racing, sandbox, sim): build fresh through the phases below. The playbooks lean on these system skills — load one when its mechanic comes up: `character-movement`, `camera-rigs`, `combat-basics`, `save-load`, `ui-basics`, `multiplayer-project`.
|
|
44
44
|
|
|
45
|
-
|
|
45
|
+
These rules from the playbooks apply to every genre:
|
|
46
46
|
|
|
47
47
|
- **2D scales to the viewport.** Set `display/window/stretch/mode = canvas_items` and `stretch/aspect = expand`; UI uses Control anchors; code-positioned nodes compute from `get_viewport_rect().size`. Never hardcode 1920x1080.
|
|
48
48
|
- **Playable slice, not tech demo.** Name the core loop in one sentence; every input gets feedback (tween, sound, particle, flash, shake); progression is visible; a restart exists. The bar is "feels good for 30 seconds".
|
|
@@ -198,7 +198,7 @@ Repeat until every mechanic in the plan is implemented OR the user calls cut.
|
|
|
198
198
|
Skill: art-direction
|
|
199
199
|
```
|
|
200
200
|
|
|
201
|
-
That writes `.summer/art-bible.md` if it doesn't exist, then guides the lighting / material / palette pass. Use `3d-lighting` for the actual scene work.
|
|
201
|
+
That writes `.summer/art-bible.md` if it doesn't exist, then guides the lighting / material / palette pass. Use `3d-lighting` for the actual scene work. For the web, check the target first. A summer.games web build (`summer_export_game` with `targets:["web"]`) runs on Summer's WebGPU template, which needs the Forward+ or Mobile renderer. A WebGL 2 target runs the Compatibility renderer only: follow `web-compatibility-look` there, avoid Forward+-only features (SDFGI, SSAO, SSR, volumetric fog), and keep `rendering/renderer/rendering_method` on `gl_compatibility`.
|
|
202
202
|
|
|
203
203
|
```
|
|
204
204
|
Skill: audio-direction
|
|
@@ -277,8 +277,6 @@ By the end of a successful run, the user has:
|
|
|
277
277
|
- `summer_get_diagnostics` returns clean
|
|
278
278
|
- `summer_play` runs end-to-end and the win condition is reachable
|
|
279
279
|
|
|
280
|
-
That's a real game. Not a half-finished prototype.
|
|
281
|
-
|
|
282
280
|
## Closing line
|
|
283
281
|
|
|
284
282
|
When all phases are done:
|
|
@@ -56,7 +56,7 @@ separate Area under the player masking only the Enemies layer.
|
|
|
56
56
|
|
|
57
57
|
## Building the level with a TileMap
|
|
58
58
|
|
|
59
|
-
Use a `TileMapLayer`
|
|
59
|
+
Use a `TileMapLayer` for the solid world. Create a `TileSet`, paint
|
|
60
60
|
the collision polygon on the solid tiles, put the layer on the World collision
|
|
61
61
|
layer. The player collides with it for free - no per-tile StaticBody.
|
|
62
62
|
|