---
title: "Face Mesh"
description: "Track the face in a video frame by frame (Google MediaPipe Face Landmarker) and draw its mesh as thin lines: the face tessellation in thin blue, the lips in coral (see `lips`) and the eyes in green. For talking character swaps: once the source head is hidden (Segment Mask into Masked Composite, or a depth composite), Seedance can no longer see the mouth and the take comes back with a dead one. Wire the original clip into `video` (the face is tracked there) and, optionally, the hidden-head composite into `base_video`: the mesh is drawn onto the base, so Seedance gets the jaw and lip motion without the face. With no base the mesh is drawn onto the clip itself. The base must have the same size, frame rate and frame count as the clip, or the run is refused with both numbers. Outputs: the overlaid `video` (the base's audio, or the clip's), `landmarks` (a JSON file url: 478 points per frame, x and y from 0 to 1) and `tracking` (which frames had no face, with a one-line summary to gate on before a paid take). One face per frame. `region`: `auto` (default) looks at the whole frame and retries a centre crop when it finds nothing, `full` the whole frame only, `center` the centre crop only (a small speaker in the middle of a wide shot). `lips`: `coral` (default) draws the lip contour as a thicker coral line, `face` in the same thin blue as the face lines, `off` leaves it out. Seedance paints a coral contour into the take as coral lips, so use `face` for a person swap. A clip with no face in any frame is refused. Clips up to 30 seconds and 2160 px on the long side. The same inputs and settings always give the same files. Tell Seedance in the prompt that the mesh lines are motion guidance and must not appear in the take. Free to run: this node quotes and charges 0 credits."
updated: 2026-10-31
---

# Face Mesh

**Node type:** `utility:video_face_mesh`  
**Category:** `Editing`

## Description

Track the face in a video frame by frame (Google MediaPipe Face Landmarker) and draw its mesh as thin lines: the face tessellation in thin blue, the lips in coral (see `lips`) and the eyes in green. For talking character swaps: once the source head is hidden (Segment Mask into Masked Composite, or a depth composite), Seedance can no longer see the mouth and the take comes back with a dead one. Wire the original clip into `video` (the face is tracked there) and, optionally, the hidden-head composite into `base_video`: the mesh is drawn onto the base, so Seedance gets the jaw and lip motion without the face. With no base the mesh is drawn onto the clip itself. The base must have the same size, frame rate and frame count as the clip, or the run is refused with both numbers. Outputs: the overlaid `video` (the base's audio, or the clip's), `landmarks` (a JSON file url: 478 points per frame, x and y from 0 to 1) and `tracking` (which frames had no face, with a one-line summary to gate on before a paid take). One face per frame. `region`: `auto` (default) looks at the whole frame and retries a centre crop when it finds nothing, `full` the whole frame only, `center` the centre crop only (a small speaker in the middle of a wide shot). `lips`: `coral` (default) draws the lip contour as a thicker coral line, `face` in the same thin blue as the face lines, `off` leaves it out. Seedance paints a coral contour into the take as coral lips, so use `face` for a person swap. A clip with no face in any frame is refused. Clips up to 30 seconds and 2160 px on the long side. The same inputs and settings always give the same files. Tell Seedance in the prompt that the mesh lines are motion guidance and must not appear in the take. Free to run: this node quotes and charges 0 credits.

## Canvas ports

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

| ID           | Label                                        | Details              |
| ------------ | -------------------------------------------- | -------------------- |
| `video`      | **Video (face tracked here)**                | `VIDEO` _(required)_ |
| `base_video` | **Base Video (draw onto; blank = the clip)** | `VIDEO`              |

## Sidebar config

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

| ID       | Label                                                | Details                                                        |
| -------- | ---------------------------------------------------- | -------------------------------------------------------------- |
| `region` | **Where to look for the face**                       | `TEXT` · options: `auto`, `full`, `center` · default: `"auto"` |
| `lips`   | **Lip lines**                                        | `TEXT` · options: `coral`, `face`, `off` · default: `"coral"`  |
| `crf`    | **Quality (CRF, 12 best … 30 smallest; blank = 18)** | `NUMBER`                                                       |

## Outputs

| ID          | Label                    | Type    |
| ----------- | ------------------------ | ------- |
| `video`     | **Mesh Video**           | `VIDEO` |
| `landmarks` | **Landmarks (JSON url)** | `TEXT`  |
| `tracking`  | **Tracking report**      | `JSON`  |

## What it is for

A talking character swap needs the mouth. Real Swap hides the source head so
Seedance cannot copy the face, and that also hides the jaw and the lips: the
take comes back with the right character and a mouth that does not move.

Face Mesh puts the motion back without the face. It finds the face in every
frame of **Video** and draws its mesh as thin lines: the face in thin blue, the
lips in coral (see **Lip lines** below), the eyes in green. Wire the
hidden-head composite into **Base Video** and the mesh is drawn there, exactly
where the hidden face was.

## Recipe: keep the mouth moving in a Real Swap

1. Run the Real Swap prep as usual, up to the composite that hides the head.
2. Face Mesh: the trimmed source clip into **Video**, that composite into
   **Base Video**, and **Lip lines** set to **Match face lines** (`face`).
3. Read **Tracking report** on the card before any paid run. Frames with no
   face get no mesh, and the mouth goes still there.
4. Wire **Mesh Video** into Seedance's reference video port in place of the
   composite. In the prompt, say that the mesh lines are motion guidance only
   and must not appear in the video.

Tested on a Seedance take with the default coral lip lines: the swapped mouth
follows the source, but Seedance paints thick coral lips in every frame. That
is why step 2 sets `face`; a take with `face` has not been run yet.

## Outputs

- **Mesh Video**: the base (or the clip) with the mesh drawn on, same size,
  frame rate and length, with that clip's audio.
- **Landmarks (JSON url)**: every frame's 478 face points, x and y from 0 to 1
  of the frame, for anything that wants the raw tracking.
- **Tracking report**: how many frames had a face, and which did not, with a
  one-line summary such as `no face in 3 of 130 frames: frames 12-14`.

## Where it looks for the face

- **auto** (default): the whole frame, and on a miss the centre of the frame
  (the middle half across, the top 65 percent down), where a seated speaker
  usually is.
- **full**: the whole frame only.
- **center**: the centre only, for a small speaker in a wide shot.

It tracks one face per frame. For a clip with two people, crop to the speaker
first.

## Lip lines

- **Coral** (`coral`, default): the lip contour as a thicker coral line, the
  original drawing.
- **Match face lines** (`face`): the lip contour in the same thin blue as the
  rest of the face. Use this for a person swap: Seedance reads a coral contour
  as coral lips and paints them in.
- **Off** (`off`): no lip contour at all. The face lines around the mouth
  still move with it.

## Limits

The base must have the same size, frame rate and frame count as the clip, or
the run is refused with both numbers (make the base from the same trimmed
clip). Clips over **30 seconds** or over 2160 pixels on the long side are
refused, as are HDR clips and inputs over 500 MB. A clip with no face in any
frame is refused. The same inputs and settings always give the same files.

Credit: the technique and the mesh drawing are adapted from the open-source
[Genjustsu workflow](https://github.com/sirioberati/Genjustsu-Open-Source-Workflow)
by Sirio Berati (MIT license), using Google's MediaPipe Face Landmarker.

This node is free: it quotes and charges **0 credits**.

---

_Auto-generated from the Wireflow node registry._

Last updated: 2026-10-31

---

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