OK main colors of your image
Project description
Okmain: OK main colors (Python edition)
okmain finds the main colors of an image and makes sure they look good.
Docs • PyPI Package • GitHub • Rust crate
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:
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
- 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 (see optional kwargs on
colors)
Read more about Okmain in the blog post.
Usage
Install the package:
uv add okmain
Call okmain.colors() on a PIL/Pillow image to get back a list of RGB colors:
import okmain
from PIL import Image
test_image = Image.open("test_image.jpeg")
dominant_colors = okmain.colors(test_image)
# dominant_colors are [okmain.RGB(r=..., g=..., b=...), ...)
css_hex = dominant_colors[0].to_hex()
# css_hex is a string like "#AABBCC"
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file okmain-0.3.0.tar.gz.
File metadata
- Download URL: okmain-0.3.0.tar.gz
- Upload date:
- Size: 29.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.10.9 {"installer":{"name":"uv","version":"0.10.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
898c464aa4c3cc03f0122c7f53b53bae3522bae783b9436e7c8d63d831fdb9eb
|
|
| MD5 |
20677d4f0ec33eed2e003fbdad6e01a5
|
|
| BLAKE2b-256 |
3714291fe6deea0c52e0455192f5b1b96442ee12b325daf80dc9e2e1a3c78d66
|
File details
Details for the file okmain-0.3.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: okmain-0.3.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 480.0 kB
- Tags: PyPy, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.10.9 {"installer":{"name":"uv","version":"0.10.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a3f64fb547726322060ce5cdd193d8e2e4f9285be07fc21505380fc9a8c6d984
|
|
| MD5 |
24ef984058e1e1726f90883256ff748b
|
|
| BLAKE2b-256 |
2a555f7b49dd956da0c25a2a523063874548f8babeb239d472a98980d97988e1
|
File details
Details for the file okmain-0.3.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl.
File metadata
- Download URL: okmain-0.3.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl
- Upload date:
- Size: 440.7 kB
- Tags: PyPy, musllinux: musl 1.2+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.10.9 {"installer":{"name":"uv","version":"0.10.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
66e6a52b4aec0f8e2e0a0dc01de171064746f8a5ba7e92eb9393e4ba504c417f
|
|
| MD5 |
9ad060a8e47b80cb0a626d7dce36c5fb
|
|
| BLAKE2b-256 |
e1eb47986daeb24cdf9220c92a06a90bda04a98f03068e8bf947896206b8a8dd
|
File details
Details for the file okmain-0.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: okmain-0.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 478.6 kB
- Tags: CPython 3.14t, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.10.9 {"installer":{"name":"uv","version":"0.10.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2b0b187bf6a6147eda785bbd3bd5f2e9210eca8fc30823e61353cc5c28ad0e5f
|
|
| MD5 |
5eddebd65043cede6f0c483297e7bb39
|
|
| BLAKE2b-256 |
14294f665e752100b1108a3913fc20d3204aa2993d9f17218f3382e6e5776c18
|
File details
Details for the file okmain-0.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl.
File metadata
- Download URL: okmain-0.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl
- Upload date:
- Size: 439.2 kB
- Tags: CPython 3.14t, musllinux: musl 1.2+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.10.9 {"installer":{"name":"uv","version":"0.10.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1c43f3faed18f58199654ccd9c721209e419d63f3a032248f36f058187203d88
|
|
| MD5 |
9ceb054466056cb0f0d38b91410c576a
|
|
| BLAKE2b-256 |
118ddb1fae3edafd1c79c4188e83bf2cde6e412773c448b30fbd4666c2175471
|
File details
Details for the file okmain-0.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: okmain-0.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 478.7 kB
- Tags: CPython 3.13t, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.10.9 {"installer":{"name":"uv","version":"0.10.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3df50ade106c65d8be9d39a11130d48eea9b81a9e726346ab12ee3094ee718ed
|
|
| MD5 |
f24206b3dab50bd123ab57bd0fcef2b3
|
|
| BLAKE2b-256 |
d421dacc41bbe6426d1cbe37c6f7075f424e3ebe7482656f20b886842c666736
|
File details
Details for the file okmain-0.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl.
File metadata
- Download URL: okmain-0.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl
- Upload date:
- Size: 439.4 kB
- Tags: CPython 3.13t, musllinux: musl 1.2+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.10.9 {"installer":{"name":"uv","version":"0.10.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3c26d5c3d80549ecaa45340371e5c5b9f823d59c6809ddca3172d78be41a9188
|
|
| MD5 |
bba13acb30cda6b0cc96bce5ed263523
|
|
| BLAKE2b-256 |
0f78fa5467bda822882b2efc24dfab1d53263c0528a56da81ccf8bf4b52f0557
|
File details
Details for the file okmain-0.3.0-cp312-abi3-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: okmain-0.3.0-cp312-abi3-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 478.7 kB
- Tags: CPython 3.12+, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.10.9 {"installer":{"name":"uv","version":"0.10.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cdb1e2366e5a68b6f010b4d2e18404c4987b83406618690318ae0d482145ba2d
|
|
| MD5 |
8af9b11859665c3b892d8cb527417196
|
|
| BLAKE2b-256 |
1d243df71bfb171512e9fbed3e572e3d2de652832a51752046f1fa65fd6d20a4
|
File details
Details for the file okmain-0.3.0-cp312-abi3-musllinux_1_2_aarch64.whl.
File metadata
- Download URL: okmain-0.3.0-cp312-abi3-musllinux_1_2_aarch64.whl
- Upload date:
- Size: 439.4 kB
- Tags: CPython 3.12+, musllinux: musl 1.2+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.10.9 {"installer":{"name":"uv","version":"0.10.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
befc209d0f8cacab408ada0c599e198f777d9b9d3f9fa96aacde30c4a55b34cb
|
|
| MD5 |
3949585f5d5584fa1e5fcb2a6bf12cbe
|
|
| BLAKE2b-256 |
a347fae38bf6ae0fa2eb0a5e219058c5b3be973192dec43dd7c85e01addf757f
|
File details
Details for the file okmain-0.3.0-cp312-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: okmain-0.3.0-cp312-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 262.3 kB
- Tags: CPython 3.12+, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.10.9 {"installer":{"name":"uv","version":"0.10.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b958ac10da283b5a5ffea233369e27fce8749876f3cde1a542b08f872a6f6e01
|
|
| MD5 |
a92f6cffacbfcbd4efc352aa06d8bf93
|
|
| BLAKE2b-256 |
ad51143304e4c1e5f1e1c3fc8e2c1ac22971ccb6e26504b4d7985641c72c1302
|
File details
Details for the file okmain-0.3.0-cp312-abi3-macosx_11_0_arm64.whl.
File metadata
- Download URL: okmain-0.3.0-cp312-abi3-macosx_11_0_arm64.whl
- Upload date:
- Size: 240.4 kB
- Tags: CPython 3.12+, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.10.9 {"installer":{"name":"uv","version":"0.10.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1585819b6194eb4a6470f797d09404f453c4e0db8f06fbe9fa98e0814d1c8697
|
|
| MD5 |
468a573dde2a729dcac61af994350e28
|
|
| BLAKE2b-256 |
4853ed5a9dd315612978757115b7542af380917a08086ab55e9b61194644a623
|
File details
Details for the file okmain-0.3.0-cp312-abi3-macosx_10_12_x86_64.whl.
File metadata
- Download URL: okmain-0.3.0-cp312-abi3-macosx_10_12_x86_64.whl
- Upload date:
- Size: 249.8 kB
- Tags: CPython 3.12+, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.10.9 {"installer":{"name":"uv","version":"0.10.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7056bdf505f3a53c891bf612983bdc63d7a9edfc4d00b89b1af67bba4267ce1e
|
|
| MD5 |
952bc99ee0337b6a7ce60c799f5a5d71
|
|
| BLAKE2b-256 |
a32ea108ee01b88acd53ed39ec39cf1b4ffaddbc124ffc83634181b9f05eea89
|
File details
Details for the file okmain-0.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: okmain-0.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 267.5 kB
- Tags: CPython 3.8, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.10.9 {"installer":{"name":"uv","version":"0.10.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5bc269dbef032add74846fc04dba43eddd07d497354e536ac30572b2c1e2a17f
|
|
| MD5 |
08a933066ba7b80c8c0544ebc04fac01
|
|
| BLAKE2b-256 |
7f1e93e61f6dfb5efa0ae4846e038953071632ac5f504cd3fa9f560c26c79295
|