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.4.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.4.0-cp312-abi3-musllinux_1_2_x86_64.whl (478.8 kB view details)

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

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

Uploaded CPython 3.12+musllinux: musl 1.2+ ARM64

okmain-0.4.0-cp312-abi3-manylinux_2_28_x86_64.whl (267.8 kB view details)

Uploaded CPython 3.12+manylinux: glibc 2.28+ x86-64

okmain-0.4.0-cp312-abi3-manylinux_2_28_aarch64.whl (262.1 kB view details)

Uploaded CPython 3.12+manylinux: glibc 2.28+ ARM64

okmain-0.4.0-cp312-abi3-macosx_11_0_arm64.whl (240.3 kB view details)

Uploaded CPython 3.12+macOS 11.0+ ARM64

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

Uploaded CPython 3.12+macOS 10.12+ x86-64

File details

Details for the file okmain-0.4.0.tar.gz.

File metadata

  • Download URL: okmain-0.4.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.4.0.tar.gz
Algorithm Hash digest
SHA256 c21e32a4196650768529b8640f29854cb0caa421994e3910e9231790fb80da1e
MD5 66dd7f7f7896b222582707eddf128bf0
BLAKE2b-256 8a02f2ff10d923f6f3e7f79291bbfa85ec3b886ac4c5296bf9fda527ef452dc1

See more details on using hashes here.

File details

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

File metadata

  • Download URL: okmain-0.4.0-cp312-abi3-musllinux_1_2_x86_64.whl
  • Upload date:
  • Size: 478.8 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.4.0-cp312-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 f8d50ae6990bcb51957bfb007d1fa956efac445b0538064c77b6077989a5ebe1
MD5 c73a5a4cc54f65a04e7a2a9690b2559c
BLAKE2b-256 c97de4a48c27f950ae83d80ea38502cbc7a4ad2c613a6aa3fac1a8f5260ebbbf

See more details on using hashes here.

File details

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

File metadata

  • Download URL: okmain-0.4.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.4.0-cp312-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 4f5296627779dd5f3117621928c33af50af648e4a34a398ec5076a48218e1cef
MD5 955dbfff86d4485ca24ca7ec48804505
BLAKE2b-256 04e9b853f17c68c55d46c11572f92ef3a308d41cb576ced574ae237e86d855c6

See more details on using hashes here.

File details

Details for the file okmain-0.4.0-cp312-abi3-manylinux_2_28_x86_64.whl.

File metadata

  • Download URL: okmain-0.4.0-cp312-abi3-manylinux_2_28_x86_64.whl
  • Upload date:
  • Size: 267.8 kB
  • Tags: CPython 3.12+, manylinux: glibc 2.28+ 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.4.0-cp312-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3e12e426887f154d1f9d09334b3bf794694297c99825f9b47241a2624f40ca31
MD5 a7e3d0400a010ab6c2ede896028c1842
BLAKE2b-256 b34d37425137763c11d84be8e51c7ede5e48a41ad4a310f4c5fb9255f8b1ac60

See more details on using hashes here.

File details

Details for the file okmain-0.4.0-cp312-abi3-manylinux_2_28_aarch64.whl.

File metadata

  • Download URL: okmain-0.4.0-cp312-abi3-manylinux_2_28_aarch64.whl
  • Upload date:
  • Size: 262.1 kB
  • Tags: CPython 3.12+, manylinux: glibc 2.28+ 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.4.0-cp312-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 1f3b24a361f8fe981e75b8de593b402b1cbf22c1175b941d9db745e1a416eab4
MD5 83b09f3ab733b36fc7dbbf02bd7de5fe
BLAKE2b-256 eebb0145c80fe6e76b42f74d68cdc43d004425b59771344312680e3a22465367

See more details on using hashes here.

File details

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

File metadata

  • Download URL: okmain-0.4.0-cp312-abi3-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 240.3 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.4.0-cp312-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 377b56918b77e77eec93bcdc1ef7b675155b79fa24154a9a655cebf9197742d0
MD5 c510a298e1f5cec4c1536fb5edf123bc
BLAKE2b-256 5fe3fd8abae3aa2c51a7447ef53a19cb05f6236dcb35a5184acc190220b5539b

See more details on using hashes here.

File details

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

File metadata

  • Download URL: okmain-0.4.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.4.0-cp312-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 7159d52886eb2f196c542c03cc1976f1936416bbc594d1b1078a6c2018bb8632
MD5 dcb004cfe2f5c452eb3b1d6fc3dd9686
BLAKE2b-256 bbad275ac138575e672672f4339170f016ad259de80fb4da4d4cfdf53c62629f

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