---
title: Actions Reference
---

### **nil**

Do nothing. Keep the section unchanged at normal speed and pitch.

### **cut**

Remove the section completely from the output.

### **speed**`:float32`

Range: `(0.0, 99999.0)`

Change the playback speed while preserving pitch via time-stretching. 1.0 = unchanged, 2.0 = twice as fast, 0.5 = half speed.

### **varispeed**`:float32`

Range: `[0.2, 100.0]`

Change the playback speed by resampling, so pitch shifts along with it, like analog tape or vinyl. 1.0 = unchanged, 2.0 = twice as fast and an octave higher.

### **ease**`:curve[:duration]`

Set the easing for the animated actions that follow it (until another `ease` overrides it); equivalent to adding `:ease=curve` to each. `curve` is one of `linear`, `in`, `out`, or `inout`.

The optional `duration` (e.g. `2sec` or a bare frame count) is how long the animation takes before holding at its end value; omitted, it spans the whole section. Example: `ease:inout,zoom:1..2`.

### **volume**`:v[..v...]`

Scale the audio volume by val. 1.0 = unchanged, 0.5 = half (-6 dB), 2.0 = double (+6 dB). Animatable: accepts keyframes `a..b..c` interpolated across the section, optionally eased with `:ease=`.

### **deesser**`:intensity[:max[:freq]]`

Range: `each [0.0, 1.0]`

Reduce harsh "s" and "sh" sibilance in the section. Implemented via ffmpeg's `deesser` filter.

Positional args: `intensity` sets how much to de-ess (0.0 = none, 1.0 = maximum), `max` caps the reduction (default 0.5), and `freq` sets the split frequency (default 0.5).

### **duck**`:[amount[:threshold[:attack[:release]]]]`

Autoduck (sidechain): lower this clip's audio wherever the louder audio layers beneath it (higher track indices) are active, e.g. tuck a music/desktop track under a voice track. Cross-track, so it is applied when the audio layers are mixed; a no-op on the bottom-most layer and on single-layer audio.

Positional args: `amount` is the maximum attenuation (0.0 = none, 1.0 = duck to silence, default 0.85), `threshold` the key loudness 0.0..1.0 that engages the duck (default 0.04), and `attack`/`release` the duck-down/recover times in milliseconds (defaults 100 and 500).

### **invert**

Invert every pixel in the section, producing a photo-negative.

### **hflip**

Flip the section horizontally, mirroring it left to right.

### **vflip**

Flip the section vertically, mirroring it top to bottom.

### **erosion**

Erode the picture by replacing each pixel with the darkest of its 3x3 neighborhood. Bright details shrink and dark regions grow, giving a gritty, eaten-away look. Implemented via ffmpeg's `erosion` filter.

### **zoom**`:v[..v...]`

Range: `(0.0, 100.0]`

Scale the picture about its center by val. 1.0 = no zoom, 2.0 = zoom in 2x, 0.5 = zoom out 2x. Animatable: accepts keyframes `a..b..c` interpolated across the section, optionally eased with `:ease=`.

### **opacity**`:v[..v...]`

Range: `[0.0, 1.0]`

Blend the section against the background. 1.0 = fully opaque, 0.0 = fully transparent. Animatable: accepts keyframes `a..b..c`, optionally eased with `:ease=`.

### **blur**`:v[..v...]`

Range: `[0.0, 1024.0]`

Gaussian-blur the picture by sigma = val. 0.0 = no blur; larger values blur more. Animatable: accepts keyframes `a..b..c`, optionally eased with `:ease=`.

### **brightness**`:v[..v...]`

Range: `[-1.0, 1.0]`

Shift brightness by adding an equal offset to the R, G, and B channels. 0.0 = unchanged, positive brightens, negative darkens. Implemented via ffmpeg's `lutrgb` filter. Animatable: accepts keyframes `a..b..c`, optionally eased with `:ease=`.

### **brighthue**`:snorm16`

Range: `[-1.0, 1.0]`

Shift luma by offsetting the Y channel. 0.0 = unchanged, positive brightens, negative darkens.

### **contrast**`:float32`

Range: `[-2.0, 2.0]`

Scale contrast around mid-gray. 1.0 = unchanged, higher values increase contrast, lower values reduce it. Implemented via ffmpeg's `lutyuv` filter.

### **saturation**`:float32`

Range: `[0.0, 3.0]`

Scale color saturation. 1.0 = unchanged, 0.0 = grayscale, higher values are more vivid. Implemented via ffmpeg's `lutyuv` filter.

### **rotate**`:deg`

Rotate the picture clockwise about its center by a fixed `deg` angle, expanding the frame so nothing is clipped and filling the exposed corners with the background color. Good for aspect flips, e.g. `rotate:90`. For a continuous spin, use `spin` instead.

### **spin**`:deg/rate`

Spin the picture continuously, starting at `deg` and turning at `rate` degrees per second (negative is counter-clockwise), e.g. `spin:0/120`. The picture spins within a constant square that contains every rotation (so it is never clipped); on an overlay the exposed corners are transparent, otherwise they are filled with the background color.

### **drawbox**`:x:y:w:h:color`

Draw a filled rectangle onto the picture. Positional args: `x` and `y` are the top-left corner, `w` and `h` the width and height in pixels, and `color` an RGB color (a name like `red` or a hex value like `#ff0000`). Example: `drawbox:100:100:400:200:red`. Implemented via ffmpeg's `drawbox` filter.

### **pos**`:x:y[:scale]`

Place this clip as an overlay when it is composited over a lower video track. `x` and `y` are the top-left corner in canvas pixels; the optional `scale` multiplies the source's native size (default 1.0). Has no effect on the base (bottom) track. Example: `pos:600:300:0.5`. Animatable: each of `x`, `y`, and `scale` accepts a keyframe ramp `a..b..c` interpolated across the section, optionally eased with `:ease=`, e.g. `pos:0..600:300:1..0.5:ease=inout` slides the overlay across while shrinking it.

### **lens**`:k1[:k2]`

Range: `each [-1.0, 1.0]`

Distort the picture like a camera lens. With no arguments, a fun fisheye is applied. Implemented via ffmpeg's `lenscorrection` filter.

Positional args: `k1` is the quadratic correction factor and `k2` the double-quadratic factor. Negative values bulge the image outward (fisheye); positive values pinch it inward (pincushion).

### **colorkey**`:color[:similar:blend]`

Range: `[0.0, 1.0]`

Make a color transparent by matching it in RGB space. Best for flat, synthetic backgrounds (a logo's matte, a screen recording, a gif with one clean color); for real green-/blue-screen camera footage use `chromakey` instead. On the base (bottom) video track there is nothing to reveal, so the matched color is replaced with the timeline background (`-bg`) instead. Positional args: `color` is the key color (a name like `green` or a hex value), `similar` how close a pixel must be to be keyed (default 0.25), and `blend` how soft the edge is (default 0.0). Implemented via ffmpeg's `colorkey` filter.

### **chromakey**`:color[:similar:blend]`

Range: `[0.0, 1.0]`

Make a color transparent by matching it in chroma (YUV) space, tolerating lighting variation, shadows, and soft edges. This is the green-/blue-screen keyer for real camera footage; for flat synthetic backgrounds use `colorkey` instead. On the base (bottom) video track there is nothing to reveal, so the matched color is replaced with the timeline background (`-bg`) instead. Positional args: `color` is the key color (a name like `green` or a hex value), `similar` how close a pixel must be to be keyed (default 0.25), and `blend` how soft the edge is (default 0.0). Implemented via ffmpeg's `chromakey` filter.

### **choke**`:[n]`

Range: `[1.0, 16.0]`

Shrink (choke) the alpha matte left by a `colorkey`/`chromakey` inward by `n` pixels (default 1), cutting off the ring of key-color spill and ragged edge pixels around the subject. Must come after the key in the chain, e.g. `add:fg.mp4,chromakey:green,choke:2`. Only meaningful on overlay tracks (where keying produces alpha); a no-op on the base track. Implemented by eroding only the alpha plane via ffmpeg's `erosion` filter.

### **aberration**`:[h[:v[:edge]]]`

Range: `each [-127.0, 127.0]`

Fake chromatic aberration by shifting the color channels apart, leaving red/cyan fringing for a cheap-lens or glitch look. Implemented via ffmpeg's `rgbashift` filter.

Simple form `aberration[:h[:v[:edge]]]`: split red and blue symmetrically by `h` pixels horizontally (default 5) and `v` pixels vertically (default 0), with green left in place. `edge` is `smear` (extend the border pixel, the default) or `wrap` (wrap around to the far side).

Per-channel form: pass `key=value` pairs drawn from `rh`, `rv`, `gh`, `gv`, `bh`, `bv` (signed pixel shift for each channel/axis, default 0) plus `edge`, e.g. `aberration:rh=8:bh=-8:gv=2:edge=wrap`.

### **loop**

Loop the clip's source back to its start when it runs out of frames, instead of ending. Useful for overlays whose source (e.g. a short gif) is shorter than the section it covers, e.g. `add:logo.gif,loop`.

### **mask**`:x:y:w:h[:radius][:feather][:invert]`

Cut the picture to a rounded-rectangle or ellipse, making everything outside the shape transparent. `x`/`y` are the top-left corner and `w`/`h` the size in pixels. `radius` is the corner radius in pixels: `0` (the default) is a sharp rectangle, a positive value rounds the corners, and `-1` is a true ellipse (the `w`x`h` box's inscribed oval). The optional `feather` softens the edge by that many pixels (0 = hard, the default); append `:invert` to hide the inside instead. Every field also takes a keyword form (`x=`, `y=`, `w=`, `h=`, `radius=`/`r=`, `feather=`), so positional and keyword args can be mixed. On the base (bottom) track there is nothing to reveal, so the masked-out area is filled with the timeline background (`-bg`) instead; on an overlay it reveals the track below. Good for circular/rounded picture-in-picture, vignettes, and crop-to-shape. Example: `add:cam.mp4,pos:900:540:0.3,mask:640:360:300:300:-1:40`.

### **confine**`:[x:y:w:h[:radius][:feather][:invert]]`

Restrict the adjustment effects that follow it (`blur`, `brightness`, `brighthue`, `contrast`, `saturation`, `invert`, `erosion`, `aberration`, `pixelate`) to a rounded-rectangle or ellipse region, leaving the rest of the picture untouched. Stays in effect until the next `confine` changes the region; a bare `confine` with no arguments resets to the full frame. `x`/`y`/`w`/`h` are in pixels; `radius` is the corner radius (`0` sharp rectangle, positive rounds the corners, `-1` a true ellipse); the optional `feather` fades the effect in over that many edge pixels, and `:invert` affects everything outside the region instead. Every field also takes a keyword form (`x=`, `radius=`/`r=`, `feather=`, ...). Geometry effects (zoom, rotate, pos, ...) are unaffected. Example: `confine:400:300:200:80,blur:30` blurs only the box, e.g. to censor a face or plate.

### **pixelate**`:[w[:h]]`

Range: `each [1.0, 1024.0]`

Pixelate the picture into a coarse mosaic of blocks, the classic censoring look. With no argument, uses 16px blocks; `pixelate:n` sets square n×n blocks and `pixelate:w:h` rectangular ones (px). Pair it with `confine` to censor just a face or plate, e.g. `confine:400:300:200:80,pixelate:24`. Implemented via ffmpeg's `pixelize` filter.

<h2 id="quick-reference" style="text-decoration:underline;">Quick reference</h2>
<p>Type: A=audio, V=video, *=animatable.</p>

| Action | Arguments | Range | Type | Summary |
| --- | --- | --- | --- | --- |
| nil | — | `—` | `AV` | Do nothing. |
| cut | — | `—` | `AV` | Remove the section completely from the output. |
| speed | `float32` | `(0.0, 99999.0)` | `AV` | Change the playback speed while preserving pitch via time-stretching. |
| varispeed | `float32` | `[0.2, 100.0]` | `AV` | Change the playback speed by resampling, so pitch shifts along with it, like analog tape or vinyl. |
| ease | `curve[:duration]` | `—` | `AV` | Set the easing for the animated actions that follow it (until another `ease` overrides it); equivalent to adding `:ease=curve` to each. |
| volume | `v[..v...]` | `—` | `A*` | Scale the audio volume by val. |
| deesser | `intensity[:max[:freq]]` | `each [0.0, 1.0]` | `A` | Reduce harsh "s" and "sh" sibilance in the section. |
| duck | `[amount[:threshold[:attack[:release]]]]` | `—` | `A` | Autoduck (sidechain): lower this clip's audio wherever the louder audio layers beneath it (higher track indices) are active, e.g. |
| invert | — | `—` | `V` | Invert every pixel in the section, producing a photo-negative. |
| hflip | — | `—` | `V` | Flip the section horizontally, mirroring it left to right. |
| vflip | — | `—` | `V` | Flip the section vertically, mirroring it top to bottom. |
| erosion | — | `—` | `V` | Erode the picture by replacing each pixel with the darkest of its 3x3 neighborhood. |
| zoom | `v[..v...]` | `(0.0, 100.0]` | `V*` | Scale the picture about its center by val. |
| opacity | `v[..v...]` | `[0.0, 1.0]` | `V*` | Blend the section against the background. |
| blur | `v[..v...]` | `[0.0, 1024.0]` | `V*` | Gaussian-blur the picture by sigma = val. |
| brightness | `v[..v...]` | `[-1.0, 1.0]` | `V*` | Shift brightness by adding an equal offset to the R, G, and B channels. |
| brighthue | `snorm16` | `[-1.0, 1.0]` | `V` | Shift luma by offsetting the Y channel. |
| contrast | `float32` | `[-2.0, 2.0]` | `V` | Scale contrast around mid-gray. |
| saturation | `float32` | `[0.0, 3.0]` | `V` | Scale color saturation. |
| rotate | `deg` | `—` | `V` | Rotate the picture clockwise about its center by a fixed `deg` angle, expanding the frame so nothing is clipped and filling the exposed corners with the background color. |
| spin | `deg/rate` | `—` | `V` | Spin the picture continuously, starting at `deg` and turning at `rate` degrees per second (negative is counter-clockwise), e.g. |
| drawbox | `x:y:w:h:color` | `—` | `V` | Draw a filled rectangle onto the picture. |
| pos | `x:y[:scale]` | `—` | `V*` | Place this clip as an overlay when it is composited over a lower video track. |
| lens | `k1[:k2]` | `each [-1.0, 1.0]` | `V` | Distort the picture like a camera lens. |
| colorkey | `color[:similar:blend]` | `[0.0, 1.0]` | `V` | Make a color transparent by matching it in RGB space. |
| chromakey | `color[:similar:blend]` | `[0.0, 1.0]` | `V` | Make a color transparent by matching it in chroma (YUV) space, tolerating lighting variation, shadows, and soft edges. |
| choke | `[n]` | `[1.0, 16.0]` | `V` | Shrink (choke) the alpha matte left by a `colorkey`/`chromakey` inward by `n` pixels (default 1), cutting off the ring of key-color spill and ragged edge pixels around the subject. |
| aberration | `[h[:v[:edge]]]` | `each [-127.0, 127.0]` | `V` | Fake chromatic aberration by shifting the color channels apart, leaving red/cyan fringing for a cheap-lens or glitch look. |
| loop | — | `—` | `V` | Loop the clip's source back to its start when it runs out of frames, instead of ending. |
| mask | `x:y:w:h[:radius][:feather][:invert]` | `—` | `V` | Cut the picture to a rounded-rectangle or ellipse, making everything outside the shape transparent. |
| confine | `[x:y:w:h[:radius][:feather][:invert]]` | `—` | `V` | Restrict the adjustment effects that follow it (`blur`, `brightness`, `brighthue`, `contrast`, `saturation`, `invert`, `erosion`, `aberration`, `pixelate`) to a rounded-rectangle or ellipse region, leaving the rest of the picture untouched. |
| pixelate | `[w[:h]]` | `each [1.0, 1024.0]` | `V` | Pixelate the picture into a coarse mosaic of blocks, the classic censoring look. |


---
Version 31.1.2<br>Generated: 2026-07-08.
