Skip to main content
All effects in Masterselects run entirely on the GPU via individual WGSL shaders. Each effect is a self-contained module — its own shader file and TypeScript definition — processed through a ping-pong render pipeline that chains effects in order without redundant texture reads.

Effect categories

CategoryCountDescription
Color9Tone, exposure, and color grading
Blur5Spatial and directional blur
Distort7Geometric and warp effects
Stylize8Film looks and creative treatments
Keying1Chroma key compositing
GenerateReserved
TimeReserved
TransitionReserved

Adding an effect

1

Select a clip

Click the clip on the timeline to select it.
2

Open the Properties panel

Open the Properties panel and navigate to the Effects tab.
3

Add an effect

Click Add Effect and choose a category and effect from the dropdown.
4

Adjust parameters

Drag any numeric value to adjust it. Hold Shift while dragging for 10× finer control, or Ctrl for 100× finer control. Right-click any value to reset it to its default.

Effect order

Effects are applied top-to-bottom. Drag the ≡ handle on any effect row to reorder. The order directly affects the rendered output — a blur applied before a color grade produces different results than one applied after.
Multi-sample effects (Gaussian Blur, Motion Blur, Radial Blur, Glow) expose a collapsible Quality section with direct control over sample counts. Higher values increase quality at the cost of GPU time. The app automatically resets quality parameters to defaults if frame time exceeds 100 ms for five consecutive frames.

Effect bypass

Click the checkmark icon to the left of any effect name to toggle it on or off without removing it. Bypassed effects render as semi-transparent in the panel, making A/B comparisons fast.

Effect categories

Color effects adjust tone, exposure, and hue. Four of them — Brightness, Contrast, Saturation, and Invert — are inline effects: they run directly inside the composite shader with no extra render passes, giving them zero GPU overhead.
EffectKey parameters
Brightnessamount (–1 to 1)
Contrastamount (0 to 3)
Saturationamount (0 to 3)
Vibranceamount (–1 to 1)
Hue Shiftshift (0 to 1)
Temperaturetemperature (–1 to 1), tint (–1 to 1)
Exposureexposure (–3 to 3 EV), offset, gamma
LevelsinputBlack, inputWhite, gamma, outputBlack, outputWhite
Invert
All blur effects use multi-sample GPU kernels. Sample count is exposed in the Quality section.
EffectKey parameters
Gaussian Blurradius (0–50), samples (1–64)
Box Blurradius (0–20)
Motion Bluramount, angle, samples (4–128)
Radial Bluramount, center XY, samples (4–256)
Zoom Bluramount, center XY, samples (4–256)
Distort effects remap UV coordinates to warp, split, or tile the image.
EffectKey parameters
Pixelatesize (1–64)
Kaleidoscopesegments (2–16), rotation
Mirrorhorizontal (bool), vertical (bool)
RGB Splitamount, angle
Twirlamount, radius, center XY
WaveamplitudeX/Y, frequencyX/Y
Bulge / Pinchamount, radius, center XY
Stylize effects add film looks, glow, or artistic treatments.
EffectKey parameters
Vignetteamount, size, softness, roundness
Glowamount, threshold, radius, rings, samplesPerRing
Film Grainamount, size, speed
Sharpenamount, radius
Edge Detectstrength, invert
Posterizelevels (2–32)
Scanlinesdensity, opacity, speed
Thresholdlevel (0–1)
The Chroma Key effect isolates a subject by removing a solid background color, most commonly green or blue screen.
EffectKey parameters
Chroma KeykeyColor (green / blue / custom), tolerance (0–1), softness (0–0.5), spillSuppression (0–1)

Animating effect parameters

Most numeric parameters are keyframeable. Keyframe lanes for effect parameters appear below the transform properties in the timeline, grouped by effect name.
// Property key format
`effect.{effectId}.{paramName}`

// Example: animate hue shift from 0 to full rotation over 2 seconds
addKeyframe(clipId, 'effect.effect_xyz.shift', 0, 0);
addKeyframe(clipId, 'effect.effect_xyz.shift', 1, 2);

GPU pipeline

Effects process through a ping-pong buffer architecture:
Input texture

Effect 1 → Ping buffer

Effect 2 → Pong buffer

   ...

Final output
Each effect reads from one buffer and writes to the other, avoiding copies. Inline effects (Brightness, Contrast, Saturation, Invert) bypass this pipeline entirely and run as uniforms in the composite shader.

Build docs developers (and LLMs) love