Coloraide

Latest version: v4.0

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

Scan your dependencies

Page 9 of 18

1.0

> **Note** Stable Release!
> Checkout [migration guide](https://facelessuser.github.io/coloraide/about/releases/1.0/) if you were an early adopter.

- **NEW**: Bezier interpolation dropped for B-spline which provides much better interpolation.
- **NEW**: All new interpolation methods now support hue fix-ups: `shorter`, `longer`, `increasing`, `decreasing`,
and `specified`.
- **NEW**: Interpolation is now exposed as a plugin to allow for expansion.
- **FIX**: Fixed an issue related to premultiplication and undefined alpha channels.

1.0rc1

> **Warning** _Plugin Refactor_
> For more flexibility there was one final rework of plugins. Registering requires all plugins to be instantiated
> before being passed into `Color.register`, but this allows a user redefine some defaults of certain plugins.
>
> `coloraide.ColorAll` was moved to `coloraide.everythng.ColorAll` to avoid allocating plugins when they are not
> desired.
>
> In the process, we also renamed a number of plugin classes for consistency and predictability, details found below.

- **NEW**: Updated some class names for consistency and predictability. `XyY` --> `xyY`, `Din99o` --> `DIN99o`, `SRGB`
--> `sRGB`, and `ORGB` --> `oRGB`.

Lastly, `LCh` should be the default casing convention. This convention will be followed unless a spec mentions
otherwise. Changes: `Lch` --> `LCh`, `LchD65` --> `LChD65`, `Oklch` --> `OkLCh`, `Lchuv` --> `LChuv`, `Lch99o` -->
`LCh99o`, `LchChroma` --> `LChChroma`, `OklchChroma` --> `OkLChChroma`, and `Lchish` --> `LChish`.

- **NEW**: Updated migration guide with recent plugin changes.
- **NEW**: `coloraide.ColorAll` renamed and moved to `coloraide.everything.ColorAll`. This prevents unnecessary
inclusion and allocation of objects that are not desired.
- **NEW**: Default `Color` object now only registers `bradford` CAT by default, all others must be registered
separately, or `coloraide.everything.Color` could be used.
- **NEW**: All plugin classes must be instantiated when being registered. This allows some plugins to be instantiated
with different defaults. This allows some plugins to be configured with different defaults.

py
Before change:
Color.register([Plugin1, Plugin2])

After change:
Color.register([Plugin1(), Plugin2(optional_parm=True)])

1.0b3

- **FIX**: Fixed the bad `CAT16` matrix for chromatic adaptation.
- **FIX**: Small fix related to how `CAT` plugin classes are defined for better abstraction.
- **FIX**: Restrict optional keywords in `Color.register()` and `Color.deregister()` to keyword _only_ parameters.

1.0b2

> **"Breaking Changes"**
> 1.0b2 only introduces one more last breaking change that was forgotten in 1.0b1.

- **BREAK**: Remove `filters` parameter on new class instantiation.
- **NEW**: Added new migration guide to the documentation to help early adopters move to the 1.0 release.
- **NEW**: Added HPLuv space described in the HSLuv spec.
- **NEW**: Added new color spaces: ACES 2065-1, ACEScg, ACEScc, and ACEScct.
- **NEW**: Contrast is now exposed as a plugin to allow for future expansion of approaches. While there is currently
only one approach, methods can be selected via the `method` attribute.
- **NEW**: Add new `random` method for generating a random color for a given color space.

1.0b1

> taken opportunity to address any issues related to speed and usability. While this is unfortunate for early
> adopters, we feel that in the long run that these changes will make ColorAide a better library. We've also added new
> a new Bezier interpolation method and added many more color spaces!

- **BREAK**: The `coloraide.Color` object now only registers a subset of the available color spaces and ∆E algorithms in
order to create a lighter default color object. `coloraide.ColorAll` has been provided for a quick way to get access
to all available color spaces and plugins. Generally, it is recommend to subclass `Color` and register just what is
desired.

- **BREAK**: Reworked interpolation:

- `interpolate` and `steps` functions are now `classmethod`s. This alleviates the awkward handling of interpolating
colors greater than 2. Before, the first color always had to be an instance and then the rest had to be fed into
that instance, now the the methods can be called from the base class or an instance with all the colors fed in
via a list. Only the colors in the list will be evaluated during interpolation.
- `Piecewise` object has been removed.
- `stop` objects are used to wrap colors to apply a new color stop.
- easing functions can be supplied in the middle of two colors via the list input.
- `hint` function has been provided to simulate CSS color hinting. `hint` returns an easing function that modifies
the midpoint to the specified point between two color stops.
- A new bezier interpolation method has been provided. When using `interpolate`, `steps`, or `mix` the interpolation
style can be changed via the `method` parameter. `bezier` and `linear` are available with `linear` being the
default.

- **BREAK**: Dictionary input/output now matches the following format (where alpha is optional):

py
{"space": "name", "coords": [0, 0, 0], "alpha": 1}


This allows for quicker processing and less complexity dealing with channel names and aliases.

- **BREAK**: The CSS Level 4 Color spec has accepted our proposed changes to the gamut mapping algorithm. With this
change, the `oklch-chroma` gamut mapping algorithm is now compliant with the CSS spec, and `css-color-4` is no longer
needed. If you were experimenting with `css-color-4`, please use `oklch-chroma` instead. The algorithm is faster and
does not have the color banding issue that `css-color-4` had, and it is now exactly the same as the CSS spec.

- **BREAK**: New breaking change. Refactor of `Space` plugins. `Space` plugins are no longer instantiated which cuts
down on overhead lending to better performance. `BOUNDS` and `CHANNEL_NAMES` attributes were combined into one
attribute called `CHANNELS` which serves the same purpose as the former attributes. `Space` plugins also no longer
need to define channel property accessors as those are handled through `CHANNELS` in a more generic way. This is a
breaking change for any custom plugins.

Additionally, the `Space` plugin's `null_adjust` method has been renamed as `normalize` matching its functionality
and usage in regards to the `Color` object. It no longer accepts color coordinates and alpha channel coordinates
separately, but will receive them as a single list and return them as such.

- **BREAK**: `Color`'s `fit` and `clip` methods now perform the operation in place, modifying the current color
directly. The `in_place` parameter has been removed. To create a new color when performing these actions, simply clone
the color first: `!py color.clone().clip()`.

- **BREAK**: Remove deprecated dynamic properties which helps to increase speed by removing overhead on class property
access.

- **BREAK**: Remove deprecated dynamic properties which helps to increase speed by removing overhead on class property
access. Use indexing instead: `color['red']` or `color[0]`.

- **BREAK**: Remove deprecated `coords()` method. Use indexing and slices instead: `color[:-1]`.

- **NEW**: Update `lch()`, `lab()`, `oklch()`, and `oklab()` to optionally support percentages for lightness, chroma, a,
and b. Lightness is no longer enforced to be a percentage in the CSS syntax and these spaces will serialize as a
number by default instead. Optionally, these forms can force a percentage output via the `to_string` method when using
the `percentage` option. Percent ranges roughly correspond with the Display P3 gamut per the CSS specification.

Additionally, CSS color spaces using the `color()` format as an input will translate using these same ranges if the
channels are percentages. `hue` will also be respected and treated as 0 - 360 when using a percentage.

Non-CSS color spaces will also respect their defined ranges when using percentages in the `color()` form.

- **NEW**: Add `silent` option to `deregister` so that if a proper category is specified, and the plugin does not exit,
the operation will not throw an error.

- **NEW**: Add new color spaces: `display-p3-linear`, `a98-rgb-linear`, `rec2020-linear`, `prophoto-rgb-linear`, and
`rec2100pq`, `hsi`, `rlab`, `hunter-lab`, `xyy`, `prismatic`, `orgb`, `cmy`, `cmyk`, `ipt`, and `igpgtg`.

- **NEW**: Monochromatic color harmony must also be performed in a cylindrical color space to make achromatic detection
easier. This means all color harmonies now must be performed under a cylindrical color space.

- **NEW**: Use Lab D65 for ∆E 2000, ∆E 76, ∆E HyAB, Euclidean distance, and Lch D65 for Lch Chroma gamut mapping. Lab
D65 is far more commonly used for the aforementioned ∆E methods. Lch Chroma gamut mapping, which uses ∆E 2000 needs to
use the same D65 white point to avoid wasting conversion time.

- **FIX**: Better handling of monochromatic harmonies that are near white or black.

- **FIX**: Small fix to `steps` ∆E logic.

0.18.1

- **FIX**: Fix issue where when generating steps with a `max_delta_e`, the ∆E was reduced too much causing additional,
unnecessary steps along with longer processing time.

Page 9 of 18

© 2024 Safety CLI Cybersecurity Inc. All Rights Reserved.