Bot releases are hidden (Show)
Published by facelessuser over 1 year ago
rec2100-hlg
color space.rec2100pq
should have been named rec2100-pq
for consistency. It has been renamed to rec2100-pq
and--rec2100-pq
. This is likely to have little impact on most users.Published by facelessuser almost 2 years ago
set()
can now take a dictionary of channels and values and set multiple channels at once.get()
can now take a list of channels and will return a list of those channel values.Published by facelessuser about 2 years ago
intensity
, protan
, andtritan
.a
and b
in reverse order if callingLabish.labish_names
. This was not actually called anywhere in the code, but is now fixed for any future cases thatPublished by facelessuser about 2 years ago
compose
.Published by facelessuser about 2 years ago
Published by facelessuser about 2 years ago
interpolate
method no longer needs to accept an easing
parameter as the plugin class exposes a new ease
methodextrapolate
parameter to enable extrapolation ifpoint
will be passed to Interpolator.interpolate
un-clamped if extrapolate
isself.extrapolate
to know whether extrapolation is enabled.cubic_bezier
, ease
, ease_in
, ease_out
, and ease_in_out
. Also provide a simple linear
easing function.natural
and catrom
cubic spline options for interpolation. The catrom
(Catmull-Rom) spline requires#!py3 1e-6
) to being opaque, just round it to opaque.Published by facelessuser about 2 years ago
Note Stable Release!
Checkout migration guide if you were an early adopter.
shorter
, longer
, increasing
, decreasing
,specified
.Published by facelessuser about 2 years ago
Warning Plugin Refactor
For more flexibility there was one final rework of plugins. Registering requires all plugins to be instantiated
before being passed intoColor.register
, but this allows a user redefine some defaults of certain plugins.
coloraide.ColorAll
was moved tocoloraide.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)])
Published by facelessuser over 2 years ago
CAT16
matrix for chromatic adaptation.CAT
plugin classes are defined for better abstraction.Color.register()
and Color.deregister()
to keyword only parameters.Published by facelessuser over 2 years ago
"Breaking Changes"
1.0b2 only introduces one more last breaking change that was forgotten in 1.0b1.
filters
parameter on new class instantiation.method
attribute.random
method for generating a random color for a given color space.Published by facelessuser over 2 years ago
Breaking Changes
1.0b1 introduces a number of breaking changes. As we are very close to releasing the first stable release, we've
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 interpolatingPiecewise
object has been removed.stop
objects are used to wrap colors to apply a new color stop.hint
function has been provided to simulate CSS color hinting. hint
returns an easing function that modifiesinterpolate
, steps
, or mix
the interpolationmethod
parameter. bezier
and linear
are available with linear
being theBREAK: Dictionary input/output now matches the following format (where alpha is optional):
{"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.
Published by facelessuser over 2 years ago
max_delta_e
, the ∆E was reduced too much causing additional,Published by facelessuser over 2 years ago
normalize
function with the actual conversion algorithm.cat16
not to work due to a misnamed variable.Published by facelessuser over 2 years ago
Warning: Interpolations Are Now Premultiplied
ColorAide has moved to make premultiplication the default for interpolation methods such asmix
,steps
, and
interpolate
. The aim is to provide more accurate interpolation when using transparent colors. In cases where
premultiplication is not desired, it can be disabled by setting it to#!py3 False
. There are real reasons to do so
as it may be desirous to mimic an old implementation that has always used naive interpolation of transparent colors.Additionally, in the past, premultiplication was not really documented as it had not been fully tested.
Premultiplication is now covered in the documentation.
#!py3 premultiply=True
by default.#!py Piecewise()
object didn't default all the non-required parameters to #!py None
as documented.Published by facelessuser over 2 years ago
Warning: Deprecations
In interest of speed, and due to the overhead inflicted on every class attribute access, we've decided to deprecate
dynamic properties. This includes dynamic color properties (e.g.Color.red
) and dynamic ∆E methods (e.g.
Color.delta_e_2000()
). As far as color channel coordinate access is concerned, we've reworked a faster more useful
approach. ∆E already has a suitable replacement and will be the only approach moving forward.
Use of
delta_e_<method>
is deprecated. Users should use the already availabledelta_e(color, method=name)
approach when using non-default ∆E methods.Color channel access has changed. Dynamic channel properties have been deprecated. Usage of
Color.coords()
has
also been deprecated. All channels can now easily be accessed with indexing.Color.get()
andColor.set()
have not changed.
- You can index with numbers:
Color[0]
.- You can index with channel names:
Color['red']
.- You can slice to get specific color coordinates:
Color[:-1]
.- You can get all coordinates:
Color[:]
orlist(Color)
.- You can even iterate coordinates:
[c for c in Color]
.- Indexing also supports assignment:
Color[0] = 1
orColor[:3] = [1, 1, 1]
.Please consider updating usage to utilize the suggested approaches. The aforementioned methods will be removed
sometime before the 1.0 release.
Color
objects are now indexable and channels can be retrieved using either numbers or strings, e.g.,#!py3 Color[0]
or #!py3 Color['red']
. Slicing and assignments via slicing are also supported:#!py3 Color1[:] = Color2[:]
.Color.coords()
, dynamic color properties, and dynamic ∆E methods are all deprecated.harmony()
method. Also, the default colorHARMONY
.filter()
method. Filters include the W3C Filter Effects Level 1Published by facelessuser over 2 years ago
Published by facelessuser over 2 years ago
Warning:
No changes in the public API have changed, but type annotations have. If you were importing type annotations, you
will have to update them.Also, if any undocumented math related methods were accessed (for plugins or otherwise) they've been moved to
coloraide.algebra
Mutable<type>
, where type is either Matrix
, Vector
, or Array
, are simply<type>
. Types previously specified as <type>
, where type is either Matrix
, Vector
, or Array
, are<type>Like
. The types are expected to be mutable lists, anything else is noted as "like".coloraide.algebra
.divide
logic when dividing a number or vector by a matrix. There are no actual usage of thesePublished by facelessuser over 2 years ago
util.divide
logic when dividing a number or vector by a matrix. There are no actual usage of thesePublished by facelessuser over 2 years ago
Published by facelessuser over 2 years ago
Note
No changes should break existing color space plugins. Moved objects and references are still also available in old
locations, and new functionality is implemented in such a way as to not break existing plugins, but plugins should
be updated as sometime before the 1.0 release, such legacy access will be removed.
color(space ...)
format each a different color space is evaluated,color(space ...)
input format, the space should set COLOR_FORMAT
to False
. This means there is no need tosuper.match()
when overriding Color.match()
to ensure support for the color(space ...)
format as it will beCOLOR_FORMAT
is turned off. DEFAULT_MATCH
usage should also be discontinued as it now does nothing.coloraide.css
. This simplifiescat
module as it makes more sense there.GamutBound
, GamutUnbound
, and associated flags are now contained under coloraide.gamut.bounds
.normalize
will also remove masked values to properly adjust the color.Color()
object could not recognize the base class or other subclasses.