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.

PyPI 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.2.0.tar.gz (29.4 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.2.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl (480.0 kB view details)

Uploaded PyPymusllinux: musl 1.2+ x86-64

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

Uploaded PyPymusllinux: musl 1.2+ ARM64

okmain-0.2.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.2.0-cp314-cp314t-musllinux_1_2_aarch64.whl (439.2 kB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ ARM64

okmain-0.2.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.2.0-cp313-cp313t-musllinux_1_2_aarch64.whl (439.4 kB view details)

Uploaded CPython 3.13tmusllinux: musl 1.2+ ARM64

okmain-0.2.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.2.0-cp312-abi3-musllinux_1_2_aarch64.whl (439.4 kB view details)

Uploaded CPython 3.12+musllinux: musl 1.2+ ARM64

okmain-0.2.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.2.0-cp312-abi3-macosx_11_0_arm64.whl (240.4 kB view details)

Uploaded CPython 3.12+macOS 11.0+ ARM64

okmain-0.2.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.2.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.2.0.tar.gz.

File metadata

  • Download URL: okmain-0.2.0.tar.gz
  • Upload date:
  • Size: 29.4 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.2.0.tar.gz
Algorithm Hash digest
SHA256 28407d93c61b34ad585115cfcc2052c8859b3e4a6386f3ab7992d7668b496665
MD5 a928907f5683443b6f19b9c771d65fb7
BLAKE2b-256 4b3ffe516f9dd3505020dd4d5fc2b781f7558b05988d56d70c93e1cbbc455aa2

See more details on using hashes here.

File details

Details for the file okmain-0.2.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl.

File metadata

  • Download URL: okmain-0.2.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.2.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 4807671e88778c58d93ad0a6c8e013e2a6dac8c4c70c044f3b3d40135b155b0b
MD5 b33ed39ee46555b1f7a3ffad93a5d734
BLAKE2b-256 601894b44b17da126a092be3b8555366dbaeb6971caeab27294ba950cd58d5fa

See more details on using hashes here.

File details

Details for the file okmain-0.2.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl.

File metadata

  • Download URL: okmain-0.2.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.2.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 d6ff85518b470bba7f0775331f357c4037deaf4dfd6e60ccce2d6ec8a6fdd820
MD5 e7ba925a541ed3dcabc2173f37b2ac07
BLAKE2b-256 d007ee927f5ea422e5842caf2854a8887f03f19d32a09c62301e45761e2db7bf

See more details on using hashes here.

File details

Details for the file okmain-0.2.0-cp314-cp314t-musllinux_1_2_x86_64.whl.

File metadata

  • Download URL: okmain-0.2.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.2.0-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 6ba7a8e2a232a1fb23298f698121a89fa53671947a4ebef50cb4c141b06df8ff
MD5 5bd3df5898c8907291501f015a2673a7
BLAKE2b-256 f2664f8eb4fffad85b85768b20b17a1cdb02666012cb73a7cbefa4f6b55820b4

See more details on using hashes here.

File details

Details for the file okmain-0.2.0-cp314-cp314t-musllinux_1_2_aarch64.whl.

File metadata

  • Download URL: okmain-0.2.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.2.0-cp314-cp314t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 13b17dc30775043f41c712212c8657df262632f19fe390aa428e3823bbb9ef32
MD5 b8bb825d088841bab9d643d8532ee816
BLAKE2b-256 cb6449e576b7d8f62ad885fbaa36b06f222d23138e5da83f1ec4da4bdb12b187

See more details on using hashes here.

File details

Details for the file okmain-0.2.0-cp313-cp313t-musllinux_1_2_x86_64.whl.

File metadata

  • Download URL: okmain-0.2.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.2.0-cp313-cp313t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 9fbebe5c3b4976ec56fa78a8e49b3808099b6dff93960da69c59e03c42edd19a
MD5 0ee18298a27d10451171b1aa83b1c3ac
BLAKE2b-256 ac274ed63388bb38566dca1fed9fdc94c60bdd857a22999daab6c6eeda4beec0

See more details on using hashes here.

File details

Details for the file okmain-0.2.0-cp313-cp313t-musllinux_1_2_aarch64.whl.

File metadata

  • Download URL: okmain-0.2.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.2.0-cp313-cp313t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 c6305c1582f06acc0f239837f51dff0b45f2c9b39fb7e78875f46f30d169a6cc
MD5 015cd8b183cee25e2fbb4117df4034eb
BLAKE2b-256 acc34b4d86984cc920821e3177e4263afdfcc4df2440925337c34566c6a576a4

See more details on using hashes here.

File details

Details for the file okmain-0.2.0-cp312-abi3-musllinux_1_2_x86_64.whl.

File metadata

  • Download URL: okmain-0.2.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.2.0-cp312-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 0235ed747f9c29595417aebd5bf02ac70f5692327a506327b43d14e1ad66aafc
MD5 e7aa21f228cd39a015c7ac9dc495084b
BLAKE2b-256 e370b25142998cffd7625f4b8649362180273e491bccdf8e39dd1cb60115588c

See more details on using hashes here.

File details

Details for the file okmain-0.2.0-cp312-abi3-musllinux_1_2_aarch64.whl.

File metadata

  • Download URL: okmain-0.2.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.2.0-cp312-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 54de1b246ebd5baf7a4b1cb80955d7ac5199a6aa4e5a559e12e2ee1129fcbb69
MD5 b083c4dbc9f7707eb06dc76e43e0408e
BLAKE2b-256 8a9f616db873c76a73fc4c9e61f3cd531eb7461f3a4cf22b63a5578797039589

See more details on using hashes here.

File details

Details for the file okmain-0.2.0-cp312-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

  • Download URL: okmain-0.2.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.2.0-cp312-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 a6925a624d55104c98960aafdbbff7cf20175fd459107c8afa1527e46dd3fee9
MD5 c0bb8786ad232b48401577b93f5cb428
BLAKE2b-256 b3fc3d0afb00d10bde2cc4e77bfa7540c00f94a5019899dff7a34a359cfe05d2

See more details on using hashes here.

File details

Details for the file okmain-0.2.0-cp312-abi3-macosx_11_0_arm64.whl.

File metadata

  • Download URL: okmain-0.2.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.2.0-cp312-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b2abea9530344f11491c1913b58988838ae9a2954cc1048bf3221dcd80d55268
MD5 4b422521d764a4a1e73dd5c3394b2d4e
BLAKE2b-256 e13cd54648d6a05e9f621c3f1c1b18bcba3fa772d7284c2f621a321ce753833b

See more details on using hashes here.

File details

Details for the file okmain-0.2.0-cp312-abi3-macosx_10_12_x86_64.whl.

File metadata

  • Download URL: okmain-0.2.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.2.0-cp312-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 e93950d44486f65b027e9bce056555ce05ff45bf9250457229d7dd36ded02ad7
MD5 e3abc3119e9bf89f5c05c685c97b4739
BLAKE2b-256 6e0a61e09ab8a8923d955141e8f6a020a2cf2afb6ed9adf0da826d2c4333a31d

See more details on using hashes here.

File details

Details for the file okmain-0.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

  • Download URL: okmain-0.2.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.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2d4752ba76257ad40a622222f97666256cdc772f156f68e5637b69d9119a05af
MD5 59dda390e4caef1a41e0d836caa4f5e9
BLAKE2b-256 f53ab3f873426f3a5b400eb931dc28815d170c0efa4c1bb9c0945a9b4cc55755

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