Skip to content

AI actions

The AI Assistant can issue structured actions against a project: adding layers, generating tweens, swapping palettes, mirroring variants, and more. Below is the full action vocabulary, along with guidance on prompting for reliable results. For a step-by-step walkthrough, see AI-assisted editing; for production-scale patterns, see Production workflows at scale.

AI Assistant making structured edits

Pixel Art Studio is a structured document, not a flat canvas. A project is:

Project
├── Settings (grid, onion skin, view)
├── Palette (named colors, ramps, presets)
├── Layers[] (visibility, lock, opacity, blend mode, group)
├── Frames[] (duration, order)
├── Animation Tags[](name, range, direction)
├── Variations[] (palette overrides, visibility presets)
└── Tile Atlases[] (reusable tiles)

Every AI action targets one of these structures. The more precisely you address it (explicit layerId, frameIndex, coordinates, colors), the better the result.

These are the structured actions the assistant can issue. Use them as the vocabulary when you prompt.

Layers

addLayer
deleteLayer
updateLayer
duplicateLayer
reorderLayers
createLayerGroup
moveLayerToGroup

Frames and animation

addFrame
duplicateFrame
deleteFrame
updateFrameDuration
reorderFrames
selectFrame
setFrameCount // build a whole timeline in one action
copyLayerToFrames // carry one layer's art across frames
generateTween
addAnimationTag
updateAnimationTag
deleteAnimationTag

Pixels and shapes

setPixels // explicit coordinates + colors
clearLayer
fillArea
drawShape
flipLayer
generateMirroredVariants

Art primitives

These do the pixel craft — colour ramps, dithering, natural silhouettes — from a description of intent rather than a list of coordinates. They accept colours as hex strings or palette indices, and any colour not already in the palette is added.

drawGradient // dithered ramp: skies, water, lit backgrounds
ditherFill // two-tone blend for soft shading
drawMountainRange // jagged ridgeline with optional snow
drawHills // rolling midground band
drawTree // one shaded tree
drawTreeLine // a whole band of varied trees
drawCloud // soft cloud with a lit edge
drawSprite // pixel pattern from character rows and a color key
scatter // grass, stars, flowers, foliage speckle
drawRain // one frame of falling rain or snow
drawLightning // a forked bolt
drawFlash // partial-coverage brightening overlay

Palette

addColor
updateColor
removeColor
generateRamp
sortPalette
loadPalette

Project

updateSettings
pixelArtTool

The built-in assistant uses the unified chat system and can invoke all Pixel Art MCP tools through pixelArtTool. It uses your signed-in session and the open editor draft; no personal MCP token is needed and the external MCP admin switch does not affect it. The Pixel Art AI assignment and your service permissions still apply.

For example, {"action":"pixelArtTool","tool":"get_rig","arguments":{}} reads the current rig. Use apply_actions for rig and pixel edits, preview_animation for an inline GIF, and analyze_animation for frame-specific findings. The editor supplies project/service IDs and the draft revision. Applied edits participate in editor Undo and normal autosave. Project listing and creation are scoped to the current service; open another project before editing it.

The assistant receives textual tool results in its next live context. Images are shown in chat; visual model input depends on the chat’s image-input support, so numerical pixel reads and analysis remain the reliable inspection path.

Try this in the built-in chat:

Read this project’s rig and current frames. Create an eight-frame walk using the existing parts, preserve my cleanup layers, and keep stance feet planted. Render the poses, show a looping preview, and analyze the animation for disconnected pieces and foot drift. Report the affected frames before making further repairs.

Every art primitive draws on one frame by default. Give it a frame selector instead and one action covers a whole animation, re-evaluated per frame so the effect moves:

Field Meaning
frameIndex: 3 Just frame 3 (the default is the current frame)
frames: [0, 4, 8] Exactly those frames
frameRange: [0, 11] Frames 0 through 11, inclusive
allFrames: true Every frame in the project

Two modifiers control how the effect changes between frames. driftX and driftY scroll the result by that many pixels per frame, wrapping inside the action’s own region so the loop closes — that turns any primitive into a moving element. freezeSeed holds the random layout identical on every frame, so scattered marks stay put and only the drift moves them; without it, scattered marks re-seed each frame and shimmer.

drawRain carries its own phase and loops on its own, so it needs neither.

The assistant handles this for you when you ask for an animation. See Generate a multi-frame animation with AI for the workflow.

Specificity predicts the quality of the result more than anything else. State the structure you’re targeting (layer name, frame index, palette, tag), the change you want, and where (coordinates, color values).

Vague Structured
“make it better” “on layer body, frame 3, shift all pixels right by 2 and recolor the outline to #1a1a2a”
“add a walk cycle” “duplicate frames 1–4 as frames 5–8, then generateTween Hybrid EaseInOut between frame 4 and frame 8 on layer body”
“do the fire variant” “create variation fire, set palette to [list], hide layer ice_overlay, show layer fire_overlay”
“fix colors” “select all pixels on layer outfit matching #3a86ff within tolerance 10, recolor to #e63946”

A few rules apply in most situations. Address things by name, not index: “layer body” survives reorders, “layer 2” doesn’t. Give explicit coordinates for pixel edits, because setPixels with [x, y, color] triples is deterministic. Name tags and variations the way you’ll export them, since tag names become export targets. When one prompt would touch layers, frames, palette, and animation at once, split it into ordered steps. Review before you publish, because every AI action is undoable with Ctrl+Z but only manual review catches gradual drift.