okmain finds the main colors of an image and makes sure they look good.
Sometimes you need to show a "dominant" color (or colors) of an image. It can be a background or a placeholder. There are several ways of doing that; a popular quick-and-dirty method is to resize the image to a handful of pixels, or even just one.
However, this method tends to produce muted, dirty-looking colors. Most images have clusters of colors: the dominant colors of an image of a lush green field with a clear sky above it are not a muddy average of blue and green, it's a bright blue and green. Okmain clusters colors explicitly, recovering and ranking main colors while keeping them sharp and clean.
Here's a comparison:
- Color operations in a state-of-the-art perceptually linear color space (Oklab)
- Rust implementation for speed and safety
- Finding main colors of a reasonably sized image takes about 100ms
- Minimal and stable dependencies
- Fast custom K-means color clustering, optimized for auto-vectorization (confirmed with disassembly)
- Position- and visual prominence-based color prioritization (more central and higher Oklab chroma pixels tend to be more important)
- Tunable parameters
Read more about Okmain in the blog post.
okmain is available in:
LLMs are used extensively in the development of Okmain, but all generated code is reviewed and rewritten by a human.