- Python 3.5 and 3.6 are now supported.
- Python 3.3 and 3.4 are no longer supported.
- networkx>=2.0 is now required.
- Add NodeNotFound to GraphConversionManager.get_conversion_path().
- AppleRGBColor added. (jan-warchol)
- Added compatibility with NetworkX 2.0. (Erotemic)
- IPT_to_XYZ docstring corrected. (mumbleskates)
- Added new NetworkX graph-based resolution of conversions between color spaces. Reduces boilerplate and makes it much easier to add additional color spaces going forward. (MichaelMauderer)
- Added the IPT color space. (MichaelMauderer)
- Added Color Appearance Models. Natayani95, Hunt, RLAB, ATD95, LLAB, CIECAM02, CIECAM02-m1. (MichaelMauderer)
- xyY conversions now correctly avoid division by zero. (dwbullok)
- Un-transposed adaptation matrices. Has no effect on conversions, but if you use these directly you may see different numbers. (JasonTam)
- During XYZ->RGB, linear channel values are now clamped in order to avoid domain errors. Output should now always be between 0 and 1.
Backwards Incompatible changes¶
- If any of your code directly referenced the color adaptation matrices that were un-inverted, you’ll need to adjust your math.
- Lots of documentation improvements.
convert_color()now has an explicitly defined/documented
target_illuminantkwarg, instead of letting this fall through to its **kwargs. This should make IDE auto-complete better and provide more clarity.
clamped_rgb_bto RGB color spaces. Use these if you have to have in-gamut, potentially compressed coordinates.
- Direct conversions to non-sRGB colorspaces returned sRGBColor objects. Reported by Cezary Wagner.
Backwards Incompatible changes¶
- Minimum Python version is now 2.7.
- ColorBase.convert_to() is no more. Use colormath.color_conversions.convert_color() instead. API isn’t as spiffy looking, but it’s a lot less magical now.
- Completely re-worked RGB handling. Each RGB space now has its own class, inheriting from BaseRGBColor. Consequently, RGBColor is no more. In most cases, you can substitute RGBColor with sRGBColor during your upgrade.
- RGB channels are now [0..1] instead of [1..255]. Can use BaseRGBColor.get_upscaled_value_tuple() to get the upscaled values.
- BaseRGBColor.set_from_rgb_hex() was replaced with a BaseRGBColor.new_from_rgb_hex(), which returns a properly formed sRGBColor object.
- BaseRGBColor no longer accepts observer or illuminant kwargs.
- HSL no longer accepts observer, illuminant or rgb_type kwargs.
- HSV no longer accepts observer, illuminant or rgb_type kwargs.
- CMY no longer accepts observer, illuminant or rgb_type kwargs.
- CMYK no longer accepts observer, illuminant or rgb_type kwargs.
- Removed ‘debug’ kwargs in favor of Python’s logging.
- Completely re-worked exception list. Eliminated some redundant exceptions, re-named basically everything else.
- Python 3.3 support added.
- Added tox.ini with supported environments.
- Removed the old custom test runner in favor of nose.
- Replacing simplified RGB->XYZ conversions with Bruce Lindbloom’s.
- A round of PEP8 work.
- Added a BaseColorConversionTest test class with some greatly improved color comparison. Much more useful in tracking down breakages.
- Eliminated non-matrix delta E computations in favor of the matrix equivalents. No need to maintain duplicate code, and the matrix stuff is faster for bulk operations.
- Corrected delta_e CMC example error. Should now run correctly.
- color_diff_matrix.delta_e_cie2000 had an edge case where certain angles would result in an incorrect delta E.
- Un-hardcoded XYZColor.apply_adaptation()’s adaptation and observer angles.
- Added an optional vectorized deltaE function. This uses NumPy array/matrix math for a very large speed boost. (Eddie Bell)
- Added this changelog.
- Un-hardcode the observer angle in adaptation matrix. (Bastien Dejean)
- Initial GitHub release.