Retargeting
Toggle whether LivePortrait drives the eyes and lips
- crop_info
- crop_info
Retargeting is a tiny pass-through node with exactly one job: decide whether LivePortrait is allowed to move the eyes and the lips. It sits in the wire between FaceCropInfo and LivePortraitNode - crop info goes in, the same crop info comes out, but flagged so the animation either drives those features or leaves them alone. That's it. Small node, but it fixes a real annoyance.
Here's why you'd reach for it. LivePortrait's eye and mouth retargeting is what keeps the source's blinks and lip shapes sensible while copying the driving performance - most of the time that's what you want. But sometimes it's not. Maybe the driving clip's blinking looks wrong on your subject, or you want the mouth to stay shut regardless of what the driver is doing, or the retargeting is introducing a twitch you'd rather kill. Retargeting lets you switch either channel off without touching the rest of the pipeline.
How it works
It takes the CROP_INFO produced upstream and sets flags on it for lip and eye driving, then passes it along. The heavy lifting still happens in LivePortraitNode; this node just tells it which of those two motion channels to honor. Because it's a straight pass-through on the crop info, you can drop it into an existing graph - FaceCropInfo → Retargeting → LivePortraitNode - without rewiring anything else.
The inputs and outputs that matter
crop_info(CROP_INFO, required) - the crop info from FaceCropInfo. This is what gets tagged and forwarded.lip(BOOLEAN, default true) - whether lip motion is driven. Turn it off to keep the source's mouth from following the driving clip.eye(BOOLEAN, default true) - whether eye motion is driven. Turn it off to stop the eyes (blinks, gaze) tracking the driver.
Both default to on, which matches normal LivePortrait behavior - so if you never insert this node you lose nothing. You add it precisely when you want to disable one of those channels.
The output is crop_info (CROP_INFO) - the same bundle, now carrying your eye/lip settings, ready to plug into LivePortraitNode's crop input.
How to install it
Via ComfyUI Manager: search comfyui-liveportrait, install, restart. Or clone the pack:
cd ComfyUI/custom_nodes
git clone https://github.com/shadowcz007/comfyui-liveportrait
then restart ComfyUI. Drop the LivePortrait and InsightFace weights (Google Drive / Baidu links in the README) into ComfyUI/models/liveportrait and ComfyUI/models/insightface. If you already run comfyui-mixlab-nodes, no extra dependencies are needed.
Common issues
This node has almost no failure surface of its own - it doesn't detect, download, or render anything, so if something breaks it's upstream. The most common confusion is expecting it to do something on its own; it won't, it only changes how the LivePortraitNode downstream behaves, so you have to wire the whole FaceCropInfo → Retargeting → LivePortraitNode chain for the toggles to have any effect. If disabling eye or lip seems to do nothing, confirm the output really is feeding LivePortrait's crop_info input and not a dangling wire. Everything else is inherited from the pack: the models aren't auto-downloaded, InsightFace is the dependency most likely to break the import, and its weights are non-commercially licensed.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| crop_info | CROP_INFO | — | |
| lipopt | BOOLEAN | true | — |
| eyeopt | BOOLEAN | true | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| crop_info | CROP_INFO | — |