Skip to main content

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.

DocsPyPI PackageGitHubRust 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:

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

okmain-0.3.0.tar.gz (29.2 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

okmain-0.3.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl (480.0 kB view details)

Uploaded PyPymusllinux: musl 1.2+ x86-64

okmain-0.3.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl (440.7 kB view details)

Uploaded PyPymusllinux: musl 1.2+ ARM64

okmain-0.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl (478.6 kB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ x86-64

okmain-0.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl (439.2 kB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ ARM64

okmain-0.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl (478.7 kB view details)

Uploaded CPython 3.13tmusllinux: musl 1.2+ x86-64

okmain-0.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl (439.4 kB view details)

Uploaded CPython 3.13tmusllinux: musl 1.2+ ARM64

okmain-0.3.0-cp312-abi3-musllinux_1_2_x86_64.whl (478.7 kB view details)

Uploaded CPython 3.12+musllinux: musl 1.2+ x86-64

okmain-0.3.0-cp312-abi3-musllinux_1_2_aarch64.whl (439.4 kB view details)

Uploaded CPython 3.12+musllinux: musl 1.2+ ARM64

okmain-0.3.0-cp312-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (262.3 kB view details)

Uploaded CPython 3.12+manylinux: glibc 2.17+ ARM64

okmain-0.3.0-cp312-abi3-macosx_11_0_arm64.whl (240.4 kB view details)

Uploaded CPython 3.12+macOS 11.0+ ARM64

okmain-0.3.0-cp312-abi3-macosx_10_12_x86_64.whl (249.8 kB view details)

Uploaded CPython 3.12+macOS 10.12+ x86-64

okmain-0.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (267.5 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

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

Hashes for okmain-0.3.0.tar.gz
Algorithm Hash digest
SHA256 898c464aa4c3cc03f0122c7f53b53bae3522bae783b9436e7c8d63d831fdb9eb
MD5 20677d4f0ec33eed2e003fbdad6e01a5
BLAKE2b-256 3714291fe6deea0c52e0455192f5b1b96442ee12b325daf80dc9e2e1a3c78d66

See more details on using hashes here.

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

Hashes for okmain-0.3.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 a3f64fb547726322060ce5cdd193d8e2e4f9285be07fc21505380fc9a8c6d984
MD5 24ef984058e1e1726f90883256ff748b
BLAKE2b-256 2a555f7b49dd956da0c25a2a523063874548f8babeb239d472a98980d97988e1

See more details on using hashes here.

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

Hashes for okmain-0.3.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 66e6a52b4aec0f8e2e0a0dc01de171064746f8a5ba7e92eb9393e4ba504c417f
MD5 9ad060a8e47b80cb0a626d7dce36c5fb
BLAKE2b-256 e1eb47986daeb24cdf9220c92a06a90bda04a98f03068e8bf947896206b8a8dd

See more details on using hashes here.

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

Hashes for okmain-0.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 2b0b187bf6a6147eda785bbd3bd5f2e9210eca8fc30823e61353cc5c28ad0e5f
MD5 5eddebd65043cede6f0c483297e7bb39
BLAKE2b-256 14294f665e752100b1108a3913fc20d3204aa2993d9f17218f3382e6e5776c18

See more details on using hashes here.

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

Hashes for okmain-0.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 1c43f3faed18f58199654ccd9c721209e419d63f3a032248f36f058187203d88
MD5 9ceb054466056cb0f0d38b91410c576a
BLAKE2b-256 118ddb1fae3edafd1c79c4188e83bf2cde6e412773c448b30fbd4666c2175471

See more details on using hashes here.

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

Hashes for okmain-0.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 3df50ade106c65d8be9d39a11130d48eea9b81a9e726346ab12ee3094ee718ed
MD5 f24206b3dab50bd123ab57bd0fcef2b3
BLAKE2b-256 d421dacc41bbe6426d1cbe37c6f7075f424e3ebe7482656f20b886842c666736

See more details on using hashes here.

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

Hashes for okmain-0.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 3c26d5c3d80549ecaa45340371e5c5b9f823d59c6809ddca3172d78be41a9188
MD5 bba13acb30cda6b0cc96bce5ed263523
BLAKE2b-256 0f78fa5467bda822882b2efc24dfab1d53263c0528a56da81ccf8bf4b52f0557

See more details on using hashes here.

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

Hashes for okmain-0.3.0-cp312-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 cdb1e2366e5a68b6f010b4d2e18404c4987b83406618690318ae0d482145ba2d
MD5 8af9b11859665c3b892d8cb527417196
BLAKE2b-256 1d243df71bfb171512e9fbed3e572e3d2de652832a51752046f1fa65fd6d20a4

See more details on using hashes here.

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

Hashes for okmain-0.3.0-cp312-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 befc209d0f8cacab408ada0c599e198f777d9b9d3f9fa96aacde30c4a55b34cb
MD5 3949585f5d5584fa1e5fcb2a6bf12cbe
BLAKE2b-256 a347fae38bf6ae0fa2eb0a5e219058c5b3be973192dec43dd7c85e01addf757f

See more details on using hashes here.

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

Hashes for okmain-0.3.0-cp312-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 b958ac10da283b5a5ffea233369e27fce8749876f3cde1a542b08f872a6f6e01
MD5 a92f6cffacbfcbd4efc352aa06d8bf93
BLAKE2b-256 ad51143304e4c1e5f1e1c3fc8e2c1ac22971ccb6e26504b4d7985641c72c1302

See more details on using hashes here.

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

Hashes for okmain-0.3.0-cp312-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1585819b6194eb4a6470f797d09404f453c4e0db8f06fbe9fa98e0814d1c8697
MD5 468a573dde2a729dcac61af994350e28
BLAKE2b-256 4853ed5a9dd315612978757115b7542af380917a08086ab55e9b61194644a623

See more details on using hashes here.

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

Hashes for okmain-0.3.0-cp312-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 7056bdf505f3a53c891bf612983bdc63d7a9edfc4d00b89b1af67bba4267ce1e
MD5 952bc99ee0337b6a7ce60c799f5a5d71
BLAKE2b-256 a32ea108ee01b88acd53ed39ec39cf1b4ffaddbc124ffc83634181b9f05eea89

See more details on using hashes here.

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

Hashes for okmain-0.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5bc269dbef032add74846fc04dba43eddd07d497354e536ac30572b2c1e2a17f
MD5 08a933066ba7b80c8c0544ebc04fac01
BLAKE2b-256 7f1e93e61f6dfb5efa0ae4846e038953071632ac5f504cd3fa9f560c26c79295

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page