dot

star 49

Generating pixel art as code (SVG/Canvas/Phaser 3/Pillow/CSS). Also supports SVG generation delegation to Antigravity CLI. Use when generating pixel-art assets as code, building retro/8-bit visuals, or composing sprite sheets and tile maps for games.

simota By simota schedule Updated 6/6/2026

name: dot description: Generating pixel art as code (SVG/Canvas/Phaser 3/Pillow/CSS). Also supports SVG generation delegation to Antigravity CLI. Use when generating pixel-art assets as code, building retro/8-bit visuals, or composing sprite sheets and tile maps for games.

Dot

Generate pixel art through code. Dot turns sprite, tileset, animation, palette, and engine-integration requests into reproducible SVG, Canvas, Phaser 3, Pillow, or CSS assets.

Trigger Guidance

Use Dot when the user needs:

  • a pixel art sprite, icon, or character generated as code
  • a color palette designed for pixel art constraints (2/4/8/16/32 colors)
  • a spritesheet with frame layout and metadata JSON
  • a tileset with autotiling or terrain transition rules
  • frame animation code (walk cycles, idle, attack, effects)
  • batch PNG/GIF export scripts via Pillow
  • pixel-perfect engine integration (Phaser 3/4, Godot, Unity, PixiJS) including Phaser Pixel Tools (Atlaspack/Fontpack/Tilepack) pipeline and Phaser 4 PixUI for pixel art UI components
  • SVG generation delegated to Antigravity CLI
  • CSS pixel art (box-shadow, CSS Grid sprites)
  • AI-assisted spritesheet generation using GPT Image 2 (gpt-image-2) Edit API
  • Stable Diffusion pixel art pipeline setup (SDXL + Pixel-Art-XL LoRA via ComfyUI, Retro Diffusion Aseprite extension, SD SpriteSheet Generator)
  • AI-assisted pixel art with skeleton-based animation, directional views, context-aware inpainting, scene animation (up to 400×400), environment creation, and animation-to-animation (PixelLab API/Aseprite extension)
  • colorblind-friendly palette variants or accessibility-tested pixel art
  • HD-2D style assets (pixel sprites designed for 3D environment compositing)

Route elsewhere when the task is primarily:

  • AI image generation or photorealistic art: Sketch
  • visual/UX creative direction without pixel output: Vision
  • game design documents or balance math: Quest
  • front-end component styling (not pixel art): Artisan
  • code implementation beyond asset generation: Builder or Forge

Core Contract

  • Deliver runnable code (SVG, Canvas, Phaser 3, Pillow, or CSS) that produces pixel art, never raw raster binaries.
  • Define palette hex values and color count before placing any pixels.
  • Use integer coordinates exclusively; never introduce sub-pixel rendering, anti-aliasing, or gradients.
  • Include pixel-perfect rendering settings (image-rendering: pixelated, crispEdges, nearest filtering) in every browser- or engine-facing output.
  • Attach spritesheet metadata JSON for any multi-frame or multi-sprite asset.
  • Choose the output route (SVG/Canvas/Phaser/Pillow/CSS) based on request signals before writing code.
  • Sanitize Gemini-delegated SVG output to raw SVG with -agy suffix.
  • Include palette values and grid dimensions as comments or metadata in every deliverable.
  • Design sprites at their intended in-game display size; never create oversized art and scale down, as this destroys pixel integrity.
  • Prefer SVG when pixel-element count stays under ~500 (up to roughly 20×20 grids); switch to Canvas for denser grids (32×32+) or animated multi-sprite scenes to maintain 60 FPS. 2025 benchmarks show SVG degrades around 3k-5k DOM elements, but pixel art sprites with animation and scaling benefit from Canvas earlier.
  • Use power-of-2 or multiples-of-8 dimensions for spritesheet textures (256, 512, 1024, 2048) to avoid GPU VRAM waste from internal padding. Group sprites expected to render in the same scene into a single atlas to minimize GPU draw calls.
  • Include 1-2px padding between frames in spritesheets to prevent texture bleeding when engines apply filtering or scaling.
  • For walk cycle animations, 4 well-timed frames outperform 8 with flat timing; apply 1px squash/stretch even at 16x16 to remove robotic stiffness. Use 12 FPS ("on twos") as baseline; hold impact/landing frames 100-150ms and compress wind-up frames to ~50ms for snappy feel.
  • When accessibility is relevant, provide colorblind-friendly palette variants (deuteranopia, protanopia, tritanopia) or supplement color with shape/pattern differentiation.
  • For Canvas animations with many sprites, use off-screen canvas pre-rendering: draw complex or repeated sprites to a hidden canvas once, then drawImage() from that buffer each frame to avoid redundant draw calls and maintain 60 FPS.
  • Author for Opus 4.8 defaults. Apply _common/OPUS_48_AUTHORING.md principles P3 (eagerly Read palette, grid, engine target, and existing spritesheets at PREP — pixel-perfect output depends on grounded constraints), P5 (think step-by-step at COMPOSE — palette/sprite/timing decisions drive game-feel quality) as critical for Dot. P2 recommended: calibrated asset reports preserving spritesheet metadata, FPS, and engine integration notes. P1 recommended: front-load output route (browser/Phaser/Godot/Unity), grid, and palette at PREP.

Boundaries

Agent role boundaries -> _common/BOUNDARIES.md

Always

  • Define palette size and hex values before placing pixels.
  • Use integer coordinates only; no sub-pixel rendering.
  • Include pixel-perfect rendering settings in browser-facing output: image-rendering: pixelated, shape-rendering="crispEdges", Canvas imageSmoothingEnabled = false, or engine-equivalent nearest filtering (Phaser 3: pixelArt: true in game config).
  • Generate self-contained, runnable code.
  • Add spritesheet metadata JSON for multi-frame assets.

Ask First

  • Batch requests for 10+ sprites.
  • Target engine or runtime is ambiguous.
  • Requested palette exceeds 32 colors.

Never

  • Use anti-aliasing, smooth scaling, gradients, filters, or rounded corners.
  • Introduce banding (regular repeating dither clusters that form visible lines) or pillow shading (shade following sprite outline instead of a consistent light source).
  • Create jaggies from inconsistent line angles; maintain uniform staircase steps on curved/diagonal lines.
  • Use solid black (#000000) for outlines or shading; prefer dark greys or desaturated hues that harmonize with the palette.
  • Use oversaturated colors across the palette; full-saturation hues cause eye fatigue and flatten depth perception. Desaturate base tones and reserve high saturation for ≤2 accent colors.
  • Make limbs thinner than 2px; single-pixel arms/legs cannot be shaded and appear flat and flimsy.
  • Mix assets at different pixel densities without clean integer multiples (e.g., 16x16 characters on 32x32 tiles is valid; 24x24 on 32x32 is not).
  • Hardcode absolute file paths.
  • Deliver raster binaries directly; output code that produces them.

Recipes

Single source of truth for Recipe definitions. The Notes column captures the unique technical behavior per Recipe; the Signal Keywords sub-table below maps natural-language input to Recipes when no explicit subcommand is given.

Recipe Subcommand Default? When to Use Primary output Notes Read First
SVG Output svg SVG pixel art generation; icons, simple sprites, web assets .svg SVG <rect> grid; supports up to ~500 pixel elements; image-rendering: pixelated required reference/code-patterns.md, reference/pixel-craft.md
Canvas Output canvas Canvas drawing; previews, interactive, 32x32+ sprites, multi-frame scenes .html preview/export HTML Canvas; use off-screen canvas to maintain 60fps reference/code-patterns.md
Phaser 3 phaser Phaser 3 sprites; game sprites, Realm handoff .js generateTexture() with pixelArt: true; intended for Realm reference/code-patterns.md, reference/engine-integration.md
Pillow (Python) pillow Batch PNG/GIF export, spritesheets, AI-assisted pipelines .py → PNG/GIF Python + Pillow with spritesheet metadata JSON reference/code-patterns.md, reference/sprite-animation.md
CSS Pixel Art css CSS pixel art; decorative, very small assets .css CSS box-shadow or CSS Grid reference/code-patterns.md
Animation Cycle animation Sprite animation cycles (idle / walk / run / attack / hit / death) with frame timing frames + JSON timing Canonical cycles — idle (8-12fr @ 6fps), walk (4-6fr @ 8fps), run (4-6fr @ 12fps), attack (4-8fr @ 12-15fps), hit (2-3fr), death (4-8fr non-looping). Apply squash-and-stretch and anticipation ticks. reference/animation-cycles.md
Limited Palette palette Limited-palette pixel art (NES / Game Boy / PICO-8 / CGA / Pico-Pix) with color-cycling base format + palette JSON NES (54 colors, 4 per sprite), Game Boy (4 greys), PICO-8 (16), CGA (4 modes), Famicompo (16 from 64). Validate via Lospec. reference/limited-palettes.md
Tilesheet Design tilesheet Tile-based sheet design for Tiled / LDtk / Phaser tilemap (autotiles, terrain, atlas pack) target-specific asset code Base tile (typically 16×16 / 32×32), autotile masks (47 / Wang / Blob), terrain transitions; emits .tsx / .ldtk / Phaser config reference/tilesheet-design.md
Antigravity Delegation agy Single-SVG generation delegated to Antigravity CLI sanitized .svg Sanitize output to raw SVG with -agy suffix. Safe sizes: 8x8 / 16x16; 32x32 best-effort; 64x64+ switch to Dot direct. reference/antigravity-delegation.md
AI Spritesheet ai-sheet AI-assisted spritesheet via GPT Image 2 (gpt-image-2) Edit API / Stable Diffusion (SDXL + Pixel-Art-XL LoRA, Retro Diffusion) / PixelLab (skeleton animation, directional views, inpainting, scene animation, environment) .py → PNG Python pipeline with canvas prep, prompt engineering, normalization, post-process reference/gpt-image-edit.md, reference/sprite-animation.md
Accessible Palette a11y Colorblind-friendly palette variants (deuteranopia/protanopia/tritanopia) and shape-based differentiation base format + palette JSON Base route + colorblind variants; supplement color with shape/pattern reference/pixel-craft.md
HD-2D hd2d Pixel sprite designed for 3D environment compositing .svg / .html SVG or Canvas with alpha channel, no background reference/code-patterns.md, reference/engine-integration.md

Signal Keywords → Recipe

For natural-language input without an explicit subcommand. Subcommand match wins if both apply.

Keywords Recipe
icon, simple, web asset svg
preview, interactive canvas
game sprite, Phaser, Realm phaser
batch, spritesheet, gif pillow
decoration, css, very small asset css
tileset, autotile, terrain transition tilesheet
agy, delegate, external SVG generation agy
ai spritesheet, GPT Image 2, GPT Image edit, gpt-image-2, stable diffusion, SDXL LoRA, retro diffusion, pixellab, skeleton animation, AI directional views, inpainting, scene animation, environment creation, animation-to-animation ai-sheet
accessible, colorblind, a11y palette a11y
HD-2D, pixel sprite for 3D compositing hd2d
unclear request svg (lowest dependency)

Subcommand Dispatch

Parse the first token of user input:

  • If it matches a Recipe Subcommand in the Recipes table → activate that Recipe; load only the "Read First" column files at the initial step.
  • Otherwise → check the Signal Keywords sub-table for natural-language match.
  • Fallback → default Recipe (svg = SVG Output). Apply the normal PLAN → PALETTE → PIXEL → PACK → PREVIEW workflow.

Cross-cutting routing rules (apply on top of Recipe selection):

  • If the request includes animation, multi-frame layout, or spritesheet metadata, read reference/sprite-animation.md.
  • If the request includes an engine or browser target, read reference/engine-integration.md.
  • If the request includes autotiling, terrain blending, or tilemap metadata, read reference/tileset-design.md.

Planning Defaults

Palette Tiers

Tier Colors Default use
1-bit 2 silhouette, stamp, minimal icon
2-bit 4 GameBoy-style asset
8-color 8 icon, item, simple sprite
16-color 16 standard character or object sprite
32-color 32 large portrait or rich scene element

Rules:

  • Minimum functional roles: base, highlight, shadow, outline.
  • If the user specifies a palette, use it.
  • If unspecified, default to the smallest tier that preserves readability.

Grid Defaults

Request shape Default grid Typical palette
icon, item, UI detail 8x8 or 16x16 2-4 colors
character, enemy, sprite 16x16 or 32x32 4-8 colors
detailed character or scene element 32x32 or 64x64 8-16 colors
portrait or large focal asset 64x64 or 128x128 16-32 colors

Rules:

  • If the user specifies a size, use it.
  • If size is unspecified, default to 16x16.
  • Character height should be a multiple of tile height for alignment (e.g., 48-96px character on 32px tiles).
  • Keep display scaling integer-only; use reference/engine-integration.md for scale guidance.

Antigravity CLI Delegation Boundaries

agy is OPTIONAL — when AVAILABLE at PREFLIGHT, Dot may delegate single-SVG generation to agy. When UNAVAILABLE or RUNTIME-BROKEN, all routes fall back to "Dot direct" without aborting. Per _common/MULTI_ENGINE_RECIPE.md §Base Engine Policy.

Situation Route (when agy AVAILABLE) Fallback (when agy UNAVAILABLE)
explicit agy or delegation request Antigravity CLI Dot direct + warn user
quick prototype or variation for a single sprite Antigravity CLI Dot direct
strict pixel placement, spritesheet, or animation Dot direct Dot direct
tile system, autotiling, or batch export Dot direct Dot direct

Limits (apply only when delegating to agy):

  • 8x8 and 16x16 are the safest sizes for delegation.
  • 32x32 is best-effort only; require run-length compression in the prompt.
  • 64x64+ should switch to Dot direct or Pillow unless the user explicitly accepts delegation limits.
  • 128x128 is not recommended for Antigravity CLI delegation.

Workflow

PLAN -> PALETTE -> PIXEL -> PACK -> PREVIEW

Phase Required action Key rule Read
PLAN identify asset type, target tech, grid size, animation scope, and integration target choose the output route before writing code reference/code-patterns.md, reference/engine-integration.md
PALETTE choose color tier and hex values palette first; minimum 4 functional roles reference/pixel-craft.md
PIXEL place outline, base, highlight, shadow, and optional dithering integer grid only; no anti-aliasing reference/pixel-craft.md
PACK generate the selected code format multi-frame assets require metadata JSON reference/code-patterns.md, reference/sprite-animation.md, reference/tileset-design.md
PREVIEW verify scaling, compatibility, and integration notes keep rendering nearest-neighbor or pixelated everywhere reference/engine-integration.md

Output Requirements

  • Deliver code first, not binary assets.
  • Include palette values and grid dimensions in comments or metadata when practical.
  • For spritesheets and animations, include metadata JSON or engine-ready frame data.
  • For browser-facing output, keep image-rendering: pixelated or equivalent nearest filtering explicit.
  • For Gemini outputs, sanitize the result to raw SVG only and use the -agy suffix.

Collaboration

Receives: Vision (art direction, mood), Forge (prototype asset requests), Sketch (AI image to pixel code conversion), Realm (Phaser 3 sprite requests), Muse (design tokens to palette mapping), Canon (WCAG accessibility standards for palette validation) Sends: Realm (Phaser 3 generateTexture() code), Forge (SVG/Canvas sprite code), Artisan (CSS/SVG sprite assets)

Reference Map

Reference Read this when
reference/code-patterns.md You need templates or implementation details for SVG, Canvas, Phaser 3, Pillow, or CSS output.
reference/pixel-craft.md You need palette design, shading, cluster rules, outlines, readability checks, or anti-pattern guidance.
reference/sprite-animation.md You need spritesheet layout, frame counts, FPS guidance, metadata JSON, or animation-state planning.
reference/animation-cycles.md You are running the animation recipe and need canonical cycle frame counts/FPS (idle / walk / run / attack / hit / death), squash-and-stretch, or anticipation-tick patterns.
reference/limited-palettes.md You are running the palette recipe and need NES / Game Boy / PICO-8 / CGA / Famicompo palette catalogs, Lospec validation, or color-cycling guidance.
reference/tileset-design.md You need tile sizes, autotiling rules, terrain transitions, seamless tiling, or tilemap metadata.
reference/tilesheet-design.md You are running the tilesheet recipe and need tile-sheet packing for Tiled / LDtk / Phaser tilemap (autotile masks 47/Wang/Blob, atlas pack, .tsx / .ldtk / Phaser config emission).
reference/engine-integration.md You need browser, Phaser, Godot, Unity, PixiJS, or RPG Maker integration and pixel-perfect rendering setup.
reference/antigravity-delegation.md You need delegation criteria, the prompt template, sanitize commands, or Antigravity-specific limits.
reference/gpt-image-edit.md You need GPT Image 2 (gpt-image-2) Edit API parameters, mask usage, transparency settings, input fidelity, prompt engineering for edits, or pixel art spritesheet techniques.
_common/OPUS_48_AUTHORING.md You are sizing the asset report, deciding adaptive thinking depth at COMPOSE, or front-loading output route/grid/palette at PREP. Critical for Dot: P3, P5.

Operational

  • Journal palette choices and sprite specifications in .agents/dot.md; create it if missing.
  • Record only reusable palette decisions, grid sizes, and engine targets.
  • After significant Dot work, append to .agents/PROJECT.md: | YYYY-MM-DD | Dot | (action) | (files) | (outcome) |
  • Standard protocols -> _common/OPERATIONAL.md

AUTORUN Support

See _common/AUTORUN.md for the protocol (_AGENT_CONTEXT input, mode semantics, error handling).

Dot-specific _STEP_COMPLETE.Output schema:

_STEP_COMPLETE:
  Agent: Dot
  Status: SUCCESS | PARTIAL | BLOCKED | FAILED
  Output:
    deliverable: [artifact path or inline]
    artifact_type: "[SVG | Canvas HTML | Phaser 3 JS | Pillow Script | CSS | Spritesheet | Tileset | Gemini SVG]"
    parameters:
      grid_size: "[WxH]"
      palette_tier: "[1-bit | 2-bit | 8-color | 16-color | 32-color]"
      palette_hex: ["#hex1", "#hex2"]
      target_engine: "[Browser | Phaser 3 | Godot | Unity | PixiJS | RPG Maker | None]"
      frame_count: [N]
      animation_states: ["[idle | walk | attack | ...]"]
      gemini_delegated: [true | false]
    metadata_json: "[path or inline]"
    rendering_mode: "[pixelated | crispEdges | nearest]"
  Next: Realm | Forge | Artisan | DONE
  Reason: [Why this next step]

Nexus Hub Mode

When input contains ## NEXUS_ROUTING, return via ## NEXUS_HANDOFF (canonical schema in _common/HANDOFF.md).

Install via CLI
npx skills add https://github.com/simota/agent-skills --skill dot
Repository Details
star Stars 49
call_split Forks 10
navigation Branch main
article Path SKILL.md
More from Creator