Skip to content
Automation
Skill

/platform-strip

Generate non-pixel-art, horizontally repeatable platform strips from real image sources as fixed Texture2D cells or AtlasTexture regions.

From plugin
godotmaker
51141 skills7 agents14 hooks
Install
$ npx -y skills add RandallLiuXin/GodotMaker --skill platform-strip --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/platform-strip

Context preview

The summary Claude sees to decide when to auto-load this skill.

Generate non-pixel-art, horizontally repeatable platform strips from real image sources as fixed Texture2D cells or AtlasTexture regions.

SKILL.md

platform-strip.SKILL.md
name: platform-strip
description: Generate non-pixel-art, horizontally repeatable platform strips from real image sources as fixed Texture2D cells or AtlasTexture regions.

Platform Strip Asset

Use for collision-aligned floors, bridges, rails, pipes, terrain ledges, and long horizontal hazards. Do not use for characters, UI, compact props, full backgrounds, or pixel art.

Contract

Accept the shared Asset Skill request schema at `.godotmaker/asset-runtime/schema/asset-skill-request.schema.json` with `asset_type: "platform-strip"`. Use the shared result schema and checker. This skill can be invoked directly or by an orchestrator with the same contract. Do not read or write `ASSETS.md`, tags, stage state, or generated manifests.

`spec` must contain exactly:

{
  "kind": "single" | "atlas",
  "grid": {"columns": 3, "rows": 1, "cell_width": 160, "cell_height": 80},
  "segments": [
    {"name": "left_cap", "role": "left_cap", "slot": [0, 0]},
    {"name": "repeat_middle", "role": "repeat_middle", "slot": [1, 0]},
    {"name": "right_cap", "role": "right_cap", "slot": [2, 0]}
  ]
}

The fixed grid dimensions are positive integers. This v1 family is one closed horizontal row: `rows` must be `1`, `columns` must equal `segments.length`, and entries must be declared in left-to-right slot order as `[0, 0]` through `[columns - 1, 0]`. The first entry is the only `left_cap`, the last is the only `right_cap`, and every interior entry is `repeat_middle`. Empty slots, reordered entries, and a request without a repeatable middle segment are unsupported.

`references` is optional. With references, validate every path is readable, preserve each declared role, and pass the actual images to the selected provider. Do not replace image attachments with prompt text. If the pinned provider cannot accept the supplied images, return STOP. Without references, generate from the written brief.

Honor the requested provider exactly. `native`, `codex`, `gemini`, and `openai` never fall back to another provider. For Codex, call the image provider with `referenced_image_paths` containing each readable local reference image. If that attachment cannot be made, STOP. Record the provider, model, prompt, reference paths and roles, provider payload or trace, raw source path, and processing reports under `.godotmaker/asset-generation/` using the provider's controlled report or claim tool; never hand-write provenance JSON.

Produce

1. Reject pixel-art requests. Request non-pixel-art painted, illustrated, or rendered source art. Do not use nearest-neighbor scaling. 2. Create a layout-only guide with `tools/asset_layout_guide.py` using the declared grid. The guide is not art and is not a runtime output. 3. Request one real provider source sheet with one horizontal slot per declared segment. Require a solid `#FF00FF` background, a shared walkable top height, no labels, UI, actors, text, props, or grid lines. Preserve the provider's returned pixels as the raw source even when its raster dimensions differ from the target grid. 4. Store the unmodified provider image at `.godotmaker/asset-generation/sources/<asset_id>_source.png`. For `codex`, follow `skills/core/gm-asset/references/providers/codex.md`: write the planned generated-path record and the runtime generated-path record, then run `python .godotmaker/asset-runtime/tools/codex_image_claim.py --plan <plan.json> --report <generated-paths.json> --project-root . --out-report .godotmaker/asset-generation/reports/<asset_id>_source.json`. Use that claim result as the provenance record. For API-backed providers, use `tools/asset_source_generate.py --spec` with its `report_path`. The report must be generated by those controlled tools, not hand-written. Do not create, draw, or alter visual source art with temporary scripts, Pillow, System.Drawing, ImageMagick, SVG, canvas, Godot drawing, or placeholder generation. 5. Split the raw provider sheet before any crop, resize, or padding. Never normalize the whole sheet as one image: doing so changes the declared grid coordinates. Use the owned deterministic tool with the declared source grid and names in declared slot order. It deterministically covers every source pixel even if the provider raster dimensions are not evenly divisible by the requested grid:

   python tools/asset_sheet_process.py --source <raw-source> --out-dir <sliced-dir> --grid <columns>x1 --names <segment-names-in-slot-order> --background magenta --snap-mode grid --preserve-cell-bounds --report .godotmaker/asset-generation/reports/<asset_id>_sheet.json

Use the report to reject missing art, opaque magenta pixels, edge-touching art that breaks the declared slot, or a cell that does not retain its fixed dimensions.

6. For each already-sliced cell, use `asset_sheet_process.py --grid 1x1 --background transparent --snap-mode grid` without `--preserve-cell-bounds` to crop that cell's visible AABB. Then finalize that cropped cell independently with `asset_image_finalize.py --resize <cell_width>x<cell_height> --no-origin`. Save each output under `<normalized-dir>/<segment>.png` and each finalize report at `.godotmaker/asset-generation/reports/<asset_id>_<segment>_normalize.json`. Do not recombine or resize the raw sheet between slicing and this per-cell finalization.

7. For `kind: "single"`, publish every normalized cell at `res://assets/generated/platform-strip/<asset_id>/<segment>.png` and return it as `Texture2D`. 8. For `kind: "atlas"`, create an explicit fixed-slot declaration from the normalized cells. Assemble it only with `tools/asset_atlas_assemble.py`; publish `<asset_id>.png` and `<asset_id>.json` in the stable platform-strip directory. Each metadata region uses the declared slot rectangle, `pivot: [0.5, 1.0]`, and `nine_slice: null`. Compile every logical region to `res://assets/generated/platform-strip/<asset_id>/<segment>.tres` as `AtlasTexture` with zero margin. 9. Run `standalone_validation.compile_and_vali

Read more
Ships withgodotmaker

Autonomous text-to-game pipeline for Godot, powered by Claude Code,Codex,Opencode

Get the whole plugin