> For the complete documentation index, see [llms.txt](https://docs.trezalabs.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.trezalabs.com/pipelines/video-effects.md).

# Video effects

Single-purpose effects you can apply to a whole clip or to one moment in it. Each does one thing, so you compose the look you want rather than picking a preset that nearly fits.

***

## They never change the clip's length

Every effect here covers the stretch of video it applies to, rather than being inserted in front of it. A freeze holds the picture over that moment; it does not push the rest of the video later.

That matters more than it sounds:

* **Audio is never touched.** Narration keeps playing underneath a freeze instead of pausing for it.
* **Nothing downstream shifts.** Burned-in captions stay on the words, and the clip ends when it always did.
* **Effects stack.** Point several at the same moment and each one applies without moving the others.

***

## Find Beat

Locates a phrase in a transcript and returns when it lands, in seconds.

Wire the words you want to hit and a transcript from a **Transcribe** node. Everything else in this section can take the result as its **At** input.

| Setting     | Notes                                                                                                                                                                    |
| ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Land on** | The end of the phrase (default) lets the line finish before the effect fires. The start is for effects that should run underneath the words instead of reacting to them. |
| **Offset**  | Nudges the moment. The small negative default keeps the matched word on screen, since a word ends exactly as the next caption swaps in.                                  |

If the phrase is not in the transcript, Find Beat returns an empty result and says so in the run. It does not fail the run — a phrase that was never spoken is a normal outcome, and the effects downstream simply do nothing.

***

## Freeze Frame

Holds a single frame for a moment. Needs something wired into **At**; without one it passes the video straight through.

**Hold** sets how long the frame holds.

***

## Punch In

Snaps the framing closer. **Amount** is a percentage: 100 keeps the framing, 125 snaps in a quarter closer.

**Apply to** decides the scope:

* **A moment** (default) needs an **At**, and does nothing without one.
* **The whole clip** ignores **At** entirely.

The default is deliberate. When this hangs off a Find Beat that came up empty, doing nothing is right, and punching in on an entire episode is not.

***

## Desaturate

Drains the colour. Takes the same **Apply to** scope as Punch In.

**Contrast** is lifted slightly by default. Colour carries a lot of the separation in a frame, and removing it without any contrast back tends to read as flat rather than stylised.

***

## Sound Effect

Outputs the URL of a bundled one-shot, ready to wire into **Audio Overlay**:

* **Fahh** — recoiling at something gross or absurd
* **Vine boom** — a hit, a reveal, sudden emphasis
* **Record scratch** — wait, what? something undercut

These are widely recognised on purpose. The effect depends on the audience already knowing the sound, which is also why matching the sound to the beat matters: a reaction is not a reveal.

***

## Audio Overlay

Lays a sound over the video's own audio.

Wire a **video**, an **audio** source (a Sound Effect node, an Audio Generation node, or any audio URL) and optionally an **At** for when it starts.

**Nothing is ducked.** The sound plays on top of the narration rather than in place of it, and a one-shot longer than the moment rings out over the resumed picture instead of being cut to fit. **Gain** adjusts only the overlaid sound; the clip's own audio is left exactly as it was.

***

## Chaining them

Effects are separate nodes, so each one is its own render pass. Chaining four costs four passes of time and a little image quality, which is the price of being able to compose them freely. In practice that is a few extra seconds on a short.

Two habits keep it cheap:

* Point every effect in a chain at the same **Find Beat** output rather than repeating a timestamp.
* Group the chain and [save it as a recipe](/pipelines/groups-and-recipes.md) once it looks right, so the next pipeline reuses it instead of rebuilding it.

***

## When a moment falls outside the clip

If the moment lands past the end of the video, the effect is skipped and the run continues with a note explaining why. Losing a finished render over a missed effect costs far more than missing the effect.
