Skip to content

Releases: elixir-image/color

Image version 0.13.0

Choose a tag to compare

@kipcole9 kipcole9 released this 01 May 21:45

[0.13.0] — May 2nd, 2026

Added

  • Color.Palette.summarize/3 — reduce an arbitrary list of colours to k representative colours by agglomerative bottom-up clustering in Oklab. Chromatic axes are weighted 2× over lightness in the distance metric (perceptual: hue mismatch dominates lightness mismatch); each cluster's representative is chosen with a centroid-aware rule (highest mass-weighted chroma for chromatic centroids, closest-to-centroid for achromatic). Available as Color.Palette.summarize/3 (façade) or directly as Color.Palette.Summarize.summarize/3.

  • Color.Palette.Cluster — public low-level clustering primitives (from_colors/2, merge_until/3, merge_pair/2, representative/2, distance/3). Exposed as a stable seam so libraries that produce their own clusters (notably K-means over image pixels in :image) can re-use the same Oklab metric and centroid-aware rep selection without algorithmic drift. Color.Palette.Summarize is now a thin wrapper over Cluster.

  • /spectrum route in Color.Palette.Visualizer — diagnostic view that renders an arbitrary colour list as a hue-frequency strip in Oklch, with achromatic entries shown separately by lightness. Useful for spotting hue gaps and chromatic/achromatic balance in any palette.

Changed

  • Color.Palette.sort/2's default :hue_origin is now 15.0° (was 0.0°), placing the hue-circle cut just below pure red so the deepest reds anchor at the start of the strip and magentas/pinks (Oklch H < 15°) wrap past purple to the end. Pass hue_origin: 0.0 to restore the previous cut-at-zero behaviour. The default applies to both :hue_lightness and :stepped_hue strategies.

Color version 0.12.1

Choose a tag to compare

@kipcole9 kipcole9 released this 25 Apr 12:19

[0.12.1] — April 25th, 2026

Bug Fixes

  • Conditionally compile Visualizer and Standalone on optional deps.

Color version 0.12.0

Choose a tag to compare

@kipcole9 kipcole9 released this 22 Apr 16:54

[0.12.0] — April 23rd, 2026

Adds

  • Color.Palette.sort/2 to sort colors.

  • Add Color.Material and :material_pbr sort strategy for mixed finishes.

Color version 0.11.0

Choose a tag to compare

@kipcole9 kipcole9 released this 22 Apr 16:54

[0.11.0] — April 20th, 2026

Added

  • Add :chroma_ceiling option and expose :gamut in tonal visualizer.

  • Drop seed label on gamut plot and add white-point legend entry.

  • Propagate palette gamut and ceiling between tonal and gamut tabs

Color version 0.10.0

Choose a tag to compare

@kipcole9 kipcole9 released this 19 Apr 03:49

[0.10.0] — April 19th, 2026

Added

  • Add Color.Rec2020 and Color.AppleRGB spaces and extend Color.Spectral with B, C, F2, F7, F11 illuminants and blackbody/1.

Color version 0.9.0

Choose a tag to compare

@kipcole9 kipcole9 released this 16 Apr 20:25

[0.9.0] — April 16th, 2026

Bug Fixes

  • Add the seed as a URL param so the seed travels to each tab in the visualizer.

Color version 0.8.0

Choose a tag to compare

@kipcole9 kipcole9 released this 16 Apr 20:08

[0.8.0] — April 16th, 2026

Bug Fixes

  • Smooth the tonal lightness gradient for the palette.

Color version 0.7.0

Choose a tag to compare

@kipcole9 kipcole9 released this 16 Apr 19:24

[0.7.0] — April 16th, 2026

Changed

  • Generate Tailwind 4 classes, not Tailwind 3.

Color version 0.5.0

Choose a tag to compare

@kipcole9 kipcole9 released this 14 Apr 15:20

[0.5.0] — April 14th, 2026

Added

  • Color.Palette module with three palette-generation algorithms for design systems and web sites.

  • Color.Palette.Visualizer — a Plug-based web UI for previewing the three palette algorithms. Three views modelled on UI Colors (Tonal), Material Theme Builder (Theme), and Adobe Leonardo (Contrast).

Color version 0.4.0

Choose a tag to compare

@kipcole9 kipcole9 released this 09 Apr 12:05

Added

  • Color.LED module with support for multi-channel addressable LED pixels that include extra white channels. Color.LED.RGBW covers four-channel pixels (R, G, B, W) used by WS2814 and SK6812-RGBW. Color.LED.RGBWW covers five-channel RGB+CCT pixels (R, G, B, WW, CW) used by WS2805 and several SK6812 variants. Both provide from_srgb/2, to_srgb/1, and to_xyz/1. Color.LED.chip_options/1 returns recommended extraction options for common chip variants (:ws2814_ww, :ws2814_nw, :ws2814_cw, :sk6812_ww, :sk6812_nw, :sk6812_cw, :ws2805).

  • Color.ANSI module for parsing and emitting ANSI SGR colour escape sequences. Supports 16-colour, 256-colour indexed, and 24-bit truecolor forms, with perceptual nearest-palette matching (CIEDE2000) when encoding to the 16- or 256-colour palette. Includes parse/1, to_string/2, wrap/3, nearest_256/1, nearest_16/1, palette_256/0, palette_16/0, and a typed Color.ANSI.ParseError exception.

  • Top-level Color.to_hex/1, Color.to_css/1,2, and Color.to_ansi/1,2 convenience functions that accept any input Color.new/1 accepts and raise a typed exception on failure.

Changed

  • Changed the module Color.CSSNames to Color.CSS.Names

  • Changed all colorspace module names to be the closest possible match to their standard names.