Skip to main content

No project description provided

Project description

imgcolorshine

Transform image colors using OKLCH color attractors - a physics-inspired tool that operates in perceptually uniform color space.

Overview

imgcolorshine applies a gravitational-inspired color transformation where specified "attractor" colors pull the image's colors toward them. The tool works in the OKLCH color space, ensuring perceptually uniform and natural-looking results.

Features

  • Perceptually Uniform: Operations in OKLCH color space for intuitive results
  • Flexible Color Input: Supports all CSS color formats (hex, rgb, hsl, oklch, named colors)
  • Selective Channel Control: Transform lightness, saturation, and/or hue independently
  • Multiple Attractors: Blend influences from multiple color targets
  • High Performance: Optimized with NumPy and Numba for fast processing
  • Memory Efficient: Automatic tiling for large images
  • Professional Quality: CSS Color Module 4 compliant gamut mapping

Installation

# Install from PyPI
pip install imgcolorshine

# Or install from source
git clone https://github.com/twardoch/imgcolorshine.git
cd imgcolorshine
pip install -e .

Usage

Basic Example

Transform an image to be more red:

imgcolorshine shine photo.jpg "red;50;75"

Command Syntax

imgcolorshine shine INPUT_IMAGE ATTRACTOR1 [ATTRACTOR2 ...] [OPTIONS]

Each attractor has the format: "color;tolerance;strength"

  • color: Any CSS color (e.g., "red", "#ff0000", "oklch(70% 0.2 120)")
  • tolerance: 0-100 (radius of influence - how far the color reaches)
  • strength: 0-100 (transformation intensity - how much colors are pulled)

Options

  • --output_image PATH: Output image file (auto-generated if not specified)
  • --luminance BOOL: Enable/disable lightness transformation (default: True)
  • --saturation BOOL: Enable/disable chroma transformation (default: True)
  • --hue BOOL: Enable/disable hue transformation (default: True)
  • --verbose BOOL: Enable verbose logging (default: False)
  • --tile_size INT: Tile size for large images (default: 1024)

Examples

Warm sunset effect:

imgcolorshine shine landscape.png \
  "oklch(80% 0.2 60);40;60" \
  "#ff6b35;30;80" \
  --output_image=sunset.png

Shift only hues toward green:

imgcolorshine shine portrait.jpg "green;60;90" \
  --luminance=False --saturation=False

Multiple color influences:

imgcolorshine shine photo.jpg \
  "oklch(70% 0.15 120);50;70" \
  "hsl(220 100% 50%);25;50" \
  "#ff00ff;30;40"

How It Works

The Attraction Model: "Pull" vs "Replace"

imgcolorshine uses a "pull" model, not a "replace" model. This means:

  • Colors are gradually pulled toward attractors, not replaced entirely
  • A strength of 100 provides maximum pull, but only pixels exactly matching the attractor color will be fully transformed
  • The effect diminishes with distance from the attractor color
  • This creates natural, smooth transitions rather than harsh color replacements

The Transformation Process

  1. Color Space: All operations happen in OKLCH space for perceptual uniformity
  2. Attraction Model: Each attractor color exerts influence based on:
    • Distance: Perceptual distance between pixel and attractor colors (ΔE in Oklab)
    • Tolerance: Maximum distance at which influence occurs (0-100 maps linearly to 0-2.5 ΔE)
    • Strength: Maximum transformation amount at zero distance
  3. Falloff: Smooth raised-cosine curve ensures natural transitions
  4. Blending: Multiple attractors blend using normalized weighted averaging
  5. Gamut Mapping: Out-of-bounds colors are mapped back to displayable range

Understanding Parameters

Tolerance (0-100)

Controls the radius of influence - how far from the attractor color a pixel can be and still be affected:

  • Low values (0-20): Only very similar colors are affected
  • Medium values (30-60): Moderate range of colors transformed
  • High values (70-100): Wide range of colors influenced
  • 100: Maximum range, affects colors up to ΔE = 2.5 (very broad influence)

Strength (0-100)

Controls the intensity of the pull - how strongly colors are pulled toward the attractor:

  • Low values (0-30): Subtle color shifts, original color dominates
  • Medium values (40-70): Noticeable but natural transformations
  • High values (80-100): Strong pull toward attractor (not full replacement)
  • 100: Maximum pull, but still respects distance-based falloff

Important Note on Hue-Only Transformations

When using --luminance=False --saturation=False, only the hue channel is modified. This means:

  • Grayscale pixels (low saturation) show little to no change
  • The effect is most visible on already-saturated colors
  • To see stronger effects on all pixels, enable all channels

Performance

  • Processes a 1920×1080 image in ~2-5 seconds
  • Automatic tiling for images larger than 2GB memory usage
  • GPU acceleration available with CuPy (10-100x speedup)

Technical Details

  • Color Engine: ColorAide for accurate OKLCH operations
  • Image I/O: OpenCV (4x faster than PIL for PNG)
  • Computation: NumPy + Numba JIT compilation
  • Gamut Mapping: CSS Color Module 4 algorithm
  • Falloff Function: Raised cosine for smooth transitions

Development

This project follows a structured approach focusing on code quality, documentation, and maintainable development practices.

License

MIT License - see LICENSE file for details.

Credits

  • Created by Adam Twardoch
  • Developed with Antropic software

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

imgcolorshine-1.4.1.tar.gz (8.3 kB view details)

Uploaded Source

Built Distribution

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

imgcolorshine-1.4.1-py3-none-any.whl (5.5 kB view details)

Uploaded Python 3

File details

Details for the file imgcolorshine-1.4.1.tar.gz.

File metadata

  • Download URL: imgcolorshine-1.4.1.tar.gz
  • Upload date:
  • Size: 8.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.7.13

File hashes

Hashes for imgcolorshine-1.4.1.tar.gz
Algorithm Hash digest
SHA256 45d1131e751f761abfa42ac257ba526f132c46525276e7a6a07cd7d625a294e4
MD5 246b4ab41be806ed2a38ec46c43c2ec3
BLAKE2b-256 d9f94d71b4d1e0865de4acf23e3ba7dd2019737e45c24dcf9e660d2aa960ed38

See more details on using hashes here.

File details

Details for the file imgcolorshine-1.4.1-py3-none-any.whl.

File metadata

File hashes

Hashes for imgcolorshine-1.4.1-py3-none-any.whl
Algorithm Hash digest
SHA256 640174435e0849a93e1fbd0de9a8dfbda059153a91d58b998e175238fe46f533
MD5 710370df81538e5a0cdf3473b08b3fc5
BLAKE2b-256 a73a8895d6f4f07bbea628d6c11d2af675fb4a9e4975143c6f5c6b15ae14f2b5

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