Skip to content

si14/okmain

Repository files navigation

Okmain: OK main colors

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:

Comparison of colors extracted via 1x1 resize and Okmain

Technical highlights

  • 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.

Packages

okmain is available in:

LLM disclosure

LLMs are used extensively in the development of Okmain, but all generated code is reviewed and rewritten by a human.

About

Resources

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT

Stars

Watchers

Forks

Packages

 
 
 

Contributors