Nodes/comfyui-liveportrait/Live Portrait for Video
ComfyUI Node

Live Portrait for Video

Reenact a whole clip, not just a still

By MixLabPro·Created 2 years ago·Updated 2 years ago· 479
Live Portrait for Video
  • source_image_batch
  • driving_video
  • video
  • video_concat

The plain LivePortraitNode takes one still photo and makes it move. LivePortraitVideoNode takes a whole video as the source and drives it with another video - the "video-to-video" mode. The difference is the source input: instead of a single frame, this node accepts a batch of frames, so the thing you're animating is already a moving clip. Every frame of your source gets the driving motion applied to it.

Why would you want that? Because your source isn't always a static portrait. Maybe you have a rendered character clip that's moving but you want to swap in a different facial performance, or you want to re-drive existing footage with a new expression track. A single still can't carry that - the underlying face is frozen. Feeding a frame sequence lets the source keep whatever motion it already had while the driving video layers the face performance on top. This is the vid2vid path the README points at, and it's the more advanced of the two LivePortrait nodes.

How it works

Same LivePortrait engine as everywhere else in this pack: split each face into an appearance code and motion codes, read the motion off the driving clip, warp it onto the source. The wrinkle here is that the source is a batch, so the node walks the source frames and the driving frames together and produces an animated result the length of the sequence. It's frame-by-frame reenactment rather than one-photo-comes-alive.

The inputs and outputs that matter

Just two inputs, both required:

  • source_image_batch (IMAGE) - a batch of frames, i.e. your source video decoded into images. This is the part that separates this node from the single-still version. Use a Mixlab (or any) video-load node to turn a clip into the frame batch you feed here.
  • driving_video (SCENE_VIDEO) - the performance to transfer. As with the rest of the pack this is a Mixlab SCENE_VIDEO type, which is why you'll want comfyui-mixlab-nodes alongside it for loading and viewing.

Outputs match the still node: video (the reenacted result) and video_concat (result stitched next to the driving clip so you can sanity-check how the motion landed).

One thing this node does not take is a crop_info input - so the per-face crop-and-target control you get on LivePortraitNode via FaceCropInfo isn't wired in here. This is the straightforward "one source clip, one driving clip" path; reach for the still LivePortraitNode with FaceCropInfo when you need the multi-face group behavior.

How to install it

ComfyUI Manager → search comfyui-liveportrait → install → restart. Or manually:

cd ComfyUI/custom_nodes
git clone https://github.com/shadowcz007/comfyui-liveportrait

then restart. Download the LivePortrait and InsightFace weights (Google Drive / Baidu links are in the README) into ComfyUI/models/liveportrait and ComfyUI/models/insightface. If comfyui-mixlab-nodes is already installed, no extra Python deps are needed.

Common issues

Video-to-video is heavier than the still path - you're running the warp for every source frame and every driving frame, so long clips are slow and memory-hungry. Keep the driving clip short while you're dialing in settings. The usual pack gotchas apply: models don't auto-download (a lot of "it errors" reports are just the models/liveportrait folder being empty), and InsightFace is the dependency most likely to break the import - historically over a missing C++ toolchain, eased by InsightFace 1.0. Alignment between a moving source and a moving driver is also fussier than the single-photo case; if the face drifts or ghosts, shorten and simplify the driving motion before blaming the node. And the standard caveat: the InsightFace weights this rides on are non-commercial, which follows through to anything you make with it.

Category♾️Mixlab/Video/LivePortrait

Inputs (2)

NameTypeDefaultDescription
source_image_batchIMAGE
driving_videoSCENE_VIDEO

Outputs (2)

NameTypeDescription
videoSCENE_VIDEO
video_concatSCENE_VIDEO