Developers

Build with OpenIMF.

A pnpm monorepo of typed, tested @openimf packages and a single CLI. Run it from the terminal, or compose the libraries into your own pipeline.

$git clone <repo> openimf && cd openimf
$./init.sh

Requires Node ≥ 18.18, pnpm, and ffmpeg. Code is AGPL-3.0-or-later; docs are CC BY 4.0.

CLI & API
Reference

The CLI & the API.

Run it from the terminal, or import the typed libraries into your own pipeline — same engine, your choice of surface.

Command line

$openimf version

Print the CLI version.

$openimf imf inspect <imp-directory>

Parse ASSETMAP / PKL / CPL and report what's inside an IMF package.

$openimf tt convert subtitles.srt --to imsc --out subtitles.ttml

Convert SRT/VTT timed text to IMSC 1.1 (TTML).

$openimf derive plan --duration 5400 --max-size 8589934592

Plan a size-targeted submaster with bitrate budgeting.

Use as a library

import { readImp } from "@openimf/imf-engine";
import { srtToImsc } from "@openimf/timed-text";
import { planSubmaster } from "@openimf/derive";

const imp  = await readImp("./MyFilm_IMP");   // ASSETMAP · PKL · CPL
const ttml = srtToImsc(srt);                   // IMSC 1.1
const plan = planSubmaster({ duration: 5400, maxSize: 8 * 2 ** 30 });

Packages

@openimf/imf-engine
IMF read (ASSETMAP/PKL/CPL) + XML authoring; MXF muxing.
read done · write WIP
@openimf/core
Pan-and-scan schema, crop math, validation, render plan, XML.
ported · tested
@openimf/qc
Timecode alignment + difference / overlay flagging.
core done
@openimf/derive
Submaster recipes + size-targeted bitrate planning.
core done
@openimf/timed-text
SRT/VTT ↔ IMSC (TTML) timed-text conversion.
SRT/VTT/IMSC done
@openimf/mam
Library domain model + repository, SQLite-backed.
in-memory done
@openimf/dynamic-deliverables
Multi-target pan-scan, graphics, versions schemas.
ported · tested
@openimf/reframe-aware-timed-text
IMSC region → active-picture binding.
ported · tested
@openimf/ffmpeg-renderer
Pan-scan filter-graph render (separate-process ffmpeg).
ported · tested
@openimf/interchange
EDL / FCPXML (xmeml) cut-list parsers.
ported · tested
@openimf/distribution-documentation
Cue sheet / archival / credits / availability schemas.
ported · tested
@openimf/essence
ffprobe adapter (probe + start-TC), separate-process.
initial