Differences

Comparison with Other Libraries

Modern Colorthief differs from similar libraries in several key ways.

vs fast-colorthief

Feature

Detail

Architecture Support

Broader support via PyO3 (vs pybind11)

NumPy Dependency

No hard dependency on NumPy

Codebase

Simpler, more maintainable Rust code vs C++ codebase

Build Tooling

Automated via Maturin and GitHub Actions

Package Size

500-700 KB vs 52-60 KB for fast-colorthief

vs color-thief-py

Feature

Detail

Execution Speed

Nearly 100x faster

Pillow Dependency

No hard dependency on Pillow

Python Compatibility

Fully compatible with modern Python versions

Achieving Parity with colorthief (Python)

If you need output that matches the original colorthief library:

  1. Load the image with Pillow.

  2. Save the loaded image to a BytesIO object.

  3. Pass the BytesIO object to modern_colorthief.

 1import io
 2from PIL import Image
 3import modern_colorthief
 4
 5path = "photo.jpg"
 6img = Image.open(path, mode="r")
 7
 8image_bytes = io.BytesIO()
 9img.save(image_bytes, format="PNG")
10image_bytes.seek(0)
11
12dominant_color = modern_colorthief.get_color(image_bytes)
13dominant_palette = modern_colorthief.get_palette(image_bytes)

Achieving Parity with fast-colorthief (C++)

The same approach works for matching fast-colorthief output:

 1import io
 2from PIL import Image
 3import modern_colorthief
 4
 5path = "photo.jpg"
 6img = Image.open(path, mode="r")
 7
 8image_bytes = io.BytesIO()
 9img.save(image_bytes, format="PNG")
10image_bytes.seek(0)
11
12dominant_color = modern_colorthief.get_color(image_bytes)
13dominant_palette = modern_colorthief.get_palette(image_bytes)

Note

The parity technique works because Pillow normalizes pixel data across image formats, ensuring consistent input to the quantization algorithm.

See also

API Differences – Detailed output comparison with color-thief.

Benchmarks – Speed comparison across implementations.