Skip to content

Releases: facelessuser/coloraide

1.7

06 Feb 02:03
Compare
Choose a tag to compare
1.7

1.7

  • NEW: Add support for CAM16 Jab and JMh: cam16 and cam16-jmh respectively.
  • NEW: Add support for CAM16 UCS (Jab forms): cam16-ucs, cam16-scd, and cam16-lcd.
  • NEW: Add support for the HCT color space (hct) which combines the colorfulness and hue from CAM16 JMh and the
    lightness from CIELab.
  • NEW: Gamut mapping classes derived from fit_lch_chroma can set DE_OPTIONS to pass ∆E parameters.
  • NEW: While rare, some cylindrical color spaces have an algorithm such that achromatic colors convert best with a
    very specific hue. Internally, this is now handled during conversions, but there can be reasons where knowing the hue
    can be useful such as plotting. Cylindrical spaces now expose a method called achromatic_hue() which will
    return this specific hue if needed.
  • FIX: Fix rec2100-hlg transform.
  • FIX: Some color transformation improvements.
  • FIX: Relax some achromatic detection logic for sRGB cylindrical models. Improves achromatic hue detection results
    when converting to and from various non-sRGB color spaces.

1.6

29 Jan 04:46
Compare
Choose a tag to compare
1.6

1.6

  • NEW: Add rec2100-hlg color space.
  • BREAKING: rec2100pq should have been named rec2100-pq for consistency. It has been renamed to rec2100-pq and
    serializes with the CSS ID of --rec2100-pq. This is likely to have little impact on most users.

1.5

18 Jan 01:18
Compare
Choose a tag to compare
1.5

1.5

  • NEW: Formally add support for Python 3.11.
  • NEW: Add support for custom domains when interpolating.
  • NEW: set() can now take a dictionary of channels and values and set multiple channels at once.
  • NEW: get() can now take a list of channels and will return a list of those channel values.
  • ENHANCE: Simplify some type annotation syntax.
  • ENHANCE: Some minor performance enhancements.
  • FIX: Fix OkLCh CSS parsing.

1.4

05 Sep 00:05
Compare
Choose a tag to compare
1.4

1.4

  • NEW: A color space can now declare its dynamic range. By default, spaces are assumed to be SDR, but can declare
    themselves as HDR, or something else. This allows ColorAide to make decisions based on a color's dynamic range.
  • NEW: Add channel aliases for IPT and IPT-like color spaces (IgPgTg and ICtCp): intensity, protan, and
    tritan.
  • FIX: The ICtCp and oRGB space would return the Lab-ish equivalents for a and b in reverse order if calling
    Labish.labish_names. This was not actually called anywhere in the code, but is now fixed for any future cases that
    may require calling it.
  • FIX: Undefined channels should be ignored when clipping a color.
  • FIX: Do not apply SDR shortcuts in gamut mapping when fitting in a non-SDR color gamut, such as HDR.

1.3

26 Aug 23:23
Compare
Choose a tag to compare
1.3

1.3

  • ENHANCE: Color vision deficiency filters can now be instantiated with different default methods for severe and
    anomalous cases.
  • FIX: Fix premultiplication handling when using compose.

1.2

15 Aug 13:16
Compare
Choose a tag to compare
1.2

1.2

  • NEW: Add new monotone interpolation method.
  • ENHANCE: Better extrapolation past end of spline.
  • FIX: Small speed up in natural spline calculation.
  • FIX: Fix import that should have been relative, not absolute.

1.1

03 Aug 00:51
Compare
Choose a tag to compare
1.1

1.1

  • NEW: Slight refactor of interpolation plugin so that common code does not need to be duplicated, and the
    interpolate method no longer needs to accept an easing parameter as the plugin class exposes a new ease method
    to automatically acquire the proper, specified easing function and apply it.
  • NEW: Functions built upon interpolation can now use a new extrapolate parameter to enable extrapolation if
    interpolation inputs exceed 0 - 1. point will be passed to Interpolator.interpolate un-clamped if extrapolate is
    enabled. If a particular interpolation plugin needs to do additional work to handle extrapolation, they can check
    self.extrapolate to know whether extrapolation is enabled.
  • NEW: Implement and provide the following easing functions as described in the CSS Easing Level 1 spec:
    cubic_bezier, ease, ease_in, ease_out, and ease_in_out. Also provide a simple linear easing function.
  • New: Add natural and catrom cubic spline options for interpolation. The catrom (Catmull-Rom) spline requires
    the plugin to be registered in order to use it.
  • FIX: Due to floating point math, B-spline could sometimes return an interpolation of fully opaque colors with an
    imperceptible amount of transparency. If alpha is very close (#!py3 1e-6) to being opaque, just round it to opaque.
  • FIX: An easing function's output should not be clamped, only the input, and that only needs to occur on the
    the outer range of an entire interpolation.

1.0

27 Jul 05:52
Compare
Choose a tag to compare
1.0

1.0

Note Stable Release!
Checkout migration guide 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

22 Jul 23:20
Compare
Choose a tag to compare
1.0rc1 Pre-release
Pre-release

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.

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

1.0b3

17 Jul 01:54
Compare
Choose a tag to compare
1.0b3 Pre-release
Pre-release

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.