Use this skill when creating pixel art sprites, animating sprite sheets, building tilesets for 2D games, or managing indexed color palettes. Triggers on pixel art, sprite sheet, sprite animation, tileset, tile map, pixel palette, indexed color, dithering, sub-pixel animation, NES palette, walk cycle sprite, and any task involving low-resolution raster art for games or retro aesthetics.
Instrucciones de origen · Vista previa de solo lectura
name
pixel-art-sprites
version
0.1.0
description
Use this skill when creating pixel art sprites, animating sprite sheets, building tilesets for 2D games, or managing indexed color palettes. Triggers on pixel art, sprite sheet, sprite animation, tileset, tile map, pixel palette, indexed color, dithering, sub-pixel animation, NES palette, walk cycle sprite, and any task involving low-resolution raster art for games or retro aesthetics.
When this skill is activated, always start your first response with the 🧢 emoji.
Pixel Art Sprites
A practical guide to creating pixel art sprites, animating them for games, building
reusable tilesets, and managing constrained color palettes. This is not general
digital art advice - it focuses on the specific technical and aesthetic constraints
of low-resolution raster art where every pixel is a deliberate design decision.
Pixel art looks simple but punishes sloppiness. A single misplaced pixel breaks
a silhouette, a wrong hue muddies readability at 1x scale, and an animation with
inconsistent volume destroys the illusion of life. This skill covers the rules
that prevent those failures.
When to use this skill
Trigger this skill when the user:
Wants to create a pixel art character sprite or object
Needs to build a sprite sheet with animation frames
Asks about walk cycles, attack animations, or idle animations in pixel art
Wants to design a tileset for a 2D tile-based game
Needs help choosing or constraining a pixel art color palette
Asks about dithering techniques or anti-aliasing in pixel art
Wants to export sprites for a game engine (Unity, Godot, Phaser)
Asks about sub-pixel animation or pixel-perfect rendering
Do NOT trigger this skill for:
High-resolution digital painting, vector illustration, or 3D modeling
General game design questions not related to sprite art (use system-design or gamedev skills)
Key principles
Every pixel is intentional - At 16x16 or 32x32 resolution, there is no room for ambiguity. Each pixel must serve the silhouette, shading, or detail. If removing a pixel does not hurt readability, it should not be there. Start with the silhouette (solid fill), then add internal detail only where it improves recognition at 1x zoom.
Constrain your palette ruthlessly - Limiting colors to 8-16 is not a nostalgic affectation - it enforces visual cohesion across all sprites in a project. Pick a palette before drawing the first sprite. Every color in the palette must have a clear role: base, shadow, highlight, outline, and at most 2-3 accent hues. Adding a color mid-project breaks consistency.
Animate volume, not lines - Beginners animate by shifting outlines. Good sprite animation preserves the volume (total pixel mass) of the character across frames. A walk cycle should not make the character appear to grow and shrink. Check by toggling between frames rapidly - the silhouette should feel stable.
Tiles must be seamless at every edge - A tileset that looks good in isolation but produces visible seams when repeated has failed its only job. Design tiles from the edges inward: lock the border pixels first, then fill the interior. Test with a 3x3 grid of the same tile before considering it done.
Respect the grid - Pixel art lives on a strict grid. Rotation by non-90-degree angles, non-integer scaling, and sub-pixel positioning in engines all destroy pixel crispness. Export at 1x and scale with nearest-neighbor interpolation only. Configure the game engine's texture filter to "point/nearest" not "bilinear".
Core concepts
Sprite sizes and common canvases
Size
Use case
Notes
8x8
Small items, tiny icons, minimal tiles
NES-era constraint
16x16
Standard characters, items, basic tiles
Most common indie size
32x32
Detailed characters, large tiles
Good balance of detail and constraint
48x48 / 64x64
Boss sprites, detailed portraits
Approaches illustration territory
A character sprite sheet typically uses one fixed canvas per frame. All frames in an animation must share the same canvas size to prevent jitter during playback.
Anatomy of a sprite sheet
A sprite sheet is a single image containing all animation frames laid out in a grid. Each row is usually one animation state (idle, walk, attack). Each column is one frame in that animation.
The game engine slices the sheet by cell size (e.g., 32x32) and plays frames in sequence. Metadata (frame count per row, frame duration) is defined in the engine, not the image.
Tileset structure
Tilesets use a fixed grid (usually 16x16 or 32x32 per tile). Standard tileset categories:
Ground - grass, dirt, stone, water (need seamless tiling)
Edges/transitions - where two terrain types meet (requires 47 auto-tile variants for full coverage, or 16 for simplified)
Decoration - flowers, rocks, signs (placed on top of ground tiles)
Walls/obstacles - collision-relevant tiles
Color ramp anatomy
A color ramp is a sequence of 3-5 colors from shadow to highlight for a single hue:
Each step shifts not just lightness but also hue. Shadows shift toward cool (blue/purple). Highlights shift toward warm (yellow/white). This "hue shifting" creates vibrant, natural-looking shading that flat lightness scaling cannot achieve.
Common tasks
Create a character sprite with proper shading
Start with silhouette, then layer shading using a 3-4 step color ramp with hue shifting.
Workflow:
Draw the silhouette as a solid color block on transparent background
Verify the silhouette is readable at 1x zoom - if you cannot tell what it is, redesign
Pick a base color, then create the ramp: shadow (darker + hue shift cool), base, highlight (lighter + hue shift warm)
Apply light source from top-left (convention in 2D games) - upper-left edges get highlight, lower-right edges get shadow
Add the darkest outline color on exterior edges only; interior lines use the shadow color, not black
Never use pure black (#000000) for outlines. Use a very dark, slightly saturated color (e.g., dark navy or dark brown) that complements the palette. Pure black creates a harsh, flat look.
Build a walk cycle animation
A standard walk cycle uses 4-6 frames. The key poses are: contact, passing, and their mirrors.
4-frame walk cycle:
Frame 1 (Contact) - Front leg extended forward, back leg extended back, body at lowest point
Frame 2 (Passing) - Legs cross under body, body at highest point (1-pixel vertical bob)
Frame 3 (Contact mirrored) - Opposite leg forward
Frame 4 (Passing mirrored) - Mirror of frame 2
Rules:
Maintain consistent volume across all frames - the character should not grow or shrink
Add 1-pixel vertical bob on passing frames (body rises slightly when weight is on one leg)
Arms swing opposite to legs
Frame timing: 100-150ms per frame for a natural pace
Design a seamless tileset
Edge-first workflow:
Define the tile size (16x16 is standard)
Draw the left and top edges first
Copy left edge to right edge, top edge to bottom edge (guarantees seamless)
Fill the interior with detail, avoiding patterns that create obvious repetition
Test by placing 5x5 copies of the tile side-by-side
Add 2-3 variations of the same tile to break repetition in the map
Terrain transitions (auto-tiling):
Simplified: 16 tiles per transition (4-bit bitmask for cardinal neighbors)
Full: 47 tiles per transition (8-bit bitmask for cardinal + diagonal neighbors)
Draw the inner corners, outer corners, and straight edges; the engine handles placement via bitmask lookup
Build and manage a color palette
Step 1: Choose constraints
Total colors: 8 (minimal), 16 (standard), 32 (detailed)
Decide if you are emulating a hardware palette (NES: 54 colors, Game Boy: 4 shades, PICO-8: 16 fixed)
Step 2: Build ramps
For each major hue in your game (skin, foliage, metal, sky), create a 3-5 step ramp
Sub-pixel animation creates the illusion of movement smaller than one pixel by shifting color values rather than pixel positions. Used for smooth, fluid motion in small sprites.
Technique: Instead of moving an eye 1 pixel right (which is a large jump at 16x16), darken the current pixel and lighten the adjacent pixel. The viewer's eye interpolates a half-pixel shift.
Rules:
Only works when the sprite is displayed at integer scale (2x, 3x, 4x)
Requires at least 3 values in the color ramp to create intermediate steps
Most effective for small details: eyes blinking, subtle breathing, water shimmer
Do not use for large movements - it looks blurry instead of smooth
Anti-patterns
Mistake
Why it fails
What to do instead
Using bilinear filtering on pixel art
Blurs pixels into a mushy mess, destroys crispness
Always use nearest-neighbor / point filtering in engine and export
Pillow shading (light from all sides)
Creates a flat, blobby look with no directional light
Pick one light direction (top-left is standard) and shade consistently
Too many colors without a palette
Sprites look inconsistent, cannot be themed or recolored
Lock a palette of 8-16 colors before drawing; every sprite shares it
Black outlines everywhere
Creates a dark, heavy look; interior details drown
Use dark saturated colors for outlines; softer colors for interior lines
Jagged curves (staircase lines)
Lines look rough and unintentional
Use consistent pixel-length steps: 3-3-2-2-1 not 3-1-2-4-1 for curves
Non-integer scaling (1.5x, 3.5x)
Pixels become different sizes, grid breaks
Scale only by whole integers: 1x, 2x, 3x, 4x
Animating without consistent volume
Character appears to inflate/deflate between frames
Overlay frames at 50% opacity to check silhouette stability
Gotchas
Exporting with transparency to JPEG destroys it - JPEG does not support alpha channels. Exporting a sprite with transparent background to JPEG fills the transparency with white (or black depending on the tool). Always export sprites as PNG. If a tool auto-selects JPEG, override it.
Unity's default texture filter is Bilinear, not Point - When you import a sprite sheet into Unity, the default Filter Mode is Bilinear, which blurs pixels. You must change it to Point (no filter) in the Texture Import Settings for every sprite. Setting it per-sprite is tedious; configure the default texture filter in the project settings or use an AssetPostprocessor to enforce Point filtering on import.
Non-integer pixel-per-unit settings cause sub-pixel jitter during movement - If your sprite is 16x16 and you set Pixels Per Unit to 32 (not 16), the sprite renders at 0.5 Unity units. Movement in increments smaller than 1/32 of a unit causes the sprite to render between pixel boundaries, producing visible jitter. Set Pixels Per Unit to match your tile size exactly.
Animation frames with different canvas sizes cause jitter in all engines - If walk frame 1 is 32x32 but walk frame 3 is accidentally 32x33 due to a slip in the art tool, the sprite will shift 1 pixel vertically on that frame. Every frame in an animation must share identical canvas dimensions. Check canvas size consistency before exporting a sprite sheet.
Palette colors sampled with anti-aliasing enabled produce off-palette colors - If you draw with any anti-aliasing or smoothing enabled in your art tool (even a small amount), edge pixels blend with surrounding colors and produce hundreds of near-palette colors that are not in the palette. Always draw with hard-edge (aliased) brushes only and verify the final image contains only palette-exact color values.
References
For detailed content on specific sub-domains, read the relevant file
from the references/ folder:
references/palette-recipes.md - Pre-built palette recipes for common game genres (fantasy RPG, sci-fi, horror, Game Boy, NES)
Only load a references file if the current task requires it - they are
long and will consume context.
Companion check
On first activation of this skill in a conversation: check which companion skills are installed by running ls ~/.claude/skills/ ~/.agent/skills/ ~/.agents/skills/ .claude/skills/ .agent/skills/ .agents/skills/ 2>/dev/null. Compare the results against the recommended_skills field in this file's frontmatter. For any that are missing, mention them once and offer to install: