Effects
The built-in effects live in filmstrip-effects. Effects and Overlays show how
to use them.
| Effect | Android | Apple | Browser | JVM |
|---|---|---|---|---|
rotate |
Yes | Yes | Quarter turns | Yes |
flip |
Yes | Yes | Yes | Yes |
crop |
Yes | Yes | Yes | Yes |
scale |
Yes | Yes | Yes | Yes |
kenBurns |
Yes | Yes | Yes | Refused |
brightness |
Yes | Yes | Yes | Yes |
contrast |
Yes | Yes | Yes | Yes |
saturation |
Yes | Yes | Yes | Yes |
hueRotate |
Yes | Yes | Yes | Yes |
sepia |
Yes | Yes | Yes | Yes |
invert |
Yes | Yes | Yes | Yes |
rgbAdjustment |
Yes | Yes | Yes | Yes |
colorMatrix |
Yes | Yes | Yes | Yes |
imageOverlay |
Yes | Yes | No file paths | Yes |
textOverlay |
Yes | Yes | Yes | Yes |
A refused effect makes the plan Incapable, naming the effect, and withoutUnsupported carries a plan with it left
out. See Export.
Inert effects
Section titled “Inert effects”An effect that renders nothing is left out of the export and listed on the plan’s inertNotices, on every backend. It
isn’t an Adjustment, and it doesn’t stop a stream copy.
- A color effect that changes nothing, like a brightness of one or a whole turn of hue. A run of them that multiplies out to no change counts as one.
- A whole turn of
rotate, or acropto the aspect the frame already has. - An overlay at zero opacity, with empty text, or with a window outside its scope.
Where the backends differ
Section titled “Where the backends differ”rotate
Section titled “rotate”Android, Apple and ffmpeg turn a frame by any angle. The browser only takes multiples of 90 and refuses any other angle.
kenBurns
Section titled “kenBurns”ffmpeg refuses it. The other three follow the region per frame.
Color effects
Section titled “Color effects”Every backend runs the same matrix, on its own machinery.
| Backend | Runs on |
|---|---|
| Android | media3’s matrix effects, with a pass of its own on an HDR grade |
| Apple | Core Image |
| Browser | A WebGL2 pass |
| JVM | lutrgb when channels stay apart, lut3d when they mix, float tables on an HDR grade |
lut3d keeps the code value below the interpolated one, not the nearest. So on an SDR export, a matrix that mixes
channels can land one code value under the other backends. That’s the filter’s limit.
imageOverlay
Section titled “imageOverlay”- A browser page can’t read a file path, so it refuses
ImageSource.Path. - Which picture formats draw depends on the backend. See Codecs.
- media3 and the browser upload a picture as one texture, and refuse one longer on a side than the texture limit.
textOverlay
Section titled “textOverlay”- Each backend shapes glyphs with its own fonts, and breaks lines with its own rules. A preview and its export always break on the same words, but two backends can differ.
- The ffmpeg backend draws with the fonts the JVM finds, and refuses a character those fonts can’t draw.
Overlay animation
Section titled “Overlay animation”media3 holds an overlay’s position inside the frame, so one animated off the frame stops at the edge there.
Overlays on an HDR grade
Section titled “Overlays on an HDR grade”media3 blends an overlay in scene light on an HLG grade, and the plan reports it as an approximated effect. Every other case blends in linear display light. See Limits.