AheadIO / raven

Raven - Experimental OpenTimelineIO Viewer

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Raven - OTIO Viewer

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

build

screenshot

demo

Building (macOS, Windows, Linux)

% mkdir build
% cd build
% cmake ..
% cmake --build .
% ./raven ../example.otio

Building (WASM via Emscripten)

% 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.

Toubleshooting

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

You might need to init/update submodules:

% git submodule init % git submodule update

See .github/workflows/build.yaml for more details.

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:
    • Mac
    • Linux
      • CI is building, does it actually run?
    • Emscripten
      • Where can we host this? (needs specific HTTP headers. See serve.py)
      • Needs file open/save dialog
        • Maybe this could work in app.cpp's OpenFileDialog() and SaveFileDialog()?
      • Avoid continuous rendering
        • Is there an equivalent to ImGui_ImplGlfw_WaitForEvent() that works with SDL2 + Emscripten?
    • Easily downloadable pre-built binaries
  • JSON Inspector:
    • Edit JSON to replace selected object?
      • This would let you explore & understand how changes affect the composition
    • When loading a very large OTIO, the JSON inspector can double the load time
  • Multiple selection, copy, paste, undo, redo
  • Various operations from otiotool

To Do

  • Double-click to expand/collapse nested compositions
  • 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
  • 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?
  • Multiple timelines in separate tabs or windows?
    • Look at ImGui document-based demo code for reference.
    • Might be fine to just open multiple instances of the app.
  • 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?

About

Raven - Experimental OpenTimelineIO Viewer

License:Apache License 2.0


Languages

Language:C++ 73.0%Language:C 25.8%Language:Objective-C++ 0.5%Language:CMake 0.4%Language:HTML 0.1%Language:PHP 0.1%Language:Python 0.0%