Skip to main content
Glama
Aseprite AI Artist

Aseprite AI Artist

by mohandtest

Draw

draw

Apply multiple pixel-art operations to one cel as a single undoable action, including shapes, text, fills, gradients, and grids, with optional palette locking.

Instructions

Apply a batch of drawing operations to one cel, as a single undoable action. Ops: pixels, line, polyline, rect, ellipse, fill, replace, dither, gradient, clear, blit, text, grid. Batch aggressively — a whole sprite in one call is normal and correct, and it means the user can undo your work with one Ctrl+Z. Set paletteLock (default true) to snap every colour to the sprite's palette by perceptual distance before anything is written, so you cannot silently widen a curated palette. Ops run in array order, so paint fills before outlines and outlines before highlights. 'text' is laid out here from a bitmap font and expanded to plain pixels before it reaches Aseprite — pass measureOnly: true with only 'text' ops to get each one's ink bounds without touching the sprite, e.g. to centre a label first. 'grid' paints a picture written as text — one character per pixel, a legend mapping characters to colours, the same shape look op="ascii" returns — so you can see the whole silhouette while you write it instead of composing it from shapes. It is the easiest way to draw a small sprite or a whole animation frame, and to edit one: read a region with look op="ascii" layer=… rulers=false, change the rows, and send them back as a grid at the region's x/y.

Input Schema

NameRequiredDescriptionDefault
opsYesApplied in order, in one transaction.
frameNo1-based frame number. Omit to use the active frame.
labelNoName shown in Aseprite's undo history. Describe the intent, e.g. 'shade helmet'.
layerNoLayer name. Omit to use the active layer.
spriteNoWhich sprite: its id as '#7' (what every result reports back, and the only unambiguous form — two unsaved documents are both called 'Sprite'), its filename, or its display name. Omit to use the sprite Aseprite has focused.
createCelNoCreate the cel if the target layer/frame has none.
measureOnlyNoEvery op must be 'text'. Returns each one's ink bounds without calling Aseprite at all — use to size a panel or centre a label before actually drawing it.
paletteLockNoSnap every colour to the nearest palette entry (CIELAB ΔE). Set false only when the user asked to introduce new colours.
selectionOnlyNoClip every op to the current selection.

Output Schema

NameRequiredDescriptionDefault
frameNo
layerNo
boundsNoBounding box actually touched.
spriteNo
opsAppliedNo
textBoundsNoOnly present when `measureOnly` was set.
measureOnlyNo
colorsSnappedNoColours palette-lock moved, and how far. A large ΔE means the palette lacks that colour.
pixelsChangedNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.8.2

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial context beyond the annotations: ops execute in array order, paletteLock snaps to palette by CIELAB ΔE to avoid silently widening a curated palette, text is laid out and expanded to plain pixels before reaching Aseprite, and measureOnly computes ink bounds 'without touching the sprite'. The 'single undoable action' framing is consistent with destructiveHint=false rather than contradicting it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose and batching rule, then moves to paletteLock, ordering, text/measureOnly, and grid. Dense but each sentence carries distinct guidance; the grid sentences are long and could be tightened, keeping it short of a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex 9-param, 13-op tool with full schema coverage and an output schema, the description covers the non-obvious behaviors an agent must know: ordering, palette snapping, measure-only measurement, and the grid round-trip. Minor gap is no explicit mention of how blit/replace/gradient interact with selection or palette locking.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning beyond the schema: paletteLock's perceptual-snap purpose and its 'set false only when the user asked to introduce new colours', measureOnly's requirement that every op be text and its no-side-effect return, and the ordering guarantee for `ops`. Remaining op-specific params (blit, dither, gradient) are left to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Apply a batch of drawing operations to one cel, as a single undoable action') and enumerates the op vocabulary. It also positions itself against the read-side sibling by referencing `look op="ascii"`, so an agent can distinguish it from transform/select without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives strong usage direction: 'Batch aggressively', 'a whole sprite in one call is normal and correct', and the read-modify-write workflow via `look op="ascii"` then grid. It names the read counterpart but stops short of explicit when-not-to-use guidance against mutating siblings like transform or recolor.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.