Skip to main content

Raven - OTIO Viewer

An experimental re-write of OpenTimelineIO's otioview timeline viewer application.

This tool aims to replace otioview but it is missing a few essential features (see "Help Wanted" and "To Do" below). Contributions are welcome!

build

screenshot

demo

Dependencies

macOS:

  • Standard Apple developer toolchain (installed with Xcode)
  • A recent version of CMake

Windows:

  • Standard Microsoft developer toolchain (installed with Visual Studio)
  • A recent version of CMake

Linux (Ubuntu, or similar):

  • sudo apt-get install libglfw3-dev libgtk-3-dev
  • A recent version of CMake

Note: Before building, please ensure that you clone this project with the --recursive flag. This will also clone and initialize all of the submodules that this project depends on. Downloading a ZIP file from GitHub will not work.

Building (macOS, Windows, Linux)

Spin up your favorite terminal and follow these steps:

  git clone --recursive https://github.com/OpenTimelineIO/raven.git
  cd raven
  mkdir build
  cd build
  cmake ..
  cmake --build . -j
  ./raven ../example.otio

Building (WASM via Emscripten)

You will need to install the Emscripten toolchain first.

  git clone --recursive https://github.com/OpenTimelineIO/raven.git
  cd raven
  mkdir build-web
  cd build-web
  emcmake cmake ..
  cmake --build .
  emrun ./raven.html

See also: serve.py as an alternative to emrun, and as a reference for which HTTP headers are needed to host the WASM build.

You can load a file into WASM Raven a few ways:

  • Add a JSON string to Module.otioLoadString in the HTML file
  • Add a URL to Module.otioLoadURL in the HTML file
  • Call Module.LoadString(otio_data) at runtime
  • Call Module.LoadURL(otio_url) at runtime

Note: The WASM build of raven is missing some features - see the Help Wanted section below.

Building (as a Python package)

Raven can be built and embedded inside a Python package for easy distribution alongside other OTIO Python packages. For simplicity, we recommend using UV for builds and running Raven from the Python package.

# clone the code
git clone --recursive https://github.com/OpenTimelineIO/raven.git
cd raven

# run Raven from source using UV
uv run raven example.otio

If you want to build a Python wheel to put in a wheelhouse / package index:

# build Python wheel in dist/*.whl
uv build

Troubleshooting

If you have trouble building, these hints might help...

If you cloned the repo without --recursive then you will need to init/update submodules:

% git submodule update --init --recursive

If you downloaded a ZIP archive from GitHub instead of cloning with git, then you are missing the submodules entirely. You need to use git clone instead of downloading a ZIP file.

You might be missing some dependencies (see above).

See also .github/workflows/build.yaml for a working example of building on each of the platforms listed above.

Example files

The examples folder contains some example .otio files for testing.

The El Fuente and Meridian examples provided by Netflix (under the Creative Commons Attribution 4.0 International Public License) were converted to OTIO, along with several other examples here.

Thanks

Raven was made possible by these excellent libraries:

Help Wanted

  • Fully standalone cross-platform build:
  • JSON Inspector:
    • When loading a very large OTIO, the JSON inspector can double the load time (full feature film ~45 seconds)
  • Multiple selection, copy, paste, undo, redo
  • Various operations from otiotool

To Do

  • Feature parity with otioview:
    • Double-click to expand/collapse nested compositions
    • Arrow keys to navigate by selection
      • This sort of works already via ImGui's navigation system, but it is too easy to get stuck on a marker, or to walk out of the timeline.
      • Can this be rectified by turning off keyboard navigation on the widgets outside the timeline?
    • Add support for adapters
      • Use embedded Python, or run otioconvert via pipe?
      • Constraint: We want to ensure this tool stays light weight, and works in the browser.
  • Enhancements:
    • Double-click a Clip to expand/collapse it's media reference
    • Show time-warped ruler inside media reference or nested composition
  • Performance optimization:
    • Avoid rendering tracks outside the scroll region
    • Avoid rendering items smaller than a tiny sliver
    • Experiment with drawing the timeline without using a Dear ImGui table
      • Results so far: aligning multiple scroll regions causes 1-frame lag which is ugly
  • Inspector:
    • Show summarized timing information (ala otiotool --inspect)
    • Range slider could be useful:
    • Per-schema inspector GUI
      • Items:
        • enable/disable
      • Clips:
        • show media_reference(s)
        • adjust available_range of media reference
        • edit target_url
      • Transitions:
        • nicer GUI for adjusting in/out offsets
        • avoid extending beyond range of adjacent Items
        • avoid overlap with adjacent Transitions
      • Markers:
        • color picker
      • Compositions:
        • show source_range limits in the timeline
      • LinearTimeWarp:
        • time_scale graph could be nicer
      • FreezeFrame:
      • UnknownSchema:
        • Can we show properties via SerializableObject's introspection?

Metadata

Release files for opentimelineio-raven 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for opentimelineio-raven 0.1.0
File Size Uploaded
opentimelineio_raven-0.1.0.tar.gz 15.7 MB Details

Built distributions (wheels)

Table of built distributions (wheels) for opentimelineio-raven 0.1.0
File
opentimelineio_raven-0.1.0-py3-none-win_amd64.whl Python 3 none Windows x86-64 Details
opentimelineio_raven-0.1.0-py3-none-manylinux_2_28_x86_64.whl Python 3 none Linux glibc 2.28+ x86-64 Details
opentimelineio_raven-0.1.0-py3-none-manylinux_2_28_aarch64.whl Python 3 none Linux glibc 2.28+ ARM64 Details
opentimelineio_raven-0.1.0-py3-none-macosx_10_15_universal2.whl Python 3 none macOS 10.15+ universal2 (ARM64, x86-64) Details

Total release size: 58.7 MB

Release files / opentimelineio_raven-0.1.0.tar.gz

Download URL opentimelineio_raven-0.1.0.tar.gz
Size 15.7 MB
Tags Source
SHA-256 checksum
How to use checksums
18b7e6875906aae16aa71d69033fba83095053b6809e162d2232832540da8bfb
BLAKE2b-256 checksum
How to use checksums
b59a5a6d458f71712fd1ab3261a6b03cb33aa04e37eedf1d5cd0ca00c2d06573
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 23, 2026.

Transparency log

Release files / opentimelineio_raven-0.1.0-py3-none-win_amd64.whl

Download URL opentimelineio_raven-0.1.0-py3-none-win_amd64.whl
Size 3.9 MB
Tags Python 3 Windows x86-64
SHA-256 checksum
How to use checksums
1be1eb71b244da17df0d8e49085276f185e1db78218fb13b1aff30cbc2ffcea3
BLAKE2b-256 checksum
How to use checksums
cdc5ca2ae8d5d718af2dcccdfcbd89eeab9dcb1b1722292b39b9b388dabea713
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 23, 2026.

Transparency log

Release files / opentimelineio_raven-0.1.0-py3-none-manylinux_2_28_x86_64.whl

Download URL opentimelineio_raven-0.1.0-py3-none-manylinux_2_28_x86_64.whl
Size 16.9 MB
Tags Linux glibc 2.28+ x86-64 Python 3
SHA-256 checksum
How to use checksums
648cef40cf56cbc31238cfcd2b3d8e1d1a3958177a8366bae36a59cb453bcaa8
BLAKE2b-256 checksum
How to use checksums
1e1d32056bb91bbc3b98142de4bb4d1e4d5884d1eccf79e6fe4abd79551c1931
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 23, 2026.

Transparency log

Release files / opentimelineio_raven-0.1.0-py3-none-manylinux_2_28_aarch64.whl

Download URL opentimelineio_raven-0.1.0-py3-none-manylinux_2_28_aarch64.whl
Size 15.7 MB
Tags Linux glibc 2.28+ ARM64 Python 3
SHA-256 checksum
How to use checksums
941230130a878b6d986ae743a7fad27354ccd60498d1a68f99ec2f9a93da0243
BLAKE2b-256 checksum
How to use checksums
816b9c5d1429a1dc331fd0b83b1c1a9b260f6b9a1dc344492ac550028d9e8697
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 23, 2026.

Transparency log

Release files / opentimelineio_raven-0.1.0-py3-none-macosx_10_15_universal2.whl

Download URL opentimelineio_raven-0.1.0-py3-none-macosx_10_15_universal2.whl
Size 6.6 MB
Tags Python 3 macOS 10.15+ universal2 (ARM64, x86-64)
SHA-256 checksum
How to use checksums
61f19baadb925f65fab95d524cf87959534174b94c20b09dc4e4b243c9f4c2c7
BLAKE2b-256 checksum
How to use checksums
716e96f6c6ea6147d420ab9fe592a0b98c9b6395b5eff2c116baf58d7edb63ab
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 23, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.0 This release

5 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page