libresprite-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@libresprite-mcpcreate a 32x32 pixel art of a treasure chest and export it as PNG"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
libresprite-mcp
An MCP server that drives LibreSprite headlessly, so an AI agent can generate and edit pixel art via tool-calling instead of a human using the GUI.
This exists because every "Aseprite MCP" server on GitHub generates Lua and shells out to real Aseprite -- LibreSprite forked before Aseprite switched to Lua and has its own JavaScript scripting API instead, so none of those servers work against it. This one is written directly against LibreSprite's JS API and CLI batch flags.
This is a personal project, scaffolded by Claude Code and implemented by Codex against the
task backlog tracked in the repository's GitHub issues. The repository is public, and the
testing notes are in docs/testing/README.md. Local development
notes about LibreSprite's scripting API are kept in docs/Design-Notes/.
The current headless API direction is documented in
docs/testing/Headless-API-Improvement-Plan.md.
Related LibreSprite fork
The MCP server and tooling live in this repository. Development patches for the headless LibreSprite scripting/API gaps live in the public vchopDev/LibreSprite fork, which is based on LibreSprite/LibreSprite. The released LibreSprite builds do not yet include those patches; use the fork when testing layer/frame creation or frame-tag support, and use a released binary for the currently supported API.
Related MCP server: kayamcp
Requirements
Python 3.10+
A LibreSprite binary on
PATH, or pointLIBRESPRITE_BINat one. CI downloads the latest release's Linux AppImage; there's no binary bundled with this repo.
Usage
pip install -e .
LIBRESPRITE_BIN=/path/to/libresprite libresprite-mcpPoint an MCP client (Claude Code, Codex, etc.) at the libresprite-mcp command over stdio. See
your client's MCP server configuration docs for how to register a local command-based server.
Project layout
src/libresprite_mcp/
client.py Subprocess wrapper around `libresprite -b --script <file>`
seed.py Blank PNG generation (stdlib-only, no image library)
tools.py Sprite operations -- pure functions, one JS script per call
server.py FastMCP wiring: exposes tools.py functions as MCP tools
tests/
test_seed.py Unit tests, no LibreSprite binary needed
integration/ Requires LIBRESPRITE_BIN; skipped otherwiseArchitecture in one paragraph
Every LibreSprite invocation is a fresh subprocess -- there's no persistent "active document"
across tool calls, so every tool is path-in/path-out: open a file, mutate it, save it, return
the path. A sprite is a file on disk, not a session handle. LibreSprite has no headless "new
sprite" command (like every app.command.* call, NewFile is a no-op in batch mode -- see
Known limits), so create_sprite writes a minimal blank PNG itself and hands it to
app.open(), which does work headlessly.
Known limits
With an unpatched released LibreSprite binary, the scripting API runs against a UIContext
that batch mode never marks as having
an "active document." Anything routed through the command system (app.command.*) is
therefore disabled headlessly, confirmed empirically for NewLayer, NewFrame, and
CanvasSize-via-command. This blocks, in this version:
Creating new layers or frames on an existing sprite. Only pre-authored multi-frame/ multi-layer files (built once in the GUI) can be edited per-layer/per-frame; new ones can't be added from a script.
Frame tags (naming an animation range like "walk" or "idle"): no scripting binding exists for these at all, independent of the command-system issue above.
Palette read/write is unsafe in the installed Windows 1.1-dev binary: reading
doc.sprite.palettecauses a native access violation in a fresh headless process. The upstreamPalettemethods are usable only afterloadPalette()in that same process, which cannot safely recover an existing sprite palette across this repo's path-in/path-out calls.
Mutations that go through LibreSprite's Transaction API directly instead of the command
system (sprite.resize(), the sprite.width/height setters) are unaffected and confirmed
working headlessly. The corresponding development patches are tracked in the related fork;
they are not part of the released LibreSprite binaries yet.
Animating with templates
Headless scripts cannot create new frames, but they can edit frames that already exist in a
hand-authored .ase template. Create the animation in LibreSprite's GUI with one explicit,
unlinked cel per frame, save the template, then use set_pixel/set_pixels_bulk with the
desired frame index. The per-frame cel images remain independent across save and reopen;
linked or extended cels are not a supported template layout.
Status
Early scaffold. create_sprite, resize_canvas, export_png, and get_png_data are
implemented and covered by integration tests. get_pixel/set_pixel are stubbed
(NotImplementedError) pending a spike into LibreSprite's pixelColor packing API -- see the
open issues on this repo for the current task backlog.
License
This project is released under the Zero-Clause BSD (0BSD) license. It permits use, modification, redistribution, and commercial use without an attribution requirement, and is provided without warranty.
Available Tools
7 toolscreate_spriteB
Create a new blank sprite file. path should end in .ase or .png.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| width | Yes | ||
| height | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It states the file is new and blank and gives a path-extension rule, but it does not reveal what happens on existing paths, whether the file is saved to disk immediately, what dimensions imply, or any error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no filler. The primary purpose is front-loaded and the path-extension tip is the only supporting detail, so every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple creation tool, the core purpose and path rule are present, and an output schema exists to describe return values. However, critical practical details are missing: the effect of width/height, behavior when the path already exists, and whether the new file is blank/transparent versus otherwise initialized.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds meaningful guidance only for path (must end in .ase or .png), while width and height are left to their bare names with no units, minimums, defaults, or interpretation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ('Create a new blank sprite file') and is clearly distinct from siblings like resize_canvas, set_pixel, or export_png. It also adds a concrete constraint on path extensions, so an agent can identify the tool's purpose unambiguously.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description establishes general context: use this when creating a new blank sprite before editing or exporting. However, it does not explicitly state when not to use it, mention alternatives, or explain how to proceed if the target file already exists.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_pngC
Flatten and export a sprite to a PNG file.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| out_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must fully disclose behavior, but it only says 'flatten and export.' It does not state whether flattening modifies the original sprite, whether an existing PNG file is overwritten, or what happens to unsupported sprite features.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. It is appropriately concise, though the brevity comes at the cost of important behavioral detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-required-parameter tool with no annotations and zero schema description coverage, this one-liner leaves critical gaps such as overwrite behavior, path requirements, and whether flattening is destructive. The output schema may cover return values, but it does not compensate for the missing operational context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description only loosely maps 'path' to the sprite and 'out_path' to the PNG destination. It adds no detail about accepted path formats, required extensions, or the relationship between the two parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action—flatten and export a sprite to a PNG file—and names the resource and output format. 'Flatten' adds behavioral differentiation from simpler data-returning tools like get_png_data, though it does not explicitly contrast with siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool versus alternatives such as get_png_data or create_sprite. The description implies the intended use but provides no context, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pixelA
Read one pixel as RGBA from a layer/frame.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | ||
| y | Yes | ||
| path | Yes | ||
| frame | No | ||
| layer | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the behavioral burden. It does convey the core read-only nature and output format (RGBA), but it omits boundary behavior, coordinate system, and how frame/layer defaults are applied. These are meaningful for correct invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler, beginning with the action verb. It is minimal but not wasteful; the lack of detail is better attributed to other dimensions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and zero parameter descriptions in the schema, a five-parameter tool needs more than one sentence to be called correctly. The description omits how path is resolved, how frame/layer indexing works, and coordinate bounds, even though an output schema may cover the return format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description needed to compensate, but it only adds the phrase 'from a layer/frame,' linking frame/layer to the operation. It gives no meaning for path, x, or y beyond their names, leaving defaults and coordinate semantics unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Read'), names the exact resource ('one pixel as RGBA'), and locates it ('from a layer/frame'). This clearly differentiates it from sibling tools like set_pixel (write) and get_png_data (whole image).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for reading a single pixel, but it never explicitly states when to choose it over siblings like set_pixel or get_png_data. The 'Read' verb and 'one pixel' scope provide only implied usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_png_dataB
Return base64-encoded PNG data for one layer/frame's image.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| frame | No | ||
| layer | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the full behavioral burden. It discloses the return type (base64-encoded PNG), implying a read operation, but it does not mention error behavior, performance considerations, or any side effects. The lack of explicit read-only confirmation and absence of failure scenarios make this adequate but not thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, concise sentence conveys the core action without extraneous wording. Every word is meaningful, and the structure is front-loaded with the verb and outcome. There is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema (not shown), the description fails to explain the three parameters adequately. With no annotations and zero schema descriptions, an agent lacks essential details about path semantics, frame/layer indexing, and potential edge cases. The tool is simple, but the description is incomplete for reliable usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate for the three parameters. It hints that 'layer' and 'frame' select which image, and 'path' presumably identifies the resource, but it does not define what 'path' refers to (file path, identifier, etc.) or clarify indexing (0-based vs 1-based). This is insufficient for reliable invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Return') and a specific resource ('base64-encoded PNG data for one layer/frame's image'). It clearly distinguishes the tool from siblings like get_pixel (single pixel) or export_png (full export) by focusing on layer/frame-specific image data. However, it does not explicitly contrast with siblings, so it falls short of a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as export_png or get_pixel. The description only states what it does, leaving the agent to infer the appropriate context from the name and sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resize_canvasC
Resize an existing sprite's canvas in place.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| width | Yes | ||
| height | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden of behavioral disclosure. It states 'in place', implying mutation, but does not explain what happens to existing pixel data (crop, pad, scale), whether the operation is reversible, or any side effects. For a mutation tool with no annotation coverage, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, tight sentence that gets straight to the point. It contains no filler or redundant phrasing, and the key action is front-loaded. This is exemplary conciseness for a simple tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple resize operation with three parameters, the description is thin. It does not explain what happens to the sprite's content, whether the operation is destructive, or any prerequisites. The output schema exists but is not shown, and without annotations, the agent lacks critical safety and behavior context. The description is incomplete for a mutation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It vaguely implies that width and height are the new canvas dimensions, but it does not explain the 'path' parameter at all. It adds minimal semantic value beyond the parameter names and does not cover units, constraints, or format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (resize) and the target (an existing sprite's canvas). It distinguishes from siblings like create_sprite because it explicitly says 'existing sprite', implying modification rather than creation. However, it does not name any alternative tools or provide contrast, so it falls short of the highest tier.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention conditions, prerequisites, or scenarios where other tools would be more appropriate. The only implicit hint is that it is for resizing, but there is no explicit routing or exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_pixelC
Write one RGBA pixel to a layer/frame.
| Name | Required | Description | Default |
|---|---|---|---|
| a | No | ||
| b | Yes | ||
| g | Yes | ||
| r | Yes | ||
| x | Yes | ||
| y | Yes | ||
| path | Yes | ||
| frame | No | ||
| layer | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure, but it only says 'Write' and does not explain whether the call overwrites an existing pixel, how coordinates are interpreted, whether out-of-bounds writes are errors or ignored, or how the alpha channel is applied. The mutation is implied, but safety and side-effect behavior remain opaque.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single sentence is concise and front-loaded with the core action and subject; there is no wasted wording. It is slightly too terse for a tool with nine parameters, but that issue belongs to completeness rather than structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a nine-parameter tool with no annotations and no schema descriptions, this description is incomplete: it omits coordinate semantics, path expectations, color value ranges, and border cases. An agent cannot reliably construct a correct call from the description alone, despite an output schema being present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, with nine parameters and no parameter descriptions, so the description must compensate. 'RGBA' does clarify that r, g, b, and a are color components and 'layer/frame' hints at those two parameters, but it does not explain path, x/y coordinates, value ranges, or the defaults for a, frame, and layer.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Write') and a precise object ('one RGBA pixel') plus a target location ('layer/frame'), making the operation unmistakable. It also distinguishes from the sibling tools get_pixel (read) and set_pixels_bulk (bulk write) by emphasizing 'one' and the RGBA color format.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to choose this tool over set_pixels_bulk, get_pixel, or any other sibling, nor any mention of prerequisites such as an existing sprite path. The only implied usage signal is the word 'one' in the description, which is not enough for an agent to decide between tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_pixels_bulkC
Write raw image bytes from base64 to a layer/frame.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| frame | No | ||
| layer | No | ||
| data_b64 | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosurebf it only says 'write,' implying mutation, but does not explain whether existing data is overwritten, how frame/layer defaults behave, image size constraints, or coordinate mapping. This is a significant transparency gap for a write operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficient sentence that front-loads the action and target. It earns its place, though its brevity contributes to the lack of behavioral and parameter detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter bulk mutation tool with zero annotations and zero schema descriptions, this description is under-specified. It omits path semantics, overwrite behavior, dimension handling, and return value expectations, leaving important operational details to guesswork.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but it only glosses over data_b64, layer, and frame. The required 'path' parameter is not explained at all, and there is no detail on expected base64 format, image dimensions, or how frame/layer select the target.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear action (write raw image bytes from base64) and a target (layer/frame), which is distinguishable from sibling tools like set_pixel or get_png_data. It could be more explicit that this operates on a sprite identified by path, but the core purpose is understandable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool instead of set_pixel, create_sprite, or other siblings. There are no conditions, exclusions, or alternative recommendations, so an agent must infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
7 tool updates
v0.1.0- First observed
create_sprite - First observed
export_png - First observed
get_pixel - First observed
get_png_data - First observed
resize_canvas - First observed
set_pixel - First observed
set_pixels_bulk
TDQS
Scored across 7 tools
Most tools target distinct actions: create, resize, export, pixel read/write. The main overlap risk is between export_png and get_png_data, since both produce PNG output, though one writes a file and the other returns base64 data.
All tool names follow a consistent snake_case verb_noun pattern: create_sprite, resize_canvas, export_png, get_png_data, get_pixel, set_pixel, set_pixels_bulk. Verbs are clear and predictable.
Seven tools is well-scoped for a sprite manipulation server. Each tool covers a core operation without excessive overlap or unnecessary additions.
The set covers creation, resizing, export, and pixel access, but lacks fundamental sprite editor operations: loading existing sprites, saving/in-place writes, layer/frame enumeration, and canvas metadata. Agents cannot meaningfully inspect or manipulate a sprite's structure beyond individual pixels.
Maintenance
Related MCP Connectors
Generate authentic pixel art - sprites, animations, and tilesets - from any MCP client
Generate pixel art sprites, animations, 8-direction rotations and palettes for games.
OCR, transcription, file extraction, and image generation for AI agents via MCP.
Generate on-brand images from your AI agent: design, edit, and render templates over MCP.
Related MCP Servers
- AlicenseCqualityDmaintenanceEnables AI assistants to control Aseprite for creating pixel art and animated sprites, with 104 tools covering canvas, drawing, animation, palettes, effects, and more.100MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to visually interact with LibreSprite for real-time pixel art creation and automated drawing with self-healing capabilities.MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI to create pixel art in Aseprite through pixel-level drawing primitives, read canvas screenshots, and iterate until satisfied.9MIT
- AlicenseAqualityAmaintenanceEnables AI agents to create and edit pixel art in a live Aseprite window, with tools for drawing, selection, transformation, and animation.18120 npm2MIT