Changelog¶
All notable changes to CDL Convert are documented in this file.
Version 1.0.0¶
Breaking Changes¶
Python 3.11+ Required - Dropped support for Python 2.7-3.10 and PyPy
OpenTimelineIO Required - We’ve moved to using OpenTimelineIO’s robust EDL adaptor system to parse ALE, CMX, and OTIO EDL files
Windows w/ Python 3.14 is not supported - Due to an OTIO build issue, running on Windows with Python 3.14 is at your own risk
MediaRef URI behavior has changed - Previously, MediaRef URIs could be impacted based on the OS you were running cdl_convert on. cdl_convert now attempts to maintain the original os behavior which wrote the URI to start with.
SatNode XML tag default changed - The default XML element tag for Saturation nodes has changed from
SATNodetoSatNodefor consistency withSOPNodenaming. Use--sat-tag SATNodeto maintain legacy behavior.CDL to CCC conversion deduplicates ColorCorrections - When converting from CDL (ColorDecisionList) to CCC (ColorCorrectionCollection) format, ColorCorrections are no longer duplicated. Previously, if a ColorCorrection appeared both directly in a ColorDecision and was referenced by a ColorCorrectionRef in another ColorDecision, it would appear twice in the output. Now each unique ColorCorrection appears only once.
ColorCorrection ID sanitization now preserves Unicode characters - Previously, IDs were sanitized to ASCII-only characters. Now, Unicode characters (e.g., accented letters, CJK characters) are preserved in IDs, with only invalid XML characters being removed. This allows for international character support in CDL identifiers while maintaining XML validity.
New Features¶
Configurable character encoding - Set input and output file encodings with CLI options
Nuke OCIOCDLTransform support - Full bidirectional support for Foundry Nuke’s OCIOCDLTransform node format (.nk files)
OTIO support - Now ingests .otio files with CDL metadata
Hatch & pyproject.toml - Modern Python packaging and building
Type hints throughout - Full type annotation for better IDE support
pathlib integration - Modern file path handling with
pathlib.PathColorValues dataclass - Structured color correction data with validation
Enhanced error handling - Specific exception types (
ValidationError,ParseError,FormatError)Colored CLI output - Enhanced command-line experience with colored error messages
f-string formatting - Improved string operations throughout
Context managers - Safe resource management
Match statements - Cleaner control flow (Python 3.10+ features)
Infrastructure Changes¶
Build System: Migrated from setup.py to pyproject.toml with Hatch
CI/CD: Migrated from Travis CI to GitHub Actions
Dependencies: Upgraded OpenTimelineIO to 18.1+
Documentation: Modernized to Sphinx + MyST Parser with Furo theme
Bug Fixes¶
#26: Fixed ColorCorrection ID changes not updating references - When a ColorCorrection’s ID is changed, ColorDecision.members and ColorCorrectionRef.members dictionaries are now properly updated, and references continue to resolve correctly
#46: Fixed auto-generated ID collision issue - IDs are now generated by finding the first available number instead of using member count, preventing collisions with explicitly specified IDs
#55: Fixed parsing of CCC files with multiple xmlns attributes - previously only the first ColorCorrection with xmlns would be parsed
#61: Removed deprecated ‘rU’ file open mode that caused failures on Python 3.11+
Compatibility¶
CLI and API should be generally compatible with tools written for 0.9.2, however see the breaking changes listed above which could result in changed output your tools may have been expecting.
See Installation for updated installation instructions.
Version 0.9.2¶
Fixed¶
Fixed a bug where ALEs with blank lines would not convert correctly
Fixed a bug preventing
cdl_convertfrom being correctly installed in Python 2.6Fixed continuous integration testing
Changed¶
No longer officially supporting Python 3.2 (removed from CI builds, but should still work)
Version 0.9¶
Added¶
Ability to parse CMX EDLs
cdl_convert.pystub file at package root level for running without installation
Fixed¶
Script bug where collection formats containing color decisions would not export those decisions as individual color corrections
Bug where line endings weren’t being read correctly in certain situations
Script now writes errors to stderr correctly and exits with status 1
Version 0.8¶
Added¶
--singleflag: When provided with an output collection format, each color correction in the input will be exported to its own collection
Changed¶
Giving a
ColorCorrectiona non-duplicate ID now works unless the--haltflag is givenIncoming collections with duplicate IDs will no longer fail
Version 0.7.1¶
Fixed¶
Bug where ALEs without ‘Scan Filename’ fields could not parse correctly
Version 0.7¶
Addition of collection format support.
.ccc(Color Correction Collections) and.cdl(Color Decision Lists) can now be parsed and written..aleand.flexfiles now return a collection.
Added¶
New script flags:
--check: Checks all parsedColorCorrectionobjects for sane values and prints warnings-d,--destination: Specify output directory for converted files--no-output: Dry run mode - goes through conversion without writing to disk--halt: Halts on errors that can be resolved safely (e.g., negative slope or power values)
parse_ccc(): Parse Color Correction Collectionswrite_ccc(): Write Color Correction Collectionsparse_cdl(): Parse Color Decision Listswrite_cdl(): Write Color Decision ListsColorDecision: Stores aColorCorrectionorColorCorrectionRefwith optionalMediaRefColorCorrectionRef: Reference to aColorCorrectionparentattribute toColorCorrectionsanity_check(): Prints unusual values to stdoutdev-requirements.txtwithmockfor testing
Changed¶
Renamed
ColorCollectionBasetoColorCollectionColorCollectionis now a fully functional container classCalling
sop_nodeorsat_nodeonColorCorrectionbefore setting values now worksColorCorrectioncdl_fileinit argument renamed toinput_fileparse_cc()andparse_rnh_cdlnow yield a singleColorCorrection, not a listAll
determine_destmethods now take adirectoryargumentRenamed
parse_cdl/write_cdltoparse_rnh_cdl/write_rnh_cdlRenamed
cdl_fileargument toinput_filein parse functions
Python Structure Refactoring¶
Moved
HALT_ON_ERRORintoconfigmoduleMoved base classes to
cdl_convert.baseMoved
ColorCollectiontocdl_convert.collectionMoved
ColorCorrection,SatNode,SopNodetocdl_convert.correctionMoved
ColorDecision,ColorCorrectionRef,MediaReftocdl_convert.decisionMoved all parse functions to
cdl_convert.parseMoved all write functions to
cdl_convert.writeMoved
sanity_check()tocdl_convert.utils
Version 0.6.1¶
Added¶
AscXMLBaseclass for XML-representable nodesTests for
write_cc- brings coverage to 100%
Changed¶
Suppressed scientific notation when writing files
write_ccnow writes 100% correct XML using ElementTree
Version 0.6¶
Major release adding ASC CDL XML compliance and restructuring the class hierarchy.
Added¶
Much greater ASC CDL XML compliance with new classes representing XML schema nodes
AscColorSpaceBase: Base class forviewing_descandinput_descAscDescBase: Base class fordescattributeColorCollectionBase: Basis for collection type nodesMediaRef: Represents MediaRef node with convenient file handlingHALT_ON_ERRORmodule variable for exception handling behaviorClass-level member dictionary for
ColorCorrectionlookup by ID
Changed¶
Renamed
AscCdltoColorCorrectionColorCorrectionnow requires unique IDMoved SOP and SAT operations into separate node classes
Removed
metadataattribute, split intoinput_desc,viewing_desc, anddescdescis now a list of all description fieldsRenamed
cc_idtoidSlope, Offset, and Power now return tuples instead of lists
parse_cc()now parses wider variety of.ccfilesSignificantly simplified
parse_flex()
Added¶
PyPy support
ReadTheDocs documentation
Test suite broken into sub-modules
Version 0.5¶
Changed¶
Restructured project according to Python packaging guidelines
Some
AscCdlattributes moved into dictionaries (reversed in 0.6)Refactored parse functions to reduce complexity
Simplified
write_cdlto be more pythonic
Version 0.4.2¶
Fixed¶
Hotfix for
from __future__imports
Version 0.4.1¶
Changed¶
PEP 8 conversion
Added landscape.io support
Uses
from __future__for print function
Version 0.4¶
Added¶
Python 3 compatibility
Better type and exception handling for
AscCdlsettersID field sanitization
Travis CI for continuous integration
ElementTree for XML parsing in
parse_cc
Changed¶
More unit testing bug fixes and enhancements
Test suite now runs on Windows
For the latest changes, see the GitHub repository.