关于 Aseprite Live
Aseprite Live 是用于实时 Aseprite 编辑器或无头模式的 MCP 服务,面向像素美术与游戏开发工作。它将精灵编辑与 Unity 导出、美术 QA、瓦片地图和编辑器内交互结合起来。
主要功能
- 01实时及无头 Aseprite 编辑
- 02导出 Unity 精灵表和 .meta
- 03精灵美术 QA 检查
- 04等距绘图图元
- 05瓦片地图编辑
- 06每次修改对应命名撤销步骤
适用场景
- 01通过 Agent 创建或编辑精灵
- 02向 Unity 导出切片精灵和轴心
- 03检查精灵尺寸、颜色数和边距
- 04制作瓦片地图或等距素材
MCP 相关
该服务提供类型化的 Aseprite 编辑工具,以及 MCP 资源和提示词。它既可操作运行中的编辑器,也可在无头模式下处理文件。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
uvx aseprite-live-mcpASEPRITE_MCP_BACKENDlive (default) or headlessASEPRITE_PATHPath to the Aseprite executable (auto-detected if unset)ASEPRITE_RELAY_URLRelay HTTP base for the live backend (default http://127.0.0.1:9878)ASEPRITE_MCP_NO_UPDATE_CHECKSet to disable the daily PyPI update check本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
aseprite-live-mcp
让 AI Agent 在你正在运行的 Aseprite 编辑器中绘图——每次编辑都可通过一个命名撤销操作回退,并配备以 Unity 为先的游戏开发工具集。
一个用于 Aseprite 的开源 Model Context Protocol 服务。它可驱动正在运行的编辑器(所有打开的文档、未保存的标签页、编辑器内的对话框,甚至可以请你点击画布上的某个点),也可对磁盘上的文件进行无界面处理(aseprite --batch)。一键导出 Unity 精灵表和 .meta 文件,并为每个切片设置轴心点;按项目规范进行美术 QA 检查;提供等距图元和图块地图;还能在版本过时时通知你。
实际演示
以下示例均由 AI Agent 通过 MCP 驱动正在运行的 Aseprite 画布完成——每一步都可通过一个命名撤销操作回退。
![]() 等距图元 等距方盒 → 凹入端口 → 水箱 → 描边 | ![]() 绘图工具集 矩形 · 抖动渐变 · 椭圆 · 圆形 · 抖动 · 描边 | ![]() 渐变步进着色 平涂 → 体积感着色,沿手动排序的调色板渐变 |
![]() 图块地图 逐块绘制图块集 → 逐行排布地图 | ![]() 印章绘制 只绘制一次花朵 → 沿弧线散布,一个撤销操作即可回退 | ![]() 桥接面板 实时状态、活动日志、暂停开关——都在 Aseprite 中 |
还有无界面服务无法实现的部分——Agent 在你的编辑器内向你发起请求(真实屏幕截图,并非模型图):

以下所有内容都来自针对一个正在运行的编辑器的一次会话:构建了五个精灵,完成 QA,组装成图集、切片并导出到 Unity — 最后通过编辑器内的审批对话框完成确认。.aseprite 源文件位于
examples/showcase/;打开它们,然后按 Ctrl-Z 向后查看构建过程。

![]() 完成 QA 的等距初步构图 面多边形 → 凹入式接口 · 坡道 + 锁定调色板的明暗处理 · 一次撤销即可盖上铆钉 · qa_sweep 4/4 | 信标脉冲 加色辉光 · 缓动的 tween_cel_opacity 循环 · 已添加标签并设定时长 | ![]() 无人机冲刺 tween_frames 平滑插值 · smear_frame 拖影 · 已用 frame_diff 验证端点 |
QA 工具可不是摆设。构建过程中,frame_diff 的变更边界框捕捉到了一处肉眼未察觉的动作补间问题 — 每个 cel 都因图像原点而发生位移,并在画布边缘被裁切。一次事务就修复了问题;同一差异工具还再次验证了修复结果:

render_onion_composite — 较早的帧为红色,较晚的帧为蓝色,整条轨迹合成在一张图中
图集的十个切片通过一次操作导入 Unity —
examples/showcase/unity/ 中包含图集 PNG 和生成的 .meta:十个 Multiple 模式的精灵,矩形区域已翻转 y 轴,每个枢轴点都已烘焙。
安装
一条命令,无需克隆:
uvx aseprite-live-mcp # or: pipx run aseprite-live-mcp
需要 Python 3.10+ 和 Aseprite 1.3+。无头模式只需这些;实时编辑器还需要一个额外步骤(见下文)。
Claude Code
claude mcp add aseprite-live -- uvx aseprite-live-mcp
Claude Desktop / 任意 JSON 配置客户端
{
"mcpServers": {
"aseprite-live": {
"command": "uvx",
"args": ["aseprite-live-mcp"],
"env": {
"ASEPRITE_MCP_BACKEND": "headless", // or "live" — see below
"ASEPRITE_PATH": "C:/Program Files/Aseprite/Aseprite.exe"
}
}
}
}
如果省略 ASEPRITE_PATH,系统会自动检测常见安装位置(Steam 和独立安装版)。
从源代码安装
git clone https://github.com/oaktreegames/aseprite-live-mcp
cd aseprite-live-mcp
pip install -e .
快速开始 — 无头模式(2 分钟,无需打开编辑器)
添加服务时设置 "ASEPRITE_MCP_BACKEND": "headless"(见上文)。在无头模式下,工具需要一个 file 参数 — 即要操作的 .aseprite 文件。让你的 Agent 运行 status 以确认连接,然后试试:
“在 C:/art/coin.aseprite 创建一个 32×32 的精灵,画一个金色圆形,并将其导出为 coin.png。”
快速入门 — 实时编辑器(操作当前打开的画布)
实时后端会编辑正在运行的 Aseprite,每次编辑对应一个撤销步骤。桥接脚本和中继服务器位于此仓库中(不包含在 pip 包内),因此请先获取它们:git clone https://github.com/oaktreegames/aseprite-live-mcp
— 或者只下载 claude-bridge.lua 和
relay_server.py。
- 将桥接脚本安装到 Aseprite 中 — 在 Aseprite 中选择
File → Scripts → Open Scripts Folder,将aseprite_client/claude-bridge.lua复制到该文件夹,然后重启 Aseprite(或选择File → Scripts → Rescan Scripts Folder)。 - 启动中继服务器:
python bridge/relay_server.py(需要pip install websockets)。 - 连接: 在 Aseprite 中选择
File → Scripts → claude-bridge,并在提示时授予脚本信任权限。面板会显示 "connected to Claude"、实时活动,以及暂停切换按钮。 - 在 MCP 配置中将后端切换为
live("ASEPRITE_MCP_BACKEND": "live")。
现在,工具会操作当前活动文档;观察编辑效果,并按 Ctrl-Z 撤销每项编辑。有关其工作原理,请参阅 docs/ARCHITECTURE.md。
你可以让它做什么
- “创建一个 32×32 的精灵,画一个红色圆圈,并将其导出为 icon.png。”
- “将 machines.aseprite 导出为 Unity 精灵表,像素与单位的比例设为 16。” → 直接将精灵表和预切片的
.meta文件放入你的 Unity 项目。 - “切分这个图集,设置每个切片的枢轴点,并将其导出到 Unity,同时烘焙枢轴点信息。”
- “执行一轮 QA 检查:尺寸必须为 64×64,颜色不超过 16 种,与网格对齐,并留出 2px 的贴纸边距。”
- “为 1×1 的机器底座画一个等距视角方块,并在其正面开一个凹陷接口。”
- “设置一个 16×16 的图块地图图层,绘制草地和泥土图块,并铺设一条 10×6 的地面带。”
- “将我的导出内容整合到一张带标签的精灵表中,切分每个部分,设置枢轴点,然后把图集交给 Unity。”
- “在我的编辑器中弹出一个对话框:批准或重做。然后等我点击锚点。”
- “在我润色精灵时监视它;我停下来后,重新执行一轮 QA 检查。”
- “比较第 3 帧和第 4 帧——手臂真的动了吗?”
本项目的定位(实事求是)
目前已经有不错的 Aseprite MCP 服务。本项目并非首个, 也不自称是首个。我们主张——并且有依据的是:
| 能力 | 现状 | 本项目 |
|---|---|---|
| 绘制 / 图层 / 帧 / 调色板 / 选区 / 导出、抖动、渐变、轮廓、滤镜、补间、瓦片地图 | 无头模式的领先方案(diivi 约 113 个工具、pixel-mcp、ext-sakamoro)和商业实时服务(Aseprite MCP Pro,以 Godot 为主)已涵盖得很全面 | 功能对等——经过精选、类型完整的功能集 |
一步完成 Unity 导出——精灵表 + .meta,并预先写入每个切片的轴心点 | 我们找到的其他所有 Aseprite→Unity 流程,都需要单独使用引擎端导入器;没有一个能导出轴心点 | 差异化优势 ✅ |
| 美术 QA 扫描,包括依据项目规范测量透明贴纸边距 | 我们没有找到其他将精灵边距 / 留白检查作为打包扫描功能的服务 | 差异化优势 ✅ |
| 等距绘图基元(2:1 盒体 / 圆柱体、自动面部着色、凹陷面板) | 在我们调查过的所有 Aseprite MCP 中,这是唯一提供等距绘图基元的方案 | 差异化优势 ✅ |
| 编辑器内交互:在 Aseprite 中显示对话框、让美术师选取点位、监视美术师的编辑操作、控制对称与视口 | 已有实时 GUI 服务(商业版 Pro;两个初创开源项目);我们调查过的方案都没有提供编辑器内对话框或人在回路中的工具 | 差异化优势 ✅ |
| 更新提示——服务自身会告知你是否有更新版本 | 据我们所知(检查日期:2026-07-16),没有其他 MCP 服务会通过会话报告自身的更新状态 | 差异化优势 ✅ |
| 实时瓦片地图编辑 | 无头模式的领先方案会在磁盘上编辑瓦片地图;我们找到的唯一实时瓦片地图编辑方案是闭源的 | 开源优势 ✅ |
| MCP 资源 + 提示词 | 在我们调查过的开源 Aseprite MCP 项目中,这是 MCP 原生功能最丰富的方案(实时状态资源 + 引导式工作流提示词) | 差异化优势(审慎表述) |
通过服务执行的每项编辑,都会恰好成为一个带有命名的撤销步骤
(app.transaction)——你可以观察 Agent 的操作,并通过 Ctrl-Z 逐步撤销其所做的任何更改。
我们确认,其他开源实时桥接服务并未在其全部功能中坚持这一做法(其中一个只为 57 个工具中的 3 个提供事务封装)。
了解何时更新
status 工具会报告服务版本,并且每天最多通过 PyPI 检查一次是否有更新版本。你的 Agent 能看到,所以你也能看到:
{ "backend": "live", "connected": true,
"server": { "current": "0.2.0", "latest": "0.2.1", "update_available": true,
"how": "pip install -U aseprite-live-mcp (uvx users: run uvx aseprite-live-mcp@latest once — uvx reuses its cached version otherwise)" } }
此信息还会通过 aseprite://update 资源、stderr 中的一行日志,以及 MCP serverInfo 握手中的实际版本呈现。使用 ASEPRITE_MCP_NO_UPDATE_CHECK=1 禁用(在 CI 中会自动禁用)。不收集遥测数据——检查只会通过 HTTP GET 请求读取 PyPI 的公开 JSON;不会发送任何关于你、你的机器或你的美术作品的信息。
工具(139)
每个工具都有类型和注解(readOnlyHint/destructiveHint/idempotentHint/openWorldHint);如果会修改内容,则会通过带有名称的 app.transaction 封装,因此在编辑器中每次编辑都恰好对应一个带标签的撤销步骤。
检查与元数据(6)
status— 报告后端运行状况、本服务的版本,以及是否有更新版本。get_sprite_info— 获取当前精灵的尺寸、颜色模式,以及图层 / 帧 / 标签列表。get_pixel— 读取 (x, y) 处合成后的单个像素(所有图层),格式为 #rrggbbaa。set_sprite_metadata— 为精灵添加带类型的键值元数据(Aseprite 的 Properties 系统——直接存储在 .aseprite 文件中)。get_sprite_metadata— 读取精灵的带类型键值元数据(Properties)。get_pixels— 以 #rrggbbaa 字符串网格的形式读取合成后的像素区域——为 AI 提供反馈循环,让它了解“当前画布是什么样”。
文档与会话(5)
- **`open_sprite`** — 打开精灵文件并将其设为活动文档;返回文件名、尺寸以及帧数和图层数。 - **`save_sprite`** — 将活动精灵保存到磁盘:若提供 ``path``,则保存到该路径(另存为;文档的文件名也会随之更新);否则保存到其自身文件名。若精灵尚未命名且未提供 ``path``,则报错。 - **`close_sprite`** — 关闭活动精灵。 - **`set_active_sprite`** — 仅限实时编辑器:按完全匹配的文件名或基本名(例如 “turret.aseprite”)将某个已打开的文档设为活动文档。 - **`list_sprites`** — 仅限实时编辑器:列出所有已打开的文档——文件名(或 “(unsaved)”)、尺寸、帧数和图层数、未保存更改标记,以及哪个文档处于活动状态。画布 (3)
create_sprite— 创建新精灵。expand_canvas— 按每一侧扩展(或使用负值缩小)画布,但不缩放内容——现有像素相对于旧原点的位置保持不变。import_spritesheet— 将精灵表 PNG 切分为动画帧:按给定帧尺寸逐行读取单元格,放入新的 “imported” 图层,并根据需要添加帧。
图层与组 (14)
add_layer— 在图层堆栈顶部添加一个新的空图层(可选择命名)。add_group— 添加图层组。move_layer_to_group— 将图层移入图层组。list_layers— 列出完整图层树,按堆栈从顶到底排序:名称、路径、类型(image/group/tilemap)、可见性和不透明度;包括嵌套在组中的图层(get_sprite_info仅列出顶层图层)。delete_layer— 删除指定名称的图层。rename_layer— 重命名图层。set_layer_visibility— 显示或隐藏图层。set_layer_opacity— 设置图层的不透明度(0-255)。flatten_sprite— 将所有图层合并为一个图层。set_layer_blend_mode— 设置图层的混合模式。duplicate_layer— 在原图层上方复制该图层(包括其 cel)。merge_layer_down— 将图层合并到正下方的图层中。move_layer— 调整图层在堆栈中的顺序。import_image_as_layer— 将外部图像文件(PNG 等)以 (x, y) 为位置导入为新图层——用于概念美术导入的参考/描摹图层。
帧 (8)
add_frame— 在末尾追加一个新的空帧。duplicate_frame— 复制number帧(从 1 开始计数)。delete_frame— 删除number帧(从 1 开始计数)。set_frame_duration— 设置number帧的持续时间(毫秒)。add_frames— 在一个撤销步骤中追加count个空帧。set_frame_durations— 将 [from_frame..to_frame] 中的每一帧设为ms毫秒。reverse_frames— 反转帧顺序(包括所有图层上的 cel 及其持续时间)——默认处理整个精灵,也可处理包含起止帧的 [from_frame..to_frame] 范围。set_onion_skin— 配置编辑器的洋葱皮视图:开启/关闭、两个方向上的残影数量,以及残影是否限制在当前标签内。
Cel (3)
clear_cel— 清空指定图层和帧上的 cel(设为透明)。set_cel_position— 将 cel 的左上角原点移动到 (x, y)。set_cel_opacity— 设置 cel 的不透明度(0-255)。
绘图 (10)
- **`draw_pixels`** — 设置单个像素:``pixels`` 是一个列表,包含 ``{"x": int, "y": int, "color": "#rrggbb[aa]"}``。 - **`draw_polyline`** — 沿 ``points`` 中的点(按顺序排列的 [x, y] 对)绘制相连的线段;``close=True`` 会将最后一个点与第一个点相连。 - **`draw_rectangle`** — 在当前图层和帧上绘制矩形。 - **`draw_line`** — 绘制一条从 (x1,y1) 到 (x2,y2) 的 1px 线段。 - **`draw_circle`** — 绘制一个以 (center_x, center_y) 为圆心的圆。 - **`fill_area`** — 对 (x, y) 处颜色相同的连通区域进行泛洪填充。 - **`draw_ellipse`** — 绘制一个以 (center_x, center_y) 为中心、x/y 半径各自独立的椭圆。 - **`draw_gradient`** — 使用从 ``color1`` 到 ``color2`` 的线性渐变填充矩形。 - **`apply_dither`** — 使用均匀的有序(Bayer 4x4)抖动混合 ``color1`` 和 ``color2``,填充矩形。 - **`add_outline`** — 在当前 cel 的不透明像素周围添加 1px 的 ``color`` 描边,使其在复杂背景上更易辨认。调色板(12)
get_palette— 以 #rrggbbaa 十六进制字符串的形式返回当前精灵的调色板。set_palette_color— 将调色板的index项设为color(#rrggbb 或 #rrggbbaa)。add_palette_color— 将color追加到调色板,并返回其新索引。set_palette— 使用colors(#rrggbb/#rrggbbaa 列表)替换整个调色板。apply_preset_palette— 将调色板替换为内置预设:gameboy | pico8 | cga。generate_color_ramp— 根据base_color生成从深到浅的明暗色阶,并按顺序追加到调色板末尾,供palette_ramp_walk使用。extract_palette_from_image— 从外部图像文件提取调色板(中位数切分),并默认将其设为当前精灵的调色板——这是从概念设计到锁定调色板的步骤。sort_palette— 按luminance(默认)、hue或saturation对调色板色块重新排序。palette_from_sprite— 根据精灵的实际像素生成调色板(Aseprite 的颜色量化)——与quantize_to_palette的作用相反。load_palette— 从调色板文件(.gpl、.pal、.ase、.png 色带——Aseprite 能读取的任何格式)替换精灵的调色板。save_palette— 将精灵的调色板写入文件(.gpl、.pal、.png——由扩展名决定)。apply_bundled_palette— 按资源 ID 应用 Aseprite 自带扩展调色板之一,例如 DB16、DB32、ARQ4、EDG16(是否可用取决于已安装的调色板扩展)。
颜色(4)
replace_color— 在当前 cel 中,将所有匹配from_color的像素(在tolerance范围内,该值表示 0-255 的 RGB 距离)替换为to_color;除非to_color自带 Alpha 值,否则保留每个像素原有的 Alpha 值。quantize_to_palette— 将当前 cel 中每个不透明像素转换为精灵调色板中与之最接近的颜色(保留 Alpha 值)——在导入或着色后保持调色板规范。adjust_hsl— 在 HSL 空间调整当前 cel 的颜色:hue_shift为角度(-360..360),saturation为倍率(1.0 表示不变),lightness为增量(-1..1)。get_color_stats— 返回合成精灵的颜色直方图:不重复的不透明颜色数量、不透明像素总数,以及使用频率最高的top种颜色及其计数——用于美术 QA 流程中的调色板漂移检查。
着色(2)
apply_shading— 受调色板约束的着色:朝光源方向提亮,背光方向变暗,并将每个像素映射为最接近的调色板颜色。palette_ramp_walk— 按光照方向沿已排序的调色板向更亮或更暗的方向移动 ±N 个索引来着色,而不是映射到亮度最接近的颜色——这样可以遵循手动排序的明暗色阶。
滤镜(5)
- **`adjust_brightness_contrast`** — 调整当前 cel 的亮度和对比度,范围均为 -100..100(0 = 不变)。 - **`invert_colors`** — 反转当前 cel 的 RGB(不影响 alpha)。 - **`desaturate`** — 将当前 cel 转换为灰度(Rec. 601 亮度),保留 alpha。 - **`box_blur`** — 使用 alpha 加权方框核模糊当前 cel。 - **`sharpen`** — 锐化当前 cel(基于 3x3 邻域的反遮罩)。印章绘制 (1)
paint_with_stamp— 在points中的每个 [x, y] 位置盖上图像印章(点表示印章中心)。
等距 (4)
draw_iso_box— 绘制一个 2:1 等距盒体。draw_iso_cylinder— 绘制一个垂直等距圆柱体(储罐/筒仓/烟囱):包含顶部椭圆、阴影主体和前沿,并根据color自动添加阴影。fill_polygon— 根据points(按顺序排列的 [x, y] 对列表)对任意多边形进行扫描线填充。iso_recessed_panel— 在等距表面绘制一个内凹的对接插座/端口——以明亮的受光边缘框住暗色内凹部分。
选区 (8)
select_rectangle— 设置矩形选区。select_all— 选择整个画布。deselect— 清除当前选区。select_ellipse— 选择给定矩形内切的椭圆。select_by_color— 选择所有与color匹配的像素(合成后的颜色,各通道容差为 0-255)——全局魔棒。invert_selection— 根据画布边界反转当前选区。get_selection— 报告是否存在选区及其边界矩形。erase_area— 将像素擦除为透明。
变换 (6)
flip_sprite— 水平或垂直翻转整个精灵图。resize_sprite— 将整个精灵图缩放到新的像素尺寸。crop_sprite— 将精灵图裁剪到给定矩形。rotate_sprite— 将整个精灵图顺时针旋转 90、180 或 270 度(无损)。autocrop_sprite— 修剪透明边框:将画布缩小至所有图层和帧中可见内容的并集(Sprite > Trim)。set_color_mode— 在 rgb | gray | indexed 色彩模式之间转换精灵图。
切片 (5)
create_slice— 在给定矩形处创建一个命名切片(图集区域)。set_slice_pivot— 设置切片的轴心点,单位为像素,相对于切片左上角。set_slice_center— 设置切片的 9-patch 可拉伸中心矩形(相对于切片)。list_slices— 列出所有切片及其边界、轴心点和 9-patch 中心。delete_slice— 删除指定名称的切片。
标签 (7)
create_tag— 创建名为name的动画标签,范围为第from_frame..to_frame帧(从 1 开始)。delete_tag— 删除名为name的动画标签。list_tags— 列出动画标签及其帧范围。rename_tag— 将动画标签old_name重命名为new_name。set_tag_color— 设置标签name的时间轴标签颜色(#rrggbb 或 #rrggbbaa)。set_tag_range— 将标签name的范围设为第from_frame..to_frame帧(从 1 开始,包含首尾;根据精灵图的帧数进行验证)。set_tag_direction— 设置标签name的播放方向:forward | reverse | pingpong | pingpong_reverse。
瓦片地图 (6)
- **`create_tilemap_layer`** — 在 tile_width x tile_height 网格上创建一个拥有独立 tileset 的 tilemap 图层。 - **`add_tile`** — 向 tilemap 图层的 tileset 追加一个空白 tile;返回新 tile 的索引和 tileset 大小。 - **`draw_on_tile`** — 在 tilemap 图层 tileset 的一个 tile 上设置像素。 - **`set_tiles`** — 在 tilemap 图层的 cel 上放置 tile 引用。 - **`get_tilemap_info`** — 读取 tilemap 图层信息:tile 大小、tileset 长度,以及 cel 的网格大小、像素位置和 tile 索引网格(``tiles`` 按行列排列,已去除翻转标记;上限为 64x64,并设置 ``truncated``)。 - **`export_tileset`** — 将 tilemap 图层的 tileset 导出为水平 PNG 条带(如果提供 ``data_path``,还会导出 Aseprite JSON 图集)。动画(5)
tween_frames— 在from_frame和to_frame之间插入count个中间帧,对 cel 的位置进行插值(对起始 cel 的图像进行运动补间)。tween_cel_opacity— 在 [from_frame..to_frame] 范围内淡入或淡出图层的 cels:使用所选缓动方式,将不透明度从from_opacity插值到to_opacity(0-255)。smear_frame— 添加一个运动模糊帧,混合from_frame和to_frame:重叠像素取平均值,仅出现在单帧中的区域以半透明度残影呈现——这是像素内容的拖影效果。frame_diff— 对两个合成帧进行逐像素精确比较:返回变化像素数量及比例、变化边界框,以及两帧是否相同。render_onion_composite— 写入frame的 PNG,将最多prev个较早帧以红色残影显示,将最多next个较晚帧以蓝色残影显示(遵循 Aseprite 的洋葱皮惯例),并采用指定的残影opacity——以便在一张图像中查看运动轨迹。
导出(4)
export_sprite— 将当前活动精灵导出到文件;格式由out_path扩展名决定(.png、.gif 等)。export_spritesheet— 将所有帧打包为一张精灵图(可选将 JSON 图集写入data_path)。export_layers— 将每个图像图层(递归处理组)分别导出为out_dir中的 PNG,文件名为<sanitized-layer-name>.png。export_tags— 将每个动画标签的帧范围分别导出为out_dir中的文件:动画<tag-name>.gif(format="gif",默认)或水平<tag-name>.png条带(format="png")。
Unity 导出(2)
export_unity_sprite— 导出水平精灵图,并在其旁写入 Unity.meta,预先切分为命名的 Multiple 模式精灵(每帧一个)——一步完成,无需手动使用 Sprite Editor。export_unity_slices— 将精灵导出为单张 PNG,并写入包含多个 Multiple 模式精灵的 Unity.meta(每个命名切片对应一个精灵),每个精灵均保留该切片的轴心点——这样,带切片布局的图集导入 Unity 后即可完成切片并设置轴心点。
美术 QA(2)
measure_padding— 测量内容周围透明的“贴纸”边距:内容边界框、各侧边距(左/右/上/下)、填充率和不透明颜色种类数。qa_sweep— 根据项目规范检查当前活动精灵,并返回每项检查的通过/失败结果。
批处理(整个文件夹)(3)
batch_export— 将folder中每个.aseprite的第一帧导出为图像,可选按scale整数倍放大。batch_resize— 调整folder中每个.aseprite的大小(第一帧,使用最近邻插值),并将图像写入out_dir。batch_apply_palette— 将folder中每个.aseprite的颜色锁定到调色板:将每个精灵(第一帧,保留 alpha)映射到调色板,并将图像导出到out_dir。
撤销 / 重做(2)
- **`undo`** — 撤销当前精灵图上的上一次编辑(实时编辑器)。 - **`redo`** — 重做上一次撤销的编辑(实时编辑器)。实时编辑器(交互式)(11)
get_editor_state— 仅限实时编辑器:获取当前缩放、滚动位置,以及鼠标所在的精灵图像素位置,让 Agent 知道艺术家正在查看什么。set_editor_view— 仅限实时编辑器:设置视口缩放(1.0 = 100%)和/或滚动位置,例如,放大即将编辑的区域,让艺术家可以观看。set_symmetry— 仅限实时编辑器:设置镜像绘制对称模式;mode可以是none、horizontal(沿垂直轴镜像)、vertical或both;还可以选择放置对称轴线。ask_point— 仅限实时编辑器:请求艺术家在画布上单击一个点(轴心、锚点、绘制原点)。get_asked_point— 轮询ask_point的结果:等待时done为 false,之后返回单击位置的x/y(如果艺术家按下 Esc,则返回cancelled)。cancel_ask_point— 撤销待处理的ask_point请求(例如,艺术家暂时离开了,你要继续进行其他操作)。show_choice_dialog— 仅限实时编辑器:在 Aseprite 中弹出一个小对话框,显示消息并提供最多 4 个选项按钮(例如,批准/重做)。get_dialog_choice— 轮询show_choice_dialog的结果:对话框打开时done为 false,之后返回所选按钮的文本。watch_changes— 仅限实时编辑器:开始统计艺术家对当前精灵图所做的编辑(通过Sprite.events)。get_watched_changes— 轮询由watch_changes开始的更改计数器(reset=True会在读取后将其清零)。stop_watching_changes— 移除watch_changes监听器。
高级(1)
run_lua— 在 Aseprite 中运行任意 Lua 并返回结果(高级逃生通道,相当于在本地执行代码)。
资源
无需调用工具即可读取编辑器状态:
aseprite://sprite/active— 当前文档的尺寸、颜色模式、图层/帧/标签名称aseprite://palette/active— 当前调色板的十六进制颜色值aseprite://docs— 所有打开的文档,包括未保存/未命名的标签页(实时)aseprite://qa/last— 最近一次qa_sweep/measure_padding的结果aseprite://export/last— 最近一次 Unity 导出的结果(写入的文件 + 精灵清单)aseprite://update— 此服务的版本 + 是否存在更新的版本
提示词(引导式工作流)
通过一次调用串联多个工具,完成艺术创作任务:
unity_qa_gate— 运行可交付版本的 QA 检查,然后导出 Unity 图集 +.metaiso_building_to_spec— 根据占地规格构建 2:1 等距建筑shade_along_ramp— 沿着手动排序的调色板色阶为精灵图添加阴影autoslice_to_unity— 将多帧精灵图转换为可导入 Unity 的图集 + 预切片.metaconcept_to_placeholder— 将外部概念图转换为边距正确、颜色符合调色板的占位图tileset_and_map— 根据地形规格制作图块集、布局地图并导出图块条live_review_loop— 等待艺术家完成润色,重新执行 QA,并在编辑器中询问是否可以交付
局限性(如实说明)
- 无头调用会启动独立的 Aseprite 进程——编辑器会话状态(选区、视图、对称设置)不会在不同的无头调用之间保留。像素、图层、帧、调色板、瓦片地图、元数据都会保留(它们都在文件中)。
- 交互式工具需要运行中的编辑器——在
headless模式下,对话框、点选、监视和视口控制都会干净地报错。 - 动画
.gif导出仅支持无头模式。 在运行中的编辑器中保存.gif会打开 Aseprite 的 GIF 选项对话框,在关闭对话框前,桥接程序会一直被阻塞。在运行中的编辑器里,请使用export_spritesheet导出条带图,或导出逐帧 PNG;本 README 中的动画 GIF 都是从相同文件以无头模式导出的。 - Windows 是主要的开发平台。 CI 会在 Linux/macOS/Windows 上运行单元测试和线路验证测试套件,但 CI 没有 Aseprite 二进制文件——所有涉及真实 Aseprite 的操作(无头批处理或运行中的桥接程序)都在 Windows 上手动测试。请将 mac/linux 视为预计可用,而非已验证可用。
run_lua按设计会执行本地代码(这是应急出口)。中继仅绑定到127.0.0.1。请阅读SECURITY.md。- 不生成生成式艺术。 此服务使用确定性图元绘制指定内容;审美由艺术家决定。
验证功能
python tests/smoke_headless.py 会针对一个临时精灵图,在进程内调用每个工具(以及资源和提示词)。python -m pytest 会运行单元测试套件,以及线路验证测试;后者通过真实的 MCP 客户端会话测试结构化输出——这正是用户实际接触的边界(请先运行 pip install -e ".[dev]")。README 中的工具列表由代码生成(python scripts/gen_docs.py),如果列表出现偏差,CI 会失败。
更新日志与发行版
请参阅 CHANGELOG.md——每个发行版也会作为 GitHub Release 发布,并附上相同的说明。版本遵循 semver(1.0 之前:次版本号递增可能会改变工具行为,修订版本号递增则用于修复问题)。
关于
由 Kyle Ocheltree(OakTree Games)独自开发,用于真实的生产流水线——Unity 导出、填充 QA 和等距视角工具,都是因为等距视角工厂游戏 Cosmic Scale 需要这些功能而开发的。采用 AI 原生工作流开发:AI 协助编写代码;每个工具都会经过审查、针对真实编辑器进行测试,并经过审慎发布。
贡献
欢迎提交问题和 PR——请参阅 CONTRIBUTING.md。提交前请运行 ruff check .、pytest 和 python tests/smoke_headless.py。
许可证
MIT——请参阅 LICENSE。© 2026 Kyle Ocheltree / OakTree Games。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。







