Skip to content

Backends

Each target has one backend. allBackends() registers the right one from the filmstrip bundle, or call its own function if you depend on the backend directly.

Backend Targets Artifact Register with
Media3 Android filmstrip-transform-media3 media3Backend()
AVFoundation iOS and macOS filmstrip-transform-avfoundation avFoundationBackend()
WebCodecs js and wasmJs filmstrip-transform-webcodecs webCodecsBackend()
ffmpeg jvm filmstrip-transform-ffmpeg ffmpegBackend()

Android API 24 or later. The application context comes from App Startup. Which codecs and sizes are available is read from the device’s encoders.

iOS 16 or macOS 12 or later. Nothing else to install. Which video codecs are available is read from VideoToolbox.

A browser with WebCodecs and WebGL2. A page with no VideoEncoder offers no video codecs at all. Keeping an HDR grade also needs a float framebuffer and a VP9 Profile 2 encoder.

ffmpeg and ffprobe 8.0 or later on the machine. filmstrip ships neither, and finds them as Requirements describes. What else it can do depends on the build:

To do this The build needs
Encode H.264 libx264 or h264_videotoolbox
Encode HEVC libx265 or hevc_videotoolbox
Encode VP9 libvpx-vp9
Encode AAC or ALAC The aac or alac encoder
Tone map The lut1d, geq and colorchannelmixer filters
Draw Fill.Blur The gblur filter, and colorchannelmixer to dim it
Draw an AVIF or HEIC picture A decoder for it
Draw a JPEG XL picture libjxl

features on a player says what this backend can do on this device.

Feature Android Apple Browser JVM
FrameReadback Yes Yes Needs WebGL2 Yes
FrameStepping Yes Yes Needs WebGL2 Yes
LiveParameterRedraw Yes Yes Needs WebGL2 No
AudioMonitoring When media3 can No Needs Web Audio and AudioDecoder No
HdrPreview When the display can No No No
PlaybackSpeed No No No No

See Player for what each one means.

previewInfo reports how closely a preview matches its export, and parityNotes holds the detail per effect. Every built-in effect a backend runs is EffectParity.Exact, apart from these.

Effect Android Apple Browser JVM
TextOverlay Approximate Approximate Exact Approximate
Scale Exact Exact Exact Approximate

TextOverlay differs in glyph antialiasing. Its line breaks, metrics and measured size stay exact. Scale differs on ffmpeg because swscale resamples with a bicubic kernel, so detail on a downscale isn’t the same as the preview.