Coloraide

Latest version: v4.2.1

Safety actively analyzes 707607 Python packages for vulnerabilities to keep your Python projects secure.

Scan your dependencies

Page 3 of 19

3.0

- **BREAK**: The CSS HDR spec now defines the polar spaces such as JzCzhz `color()` with hue channels that support
traditional hue syntax instead of percentages. Updated all polar spaces that are represented in the `color()` format
to support this change. This is likely low impact as using percentages for hues is fairly uncommon.
- **BREAK**: Remove previously deprecated functions: `algebra.apply`, `algebra.no_nans`, `algebra.no_nan`,
`algebra.is_nan`, `Labish.labish_names`, `Labish.labish_indexes`, `LChish.lchish_names`, and
`LCHish.lchish_indexes`. These were mainly used internally, so breakage is likely low.
- **NEW**: `jzazbz`, `jzczhz`, `ictcp`, `rec2100-pq`, and `rec2100-hlg` are now formally recognized, and by default
serialized, without the `--` prefix as all the spaces are now part of the official HDR specification in CSS.
Previously, the spec was unofficial. `--` prefixed names will still be recognized, but at some future time `--`
support will be removed for these spaces. Additionally, these spaces are now registered by default.
- **NEW**: ∆E methods `z` and `itp` are now registered by default as their associated color spaces are now registered
by default as well.
- **NEW**: Color space channel flags `FLG_PERCENT` and `FLG_OPT_PERCENT` are deprecated and no longer used. They are
still present, but will be removed in the future.
- **NEW**: Update CSS percentage input/output ranges for `jzazbz`, `jzczhz`, and `ictcp` to match the CSS HDR spec.
- **NEW**: Ray tracing gamut mapping algorithms have been added: `oklch-raytrace` and `lch-raytrace`.
- **NEW**: RGB spaces now expose a `linear()` function on the underlying class to specify if they have a linear
equivalent.
- **NEW**: Adjust inheritance order of RGB spaces. Previously, many inherited from `sRGB`, now they inherit from
`sRGBLinear`.
- **NEW**: Add `rec2100-linear`, essentially and alias for `rec2020-linear`, that is specified in the CSS HDR
specification.
- **FIX**: Ensure that when using discrete interpolation that spline based interpolations are truly discrete.

2.16

- **NEW**: Gamut mapping plugins now must accept a `space` parameter and the color will not already be in the desired
gamut color space. This change was specifically made in order to fix a bug with HCT gamut mapping.
- **FIX**: Fix corner cases in HCT gamut mapping that would struggle with colors with high chroma and low lightness.

2.15.1

- **FIX**: Small regression related to indirectly gamut mapping in another space other than its own.

2.15

- **BREAK**: ∆E HCT used an extremely small JND by default to yield tonal palettes that were comparable to Google's
Material. This was not inline with other gamut mapping function defaults. The default is now a more appropriate
value of `2`. Users that relied on ∆E HCT to help generate tonal pallets with HCT should now use the `jnd` parameter
to set the JND to `0.02` in order to generate tonal pallets more like Google.
- **NEW**: `fit()` now accepts a `jnd` option to control the JND limit when gamut mapping with `lch-chroma`,
`oklch-chroma`, and `hct-chroma`.
- **NEW**: `to_string()` can now accept a dictionary of arguments to control gamut mapping via the `fit` argument.
- **FIX**: Update `lch-chroma` epsilon to be consistent with other gamut mapping plugin conventions.

2.14.1

- **FIX**: More precision for HCT conversion for better round trip conversions.

2.14

- **NEW**: `normalize()` will now also normalize a cylindrical color model with negative chroma/saturation to its
positive chroma/saturation form, assuming one exists.
- **NEW**: Gamut clipping is performed on a cylindrical color's normalized form ensuring that a color which is in
gamut but has a negative chroma/saturation will be mapped more correctly.
- **NEW**: Do not clamp user input of lightness and chroma in various spaces. Clamping will only occur during
conversion if the algorithm requires it.
- **NEW**: Channels can be accessed by `get` and `set` using their numerical value (as a string input).
- **NEW**: Color space plugins that specify the gamut space via `GAMUT_CHECK` must use that color space as a
reference when when gamut mapping or clipping by default.
- **NEW**: New color space plugin attribute `CLIP_SPACE` added which will override the space specified by
`GAMUT_CHECK` to force clipping in the origin space even if a gamut mapping space is defined. This is only used when
it is advantageous to clip in the origin space, e.g. when faster and still practical.
- **NEW**: Deprecate non-standard CAM16 (Jab) space. People should use the standard CAM16 JMh or the CAM16 UCS, SCD,
or LCD Jab spaces. The non-standard Jab is still available via `coloraide.spaces.cam16.CAM16`, but it is no longer
available in `coloraide.everything` and will be removed at a future time.
- **NEW**: Add new channel aliases: `j` for `jz` in Jzazbz and JzCzhz. Also add `c` for `cz` and `h` for `hz` in
JzCzhz.
- **NEW**: HSL will now always return positive saturation for wide gamut colors via its conversion.
- **FIX**: Fix a an issue with the CAM16 model's transformation that prevented good round trip with negative
lightness.
- **FIX**: Ensure that when `harmony` auto creates a cylindrical space from a rectangular space that it checks
achromatic status in the original color space.
- **FIX**: ∆E HCT should use colorfulness, not chroma, in the calculation.
- **FIX**: Don't return scientific notation when serializing colors.
- **FIX**: Small fix for Rec. 2100 PQ conversion algorithm.
- **FIX**: The oRGB color space should be gamut mapped in `srgb` as it is a transform of the sRGB space.
- **FIX**: Because Okhsl and Okhsv have a rough sRGB approximation and not precise, they are instead gamut mapped to
their own gamut by default.
- **FIX**: Much more accurate ICtCp matrices.
- **FIX**: Fix typing of deeply nested arrays in `algebra`.
- **FIX**: Fix issue with HCT undefined channel resolver.
- **FIX**: Proper handling of negative lightness for DIN99o.
- **FIX**: Circular mean should return positive values.

Page 3 of 19

© 2025 Safety CLI Cybersecurity Inc. All Rights Reserved.