{"id":24173,"library":"opentimelineio","title":"OpenTimelineIO","description":"OpenTimelineIO (OTIO) is an interchange format and Python API for editorial timeline information. It provides a common data model for representing timelines, clips, effects, markers, and transitions, and includes adapters for reading/writing various editorial formats (e.g., AAF, CMX 3600 EDL, Final Cut Pro XML). The current version is 0.18.1 (Beta). Release cadence is approximately two major beta releases per year. Requires Python >3.9.","status":"active","version":"0.18.1","language":"python","source_language":"en","source_url":"https://github.com/AcademySoftwareFoundation/OpenTimelineIO","tags":["timeline","editorial","interchange","vfx","film","video editing","opentimelineio"],"install":[{"cmd":"pip install opentimelineio","lang":"bash","label":"Install core library"},{"cmd":"pip install opentimelineio-plugins","lang":"bash","label":"Install extra adapters (optional)"}],"dependencies":[{"reason":"Required for color management functionality.","package":"PyOpenColorIO","optional":true}],"imports":[{"note":"Module name is lowercase; case-sensitive on case-sensitive filesystems.","wrong":"import OpenTimelineIO","symbol":"opentimelineio","correct":"import opentimelineio as otio"},{"note":"Use the full package name on import; the alias 'otio' is conventional but not an importable module.","wrong":"from otio import schema","symbol":"otio.schema","correct":"from opentimelineio import schema"},{"note":"adapter aliases may shadow; always import from opentimelineio.","wrong":"import adapters","symbol":"otio.adapters","correct":"from opentimelineio import adapters"}],"quickstart":{"code":"import opentimelineio as otio\n\n# Create a timeline\ntimeline = otio.schema.Timeline(\"example_timeline\")\ntrack = otio.schema.Track(\"video_track\", kind=\"Video\")\ntimeline.tracks.append(track)\n\n# Create a clip from an external reference\nclip = otio.schema.Clip(\n    name=\"shot1\",\n    media_reference=otio.schema.ExternalReference(\n        target_url=\"/path/to/file.mov\",\n        available_range=otio.opentime.TimeRange(\n            start_time=otio.opentime.RationalTime(0, 24),\n            duration=otio.opentime.RationalTime(48, 24)\n        )\n    )\n)\ntrack.append(clip)\n\n# Serialize to JSON (native format)\nprint(otio.adapters.write_to_string(timeline, \"otio_json\"))","lang":"python","description":"Creates a simple timeline with one video track and a clip, then outputs as OTIO JSON."},"warnings":[{"fix":"Install OpenTimelineIO-Plugins package.","message":"Adapter extraction: As of v0.17.0, many file format adapters (AAF, EDL, FCP XML, etc.) have been moved to the separate `opentimelineio-plugins` package. They are no longer included in the core `opentimelineio` install. If you need those adapters, install `pip install opentimelineio-plugins`.","severity":"breaking","affected_versions":">=0.17.0"},{"fix":"Remove any imports of `opentimelineio.viewers` or usage of OTIOView.","message":"OTIOView removed: The `OTIOView` graphical viewer utility was removed from the core library in v0.18.0. Use alternative viewers or implement your own with the core API.","severity":"deprecated","affected_versions":">=0.18.0"},{"fix":"Use `import opentimelineio` (lowercase) always.","message":"Case-sensitive imports: The Python package name is all lowercase `opentimelineio`. Many users mistakenly use `OpenTimelineIO` (mixed case) as the module name, which fails on Linux/macOS.","severity":"gotcha","affected_versions":"all"},{"fix":"Update code to handle the optional `comment` attribute on Marker objects.","message":"Schema changes: The `Marker` schema gained a `comment` field in v0.16.0. Older code that assumes Marker only has name and marked_range may break when reading files written with newer versions.","severity":"gotcha","affected_versions":">=0.16.0"},{"fix":"Check the `enabled` attribute when iterating over effects; default is True.","message":"Effect 'enabled' flag: The `Effect` schema now includes an `enabled` boolean field (added in v0.18.0). Older code may ignore this field, causing subtle behavior differences when effects are disabled.","severity":"gotcha","affected_versions":">=0.18.0"}],"env_vars":null,"last_verified":"2026-05-01T00:00:00.000Z","next_check":"2026-07-30T00:00:00.000Z","problems":[{"fix":"Run `pip install opentimelineio` in the same environment where your script runs.","cause":"Package not installed or installed in a different Python environment.","error":"ModuleNotFoundError: No module named 'opentimelineio'"},{"fix":"Install `pip install opentimelineio-plugins` and import from `opentimelineio.adapters` (the core package now includes a thin wrapper that finds adapters from plugins).","cause":"User tried to import adapters from a separate package after v0.17.0 extraction.","error":"ModuleNotFoundError: No module named 'opentimelineio_adapters' or 'otio_adapters'"},{"fix":"Use explicit submodule import: `from opentimelineio import schema` or `import opentimelineio.schema`.","cause":"Incorrect import pattern (e.g., `import opentimelineio` and then `opentimelineio.schema` should work; but if user did `from opentimelineio import *` submodules may not be imported).","error":"AttributeError: module 'opentimelineio' has no attribute 'schema'"},{"fix":"Ensure that the media_reference has an `available_range` set before calling timeline methods that compute synchronization.","cause":"Attempting to compute a synchronized time range when the media reference does not have a defined available_range or the range is undefined.","error":"opentimelineio.exceptions.CannotComputeSynchronizationException: ..."}],"ecosystem":"pypi","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}