Skip to main content

License Build Status PyPI

tlRender Icon tlRender

tlRender is an open source library for building playback and review applications for visual effects, film, and animation.

The library can render and playback timelines with multiple video clips, image sequences, audio clips, and transitions. Examples are provided for integrating the library with OpenGL applications.

The library is written in C++ and uses the CMake build system, with Python bindings on PyPI:

pip install tlRender

These screenshots show an example application built with tlRender. The application is comparing two images with a wipe and horizontal layout.

player 1 player 2

Features:

  • Support for timelines, image sequences, movies, and audio files
  • A/B comparison with wipe, overlay, and difference modes
  • Color management with OpenColorIO
  • Multi-track audio with variable speed and reverse playback
  • Experimental support for USD files
  • Available for Linux, macOS, and Windows

Quick start

A window that plays a timeline, movie, or image sequence given on the command line.

C++

#include <tlRender/UI/Init.h>
#include <tlRender/UI/Viewport.h>
#include <tlRender/Timeline/Player.h>

#include <ftk/UI/App.h>
#include <ftk/UI/MainWindow.h>

#include <iostream>

using namespace ftk;

int main(int argc, char** argv)
{
    try
    {
        // Create the context and application.
        auto context = Context::create();
        tl::ui::init(context);
        auto input = CmdLineArg<std::string>::create(
            "input", "A timeline, movie, or image sequence.");
        auto app = App::create(
            context, argc, argv, "simple", "Simple player example.", { input });
        if (app->hasCmdLineHelp())
            return 0;

        // Create a timeline and a player for it.
        auto timeline = tl::Timeline::create(context, Path(input->getValue()));
        auto player = tl::Player::create(context, timeline);

        // Show the player in a window.
        auto window = MainWindow::create(context, app);
        auto viewport = tl::ui::Viewport::create(context);
        viewport->setPlayer(player);
        window->setWidget(viewport);

        // Start playback and run the application.
        player->setPlayback(tl::Playback::Forward);
        app->run();
    }
    catch (const std::exception& e)
    {
        std::cout << "ERROR: " << e.what() << std::endl;
        return 1;
    }
    return 0;
}

Python

The same player, after pip install tlRender:

import feather_tk as ftk
import tlrender as tl
import sys

# Create the context and application.
context = ftk.Context()
tl.ui.init(context)
input = ftk.CmdLineArgString("input", "A timeline, movie, or image sequence.")
app = ftk.App(context, sys.argv, "simple", "Simple player example.", [input])
if app.hasCmdLineHelp:
    sys.exit(0)

# Create a timeline and a player for it.
timeline = tl.Timeline(context, ftk.Path(input.value))
player = tl.Player(context, timeline)

# Show the player in a window.
window = ftk.MainWindow(context, app)
viewport = tl.ui.Viewport(context)
viewport.player = player
window.widget = viewport

# Start playback and run the application.
player.playback = tl.Playback.Forward
app.run()

The examples directory has fuller players in both languages, with playback controls and a timeline.

Web Player

An experimental build of the example player runs in the browser, playing movies with the WebCodecs API:

The "url" query plays a movie from any host that allows cross-origin range reads.

Python

The Python bindings are one wheel per platform for CPython 3.12 and later, built on the feather-tk wheel, which pip installs with them, and OpenTimelineIO:

import opentimelineio as otio
import feather_tk as ftk
import tlrender as tl

The wheel has only the FFmpeg codecs that need no patent license; build from source for the rest. OpenTimelineIO does not publish wheels for every platform tlRender does, so on some pip builds it from source, which needs a C++ compiler.

The Python examples show the API in use. The wheel also carries the C++ libraries, headers, and CMake package, so a project with its own bindings can build against the same installation:

cmake -DtlRender_DIR="$(python -c "import tlrender; print(tlrender.get_cmake_dir())")" ...

tlRender's package finds feather-tk's in the feather_tk package beside it.

Building Dependencies

A CMake super build script is provided to build all of the dependencies from source.

Build options go in etc/Config/local.cmake, which is not tracked. For example, to enable USD (building USD also requires Python 3):

set(TLRENDER_USD ON CACHE BOOL "")

Required dependencies:

Optional dependencies:

Building on Linux

Requirements:

  • Git
  • CMake 3.31

Debian

Install system packages:

sudo apt-get install build-essential git cmake xorg-dev libglu1-mesa-dev mesa-common-dev mesa-utils libasound2-dev libpulse-dev libva-dev libdrm-dev libwayland-dev wayland-protocols libxkbcommon-dev libegl1-mesa-dev libdecor-0-dev

The Wayland packages are optional; without them SDL is built with X11 only and runs through XWayland on a Wayland desktop.

Rocky 9

Install system packages:

sudo dnf install git libX11-devel libXrandr-devel libXinerama-devel libXcursor-devel libXi-devel mesa-libGL-devel pipewire-devel libva-devel libdrm-devel wayland-devel wayland-protocols-devel libxkbcommon-devel mesa-libEGL-devel libdecor-devel

Rocky 8

Install system packages:

sudo dnf install git libX11-devel libXrandr-devel libXinerama-devel libXcursor-devel libXi-devel mesa-libGL-devel pipewire-devel libva-devel libdrm-devel wayland-devel wayland-protocols-devel libxkbcommon-devel mesa-libEGL-devel

Install newer compiler:

sudo dnf install gcc-toolset-13

Enable newer compiler:

scl enable gcc-toolset-13 bash

NVIDIA hardware decoding loads the driver's CUDA library at run time. On RHEL family systems that is a separate package:

sudo dnf install nvidia-driver-cuda-libs

Build

Clone the repository:

git clone https://github.com/grizzlypeak3d/tlRender.git

Run the super build script:

sh tlRender/sbuild-linux.sh

Try running the tlplay application:

./build-Release/bin/tlplay/tlplay tlRender/etc/SampleData/MultipleClips.otio

Example running gcovr for code coverage:

gcovr -r ../../../../lib --html --object-directory lib --html-details --output gcov.html lib/tlCore lib/tlIO lib/tlTimeline

Building on macOS

Requirements:

  • Git
  • Xcode
  • CMake 3.31

Clone the repository:

git clone https://github.com/grizzlypeak3d/tlRender.git

Run the super build script:

sh tlRender/sbuild-macos.sh

Try running the tlplay application:

./build-Release/bin/tlplay/tlplay tlRender/etc/SampleData/MultipleClips.otio

These aliases are convenient for switching between architectures:

alias arm="env /usr/bin/arch -arm64 /bin/zsh --login"
alias intel="env /usr/bin/arch -x86_64 /bin/zsh --login"

Building on Windows

Requirements:

Open the Visual Studio command console "x64 Native Tools Command Prompt for VS 2022". This can be found in the Start menu, in the "Visual Studio 2022" folder.

Clone the repository:

git clone https://github.com/grizzlypeak3d/tlRender.git

Run the super build script:

tlRender\sbuild-win.bat

Try running the tlplay application:

set PATH=%CD%\install-Release\bin;%PATH%
.\build-Release\bin\tlplay\Release\tlplay tlRender\etc\SampleData\MultipleClips.otio

Metadata

Release files for tlRender 0.22.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 tlRender 0.22.0
File Size Uploaded
tlrender-0.22.0.tar.gz 44.4 MB Details

Built distributions (wheels)

Table of built distributions (wheels) for tlRender 0.22.0
File
tlrender-0.22.0-cp312-abi3-win_amd64.whl CPython 3.12 abi3 Windows x86-64 Details
tlrender-0.22.0-cp312-abi3-manylinux_2_28_x86_64.whl CPython 3.12 abi3 Linux glibc 2.28+ x86-64 Details
tlrender-0.22.0-cp312-abi3-manylinux_2_28_aarch64.whl CPython 3.12 abi3 Linux glibc 2.28+ ARM64 Details
tlrender-0.22.0-cp312-abi3-macosx_11_0_arm64.whl CPython 3.12 abi3 macOS 11.0+ ARM64 Details
tlrender-0.22.0-cp312-abi3-macosx_10_15_x86_64.whl CPython 3.12 abi3 macOS 10.15+ x86-64 Details

Total release size: 256.2 MB

Release files / tlrender-0.22.0.tar.gz

Download URL tlrender-0.22.0.tar.gz
Size 44.4 MB
Tags Source
SHA-256 checksum
How to use checksums
51b322ac90eb6683fcfb0c914baa985afebab5140d3cb81003df8e91635f2ab2
BLAKE2b-256 checksum
How to use checksums
a9eda9b810788d8f83337b773e8792b59161d244b3e5255a88baccfbe76b9c23
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 20, 2026.

Transparency log

Release files / tlrender-0.22.0-cp312-abi3-win_amd64.whl

Download URL tlrender-0.22.0-cp312-abi3-win_amd64.whl
Size 35.5 MB
Tags CPython 3.12 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
462c84af53605508b8de6298d0d9bee8d0351271388cc8fe7f1d0ce25ca1b3c0
BLAKE2b-256 checksum
How to use checksums
235d4df454c17663f3e54f7e6dbbb771fc0ca07d4d760684663d0b97cd94d9d9
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 20, 2026.

Transparency log

Release files / tlrender-0.22.0-cp312-abi3-manylinux_2_28_x86_64.whl

Download URL tlrender-0.22.0-cp312-abi3-manylinux_2_28_x86_64.whl
Size 48.5 MB
Tags CPython 3.12 Linux glibc 2.28+ x86-64 abi3
SHA-256 checksum
How to use checksums
d2c2e0045f85a522187dee1a15989db9afda93cea2afae0e96927731cd13f27a
BLAKE2b-256 checksum
How to use checksums
e012396ec85ae804077a035e1fa486827e55d316c5c24dcb38e649274e4668cd
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 20, 2026.

Transparency log

Release files / tlrender-0.22.0-cp312-abi3-manylinux_2_28_aarch64.whl

Download URL tlrender-0.22.0-cp312-abi3-manylinux_2_28_aarch64.whl
Size 45.9 MB
Tags CPython 3.12 Linux glibc 2.28+ ARM64 abi3
SHA-256 checksum
How to use checksums
cfb2394d11301aa8b47cbab7ae0172ea89dcf0ac58d9ab148987818bfdc5ded4
BLAKE2b-256 checksum
How to use checksums
70471fe1a0694b53332eb03d40f21f6f784eaeeb97b3fd8f3c55cc6b24b8d72d
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 20, 2026.

Transparency log

Release files / tlrender-0.22.0-cp312-abi3-macosx_11_0_arm64.whl

Download URL tlrender-0.22.0-cp312-abi3-macosx_11_0_arm64.whl
Size 38.0 MB
Tags CPython 3.12 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
944b2c99f0d58aba76866f86a12e24238f4f9c0b2268a4c9d164d5f902f262e8
BLAKE2b-256 checksum
How to use checksums
3edb9bed9471a78772fcd130fc237cb532f1e56d25515b504d93a9d80a93299f
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 20, 2026.

Transparency log

Release files / tlrender-0.22.0-cp312-abi3-macosx_10_15_x86_64.whl

Download URL tlrender-0.22.0-cp312-abi3-macosx_10_15_x86_64.whl
Size 43.9 MB
Tags CPython 3.12 abi3 macOS 10.15+ x86-64
SHA-256 checksum
How to use checksums
cd1bd30703da90b3d6f03c16fe88fd7ebbca83213e60f870e2ea80ab1d7752a3
BLAKE2b-256 checksum
How to use checksums
6e723abb1097e0e07b24b6f6727545b4e4a5c5f96f3bd3c5f770c38954d1ad4b
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 20, 2026.

Transparency log

Release history Release notifications | RSS feed

0.23.0

6 release files

This release

0.22.0 This release

6 release files

0.21.2

6 release files

0.21.1

6 release files

0.21.0

6 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