Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Generate and validate a fixed-viewport background, map base, or parallax plate as a ready-to-load Texture2D.
.claude/skills/randallliuxin-background-map/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-06 | ✗→✓ | ▲ Improved | 60% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 3% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 41% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 118% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 72% | 0% |
Use this skill for a runtime background, map base, parallax plate, fixed battle background, title illustration, or other fixed-viewport scenic asset. Do not use it for scene references, actors, foreground props, UI, or collision-bearing geometry. Background-map produces non-pixel-art scenic images only: do not request pixel art or use nearest-neighbor processing to imitate it.
Accept one asset request matching the shared Asset Skill request schema in .godotmaker/asset-runtime/schema/asset-skill-request.schema.json. Require asset_type to be background-map. Run standalone_validation.compile_and_validate() before returning it. The runner checks the family binding and stable path at L0, the PNG at L1, the registered single -> Texture2D route at L2, and real headless Godot load plus Texture2D structure at L3/L4; it overwrites rather than trusts caller-supplied validation. It begins from the shared result schema and checker, then proves the result.
This skill can be invoked directly or by an orchestrator; its request and result are identical in both cases. Do not read or write ASSETS.md, tags, stage state, generated manifests, or dispatch state.
References are optional. With no references, generate from the brief. With one or more references, validate every declared local path is a readable image, preserve its canonical, style, or screen role, and send the actual image to the selected provider. A textual path, a prompt-only description, or a silently omitted reference is a failure.
Resolve a request res:// reference against the project root before provider dispatch, while retaining the request path and role in provenance. Providers receive the resulting local image path as an attachment, never the literal res:// text.
Use exactly the declared provider (native, codex, gemini, or openai). Do not substitute another provider. Read its provider document before source generation. If it cannot execute its declared image-attachment path for every reference, STOP with validation.passed: false and create no final runtime asset.
For Codex, the source report must include this exact auditable trace shape:
json{ "provider_trace": { "provider": "codex", "coding_model": "<configured coding model>", "reasoning": "<configured reasoning effort>", "tool_call_id": "<image_gen call identity>", "image_model_identity": "runtime_reported|not_exposed_by_subscription_runtime", "referenced_image_paths": ["<actual local image attachment path>"] } }
When image_model_identity is runtime_reported, include non-empty image_model. Do not substitute a generated-path string, a prose explanation, or a role-only record for this trace.
For every attempt, retain these project-local records under .godotmaker/asset-generation/:
prompts/<asset_id>.txt with the fixed viewport, target aspect andorientation, scene role, viewpoint, layer responsibility, style language, reference roles, and invariants to preserve.
sources/<asset_id>_source.png, the unmodified provider or user source.reports/<asset_id>_source.json, recording provider, model, reasoning wherethe runtime exposes it, real reference attachments with roles, source path, and provider trace or failure.
reports/<asset_id>_finalize.json, the deterministic finalization report.reports/<asset_id>_validation.json, written by the validation runner on afully passing ladder. Do not edit it; run validation again after any regeneration.
The visual source may only be a selected provider output or a user-provided source/reference. Never create art with Pillow, System.Drawing, ImageMagick, SVG, canvas, Godot drawing, inline scripts, color blocks, placeholders, or fake atlases/animations. Project-owned deterministic tools may only process an existing real image.
role, viewpoint, target aspect, orientation, layer responsibility, and non-pixel-art style language.
labels, logos, watermarks, or text.
bash python tools/asset_image_finalize.py \ --source .godotmaker/asset-generation/sources/<asset_id>_source.png \ --out assets/generated/background-map/<asset_id>/<asset_id>.png \ --label <asset_id> \ --require-aspect <WIDTH:HEIGHT> \ --resize <WIDTHxHEIGHT> \ --report .godotmaker/asset-generation/reports/<asset_id>_finalize.json
The source aspect must pass before resizing. On failure, keep the attempt incomplete and do not claim readiness.
provenance. The orchestrator derives its stable source_layout: single and godot_artifact: Texture2D handoff from this result; this Skill never writes manifests itself.
Texture2D. WhenGM_EVAL_GODOT_PATH or GODOT_BIN is configured, invoke that exact executable; otherwise invoke the project-configured godot command.
Godot's normal PNG import is the native resource path for this family; do not create a redundant .tres merely to wrap the image.
Return the shared generic result with one runtime output:
json{ "asset_type": "background-map", "outputs": [{ "role": "runtime", "name": "<asset_id>", "path": "res://assets/generated/background-map/<asset_id>/<asset_id>.png", "godot_type": "Texture2D" }], "sources": [{ "path": "res://assets/generated/background-map/<asset_id>/<asset_id>.png", "layout": "single" }], "previews": [], "validation": { "passed": true, "levels": {"L0": true, "L1": true, "L2": true, "L3": true, "L4": true} } }
Use the requested stable asset id in every path. A failed aspect, import, or load check must return validation.passed: false with an explanatory note; never claim a failed background is ready. Provider/reference failure must return the same failed result with no runtime output.
Emit that generic result JSON directly as the final response, including for a STOP. Do not write ASSET_RESULT.json, a manifest, or a linked result file in place of returning the JSON: direct callers consume the response itself.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-06 | fail→pass | 14,169 | 11,144 | -21% | 1 | 1 | 0% | 2,238 | 3,577 | +60% | 0 | 0 | — |
case-01 | fail→fail | 15,180 | 5,235 | -66% | 1 | 1 | 0% | 1,945 | 1,943 | -0% | 0 | 0 | — |
case-02 | fail→fail | 11,087 | 9,538 | -14% | 1 | 1 | 0% | 2,090 | 2,307 | +10% | 0 | 0 | — |
case-03 | fail→fail | 7,696 | 5,894 | -23% | 1 | 1 | 0% | 490 | 2,051 | +319% | 0 | 0 | — |
case-04 | fail→pass | 28,008 | 4,092 | -85% | 1 | 1 | 0% | 2,352 | 2,415 | +3% | 0 | 0 | — |
case-05 | fail→pass | 11,041 | 4,388 | -60% | 1 | 1 | 0% | 1,738 | 2,445 | +41% | 0 | 0 | — |
case-07 | fail→pass | 6,053 | 5,327 | -12% | 1 | 1 | 0% | 960 | 2,094 | +118% | 0 | 0 | — |
case-08 | fail→pass | 10,877 | 7,148 | -34% | 1 | 1 | 0% | 1,620 | 2,779 | +72% | 0 | 0 | — |
case-09 | fail→pass | 11,207 | 3,035 | -73% | 1 | 1 | 0% | 1,578 | 2,148 | +36% | 0 | 0 | — |
case-10 | pass→pass | 13,990 | 2,610 | -81% | 1 | 1 | 0% | 2,034 | 2,057 | +1% | 0 | 0 | — |
case-11 | fail→pass | 6,192 | 3,983 | -36% | 1 | 1 | 0% | 866 | 2,307 | +166% | 0 | 0 | — |
case-12 | fail→pass | 13,261 | 4,506 | -66% | 1 | 1 | 0% | 1,902 | 2,406 | +26% | 0 | 0 | — |
case-13 | fail→pass | 6,588 | 2,761 | -58% | 1 | 1 | 0% | 917 | 2,149 | +134% | 0 | 0 | — |
case-14 | pass→pass | 10,786 | 2,972 | -72% | 1 | 1 | 0% | 1,744 | 2,102 | +21% | 0 | 0 | — |
case-15 | fail→pass | 8,070 | 2,873 | -64% | 1 | 1 | 0% | 1,229 | 2,087 | +70% | 0 | 0 | — |
case-16 | fail→pass | 12,249 | 2,570 | -79% | 1 | 1 | 0% | 1,879 | 2,081 | +11% | 0 | 0 | — |
case-17 | fail→pass | 13,599 | 1,359 | -90% | 1 | 1 | 0% | 1,888 | 1,824 | -3% | 0 | 0 | — |
case-18 | pass→pass | 8,278 | 3,571 | -57% | 1 | 1 | 0% | 1,148 | 2,253 | +96% | 0 | 0 | — |
case-19 | pass→pass | 8,044 | 2,605 | -68% | 1 | 1 | 0% | 1,261 | 2,083 | +65% | 0 | 0 | — |
case-20 | fail→pass | 14,200 | 7,080 | -50% | 1 | 1 | 0% | 2,312 | 2,940 | +27% | 0 | 0 | — |
case-21 | fail→pass | 16,391 | 8,661 | -47% | 1 | 1 | 0% | 2,359 | 3,195 | +35% | 0 | 0 | — |
case-22 | fail→pass | 16,150 | 7,244 | -55% | 1 | 1 | 0% | 2,964 | 2,732 | -8% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 19 counted toward the lift figure. The other 3 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +68 percentage points is the difference between those two pass rates over the 19 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.