Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Produce reusable card art sources and native Godot card UI resources.
.claude/skills/randallliuxin-card-kit/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | -59% | 0% |
| case-08 | ✗→✓ | ▲ Improved | -46% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 9% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 45% | 0% |
| case-19 | ✗→✓ | ▲ Improved | 4% | 0% |
Use this Skill for reusable non-pixel-art, card-game-specific UI: card frames, portrait frames, rarity frames, card/deck slots, resource badges, state overlays, card panels, and card buttons. It produces art sources and native Godot resources, not card rules, deck logic, a Control or Container layout, a PackedScene, readable text, or a full composite screen. A request for pixel art is unsupported and must STOP.
Accept one request matching the shared Asset Skill request schema in .godotmaker/asset-runtime/schema/asset-skill-request.schema.json with asset_type: "card-kit". First run python tools/asset_ui_card_contract_check.py <request.json> --kind request. The family contract owns the Theme recipe/variation, requested frame/state pairs, and named atlas regions. The request decides which card resources are needed; do not add a default front/back, portrait, rarity, or state bundle. This card-game-specific UI Skill can be invoked directly or by an orchestrator through gm-asset, but it never edits ASSETS.md, tags, stage state, or generated catalogs. It produces and preserves the validated generic result; /gm-asset performs the later direct registration.
references is optional. When it is non-empty, each path is binding input:
canonical, style, or screen role in the prompt and trace.A prompt-only filename, silent omission, or provider substitution is not reference use. Use only the requested provider (native, codex, gemini, or openai). For Codex, call image_gen with the real referenced_image_paths when any are present. Record provider, model identity when exposed, coding model, reasoning, attachment paths/roles, and provider call identity. For openai and gemini, use tools/asset_source_generate.py with reference_inputs; it records hashes and attachment provenance.
Turn the brief into one concrete source plan: frame geometry/orientation, empty portrait or card-art safe zones unless finished art is requested, rarity language, state treatment, and only the requested component list. A reusable card frame is not a flattened example card. Keep card-art and portrait windows empty unless the request declares finished art. Keep generated images free of readable text, numbers, watermarks, and unrelated composite screens.
Write the prompt and source plan under .godotmaker/asset-generation/, then generate real provider art into its declared raw-source path. Preserve the raw image and provider report; never replace failed generation with procedural or placeholder art.
Prefer the repository's deterministic tools, selecting only those the source needs:
asset_image_finalize.py for a single card or portrait frame, includingtransparency, alpha bounds, aspect checks, and finalization report;
asset_sheet_process.py for component sheets, with autoslice for separatedpieces and grid only for intentional equal cells;
asset_curation_select.py to choose final components with a curation record;asset_atlas_assemble.py to build a transparent atlas and region metadata.Temporary scripts or other image tools are allowed when diagnosis needs them. The trace must state the reason, command or code, inputs, outputs, changed files, diagnostic, and repair result. Never claim a provider call, attachment, or verification that did not happen.
Keep final sources under assets/generated/card-kit/<asset_id>/. Compile one StyleBoxTexture for every declared frame/state pair using an explicit source/region, borders, expand margins, and stretch axes, plus explicit content margins. This preserves card corners through nine-slice scaling. Compile those StyleBoxes first, then build the optional Theme at <asset_id>_theme.tres when the request declares one. A Theme recipe may bind a generated StyleBoxTexture when the caller requests that composition. Compile every named fixed component into a distinct AtlasTexture. Front/back images, portrait frames, rarity badges, and overlays are separate only when the request declares them; never infer a missing requested resource from another region.
Every runtime output has one required filename, derived from the name it serves: the Theme at <asset_id>_theme.tres, and every StyleBoxTexture and AtlasTexture at <output_name>.tres. One kit fills one directory, so this is what keeps each output separately bindable — two resources sharing a file would hand a worker the wrong Godot type. check_ui_card_handoff enforces it at L0, so a drifting filename is a repair, not a late failure. The family validator checks each output's declared path; cross-output path uniqueness is enforced when the manager registers the completed result.
Run standalone_validation.compile_and_validate() after a candidate set exists. L0 binds the family request/result, L1 checks final sources and metadata, L2 compiles a fresh registry, L3 loads the artifacts in headless Godot, and L4 checks type-specific resource structure. These are production diagnostics, not a one-shot failure gate: inspect the failed diagnostic, repair the source, processing parameters, metadata, recipe, or Godot resource, and re-run the affected checks followed by the final full check.
Only STOP for a missing/corrupt required input, unsupported pixel-art request, contradictory request, unavailable declared provider or required reference attachment, or unrecoverable environment/permission failure. A final result is ready only after every applicable L0-L4 check passes.
Return the shared generic result with independently usable native runtime resources (Theme, StyleBoxTexture, and AtlasTexture), its theme_recipe, single, or region_atlas sources, previews when produced, and final L0-L4 evidence. Check it with the shared result schema and checker plus this family contract. Before responding, persist the exact request/result pair at .godotmaker/asset-generation/<asset_id>-request.json and .godotmaker/asset-generation/<asset_id>-result.json, then return the same result JSON directly in the final response. The runner, not a self-reported boolean, records validation.
The output is reusable card UI, not pixel-perfect Control or Container composition. Consumers choose their own layout and may apply only the declared Theme, StyleBoxTexture, or AtlasTexture resources.
For gm-asset, preserve the successful generic request/result pair. The manager registers the complete result.outputs set directly and atomically in ASSETS.md; do not create a second handoff object. Private Eval independently assesses consumer use, visual quality, reference consistency, and whether an improvised repair should become a shared tool improvement.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 30,580 | 5,727 | -81% | 1 | 1 | 0% | 6,222 | 1,977 | -68% | 0 | 0 | — |
case-02 | fail→fail | 32,825 | 5,893 | -82% | 1 | 1 | 0% | 6,219 | 1,897 | -69% | 0 | 0 | — |
case-03 | fail→fail | 30,158 | 5,384 | -82% | 1 | 1 | 0% | 6,221 | 1,918 | -69% | 0 | 0 | — |
case-04 | fail→pass | 27,291 | 2,882 | -89% | 1 | 1 | 0% | 5,055 | 2,062 | -59% | 0 | 0 | — |
case-05 | pass→fail | 6,348 | 5,354 | -16% | 1 | 1 | 0% | 1,064 | 1,848 | +74% | 0 | 0 | — |
case-06 | fail→fail | 5,229 | 5,312 | +2% | 1 | 1 | 0% | 683 | 1,891 | +177% | 0 | 0 | — |
case-07 | fail→fail | 15,286 | 5,603 | -63% | 1 | 1 | 0% | 2,478 | 1,804 | -27% | 0 | 0 | — |
case-08 | fail→pass | 21,928 | 4,357 | -80% | 1 | 1 | 0% | 4,234 | 2,304 | -46% | 0 | 0 | — |
case-09 | pass→fail | 13,033 | 7,313 | -44% | 1 | 1 | 0% | 2,244 | 1,907 | -15% | 0 | 0 | — |
case-10 | fail→fail | 9,441 | 5,708 | -40% | 1 | 1 | 0% | 1,603 | 1,875 | +17% | 0 | 0 | — |
case-11 | fail→fail | 21,471 | 6,480 | -70% | 1 | 1 | 0% | 3,808 | 1,901 | -50% | 0 | 0 | — |
case-12 | fail→pass | 12,204 | 2,498 | -80% | 1 | 1 | 0% | 1,885 | 2,047 | +9% | 0 | 0 | — |
case-13 | fail→pass | 8,748 | 2,470 | -72% | 1 | 1 | 0% | 1,392 | 2,020 | +45% | 0 | 0 | — |
case-14 | pass→pass | 17,401 | 4,935 | -72% | 1 | 1 | 0% | 2,384 | 2,291 | -4% | 0 | 0 | — |
case-15 | fail→fail | 12,259 | 1,646 | -87% | 1 | 1 | 0% | 1,757 | 1,868 | +6% | 0 | 0 | — |
case-16 | fail→fail | 11,548 | 2,933 | -75% | 1 | 1 | 0% | 1,844 | 2,089 | +13% | 0 | 0 | — |
case-17 | pass→pass | 14,708 | 2,987 | -80% | 1 | 1 | 0% | 2,051 | 2,113 | +3% | 0 | 0 | — |
case-18 | fail→fail | 14,464 | 4,210 | -71% | 1 | 1 | 0% | 2,488 | 2,293 | -8% | 0 | 0 | — |
case-19 | fail→pass | 15,678 | 4,196 | -73% | 1 | 1 | 0% | 2,235 | 2,331 | +4% | 0 | 0 | — |
case-20 | fail→fail | 11,150 | 2,513 | -77% | 1 | 1 | 0% | 1,859 | 2,105 | +13% | 0 | 0 | — |
case-21 | fail→fail | 11,483 | 11,479 | -0% | 1 | 1 | 0% | 2,559 | 4,039 | +58% | 0 | 0 | — |
case-22 | fail→pass | 13,288 | 6,328 | -52% | 1 | 1 | 0% | 2,859 | 2,627 | -8% | 0 | 0 | — |
case-23 | fail→fail | 18,426 | 21,172 | +15% | 1 | 1 | 0% | 3,144 | 5,487 | +75% | 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. 23 cases were attempted, and 14 counted toward the lift figure. The other 9 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 +17 percentage points is the difference between those two pass rates over the 14 comparable cases. 2 cases got worse with the skill loaded, and they are included in that figure.
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.