Open Source API and interchange format for editorial timeline information.
Switch branches/tags
Nothing to show
Clone or download
ssteinbach and jminor Better dependency reporting for `pip` and `setuptools` (#397)
* Add code printing a helpful message if pip or setuptools is out of date.
* Float the versions of dependencies rather than explicitly pin them.
* Lock to pyside2 5.x
Latest commit bb60a6f Dec 7, 2018
Type Name Latest commit message Commit time
Failed to load latest commit information.
docs Small doc updates & clean up (#388) Nov 30, 2018
examples More examples & documentation (#344) Oct 23, 2018
opentimelineio Small doc updates & clean up (#388) Nov 30, 2018
opentimelineio_contrib Now passing track_kind to transition/dissolve creation in RV adapter (#… Nov 30, 2018
opentimelineview Small doc updates & clean up (#388) Nov 30, 2018
tests Hide deserialization methods of SerizableObject (#386) Nov 27, 2018
.codecov.yml Fix bugs revealed by or related to code coverage. (#298) Jul 27, 2018
.gitignore Plugin hooks (#351) Oct 25, 2018
.gitlab-ci.yml Updated build to include Python 3.6 (#291) Jul 30, 2018
.readthedocs.yml Overhaul of documentation system (#312) Oct 9, 2018
.travis.yml Add support for AAF unit tests in travis. (#370) Nov 12, 2018 Added Code of Conduct (#234) Feb 22, 2018 Wiki removal (#340) Oct 10, 2018
LICENSE.txt Burnin adapter (#167) Oct 5, 2017 new SchemaDef plugin type to define site-specific schemas (#342) Oct 24, 2018
Makefile Switch tox to use unittest instead of pytest (#352) Oct 24, 2018
NOTICE.txt Public beta (#140) Jul 28, 2017
OTIO_CLA_Corporate.pdf Public beta (#140) Jul 28, 2017
OTIO_CLA_Individual.pdf Public beta (#140) Jul 28, 2017 Add links to other plugins in read the docs to the readme. (#360) Nov 6, 2018
setup.cfg PyPi updates (#239) (#241) Apr 2, 2018 Better dependency reporting for `pip` and `setuptools` (#397) Dec 7, 2018
tox.ini Add support for AAF unit tests in travis. (#370) Nov 12, 2018


Supported VFX Platform Versions Supported Versions Build Status codecov docs

Main web site:



Discussion Group:!forum/open-timeline-io


OpenTimelineIO is currently in Public Beta. That means that it may be missing some essential features and there are large changes planned. During this phase we actively encourage you to provide feedback, requests, comments, and/or contributions.


OpenTimelineIO is an interchange format and API for editorial cut information. OTIO is not a container format for media, rather it contains information about the order and length of cuts and references to external media.

OTIO includes both a file format and an API for manipulating that format. It also includes a plugin architecture for writing adapters to convert from/to existing editorial timeline formats. It also implements a dependency- less library for dealing strictly with time, opentime.

You can provide adapters for your video editing tool or pipeline as needed. Each adapter allows for import/export between that proprietary tool and the OpenTimelineIO format.


Documentation, including quick start, architecture, use cases, API docs, and much more, is available on ReadTheDocs


OpenTimelineIO supports, or plans to support, conversion adapters for many existing file formats, such as Final Cut Pro XML, AAF, CMX 3600 EDL, etc.


Other Plugins

OTIO also supports several other kinds of plugins, for more information see:

  • Media Linkers - Generate media references to local media according to your local conventions.
  • HookScripts - Scripts that can run at various points during OTIO execution (ie before the media linker)
  • SchemaDefs - Define OTIO schemas.

Installing / Quick-Start

You can install OpenTimelineIO via

pip install opentimelineio

For more details, including how to run the included viewer program, see:

Example Usage

import opentimelineio as otio

timeline = otio.adapters.read_from_file("foo.aaf")
for clip in timeline.each_clip():
  print, clip.duration()

There are more code examples here:

Also, looking through the unit tests is a great way to see what OTIO can do:

OTIO includes a viewer program as well:

OTIO View Screenshot


If you want to contribute to the project, please see:

You can get the latest development version via:

git clone OpenTimelineIO

You can install development dependencies with pip install -e .[dev]

You can also install the PySide2 dependency with pip install -e .[view]

Currently the code base is written against python 2.7 and python 3.5, in keeping with the pep8 style. We ask that before you submit a pull request, you:

  • run make test -- to ensure that none of the unit tests were broken
  • run make lint -- to conform to pep8
  • run make coverage -- to detect code which isn't covered



For more information, please visit or or join our announcement mailing list:!forum/open-timeline-io