I built LenkRaster to give my own pixel art a second read before I call a sprite finished. It runs on your machine and looks at your files. What comes back is a structured finding with the measurement attached, so you get a specific thing to go and check. It does not draw for you, and it does not sign off on your work.
View on GitHub ▸ See the examples
It scores a PNG sprite against pixel-craft checks and hands back structured findings with retry hints attached. Every finding tells you what it measured. That was the part I cared about most, because a number you can see is a number you can argue with.
It reports palette structure and contrast, and it builds hue-shifted color ramps in OKLCH. I treat what comes back as a starting point for a readable palette. Which colors are correct for your game is taste, and your taste is not something I want to automate.
It maps your artwork onto a controlled palette, with ordered dithering available when you want it. Your original file stays exactly where it was, so you can put the two side by side and keep whichever one you actually prefer.
It measures frame-to-frame motion, timing and loop consistency with rendered-pixel math, which is how it surfaces the frames worth another look. Whether your cycle reads correctly to a person watching it is still your call, and it always will be.
An optional bridge to the Aseprite command line reads .ase and .aseprite files directly. I kept it optional on purpose, so nothing in the toolkit breaks for anyone who does not have Aseprite installed.
You can use it as a Python API, from the command line, or through a local stdio MCP server, which is what lets an agent run the same bounded checks I run by hand. Install it with pip install lenkraster on Python 3.10 or newer.
Three views out of the repository. Every image below is a real output. I measured the numbers in the captions from the files themselves rather than copying them out of the README.
A second pass over your sprite before you call it done, with the reasoning shown so that you can disagree with it on the evidence.
Consistent palettes and readable sprites across an asset folder that keeps growing, all of it checkable from the command line.
A Python API and a documented command line, so that these checks can sit inside your own pipeline instead of beside it.
A stdio MCP server that lets an agent run the same bounded checks on your own machine, with no key to manage and no network call to trust.
No, it reads art you already have and reports back on it. The one thing it writes is a converted copy, such as a palette-mapped version sitting beside your original. Even that is a starting point for you to judge, not a finished asset.
Nothing leaves your machine, because there is nowhere for it to go. The MCP server speaks over stdio with no network listener and no HTTP transport, and the toolkit itself needs no API key and no account.
You do not, because the Aseprite command-line bridge is optional and only matters when you want to read .ase or .aseprite files directly. Everything on the PNG path needs nothing beyond the install itself.
No, and that is the one guarantee I will make. Outputs are create-only. A generated file lands as a new file rather than on top of the one you handed it, which is why both images further up this page still sit side by side in the repository.
It means a finding is a thing to go and look at, with the measurement attached, and nothing more than that. Passing every check is not approval, and a flagged frame is not proof of a mistake. I keep the judgement with whoever is responsible for the art, which on your project is you.
It is on PyPI. pip install lenkraster gets you the library, the command line tools and the MCP server, on Python 3.10 or newer. The repository carries the current instructions and I would just trust those over this page, since I update the repo first.
The code is MIT licensed, and the repository carries separate notices covering the example assets and the third-party components. Read those before you reuse anything out of the repo itself. The license on a piece of code and the license on an image are two different questions.
LenkRaster is one of the open source tools I build and use in the open. The repository is the source of truth for installation, the Python API, the command line, the MCP server, the security policy and the examples. When this page and the code disagree, the repository wins: github.com/itsryanlenk/lenkraster. Every image on this page comes straight out of that repository. The rest of what I build in the open is over on side projects.