{"id":24676,"plugin_id":"plugins~Plugin_b12006c2cc04819192cb1c1227ac52f7","kind":"skill","collection_source":null,"comparison_source":null,"observed_at":"2026-09-30T23:18:34.583Z","digest":"b9ef2bdcfc051ab772f145d53243c52196c892104971a5a6812f88db544bac71","against":null,"payload":{"name":"sprite-pipeline","description":"Generate and normalize 2D sprite animations. Use when the user asks for full-strip generation from approved source frames, consistent anchor and scale normalization, or preview assets for browser-game animation.","included_files":[{"relative_path":"agents/openai.yaml","size_in_bytes":234}],"skill_md_contents":"---\nname: sprite-pipeline\ndescription: Generate and normalize 2D sprite animations. Use when the user asks for full-strip generation from approved source frames, consistent anchor and scale normalization, or preview assets for browser-game animation.\n---\n\n# Sprite Pipeline\n\n## Overview\n\nUse this skill for 2D sprite generation and normalization. This workflow is intentionally anchored around one approved frame and a whole-strip generation pass because frame-by-frame generation drifts too easily.\n\nThis skill is 2D-specific. If the request is for 3D characters, meshes, or materials, route back through `../game-studio/SKILL.md`.\n\n## Core Workflow\n\n1. Start from an approved in-game seed frame.\n   - The seed frame should already reflect the right silhouette, palette, costume, and proportions.\n2. Build a larger transparent reference canvas around that frame.\n   - Use `../../scripts/build_sprite_edit_canvas.py`.\n3. Ask for the full animation strip in one edit request.\n   - Do not generate each frame independently unless the user explicitly accepts lower consistency.\n4. Normalize the result into fixed-size game frames.\n   - Use `../../scripts/normalize_sprite_strip.py`.\n   - Use one shared scale across the whole strip.\n   - Align frames with one shared anchor, typically bottom-center.\n5. Optionally lock frame 01 back to the shipped seed frame.\n   - Do this when the animation should begin from the exact idle or base pose already in game.\n6. Render a preview sheet and inspect the animation in-engine before approving it.\n   - Use `../../scripts/render_sprite_preview_sheet.py`.\n\n## Prompting Rules\n\nAlways preserve these invariants in the prompt:\n\n- same character\n- same facing direction\n- same palette family\n- same silhouette family\n- same readable face or key features\n- same outfit proportions\n- transparent background\n- exact frame count and slot layout\n\nAlways ask for:\n\n- one strip at once\n- a transparent canvas\n- no scenery, labels, or poster composition\n- crisp pixel-art clusters for pixel work\n- production asset tone, not concept art\n\n## Using Image Generation\n\nFor live asset generation or edits, use the installed `imagegen` skill in this workspace. This skill defines the game-specific process; `imagegen` handles the API-backed generation or edit execution.\n\n## Script Recipes\n\nCreate a reference canvas:\n\n```bash\npython3 scripts/build_sprite_edit_canvas.py \\\n  --seed output/sprites/idle-01.png \\\n  --out output/sprites/hurt-edit-canvas.png \\\n  --frames 4 \\\n  --slot-size 256 \\\n  --canvas-size 1024\n```\n\nNormalize a raw strip:\n\n```bash\npython3 scripts/normalize_sprite_strip.py \\\n  --input output/sprites/hurt-raw.png \\\n  --out-dir output/sprites/hurt \\\n  --frames 4 \\\n  --frame-size 64 \\\n  --anchor output/sprites/idle-01.png \\\n  --lock-frame1\n```\n\nRender a preview sheet:\n\n```bash\npython3 scripts/render_sprite_preview_sheet.py \\\n  --frames-dir output/sprites/hurt \\\n  --out output/sprites/hurt-preview.png \\\n  --columns 4\n```\n\n## Quality Gates\n\n- proportions stay stable across frames\n- frame-to-frame size does not drift\n- action reads clearly at game scale\n- transparency is preserved\n- frame 01 matches the shipped sprite when lockback is enabled\n- preview looks correct before any in-engine asset index update\n\n## References\n\n- Detailed workflow: `../../references/sprite-pipeline.md`\n- Shared frontend context: `../game-ui-frontend/SKILL.md`\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}