Offline, headless pixel-art editing through a CLI and Model Context Protocol server.
Atelier stores layered, animated documents locally and gives shell automation and MCP clients the same 25-tool editing surface. Drawing and region operations, palette constraints, visual analysis, checkpoints, replayable journals, and spritesheet, GIF, and APNG export. No account, API key, outbound service, or graphical environment.
It is also an experiment — see below.
There are no releases yet — no published binaries, archives, or container images. Clone the repository and build it:
git clone https://github.com/marmikshah/atelier.git
cd atelier
cargo install --locked --path crates/atelierThat puts atelier on your PATH. make release builds
target/release/atelier in place instead.
Linux x86_64 and aarch64 are the supported targets, and the daemon needs
systemd --user. macOS builds and passes the test suite, but has no daemon.
Windows does not build: the document store's atomicity and the daemon both
depend on Linux. The container is the route on Windows,
and a convenient one on macOS.
Releases will come back when the editor has earned them. Until then, pull and
build — the gate is make check.
atelier call doc_new '{"name":"cat","width":32,"height":32}'
# {"doc_id":"550e8400-e29b-41d4-a716-446655440000", ...} — use the returned id
atelier call doc_draw '{"doc_id":"550e8400-…","layer":0,"frame":0,"op":"fill_cel","color":[224,160,80]}'
atelier call doc_look '{"doc_id":"550e8400-…","out_path":"/tmp/cat.png"}'That's the whole setup. No server, no daemon, no registration.
doc_new → paint → doc_look → fix → doc_export
| Area | Included functionality |
|---|---|
| Document model | Layers, frames, animation tags, locked palettes, explicit checkpoints, persisted revisions |
| Editing | Pixel primitives, region operations, effects, grids, palette generation and snapping |
| Inspection | Rendered previews, region dumps, silhouettes, component analysis, frame diffs, seam reports, animation audits, critique |
| Output | Spritesheets with JSON metadata, GIF, APNG, PNG previews |
| Reproducibility | Versioned per-document JSONL journals, atomic deterministic replay |
| Recovery | Bounded checkpoints, deterministic portable document archives |
| Deployment | Ubuntu binary, static Alpine container, CLI, stdio MCP, authenticated HTTP MCP |
Nothing is implicit. doc_new returns a UUID, and every later call carries
it. Layer and frame targets are explicit too. There is no active document, no
inferred name, no transport default.
One dispatch path. CLI, replay, stdio, and HTTP execute the same payload and log the same line. Anything you can do in a shell, an agent can do over MCP.
Art rebuilds itself. Every document journals the deterministic calls that
made it, so atelier replay <id> reproduces the same pixels anywhere. Nothing
to enable.
Agents can see. doc_look returns rendered pixels, and the analysis tools
return structured critique — so the loop is draw, look, fix, rather than draw
and hope.
For clients that only speak MCP, the same binary is the server:
atelier install # shared background daemon on 127.0.0.1:8765/mcpOr configure a stdio server whose command is simply atelier. Authentication,
Docker, remote access, and troubleshooting are in docs/mcp.md.
- docs/cli.md — the complete CLI, journals, stores, backups, skills
- docs/mcp.md — MCP daemon, auth, Docker, troubleshooting
- docs/tools.md — the complete 25-tool reference
- showcase/ — the same ten briefs drawn by seven models
- CHANGELOG.md — what changed, and when
Atelier began as one question: can agents, using only tool calls, make art that's genuinely good enough to ship in a game?
100% of this code was written by AI. Not assisted — written. Opus did the heavy lifting early on, with GPT 5.6 Sol and Fable 5 carrying the newer work, and the code has been through several rounds of AI review and revision. I have not written a single line. My part was direction: holding the project to the same standards I use where I do still write the code.
It's an ongoing experiment, and I'll keep running it against other model families to see how each one holds a brush.
If atelier helps you — as a tool, a reference, or a kick-start on your own game — that makes me genuinely happy. The tokens are already spent; the least they can do is be useful to you too.
Warning
No human has reviewed this code, line by line — not any of it. Tests, static analysis, and locked dependencies all pass, and none of that is the same as a person having read it. Assume bugs and security issues I haven't caught, and breaking changes at any commit. Review the code and isolate important data before using Atelier in a production workflow.
Note
There are no releases, and master is the version. No binaries, no
archives, no container images, no tags — building from a clone is the only
way to run Atelier, which suits a project with one user and maybe two.
Releases arrive when the editor has earned them.
Thank you for wanting to — it means something that you got this far into the project. Atelier is closed to outside pull requests, though, for the reason above: your change would land in a codebase nobody has read closely enough to review it against, me included. CONTRIBUTING.md has the longer version.
Bug reports and questions are very welcome as issues. Vulnerabilities go through SECURITY.md, privately. And it's MIT licensed — fork it and take it wherever you like, no permission needed.
MIT © Marmik Shah
