Beta 15 - September 2022
Pre-releaseSummary
This release introduces Media-multi references (by @rogernelson), spatial coordinates parameters (also by @rogernelson), otiotool
command line utility, a schema downgrading system (for writing OTIO files that are compatible with older versions of OTIO), as well as a number of other smaller bug fixes and enhancements across the core and adapters. This is the last version of OTIO that will support python 2.7.
Thank you to the many community members who contributed to this release!
Important Note About OTIO File Backwards Compatibility
This version of OTIO introduces a new version of the Clip schema, Clip.2 (with multiple media reference support). If you need to write out OTIO files that are compatible with older versions of the OTIO library, then you can use the new downgrade feature to save out OTIO files with Clip.1 schema.
Example using otioconvert
on the commandline:
❯ otioconvert -i tests/sample_data/nested_example.otio -o /var/tmp/v14_compat.otio -A target_schema_versions="{'Clip':1}" && grep "OTIO_SCHEMA.*Clip" /var/tmp/v14_compat.otio
26: "OTIO_SCHEMA": "Clip.1",
75: "OTIO_SCHEMA": "Clip.1",
105: "OTIO_SCHEMA": "Clip.1",
162: "OTIO_SCHEMA": "Clip.1",
192: "OTIO_SCHEMA": "Clip.1",
249: "OTIO_SCHEMA": "Clip.1",
280: "OTIO_SCHEMA": "Clip.1",
C++:
#include <iostream>
#include "opentimelineio/timeline.h"
namespace otio = opentimelineio::OPENTIMELINEIO_VERSION;
void
main()
{
otio::ErrorStatus err;
otio::SerializableObject::Retainer<otio::Timeline> timeline(
dynamic_cast<otio::Timeline*>(
otio::Timeline::from_json_file(
"tests/sample_data/nested_example.otio",
&err
)
)
);
otio::schema_version_map downgrade_manifest = {
{"Clip", 1},
};
timeline->to_json_file("/var/tmp/v14_compat.otio", &err, &downgrade_manifest);
}
python:
import opentimelineio as otio
tl = otio.adapters.read_from_file("tests/sample_data/nested_example.otio")
otio.adapters.write_to_file(
tl,
"/var/tmp/v14_compat.otio",
target_schema_versions={"Clip": 1}
)
Big Changes
- The OpenTimelineIO project was moved over to the ASWF organization, and a number of changes were made as part of the ASWF graduation process in:
- Technical Steering Committee Charter, GOVERNANCE, etc. by @jminor in #1057
- Prep for ASWF transfer by @jminor in #932
- More ASWF transition prep by @jminor in #1167
- Replaced @Pixar email addresses with @aswf email addresses. by @jminor in #1170
- OpenTimelineIO License & CLA Change by @jminor in #1285
- Updated verify_license.py to support more languages by @jminor in #1288
- Update links in readme to point to new ASWF url by @ssteinbach in #1302
- Updated URLs to new AcademySofwareFoundation GitHub org. by @jminor in #1303
- AAF Adapter:
- Merge spatial_coordinates to main by @rogernelson in #1219
- Media Multi-Reference Feature by @rogernelson in #1241
- Schema Downgrading System by @ssteinbach in #1387
- otiotool command line utility by @jminor in #1375
Breaking Changes
- Fixes #1188 BREAKING CHANGE: change "effect" argument to Gap constructor to "effects" by @visajshah in #1292
- Clip.2 schema as noted above
Other Changes
- R0.15.set dev version by @ssteinbach in #1128
- CI: switch platform versions back to -latest by @ssteinbach in #1129
- Fix RV plugin test timing by @rogernelson in #1147
- Fix RV plugin test for Mac by @rogernelson in #1149
- Update sdist to include submodules by @JeanChristopheMorinPerso in #1152
- Improve the developer quickstart documentation by @JeanChristopheMorinPerso in #1144
- Use platform specific command to find path by @ThomasWilshaw in #1143
- Fix code coverage report uploads by @JeanChristopheMorinPerso in #1189
- Add nearest_valid_timecode_rate function by @splidje in #1181
- Replace deprecated Pybind11 get_type() usages by py::type::of() by @JeanChristopheMorinPerso in #1194
- SVG adapter fixes by @KarthikRIyer in #1195
- Remove extra useless parameter from RationalTime.copy method by @JeanChristopheMorinPerso in #1198
- Update AAF Documentation Link by @camkerr in #1202
- Add enabled flag to Item by @ThomasWilshaw in #1175
- Add missing memo keyword argument to TimeTransform.deepcopy method by @JeanChristopheMorinPerso in #1203
- Kdenlive adapter: process recent project format by @vpinon in #1191
- On macOS build universal arm64 and x86_64 by @jminor in #1214
- Port to PySide6 by @darbyjohnston in #1221
- C++ tests by @darbyjohnston in #1161
- Don't skip asserts in unit test release builds by @rogernelson in #1236
- Keep markers at the track if
child_at_time()
found something that does not hold markers by @jchen9 in #1239 - otioview track and window fit improvements by @michdolan in #1237
- Install full OTIO Python env with CMake by @michdolan in #1238
- clang notices that constexpr can't be used on a mutating function by @meshula in #1242
- AAF Adapter: Mob transcription heuristics by @jchen9 in #1249
- Add ALE adapter argument
ale_name_column_key
by @jchen9 in #1248 - Support OTIO_PLUGIN_MANIFEST_PATH being set to an empty string by @avrata in #1253
- Fix missing init metadata by @JeanChristopheMorinPerso in #1251
- Add Python 3.10 to CI by @JeanChristopheMorinPerso in #1256
- Fix #1257 missing each_clip on Clip by @meshula in #1258
- Detect & use Imath from vfxplatform CY2019-2022 by @meshula in #1255
- Adapt changes between PySide2 and PySide6 by @jchen9 in #1262
- Copy core sample data used by contrib tests into the contrib area to better isolate contrib tests by @avrata in #1266
- Add a test case and fix for transcribing markers over a single audio AAF file by @jchen9 in #1259
- Support python 3 in the "rv_session" adapter. by @avrata in #1267
- Change angle include Imath to quote include, remove multiMediaReference prototype by @meshula in #1276
- Update test_v2d to support multiple exception types by @avrata in #1279
- Fix for external Imath, must set USE_DEPS_IMATH OFF by @meshula in #1273
- AAF Clip Enabled/Muting Update by @andrewmoore-nz in #1277
- fix #839 - FCP XML outputs not recognized by Resolve by @pedrolabonia in #1287
- Removed a vestigial "Foo" schema by @reinecke in #1306
- CII Best Practices badge by @jminor in #1304
- Update Pybind11 to 2.9.2 by @JeanChristopheMorinPerso in #1312
- Use py::module_local() for Imath bindings by @JeanChristopheMorinPerso in #1323
- Update feature matrix to mention that the AAF adapter now supports markers by @JeanChristopheMorinPerso in #1309
- Python bindings: raise proper exceptions for IO operations by @JeanChristopheMorinPerso in #1313
- Improve Python reference documentation by @JeanChristopheMorinPerso in #1209
- Use marker colors in otioview by @markreidvfx in #1340
- Prevent divide by zero and print warning if width is zero by @markreidvfx in #1346
- Cancel in-progress CI jobs for the same branch by @JeanChristopheMorinPerso in #1329
- Fix setuptools deprecation warnings by @JeanChristopheMorinPerso in #1317
- Revisited how transitions are handled by the cmx 3600 adapter. by @gplsteph in #1341
- Add unit tests in preparation for moving the aaf adapter by @markreidvfx in #1353
- Added SVG and PDF vector logos. by @jminor in #1360
- Fix lint issues by @JeanChristopheMorinPerso in #1370
- Close Temporary file handles in tests by @markreidvfx in #1363
- Python3 fixes for the shot_detect example by @ssteinbach in #1374
- Added documentation explaining contrib and outlining process around it by @reinecke in #1378
- Fixes and improvements for Kdenlive adapter by @jlskuz in #1390
- Load entrypoint plugins before builtin and contrib. by @markreidvfx in #1389
- Update pyaaf2 requirement from ~=1.4.0 to >=1.4,<1.7 by @dependabot in #1355
- Fix parsing of time_strings lacking leading zeroes by @meshula in #1297
- Add basic mingw_x86_64 build support by @markreidvfx in #1354
- Import _opentime before actually creating the bindings for _otio by @JeanChristopheMorinPerso in #1396
- Fix for SerializableCollection::children_if by @darbyjohnston in #1404
- Added OTIO_CORE 0.14.0 version_manifest. by @jminor in #1415
- Fix compiler warnings on Windows by @darbyjohnston in #1414
- Fix a few typos and cosmetics inconsistencies by @markreidvfx in #1416
- Release v0.15.0 changes by @ssteinbach in #1403
Dependency Version Bumps
- Bump src/deps/pybind11 from
7c58058
toe7e2c79
by @dependabot in #1125 - Bump src/deps/optional-lite from
52f2b61
to36c5b87
by @dependabot in #1097 - Bump src/deps/optional-lite from
36c5b87
toa006f22
by @dependabot in #1137 - Bump src/deps/optional-lite from
a006f22
toea502a6
by @dependabot in #1319 - Bump src/deps/optional-lite from
ea502a6
to5e4b776
by @dependabot in #1383 - Bump src/deps/rapidjson from
00dbcf2
to4d6cb08
by @dependabot in #1105 - Bump src/deps/rapidjson from
4d6cb08
toe4bde97
by @dependabot in #1217 - Bump src/deps/rapidjson from
e4bde97
to8261c1d
by @dependabot in #1240 - Bump src/deps/rapidjson from
8261c1d
to27c3a8d
by @dependabot in #1358 - Bump src/deps/rapidjson from
27c3a8d
to06d58b9
by @dependabot in #1388 - Bump actions/checkout from 2.3.4 to 2.3.5 by @dependabot in #1107
- Bump actions/checkout from 2.3.5 to 3 by @dependabot in #1227
- Bump src/deps/Imath from
8b3363a
tobd6f74c
by @dependabot in #1222 - Bump src/deps/Imath from
bd6f74c
tobd254da
by @dependabot in #1245 - Bump src/deps/Imath from
bd254da
to3ffb078
by @dependabot in #1291 - Bump src/deps/Imath from
3ffb078
to3ad5d4d
by @dependabot in #1324 - Bump actions/setup-python from 2.2.2 to 3 by @dependabot in #1226
- Bump src/deps/any from
f67bd5f
tobfc77f2
by @dependabot in #1357 - Bump readthedocs-sphinx-ext from 2.1.5 to 2.1.9 by @dependabot in #1397
New Contributors
- @ThomasWilshaw made their first contribution in #1143
- @camkerr made their first contribution in #1202
- @michdolan made their first contribution in #1237
- @andrewmoore-nz made their first contribution in #1277
- @pedrolabonia made their first contribution in #1287
- @visajshah made their first contribution in #1292
- @markreidvfx made their first contribution in #1340
- @gplsteph made their first contribution in #1341
- @jlskuz made their first contribution in #1390
Full Changelog: v0.14...v0.15