Skip to content
MCP plugin v0.6.0 MIT

Aseprite AI Artist

Your coding agent, painting in the Aseprite window you already have open. Not a generated PNG and not a file changed behind your back: the document on your screen, one pixel at a time, and every step is one Ctrl+Z.

Works with Claude Code, omp, Codex CLI, Gemini CLI, Cursor, VS Code and Windsurf. Free and open source.

Repository

Latest release v0.6.0, Oct 5, 2026. Numbers as of Oct 5, 2026; the live ones are on GitHub.

Skills

Workflows the agent follows, in the order that catches mistakes while they are still cheap. In Claude Code and omp they are slash commands; any other MCP client gets them as prompts with the same names. Start with /aseprite:studio: it picks and runs the others.

  • /aseprite:studio

    Take any Aseprite request end to end

    The front door for any Aseprite or pixel-art request. Works out what the user actually wants, picks which workflows to run and in what order — and whether to work in the user's open Aseprite window or a headless batch Aseprite (`--headless` / `--live` force it) — hands parts to the specialist agents where the harness has them, and does not stop until the result has been looked at and reviewed. Use when a request spans several steps ("make me an animated knight for Godot") or when you are unsure which workflow applies.

    Read SKILL.md: Take any Aseprite request end to end
  • /aseprite:brief

    Plan a sprite before drawing it

    Turn a vague pixel-art request into a written brief — size, palette, view, light, outline style — and confirm it with the user before any pixel is drawn. Use when the request is open-ended ("make me a knight") rather than a specific edit.

    Read SKILL.md: Plan a sprite before drawing it
  • /aseprite:concept

    Design it first — concept sheet and storyboard

    Before drawing a new character, prop, scene or animation, write an art spec, turn it into a ready-to-paste prompt for an image-generation model, and offer the user a choice — generate a concept sheet or storyboard with it and send it back, or continue without one. When reference art arrives (from that prompt or from the user), read it into a PixelSpec and import it panel by panel, so the pixel work reproduces a decided design instead of improvising one. Use after the brief for anything drawn from scratch, and whenever the user supplies reference art; skip for edits to existing art.

    Read SKILL.md: Design it first — concept sheet and storyboard
  • /aseprite:new

    Create a sprite document

    Create a new Aseprite document with the right canvas size, colour mode, palette and layer structure, so later work does not have to fight the setup. Use when starting fresh rather than editing an existing sprite.

    Read SKILL.md: Create a sprite document
  • /aseprite:palette

    Choose, build and repair a palette

    Pick a palette that fits the request, build hue-shifted ramps, or clean up a sprite whose colours have sprawled. Use when the user asks about colour, wants a specific retro look, or when validate reports off-palette colours.

    Read SKILL.md: Choose, build and repair a palette
  • /aseprite:draw

    Draw a sprite

    Draw a sprite from silhouette to finished pixels, in the order that catches mistakes while they are still cheap — block in, check the silhouette, shade, outline, verify. Use for the main body of any drawing task.

    Read SKILL.md: Draw a sprite
  • /aseprite:shade

    Shade a sprite

    Add light and shadow with proper hue shifting, one step at a time, so the sprite gains form without gaining the flat-luminance look that marks generated pixel art. Use when flat art needs volume.

    Read SKILL.md: Shade a sprite
  • /aseprite:rig

    Rig a character for animation

    Split a character onto named layers — head, torso, arms, legs — so it can be animated by moving cels instead of redrawing pixels. Use before animating anything, or when limbs are baked into one layer.

    Read SKILL.md: Rig a character for animation
  • /aseprite:animate

    Animate a cycle

    Build an idle, walk, run or attack cycle from key poses, set timing that reads as motion rather than a metronome, tag it, and review it as a filmstrip. Use when a rigged sprite needs to move.

    Read SKILL.md: Animate a cycle
  • /aseprite:tileset

    Build a tileset

    Design seamless tiles and autotile sets, or deduplicate a hand-painted mockup into a reusable tileset, then export for Tiled or Godot. Use for level art, terrain and anything that repeats.

    Read SKILL.md: Build a tileset
  • /aseprite:review

    Review a sprite before calling it done

    Run the mechanical checks and the by-eye checks, then report what you found with evidence instead of declaring success. Use before finishing any pixel-art task, and when the user asks "is this good" or "why does this look off".

    Read SKILL.md: Review a sprite before calling it done
  • /aseprite:fix

    Fix or iterate on existing art

    Change a sprite that already exists — the user's own work or your earlier output — without destroying what is already right. Use for edits, touch-ups, style corrections and "make it more X" requests.

    Read SKILL.md: Fix or iterate on existing art
  • /aseprite:export

    Export game-ready assets

    Produce the files an engine actually consumes — spritesheets with atlases, GIFs, scaled PNGs — with the tags and layout the target needs. Use when work is finished and needs to leave Aseprite.

    Read SKILL.md: Export game-ready assets
  • /aseprite:submit

    Submit a finished sprite to the community gallery

    Turn the sprite you just made into a gallery pull request against with-pebbly/aseprite-ai-artist — exported files, an honest generation.yaml (prompts verbatim, model, plugin version, validate results, optional benchmark scoring), checked with `pnpm gallery:check`, opened with the gh CLI. Use when the user wants to share, publish or submit their work to the gallery or the benchmark.

    Read SKILL.md: Submit a finished sprite to the community gallery

Agents

Specialist subagents that ship with the Claude Code plugin. The main session hands them a focused job and gets a report back.

  • animation-director

    Animation planning specialist. Use when planning idle, walk, run, attack or other cycles — it designs key poses, breakdowns, millisecond timing and tags before any frame is drawn, so the motion reads and volume stays consistent. Plans on its own; executes frames on request.

    Agent definition: animation-director
  • palette-smith

    Colour and palette specialist. Use when the user needs a cohesive palette, hue-shifted ramps, a specific retro preset, a palette sampled from reference art, or a muddy palette cleaned up. Proposes colours and explains the choice; applies them only when asked.

    Agent definition: palette-smith
  • pixel-critic

    Visual QA for pixel art. Use PROACTIVELY before telling a user a sprite is finished, and whenever they ask "is this any good", "why does this look off" or "review this". Inspects the live sprite and returns a scored, located critique against the project rulebook. Read-only — it never edits the sprite.

    Agent definition: pixel-critic
  • rig-builder

    Sprite rigging specialist. Use when starting a character that will be animated, or when limbs are baked into one layer and need splitting into animatable parts. Plans the layer rig and builds it on request.

    Agent definition: rig-builder
A rainy night in Japan: a raccoon pulls a can from a vending machine, lightning flashes over the rooftops, maple leaves blow past an old bookshop where someone in a hoodie reads and sips coffee in warm lamplight

Aseprite AI Artist

Your coding agent, painting in the Aseprite window you already have open.

Not a generated PNG. Not a file changed behind your back. The document on your screen, one pixel at a time — and every step is one Ctrl+Z.

npm CI licence

☔ 500×400 · 72 frames · 20 layers — drawn by Claude Opus 5.5 through this server.

Install · How it draws · Skills · Gallery


✨ What it feels like

"Draw me a 32×32 knight in the PICO-8 palette, then give him a 4-frame idle."

You type that, and watch it happen in Aseprite: a palette, a silhouette, shading, layers, a breathing idle, a tagged cycle. The agent looks at its own work after every step, and at the end tells you what it compromised on.

You stay in charge. Don't like the helmet? Ctrl+Z, or just say so.

Works with Claude Code, omp, Codex CLI, Gemini CLI, Cursor, VS Code and Windsurf. Best results so far: Claude Opus 5.5.

🚀 Install

You need Aseprite 1.3+ and Node 22.6+ (macOS, Linux or Windows).

1. The Aseprite extension — then quit and reopen Aseprite:

npx @pebbly/aseprite-ai-artist install-extension

2. Your agent:

Claude Code
/plugin marketplace add with-pebbly/aseprite-ai-artist
/plugin install aseprite@aseprite-ai-artist
omp
omp plugin marketplace add with-pebbly/aseprite-ai-artist
omp plugin install aseprite@aseprite-ai-artist
Codex, Gemini, Cursor, VS Code, Windsurf
npx @pebbly/aseprite-ai-artist install codex      # or gemini, cursor, --all

Your config is backed up first; --dry-run shows the change.

3. Check it — restart your agent, then:

npx @pebbly/aseprite-ai-artist doctor

All ticks means you're ready. Updating? Run step 1 again. Odd setups (Steam, custom folders, Windows paths) are in docs/INSTALL.md.

No window? Headless mode

For CI or a batch of assets, the server can run Aseprite itself with no window:

npx @pebbly/aseprite-ai-artist serve --headless --aseprite /path/to/aseprite

Nothing is on disk until the agent saves, and it never touches a file your editor has open. It is never a fallback: if your window isn't attached, the agent asks instead of quietly switching.

🎨 How it draws

Ask /aseprite:studio for anything and it runs the whole job:

Stage What happens
1 Connect Checks Aseprite is attached and reads what's open. If it isn't, it stops — it never edits files behind your back.
2 Brief Only for open-ended requests: size, palette, view, light — one message, one answer.
3 Concept For anything new: writes the design down and gives you a prompt for an image model. Send back a concept sheet, or say "continue without".
4 Draw Silhouette first, written as a text grid (below), then shading.
5 Animate Splits limbs onto layers, plans key poses and timing, draws each frame, tags the cycles.
6 Review Looks, validates, fixes — two rounds, and it tells you if a third wouldn't help.
7 Export Spritesheet + atlas, GIF or PNGs for your engine.

After every step that changed pixels, it looks at the result before moving on.

🔤 The grid loop

New in 0.5.0. The agent doesn't draw with circles and rectangles — it types the frame out, one character per pixel, and draws that text in one call. To fix something, it reads the canvas back in the same format and changes only the characters that are wrong.

Four steps: the agent writes a pebble as rows of characters; Aseprite draws it; the agent reads it back as text and changes two characters; Aseprite draws the pebble winking

It sees the whole shape while writing it, so silhouettes stay even, limbs keep their length between frames, and an edit never spills into its neighbours. Animation is the same trick: copy the last frame's rows, move the arm, draw.

Since 0.6.0 every character stands for one palette entry, the same on every read, so a big canvas can be read and edited in pieces without the letters changing meaning between them. A grid can be as large as the canvas.

Early signal, not a measurement: with the same model and prompts, the mage benchmark went 3 → 4/10 and the road 1 → 3/10; the tree stayed at 2 (compare them).

🧰 Skills

studio picks these for you. Call one directly when you know the step you want — as /aseprite:<name> in Claude Code and omp, or just ask elsewhere.

Skill For Try
🎬 studio anything — it plans and runs the rest /aseprite:studio a fox, 32×32, sleeping loop
📝 brief a vague idea /aseprite:brief a cosy tavern keeper
🖼️ concept a design or storyboard before drawing /aseprite:concept a fire mage, 4-frame walk
📄 new a fresh document set up right /aseprite:new 64×64, PICO-8
🎨 palette colour: a retro look, ramps, cleanup /aseprite:palette give this a Game Boy look
✏️ draw making the thing, text included /aseprite:draw a fox curled up asleep
🌗 shade flat art that needs light /aseprite:shade light from the upper left
🦴 rig splitting a character for animation /aseprite:rig split the knight
🏃 animate walk, idle, attack cycles /aseprite:animate 8-frame walk cycle
🧱 tileset terrain and autotiles /aseprite:tileset grass-to-dirt, 16px
🔍 review an honest critique /aseprite:review why does this look off?
🩹 fix changing art without wrecking it /aseprite:fix make him more menacing
📦 export files for your engine /aseprite:export spritesheet for Godot
🗂️ submit sharing it in the gallery /aseprite:submit

In Claude Code and omp, four specialists take stages off the main agent: palette-smith, rig-builder, animation-director and the read-only pixel-critic.

🏆 Which model?

Model Drew How it went
Claude Opus 5.5 the rainy bookshop up top Best so far — 72 frames, 20 layers, one session plus a few notes.
Codex CLI gpt-5.6-terra the mascot Strong, after five rounds of critique.
Others — Untested. Send us a sprite!

Scored, repeatable runs live on the benchmark.

🗂️ Gallery and benchmark

Everything drawn with the plugin — with its prompts, models and .aseprite source — is at pixeli.pebbly.space. The benchmark puts every model and plugin version through the same three fixed prompts and scores them against written criteria.

Made something? Ask your agent for /aseprite:submit — it packages the files and opens the pull request.

🔧 Under the hood

your agent  ──MCP──▶  server  ──▶  bridge  ──▶  Aseprite extension
  • 18 tools, grouped by noun (draw, look, layer, frame, export…) instead of ninety — every tool costs context on every turn. Reference.
  • A rulebook in rules/ — palettes, shading, outlines, timing — served over MCP, so every client gets the same craft knowledge.
  • Safe by default. Every action is one undo step. With Aseprite detached, tools refuse instead of editing files on disk. Everything binds to 127.0.0.1. Details · security.

🛠️ Development

pnpm install && pnpm run build
pnpm test                 # TypeScript
pnpm run test:extension   # the Lua handlers, inside a real Aseprite
pnpm gallery:check        # gallery and benchmark data
pnpm web:dev              # the site, locally

Read AGENTS.md before changing anything — it lists the rules that aren't negotiable and the Lua gotchas that already cost someone a day.

📜 Licence

MIT — see LICENSE. Aseprite is a trademark of Igara Studio S.A.; this project isn't affiliated with them.

Made with ☕ and a lot of Ctrl+Z.

Install it from npm as @pebbly/aseprite-ai-artist, or see everything it has drawn in the gallery.