Skip to content

patternleaf/nlets

Repository files navigation

nlets

nlets stands for Non-Linear (Media) Editor in TypeScript. As of late March 2025, this project is still a work in progress and is not suitable for general use.

Screenshot 2025-03-26 at 11 58 13 AM

nlets-core

The core model is pretty simple: it provides a Timeline abstraction that has Tracks. Tracks have Events. Events have timestamps and can carry arbitrary data. One kind of event is a RegionEvent, which just points to a Region. A Region in turn points to a Source and specifies a time range to play within that source. Another kind of event is a KeyframeEvent with which you might provide automation or animation over some parameters while playing back.

At runtime, model objects live in a directed acyclic graph with a Project at its root, and are additionally housed in an ObjectStore. The store/graph combo supports serialization, transactions, and undo/redo.

That's kinda it!

There are also base implementations of things like playheads, clipboards, drag and drop, and stuff like media caches. nlets relies heavily on mobx for its inner workings, but other than mobx, the only dependencies are cancelable-promise and a json diffing library, jiff.

Platform Support

nlets-core currently provides implementations for audio playback and mixing in a web browser. (These should perhaps be split out into a separate package at some point.) There's no reason in principle it couldn't also run in say a React Native or Electron app, given appropriate platform-specific implementations.

Other Packages

nlets-react

nlets was built to allow folks to remix Vienna Teng's brilliant 2024 three-singles-in-one We've Got you. As of late March 2025 this project is unreleased but coming soon! At some point, I'd like to extract some of the React work there into its own package.

For now, nlets-react is empty.

apps/nlets-examples

Empty for now.

About

Non-linear media editing in Typescript

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published