All modules:
The bundle: core, effects, player, and the right backend for each target, plus allBackends() to register them. Deliberately not Compose.
Compose Multiplatform bindings: player state, the frame strip's cache, and bare surfaces.
The drawn timeline: scrolling strip, ruler, playhead, trim handles, scrub gestures. Foundation only, no Material.
Model, MediaSource/MediaSink, probe(), ThumbnailSource, the VideoPlayer API and PlayerEngine SPI, and the effect SPI. No runtime, no effect catalogue.
The built-in effect catalogue. GL effects on Android, Core Image on Apple, ffmpeg filter graphs on the JVM, and canvas drawing in the browser.
Opt-in looks that draw on all four backends, starting with VHS. It sits outside the filmstrip bundle, so add it and call filters() on the builder.
FileKit bindings: a picked PlatformFile as a source or sink, and an export result back as one.
FileKit dialog launchers that hand back a MediaSource, ImageSource or MediaSink: pick, save, share.
kotlinx-io bindings: Path and Source as sources, Path as a sink.
Okio bindings: Path, BufferedSource and ByteString as sources, Path as a sink.
Preview playback over each target's backend. media3-exoplayer on Android, AVKit on Apple, an ffmpeg frame stream on the JVM, and WebCodecs with a canvas in the browser.
Test fixtures and the frame-similarity harness.
The AVFoundation backend, iOS and macOS. Lowers an edit for export and for the player's preview.
The ffmpeg backend, JVM. Lowers an edit for export and for the player's preview, and shells out to an ffmpeg and ffprobe 8.0 or later already on the machine.
The Media3 backend, Android. Lowers an edit for media3-transformer export and for the player's preview.
The WebCodecs backend, browser. Lowers an edit for export and for the player's preview.