Hi! I’ve been building a small browser tool for pixel-art palettes, and at some point it stopped being a small palette generator and turned into a much bigger project.
The original problem was pretty simple.
There are a lot of palette generators online, but many of them stop at:
pick a color → get a few swatches → copy HEX
That’s useful, but for pixel art I wanted something closer to an actual workflow.
I wanted to see whether the colors worked on pixel art, save good palettes, reuse palettes made by other people, and export them without manually recreating every color in my editor.
So I built OKLCH Pixel Palette.
Why OKLCH?
The generator works around OKLCH/OKLab rather than relying only on HSL.
One thing that always bothered me with HSL is that equal changes in numerical lightness don’t always look like equal changes in perceived brightness.
That becomes noticeable with small pixel-art palettes where every color has to do a specific job.
A shadow, base color and highlight can technically have nicely spaced HSL values while still looking strangely close together.
With OKLCH I can control perceptual lightness more predictably and build color ramps around it.
The generator currently supports palettes from 2 to 9 colors.
It also handles colors that fall outside the normal sRGB gamut by adjusting generated colors while trying to preserve their intended lightness and hue.
The original base color stays unchanged.
There were some funny edge cases too.
Almost-black and almost-white colors quickly break naive formulas because eventually you are asking for a shadow darker than black or a highlight brighter than white.
So those cases needed separate handling.
Color math is surprisingly good at looking perfectly fine until somebody enters something like #010101.
I didn’t want to judge palettes from rectangles
Another thing I wanted from the beginning was a way to see the palette on something closer to actual pixel art.
So the site has pixel-art previews that update with the palette.
Instead of only seeing:
![]()
you can immediately see how the same colors behave when they have to describe an object with shadows, midtones and highlights.
For me this is much more useful than deciding whether a palette is good based only on a row of swatches.
Aseprite export
This is probably the part most relevant to this community.
I didn’t want the workflow to be:
generate palette → copy HEX → add color → copy HEX → add color → repeat
So I added export for Aseprite.
You can generate a palette in the browser, export it and bring it into Aseprite instead of recreating every color manually.
There are other export options as well, including formats for other graphics tools plus PNG, HEX, TXT, JSON and CSS.
The goal is that the palette generator isn’t a dead end. You should be able to take the result and continue working with it.
Then I added accounts
Originally the site was completely local.
Then I made a few palettes I actually liked and realized I wanted to keep them.
So I added accounts and cloud saving.
Then I thought: if I can save my own palettes, why not let people share them?
That eventually became a public gallery.
You can now:
- save your palettes
- give them names
- publish them publicly
- browse palettes made by other users
- like public palettes
- save somebody else’s palette to your own collection
Registration isn’t required just to generate colors.
The account system is mainly there for saving and community features.
The gallery is still new, so I’m interested in seeing what happens when people other than me start filling it with palettes.
I’d like it to eventually become a useful library rather than a collection of random color combinations.
The project also became much bigger than I expected
What started as “I’ll make a small color generator” eventually turned into a Next.js/React/TypeScript project with accounts, public pages, a database, palette collections, likes, exports and a color engine.
I also spent a ridiculous amount of time testing weird color combinations.
At one point I was running the generator through more than a thousand different palette combinations because every time I thought the edge cases were finished, another one appeared.
And once public palette pages and accounts were added, I started getting an entirely different class of bugs compared with the original local tool.
That was probably the point where I realized I wasn’t building a demo anymore.
It’s free and open source
The tool is free to use in the browser and the project is open source.
I’m posting it here because I’m especially interested in feedback from people who actually use Aseprite.
I can test the export myself, but that’s very different from seeing how it fits into someone else’s real workflow.
I’d especially like to know:
- Does the Aseprite export work well for you?
- Are the generated ramps useful for actual pixel art?
- Is there another palette format you would want?
- Would you use the public gallery?
- Is there something annoying about working with palettes in Aseprite that a tool like this could solve?
And if you manage to generate a terrible palette, please send me the settings or base color.
Those examples are genuinely useful because they show me where the generator still needs work.
OKLCH Pixel Palette:
Source code:
Thanks for checking it out ![]()
