mcpbeat

Sprite Pipeline

openai/sprite-pipeline

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.

904 tokens
context cost
the whole folder, loaded on every use
2
files
instructions only
0
copies elsewhere
how many repositories repackaged it
4915
stars on the repo
on the repository, not the skill itself

Install

one command, takes just this skill from the repository
npx skills add https://github.com/openai/plugins --skill sprite-pipeline

What comes with it

234 bytes besides the instruction
agents/openai.yaml

The instruction itself

8 sections, as written by the author

Sprite Pipeline

Overview

Use 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.

This skill is 2D-specific. If the request is for 3D characters, meshes, or materials, route back through ../game-studio/SKILL.md.

Core Workflow

  • Start from an approved in-game seed frame.
  • The seed frame should already reflect the right silhouette, palette, costume, and proportions.
  • Build a larger transparent reference canvas around that frame.
  • Use ../../scripts/build_sprite_edit_canvas.py.
  • Ask for the full animation strip in one edit request.
  • Do not generate each frame independently unless the user explicitly accepts lower consistency.
  • Normalize the result into fixed-size game frames.
  • Use ../../scripts/normalize_sprite_strip.py.
  • Use one shared scale across the whole strip.
  • Align frames with one shared anchor, typically bottom-center.
  • Optionally lock frame 01 back to the shipped seed frame.
  • Do this when the animation should begin from the exact idle or base pose already in game.
  • Render a preview sheet and inspect the animation in-engine before approving it.
  • Use ../../scripts/render_sprite_preview_sheet.py.

Prompting Rules

Always preserve these invariants in the prompt:

  • same character
  • same facing direction
  • same palette family
  • same silhouette family
  • same readable face or key features
  • same outfit proportions
  • transparent background
  • exact frame count and slot layout

Always ask for:

  • one strip at once
  • a transparent canvas
  • no scenery, labels, or poster composition
  • crisp pixel-art clusters for pixel work
  • production asset tone, not concept art

Using Image Generation

For 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.

Script Recipes

Create a reference canvas:

python3 scripts/build_sprite_edit_canvas.py \
  --seed output/sprites/idle-01.png \
  --out output/sprites/hurt-edit-canvas.png \
  --frames 4 \
  --slot-size 256 \
  --canvas-size 1024

Normalize a raw strip:

python3 scripts/normalize_sprite_strip.py \
  --input output/sprites/hurt-raw.png \
  --out-dir output/sprites/hurt \
  --frames 4 \
  --frame-size 64 \
  --anchor output/sprites/idle-01.png \
  --lock-frame1

Render a preview sheet:

python3 scripts/render_sprite_preview_sheet.py \
  --frames-dir output/sprites/hurt \
  --out output/sprites/hurt-preview.png \
  --columns 4

Quality Gates

  • proportions stay stable across frames
  • frame-to-frame size does not drift
  • action reads clearly at game scale
  • transparency is preserved
  • frame 01 matches the shipped sprite when lockback is enabled
  • preview looks correct before any in-engine asset index update

References

  • Detailed workflow: ../../references/sprite-pipeline.md
  • Shared frontend context: ../game-ui-frontend/SKILL.md

How to use it

Copy the folder

Take openai/sprite-pipeline from the repository into ~/.claude/skills for personal use, or into .claude/skills inside a project.

Check the name does not clash

The agent identifies a skill by the name field in its header. Two skills with the same name cannot sit side by side — one of them will be ignored.