Face Liquify Effect
Photoshop-style face warping in ComfyUI (and why \"Thin Face\" is a lie)
- image
- IMAGE
Face Liquify Effect is a Photoshop-style "liquify" warper that runs entirely inside ComfyUI - no diffusion, no sampling, no seed. You feed it an image or a batch of video frames and it pushes pixels around to fatten a face, shrink it, or enlarge the eyes. It's the node you reach for when you want a quick, deterministic reshape that doesn't change the person's identity, and especially when you're working with video, where re-sampling every frame is slow and ends up flickering.
The example workflow bundled with the pack spells out the intended use: load a video with VideoHelperSuite's VHS_LoadVideo, push the frames through this node, and combine them back into a clip. That's the sweet spot. A per-frame geometric warp stays temporally stable in a way frame-by-frame img2img never will, and frame_blend smooths any residual jitter between frames for you.
How it works
Under the hood it's two familiar things bolted together. First, insightface runs face detection and pulls 106-point landmarks per face - the same library that powers every identity tool in the ecosystem. Second, it applies a classic radial warp: each pixel near a face gets remapped by a distance-based influence curve using cv2.remap with cubic interpolation. No latent space involved, so the output is pixel-identical in every way except the geometry you asked for.
The four effect types map to different warp modes, and this is where the README's naming gets cute:
- Fat Face pulls pixels toward the face center - genuinely fattening.
- Small Face pushes pixels outward, shrinking the face at 80% strength.
- Big Face pinches, which reads as enlarging the face.
- Thin Face doesn't slim anything. It runs the eye-enlargement routine (
apply_eye_enlargement) - a PUSH warp at each eye's landmarks. The author's own Chinese label for it is 大眼, "big eyes." So if you pick Thin Face expecting a slimmer jaw, you get bigger eyes instead. That's not a bug; it's the effect just wearing a misleading name.
The inputs that matter
Most of the defaults are sane, so a beginner can set three things and go:
- effect_type - the four-way enum above.
- strength (0–1, default 0.5) - how hard the warp pushes. This is the one you'll ride up and down.
- face_indices -
allor a comma list like0,1,2to touch only specific faces in a group shot.
The rest are refinements. eye_scale (0–1) only does anything for Thin Face. area_scale (0.5–2) grows or shrinks the warp radius, so crank it up if you want the effect bleeding past the face. smooth (0–1) Gaussian-blurs the result, and the README flatly recommends 0 - it's a cheap softening that mostly trades sharpness for "vibes." frame_blend (0–1) matters only for batches, blending each frame with the previous processed one. face_order decides which face gets treated first when there are several.
The single output is an IMAGE of the same shape as the input - a single frame or a full batch - so it plugs straight back into whatever handled your frames before.
Installing it
The README gives the standard two-step: clone into custom_nodes, install requirements, restart.
cd ComfyUI/custom_nodes
git clone https://github.com/yichengup/comfyui-face-liquify
cd comfyui-face-liquify
pip install -r requirements.txt
ComfyUI Manager should also find it if you search "Face Liquify"; the node lives under Face Liquify/image in the node browser. Then comes the heavy part: requirements.txt pulls insightface, onnxruntime, and onnxruntime-gpu. InsightFace has a well-earned reputation as one of the worst installs in local generation, and onnxruntime-gpu in particular demands its CUDA/cuDNN versions line up - the README warns that system CUDA and torch's CUDA must match, and that CPU-only processing is painfully slow versus ~20s a frame on GPU. First run also auto-downloads the buffalo_l model pack (~326MB) into ~/.insightface/models/, so don't panic when the first execution hangs on a download. One quirk: both onnxruntime and onnxruntime-gpu are listed, and they're the same Python package fighting over the same module - if the install balks, try installing just one flavor.
Gotchas worth knowing
If the node silently returns your image unchanged, it means the detector found no face - it passes input straight through on a detection miss or an exception. Watch that face_indices indexing matches the order set by face_order; the indices are positional in the sorted list, not the original left-to-right scan. And a word on licensing: the code is MIT, but the insightface weights this node downloads are non-commercial. Fine for personal and hobby work, a non-starter if you're shipping a product. Also remember what this isn't: it's a geometric warp, not a face fixer like Impact Pack's FaceDetailer. If your problem is a distorted face baked in by the sampler, liquifying it won't help - that's a re-generation job, and this is a retouch job.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| effect_type | COMBO | 4 options: Fat Face, Thin Face, Big Face, Small Face | |
| strength | FLOAT | 0.500–1 | — |
| eye_scale | FLOAT | 0.300–1 | — |
| smooth | FLOAT | 0.500–1 | — |
| area_scale | FLOAT | 1.00.5–2 | — |
| frame_blend | FLOAT | 0.200–1 | — |
| face_order | COMBO | 4 options: Large to Small, Small to Large, Left to Right, Right to Left | |
| face_indices | STRING | all | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |