Skip to content
Seamlift

Introduction

From a video upload to adaptive HLS, a poster and a scrub sheet.

From upload to playback

One call creates aligned HLS renditions, a representative poster and a filmstrip scrub sheet. The same output fits every seamplayer adapter.

TypeScript
import { local, transcode, toSeamPlayer } from "seamtranscode";
const result = await transcode({ input: "uploads/film.mp4", output: "videos/film", storage: local({ root: "public", publicUrl: "/" }) });
const media = toSeamPlayer(result);
// <SeamPlayer {...media} title="Film" />

Useful defaults

360p, 720p and 1080p short-side renditions, never above the source; rotation-aware dimensions; aligned six-second segments; capped and measured peak bitrates. Poster and scrub metadata are included. The library defaults to libx264 and the CLI defaults to hardware auto detection.

Playable while the job finishes

The smallest rendition completes first. Progress is a fraction from 0 to 1, with an ETA when available. Preview failures become warnings; AbortSignal cancels work and cleans temporary files.

TypeScript
await transcode({ input: "film.mp4", output: "out/film", encoder: "auto", onProgress: ({ progress, eta }) => console.log(progress, eta), onRendition: (r) => console.log(r.playlist) });

Source and complete examples on GitHub