Skip to content

Requirements

The Kotlin, Compose, JDK, Android and ffmpeg versions are read from the build that produced this page, so they match the code.

Kotlin 2.4.20
Compose Multiplatform, for the Compose modules 1.12.2
JDK 17 or later
Platform Minimum Export and preview run on
Android API 24 Media3 Transformer and media3-exoplayer
iOS 16 AVFoundation, VideoToolbox and AVPlayer
macOS 12 AVFoundation, VideoToolbox and AVPlayer
Desktop (JVM) ffmpeg 8.0 The ffmpeg and ffprobe on the machine
Browser WebCodecs VideoDecoder, and VideoEncoder to export WebCodecs, drawn to a canvas

filmstrip is tested on Chrome. Edge, Firefox and Safari have WebCodecs too, but filmstrip isn’t tested on them. They may work.

A preview needs VideoDecoder to draw and AudioDecoder to play sound, and an export needs VideoEncoder as well. Firefox for Android has neither video half, per caniuse as checked on 2026-11-06. See what the reader sees there.

The JVM backend links no ffmpeg and bundles none. It runs ffmpeg and ffprobe as separate programs, found through FfmpegConfig, then the FILMSTRIP_FFMPEG and FILMSTRIP_FFPROBE environment variables, then PATH. An older build is reported as FilmstripError.ToolchainMissing when you plan or export, never as a crash. A snapshot with no release number, like N-121284-g4c9e0eb, is held to the libavformat version it prints instead, 62 or later for ffmpeg 8. One that prints neither is refused the same way, since nothing says it’s new enough.

The build also needs the noise bitstream filter, which a trimmed copy uses to stop its video on the last frame it keeps. Every build configured with ffmpeg’s defaults carries it. One built without it is refused with ToolchainMissing too, naming the filter.