Skip to main content

Ember

Emberify

Apply Ember color palettes to any image.

Palette & Docs · embertheme.com


What it does

Emberify recolors images using the Ember palette — 19 carefully chosen colors spanning warm graphite, coral, gold, olive, sage, steel, rose, and mauve.

emberify photo.png -c ember

Output: photo-ember-colorized.png

Install

The recommended way to install emberify is using pipx

pipx install emberify

# With GPU acceleration (Apple Silicon / NVIDIA):
pipx install 'emberify[gpu]'

Usage

# Auto-generated output: filename-{palette}-colorized.ext
emberify photo.jpg -c ember-light

# Custom output path
emberify photo.jpg -c ember -o output.png

# Adjust recolor strength (0.0 = original, 1.0 = full)
emberify photo.jpg -c ember-light -s 0.7

# Aggressive mode with more clusters for better accuracy
emberify photo.jpg -c ember -m aggressive -k 20

# GPU acceleration (requires aggressive mode)
emberify photo.jpg -c ember -m aggressive --use-gpu

Palettes

Palette Background Type
ember #1c1b19 dark
ember-soft #242320 dark
ember-light #e6dac4 light
ember-lighter #e8e4de light

Modes

Aggressive mode (-m aggressive)

Uses K-means clustering to analyze the image before recoloring.

How it works:

  1. K-means finds the 12 dominant colors in your image (configurable with -k)
  2. Each dominant color is mapped to its nearest Ember palette color (RGB Euclidean distance)
  3. Every pixel is reassigned to its cluster's mapped palette color
  4. Strength controls the blend between original and recolored

Result: Colors group naturally — sky areas stay coherent, skin tones stay unified. Best for photos and complex images.

Fast mode (-m fast)

Direct pixel-by-pixel RGB nearest-color mapping — no clustering, no filters. Each pixel independently maps to the closest Ember palette color using Euclidean distance in RGB space.

How it works:

  1. For each pixel, compute Euclidean distance to all palette colors in RGB space
  2. Replace the pixel with the nearest palette color

Result: Maximum detail preservation — edges, gradients, fine lines stay sharp. Best for anime, illustrations, line art, or when speed matters.

GPU acceleration (--use-gpu)

When --use-gpu is passed, K-means clustering runs on the GPU with smart downsampling — clusters on a 200K-pixel subset, then assigns all pixels vectorized.

Supported backends (auto-detected via pyopencl):

Backend Hardware Package
cuML NVIDIA GPU cuml-cu12
PyTorch MPS Apple Silicon torch
PyTorch CUDA NVIDIA GPU torch
sklearn CPU fallback (always available)

Performance (5304×7952 image, 12 clusters):

Backend Time
CPU (sklearn) ~127s
GPU (Apple MPS) ~8s

Key differences

Aggressive Fast
Algorithm K-means → cluster mapping Direct RGB nearest-color
Speed Slower (clustering pass) Fastest (vectorized)
Accuracy Higher (cluster coherence) Good (per-pixel)
Best for Photos, complex scenes Anime, illustrations, line art
Control -k clusters, -s strength -s strength only
GPU --use-gpu supported CPU only

Showcase

GPU acceleration (high-resolution)

gpu_yes

CPU only (same image)

gpu_no

Fast mode (simple image)

fast_mode

As you can see, when processing a high-resolution image, GPU mode significantly accelerates the process.

This feature has been tested on Apple Silicon GPUs; it should also work on NVIDIA. If you encounter any issues with your GPU, feel free to open an issue.

License

GPL-3.0 — JesusChapman

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

emberify-0.1.0.post1.tar.gz (8.0 kB view details)

Uploaded Source

Built Distribution

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

emberify-0.1.0.post1-py3-none-any.whl (9.9 kB view details)

Uploaded Python 3

File details

Details for the file emberify-0.1.0.post1.tar.gz.

File metadata

  • Download URL: emberify-0.1.0.post1.tar.gz
  • Upload date:
  • Size: 8.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for emberify-0.1.0.post1.tar.gz
Algorithm Hash digest
SHA256 57f59c64bd26c0cd74f4401305e995985dc512d5075d277ffad542ce3c59538d
MD5 ea7963e39b8b116ecb1f36a4d6c6ec90
BLAKE2b-256 65dcddbe8e9999a00deb956f170363ff9c8e40ac4b42dc618c4cf5502ddea2ac

See more details on using hashes here.

File details

Details for the file emberify-0.1.0.post1-py3-none-any.whl.

File metadata

  • Download URL: emberify-0.1.0.post1-py3-none-any.whl
  • Upload date:
  • Size: 9.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for emberify-0.1.0.post1-py3-none-any.whl
Algorithm Hash digest
SHA256 07b9b2d3331f0efb49f4c80fdbfd8c26d0c9ae0de7e14c60d33e1f2682670b78
MD5 b7e1135039f2e17a7ecb0c6c4a91ceea
BLAKE2b-256 3004e5a7a69f40cfd236cc962431924c4a896a5fafc39e7f7060ef195a7756a7

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.1.0.post1 This release

2 files

Supported by

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