npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

edl

v2.0.0

Published

A modern TypeScript library for creating Edit Decision Lists (EDL). EDL is a plain text format that describes a video sequence for reconnecting media in video editing software. This is a modernized fork of @pietrop/edl-composer.

Readme

EDL

A modern TypeScript library for creating Edit Decision Lists (EDL). EDL is a plain text format that describes a video sequence. It can be opened in video editing software to reconnect media to assemble a video sequence.

This is a modernized fork of @pietrop/edl-composer with:

  • Full TypeScript support with strict typing
  • Modern build system (tsup, pnpm, vitest)
  • Dual ESM/CJS package exports
  • Built-in timecode conversion utilities
  • SMPTE drop-frame timecode support (29.97 & 59.94 fps)
  • Automatic FCM (Frame Count Mode) detection
  • Improved developer experience

Features

  • EDL Generation: Create industry-standard EDL files from JSON sequences
  • Timecode Handling: Accurate timecode calculations with offset support
  • Frame Rate Support: Works with all standard frame rates (23.976, 24, 25, 29.97, 30, 50, 59.94, 60 fps)
  • SMPTE Drop-Frame: Automatic drop-frame timecode support for 29.97 and 59.94 fps
  • MXF Support: Special handling for MXF files with separate video/audio tracks
  • TypeScript: Full type safety with exported types for better IDE support

Setup

Setup for Contributing

Clone the repo

git clone [email protected]:jordanburke/edl.git

Install dependencies

pnpm install

And if you want to try it out

pnpm example-usage

Setup for usage

To use in your project, the module can be found on npm as edl so just run the following to add to your project.

npm install edl

Usage

The EDL sequence should have the following attributes

var edlSq = {
    "title": "Demo Title of project",
    "events":  [
      { "id":1,
        "startTime": 10, // in seconds 
        "endTime": 20,
        "reelName":"SomeReelName",
        "clipName":"Something.mov",
        "offset": "00:00:28:08", //offset is optional default is "00:00:00:00"
        "fps": 25
      },
      { "id":2,
        "startTime": 45,
        "endTime": 55,
        "reelName":"SomeOtherReelName",
        "clipName":"SomethingElse.mov",
        "offset": "00:00:28:08",
        "fps": 29.97
      },
        { "id":2,
        "startTime": 45,
        "endTime": 55,
        "reelName":"NA",
        "clipName":"SomethingElse.mov",
        "offset": "00:00:28:08",
        "fps": 24
      }
    ]
}

And it can be parsed and composed into an EDL as following.


var edl = new EDL(edlSq);
console.log(edl.compose());

This returns a string that you can write to file or else.

TITLE: Demo Title of project
FCM: DROP FRAME

001   SOMEREE  AA/V  C  00:00:38:08 00:00:48:08 00:00:00:00 00:00:10:00
* FROM CLIP NAME: Something.mov
FINAL CUT PRO REEL: SomeReelName REPLACED BY: SOMEREE

002   SOMEOTH  AA/V  C  00:01:13;08 00:01:23;08 00:00:10:00 00:00:20:00
* FROM CLIP NAME: SomethingElse.mov
FINAL CUT PRO REEL: SomeOtherReelName REPLACED BY: SOMEOTH

003    AX  AA/V  C  00:01:13:08 00:01:23:08 00:00:20:00 00:00:30:00
* FROM CLIP NAME: SomethingElse.mov

SMPTE Drop-Frame Support

The library automatically detects when drop-frame timecode should be used:

  • Automatic Detection: For 29.97 and 59.94 fps content, the library automatically uses drop-frame timecode format (semicolons ;) when timecodes are 1 minute or longer
  • FCM Header: The EDL header automatically sets FCM: DROP FRAME or FCM: NON-DROP FRAME based on the content
  • Timecode Format: Drop-frame timecodes use semicolons (e.g., 00:01:00;00) while non-drop use colons (e.g., 00:01:00:00)

System Architecture

High level overview of system architecture

See docs guides understanding edl specs

Development env

How to run the development environment Coding style convention ref optional, eg which linter to use Linting, github pre-push hook - optional

  • node
  • npm

Build

How to run build

Build the library:

pnpm build

This creates both ESM and CommonJS builds in the dist/ directory.

Tests

How to carry out tests

Run tests using Vitest

pnpm test

Or run tests once:

pnpm test:run

Deployment

How to deploy the code/app into test/staging/production

No deployment just a node module