---
title: "Video Matte (Background Removal)"
description: "Remove a video's background → per-frame alpha clip. `model` swaps the matting backend so a headless caller can A/B edges without editing the repo: veed (fast, 4K, WebM alpha), bria_v_rmbg (SOTA edges, WebM alpha), or birefnet (the only backend with true ProRes 4444 alpha — set alpha_format:prores). WebM alpha is VP9 alpha_mode (browsers/Remotion decode it; ffmpeg's default decoder hides it — use ProRes for tooling). The resolved falModelPath is reported on output.model."
updated: 2026-09-10
---

# Video Matte (Background Removal)

**Node type:** `process:video_matte`  
**Category:** `process`

## Description

Remove a video's background → per-frame alpha clip. `model` swaps the matting backend so a headless caller can A/B edges without editing the repo: veed (fast, 4K, WebM alpha), bria_v_rmbg (SOTA edges, WebM alpha), or birefnet (the only backend with true ProRes 4444 alpha — set alpha_format:prores). WebM alpha is VP9 alpha_mode (browsers/Remotion decode it; ffmpeg's default decoder hides it — use ProRes for tooling). The resolved falModelPath is reported on output.model.

## Pricing

- **Cost:** ~16 credits per generation

## Canvas ports

These appear as port handles on the left side of the node.

| ID          | Label         | Details              |
| ----------- | ------------- | -------------------- |
| `video_url` | **Video Url** | `VIDEO` _(required)_ |

## Sidebar config

These render as form fields in the right-side config panel when the node is selected.

| ID                        | Label                              | Details                                             |
| ------------------------- | ---------------------------------- | --------------------------------------------------- |
| `model`                   | **Matting Model**                  | `TEXT` · options: `veed`, `bria_v_rmbg`, `birefnet` |
| `alpha_format`            | **Alpha Format**                   | `TEXT` · options: `webm_vp9`, `prores`, `mp4_h264`  |
| `subject_is_person`       | **Subject Is Person (VEED)**       | `BOOLEAN`                                           |
| `refine_foreground_edges` | **Refine Foreground Edges (VEED)** | `BOOLEAN`                                           |

## Outputs

| ID      | Label                   | Type    |
| ------- | ----------------------- | ------- |
| `video` | **Matte Video (alpha)** | `VIDEO` |

## Text behind the subject, which is what most people came here for

The effect: a title sits on screen and the person walks in front of it. It is
this node plus a track ordering, and nothing else.

```
Your clip  ->  Video Matte  ->  Video Editor
                                  track 1: the text
                                  track 2: the alpha clip   (on top, so it wins)
```

1. Wire the clip into **Video Url**. It is a port, so wire it; do not paste the
   url into config where nobody can see where it came from.
2. Leave **Alpha Format** on `webm_vp9` unless a tool downstream has to read
   the alpha itself.
3. Run it. The **Matte Video (alpha)** output is your subject with the
   background gone, frame by frame.
4. In the Video Editor, put the text on one timeline track and the matte clip
   on a track AFTER it. Track order is z-order and the first track is the
   bottom one, so the later track is the one that covers the other.

Get the order backwards and the text sits on top of the person, which looks
like the node failed. It did not; the tracks are just the wrong way round.

One more setting, if your matte and your composition are different shapes: a
timeline clip fits `cover` by default, which CROPS the mismatch and can quietly
eat the edges of your subject. Set the clip's fit to `contain` and it letterboxes
instead.

## Subject Is Person mattes the person and NOTHING they are on

This is the setting that costs an afternoon.

With **Subject Is Person** on, VEED cuts out the human and treats everything
else as background. A bike, a skateboard, a horse, a held prop: all background.
Frame to frame the model disagrees with itself about where the person stops and
the object starts, so the edge crawls and the thing your subject is sitting on
drifts in and out. On a moving shot the occlusion visibly flickers.

Turn it off when the subject and their vehicle or prop should be cut out as ONE
object. You get whole-foreground matting instead, the rider and the bike come
out together, and the flicker goes with them.

Leave it on for a plain talking head, where it is the more accurate of the two.

## Three backends, and they are not interchangeable

**They all cost the same.** Pricing on this node is flat per run, so switching
backends changes the edges and the speed, never the bill. Pick on quality.

| Model            | Use it for                                                                |
| ---------------- | ------------------------------------------------------------------------- |
| `veed` (default) | Fastest, handles 4K. Start here.                                          |
| `bria_v_rmbg`    | Cleanest edges (hair, motion blur). Reach for it when VEED's edges crawl. |
| `birefnet`       | The only one that emits true ProRes 4444 alpha.                           |

**Alpha Format** interacts with that choice, and the node protects you rather
than surprising you:

- `webm_vp9` carries real alpha on all three. This is the default and the
  right answer almost always.
- `prores` needs `birefnet`. Ask for it on VEED or Bria and you get WebM
  alpha instead, never a silently flattened file.
- `mp4_h264` has NO alpha channel. Picking it means the background comes back
  as solid black, which defeats the point of the node.

The output reports which backend actually ran, so an A/B between two of them is
readable after the fact instead of a guess.

## WebM alpha is real even when your player says it is not

VP9 alpha_mode is what `webm_vp9` produces. Browsers decode it, Remotion
decodes it, so the Video Editor and the render both see the transparency.
ffmpeg's default decoder does NOT, so a clip that looks like it has a black
background in a local ffmpeg preview can be perfectly correct in the render.

If something downstream genuinely has to read the alpha channel, that is the
one reason to switch to `birefnet` and ProRes.

---

_Auto-generated from the Wireflow node registry._

---

Documentation index: fetch https://www.wireflow.ai/llms.txt for the full list of Wireflow docs.
