Frequently Asked Questions

Python Version Support

What versions of Python does cdl_convert support?

cdl_convert requires Python 3.11 or higher. Specifically, it supports Python 3.11, 3.12, 3.13, and 3.14.

What happened to Python 2 support?

Python 2.7 support was removed in version 1.0.0 as part of the modernization effort. Python 2 reached end-of-life on January 1, 2020.

If you need Python 2.7 support, use cdl_convert version 0.9.x or earlier.

What happened to PyPy support?

PyPy support was also dropped in version 1.0.0. The focus is now on CPython 3.11-3.14 to ensure compatibility with modern Python features and dependencies like OpenTimelineIO.

CDL Format Support

What formats does cdl_convert support?

Input formats:

  • Avid Log Exchange (ALE)

  • Film Log EDL Exchange (FLEx)

  • CMX EDL

  • XML Color Correction (cc)

  • XML Color Correction Collection (ccc)

  • XML Color Decision List (cdl)

  • OpenTimelineIO (OTIO) timeline files

  • Space separated CDL (RCDL) - Rhythm & Hues format

Output formats:

  • XML Color Correction (cc)

  • XML Color Correction Collection (ccc)

  • XML Color Decision List (cdl)

  • Space separated CDL (RCDL)

See Script Usage for examples of converting between formats.

Why don’t you support format X?

There are a few possible reasons:

  1. We haven’t had time yet - Building parsers takes time and testing

  2. We’re unaware it exists - The CDL ecosystem has many variants

  3. It’s on the roadmap - Check the GitHub issues

If you need support for a specific format, please create an issue on GitHub. It helps immensely to include:

  • A sample file in that format

  • Documentation or specification for the format

  • Your use case for needing this format

Does cdl_convert support OpenTimelineIO?

Yes, CDL Convert uses OpenTimelineIO for EDL parsing and can also read OTIO timeline files with embedded CDL metadata. See OTIO Format Support for details.

Project Structure

Why the underscore in the name?

cdl_convert started as a simple script to convert from one format to another. As such, it wasn’t named with the standards typically used for Python modules (which usually use all lowercase without underscores).

By the time the project grew large enough and was published on PyPI, it was already established in too many places to make changing easy. The name has been kept for consistency and to avoid breaking existing installations and documentation.

Is cdl_convert actively maintained?

For a long time, no. Let’s see how things go now.

The project has recently undergone significant modernization:

  • Updated to Python 3.11-3.14

  • Migrated to modern build system (Hatch/pyproject.toml)

  • Upgraded to latest OpenTimelineIO

  • Updated documentation

  • Migrated CI/CD to GitHub Actions

See Changelog for recent updates.

Why the ten year break between updates?

Work. When I started cdl_convert, I was a VFX artist who coded on the side. cdl_convert helped me make the transition to Pipeline programmer, where I started writing code daily and stopped having time to do it on the side. Since then, I’ve stopped coding daily and find more time in my off-hours to code again.

What’s new in version 1.0?

Version 1.0 is a major modernization release with:

  • OTIO backend for ALE and CMX - More robust EDL parsing

  • OTIO file support - Read .otio timeline files with CDL metadata

  • Type hints throughout - Better IDE support and code clarity

  • Modern Python features - pathlib, dataclasses, f-strings, match statements

  • Enhanced error handling - Specific exception types for better debugging

  • Hatch build system - Modern Python packaging

See Changelog for the complete list of changes.

Is version 1.0 compatible with my existing code?

The CLI and API should be compatible with tools written for version 0.9.2, however no warranties or guarantees are given. The public API remains the same, but with improvements like type hints and better error messages.

If you encounter compatibility issues, please report them on GitHub.

What are the breaking changes in 1.0?

  • Python 3.11+ required - Dropped Python 2.7-3.10 and PyPy

  • OpenTimelineIO required - Now a core dependency for EDL parsing

  • Windows 3.14 is not supported - Due to OTIO build issues

  • MediaRef URIs better preserved - Filenames now OS independent

Technical Questions

How does cdl_convert handle invalid CDL values?

By default, cdl_convert attempts to correct invalid values:

  • Negative slope, power, or saturation values are clipped to 0.0

  • Duplicate IDs are automatically renamed with a numeric suffix

You can enable strict mode with the --halt flag to fail on invalid values instead. See Script Usage for details.

Can I use cdl_convert as a Python library?

Absolutely! CDL Convert is designed to work both as a command-line tool and as a Python library. See Color Corrections and Color Collections for Python API examples.

Does cdl_convert validate CDL values?

Yes! Use the --check flag to validate CDL values and get warnings about potentially incorrect values:

  • Slope, Power, Saturation outside 0.1-3.0 range

  • Offset outside -1.0 to 1.0 range

See Script Usage for examples.

What’s the difference between ColorCorrection and ColorCollection?

  • ColorCorrection represents a single CDL with slope, offset, power, and saturation values

  • ColorCollection is a container that holds multiple ColorCorrections or ColorDecisions

See Classes for detailed API documentation.