Skip to main content

tellers-timeline

The timeline engine for tools that make the cut.

PyPI crates.io Rust docs CI

Read timelines. Make edits. Keep everything in sync.

Install · Try it · Features · Standardization · Contribute

tellers-timeline is an open-source timeline engine, written in Rust and available in Python, built around OpenTimelineIO. Use it to build editors, automate cuts, and exchange timelines between tools.

Our ambition is full OTIO coverage, with an editing API that handles the work around the format: insert and overlap policies, linked audio and video, stable identity, media bounds, and document cleanup. We're also developing shared conventions for effects and IDs so more of an edit can travel between applications.

Install

Python — prebuilt wheels for Linux x86-64, macOS Intel and Apple Silicon, and Windows x86-64:

pip install tellers-timeline

Rust — add the library to your application:

cargo add tellers-timeline-core

Python imports tellers_timeline; Rust imports tellers_timeline_core. Building the Python package from source requires Rust and Cargo.

Make your first edit

Create a video track, insert a clip at two seconds, and serialize the timeline:

from tellers_timeline import Clip, MediaReference, Stack, Timeline, Track

stack = Stack([Track(kind="video", id="main-video")])
clip = Clip(
    5.0,
    {"DEFAULT_MEDIA": MediaReference("file:///media/shot.mov")},
    id="opening-shot",
)

stack.insert_item_at_time_by_id(
    "main-video",
    2.0,
    clip,
    "override",          # Replace material overlapping the new clip.
    "split_and_insert",  # Split a gap when inserting inside one.
)

timeline = Timeline(stack)
timeline.sanitize()
assert not timeline.validate()
print(timeline.to_json())

Editing APIs take time in seconds; OTIO serialization carries RationalTime values and rates. Load an existing document with Timeline.parse_json(text).

In Rust, work directly with the core types and shared effect conventions:

use tellers_timeline_core::{ColorLut, Timeline, Track, TrackKind};

let mut timeline = Timeline::default();
timeline.add_track(Track::new(TrackKind::Video, Some("main-video".into())));
timeline.push_color_lut(ColorLut::new("film-look").with_name("Film look"));
timeline.sanitize();

println!("{}", timeline.to_json().unwrap());

What works today

Full coverage is the goal. This table tracks the current implementation and the remaining work; it is not a claim of complete OTIO conformance.

Area Status Available today / remaining work
Timeline structure ✅ Supported Timelines, stacks of audio/video/other tracks, clips, gaps, and enabled state.
Time and ranges 🟡 Partial RationalTime, TimeRange, rate conversion, and editing in seconds. Broader OTIO time APIs remain.
Media references 🟡 Partial External and generator references, multiple references per clip, and available ranges. Missing references load as empty external references; image sequences remain.
Metadata and serialization ✅ Supported Arbitrary JSON metadata, OTIO JSON reading/writing, configurable numeric precision, and JSON Schema generation.
Markers ✅ Supported Point/range markers, names, comments, colors, IDs, and source-to-timeline time conversion.
Effect data 🟡 Partial Effect lists on clips, tracks, and stacks; Resolve parameter parsing; transform, crop, volume, and LUT helpers. Portable effect schemas remain a standardization target.
Insert and overlap policies ✅ Supported Push or override overlaps; insert before, after, nearest boundary, or split a gap to insert.
Timeline editing ✅ Supported Move, replace, split, resize, delete, reorder tracks, and find snap targets.
Audio/video sync and groups ✅ Supported Linked editing, sync partner placement, associated tracks, group discovery, and optional track normalization.
Sanitization ✅ Supported Clamp clips to available media, repair missing/duplicate track and item IDs, merge gaps, remove zero-length items/trailing gaps, and clean dangling sync links.
Validation 🟡 Partial Negative item-duration checks. Comprehensive structural and schema validation remains.
Rich text and styling ✅ Supported Resolve rich-text generators, timeline font declarations, named CSS text styles, and LUT asset/URL helpers.
Nested compositions ⬜ Missing Arbitrary stacks and tracks nested inside other compositions.
Transitions and time effects ⬜ Missing Transition-aware editing, speed changes, time warps, and freeze-frame semantics.
Full OTIO schema coverage ⬜ Missing Remaining object types, schema-version handling, and comprehensive interoperability fixtures.
Format adapters ⬜ Missing Native AAF, EDL, FCPXML, and other format adapters. Use the OTIO ecosystem to convert to/from .otio.
Language bindings 🟡 Partial Rust and typed Python APIs today; additional bindings are future work.

The library manipulates edit data. Media playback, effect rendering, and export encoding belong to the application using it.

Building a shared language for editing

OTIO is the foundation. Alongside broader format support, we want applications to agree on what an effect means, which object an edit addresses, and how related clips stay together. These are project conventions and proposals for wider interoperability; they are not ratified OTIO standards.

Convention Implemented today Standardization direction
Object identity metadata["tellers.ai"]["timeline_id"]; IDs on tracks, items, and markers; missing/duplicate track and item IDs repaired during sanitization. Stable identity and clear rules for moves, copies, splits, and imports across tools. IDs are strings, not a UUID requirement.
Effect identity and parameters LUTs use Effect.1 with effect_name: "tellers.ai.ColorLut" and parameters under metadata["tellers.ai"]["parameters"]. A documented, versioned vocabulary for portable effects, parameter units, defaults, and evaluation order.
Transform, crop, and volume Read/write helpers currently use Resolve representations. Shared effect schemas and mappings between application-specific encodings.
Color grading assets Ordered LUTs on clips, video tracks, and the stack; persistent asset_id, resolvable parameters.cube_url. Predictable grading stages and a common distinction between asset identity and temporary delivery URLs.
Sync and edit groups Sync links use Resolve_OTIO["Link Group ID"]; edit groups use tellers.ai["Tellers Group ID"]. Associated tracks are computed. Portable sync/group semantics without persisting redundant track associations.
Text and fonts tellers.ai.availableFonts and tellers.ai.textStyles; rich-text generator helpers. Portable typography, named styles, and text generator conventions.
Provenance tellers.ai.created_by on markers and automatically created tracks. Documented creator/provenance semantics, with room to separate user identity from automatic creation.

Bring real timelines, editor integrations, and competing representations. The standardization work should be shaped by interoperability tests and adoption.

Explore and build

Built by Tellers for timelines that can move between tools.

Metadata

Release files for tellers-timeline 0.1.4

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

Source distribution (sdist)

Source distribution for tellers-timeline 0.1.4
File Size Uploaded Provenance Actions
tellers_timeline-0.1.4.tar.gz 239.2 kB With provenance Details for tellers_timeline-0.1.4.tar.gz

Built distributions (wheels)

Table of built distributions (wheels) for tellers-timeline 0.1.4
File Actions
tellers_timeline-0.1.4-cp38-abi3-win_amd64.whl CPython 3.8 abi3 Windows x86-64 Details for tellers_timeline-0.1.4-cp38-abi3-win_amd64.whl
tellers_timeline-0.1.4-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.8 abi3 Linux glibc 2.17+ x86-64 Details for tellers_timeline-0.1.4-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
tellers_timeline-0.1.4-cp38-abi3-macosx_11_0_arm64.whl CPython 3.8 abi3 macOS 11.0+ ARM64 Details for tellers_timeline-0.1.4-cp38-abi3-macosx_11_0_arm64.whl
tellers_timeline-0.1.4-cp38-abi3-macosx_10_12_x86_64.whl CPython 3.8 abi3 macOS 10.12+ x86-64 Details for tellers_timeline-0.1.4-cp38-abi3-macosx_10_12_x86_64.whl

Total release size: 4.5 MB

Release files / tellers_timeline-0.1.4.tar.gz

Download URL tellers_timeline-0.1.4.tar.gz
Size 239.2 kB
Tags Source
SHA-256 checksum
How to use checksums
c60ae8c7cfdddc5386368cc6999175b16e313a05df186a38c11b01f1a12a6952
BLAKE2b-256 checksum
How to use checksums
9b6ff997ee8b51aece925e5afb0f1e530c737f3e6a0230bdb36d35be3a0f1162
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 Oct 19, 2026.

Transparency log

Release files / tellers_timeline-0.1.4-cp38-abi3-win_amd64.whl

Download URL tellers_timeline-0.1.4-cp38-abi3-win_amd64.whl
Size 985.8 kB
Tags CPython 3.8 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
bc18b5d9c75867f75f5aafc737d5287dfd37a13e6a62b08d851d65d06a42b90e
BLAKE2b-256 checksum
How to use checksums
47c647eabeda7c18f095ab302de75042de316f0725aad5fef23ed68079aa46d8
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 Oct 19, 2026.

Transparency log

Release files / tellers_timeline-0.1.4-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL tellers_timeline-0.1.4-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 1.2 MB
Tags CPython 3.8 Linux glibc 2.17+ x86-64 abi3
SHA-256 checksum
How to use checksums
ce2e39c5ef3d6ae4dabbf1612753dffe72684d7793cc78d64ce7b97b03211ca8
BLAKE2b-256 checksum
How to use checksums
395a5fbca106b4ba2752b8e021843e70085c01da86e4afa8d9162038d9d5f665
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 Oct 19, 2026.

Transparency log

Release files / tellers_timeline-0.1.4-cp38-abi3-macosx_11_0_arm64.whl

Download URL tellers_timeline-0.1.4-cp38-abi3-macosx_11_0_arm64.whl
Size 1.0 MB
Tags CPython 3.8 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
77d92b4c0efba82d46fb4736b5800c18b49e02d9c5ed9e22f876afbc951135e7
BLAKE2b-256 checksum
How to use checksums
46e79b3f69762e577e7aa91c019a7a42da4a2ffadd306280a5beaddc35731657
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 Oct 19, 2026.

Transparency log

Release files / tellers_timeline-0.1.4-cp38-abi3-macosx_10_12_x86_64.whl

Download URL tellers_timeline-0.1.4-cp38-abi3-macosx_10_12_x86_64.whl
Size 1.1 MB
Tags CPython 3.8 abi3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
f2481e158376568bffb0e8fc4cd599dd1e28a7d06ce20d250a10745bdd8552c9
BLAKE2b-256 checksum
How to use checksums
2e0c592fe49f1976842a12fb781d856894fd07e6eea60ac40e25cc6c3b461f1d
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 Oct 19, 2026.

Transparency log

Security for tellers-timeline 0.1.4

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.

Full provenance

All 5 files in this release have been uploaded with provenance metadata.

Select from 5 files

Attestation for tellers_timeline-0.1.4.tar.gz

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 Oct 19, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.4 This release

5 release files Full provenance

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