OmniAvatar All-in-One (14B)
Audio-driven avatars with OmniAvatar (14B)
- portrait
- audio
- frames
You hand it a face, a voice, and a line of text, and it hands back a video of that face saying the thing - mouth synced to the audio, expression moving along with it. For a long time that trick was the thing ComfyUI couldn't do: audio-driven avatar generation had no native workflow, and the community said so out loud when OmniAvatar's weights landed in mid-2025. This node is someone's answer to that gap - a single wrapper that turns OmniAvatar's Wan-based talking-avatar pipeline into one drag-in box.
What it actually is
OmniAvatar is a talking-avatar model built on top of Wan 2.1 - the community improved lineage of the old fantasytalking / OmniGen idea, and it was the first talking-avatar project to ship a 1.3B variant that ran on 8GB VRAM. The 14B model is the quality tier, and this node wraps its inference. "All-in-One" is fair: portrait + audio + prompt go in, a synchronized video comes out, and you never touch a command line.
Mechanically it's straightforward under the hood. The node saves your portrait to a temp PNG, takes whatever audio you feed it (more on that below), calls OmniAvatar's WanInferencePipeline.log_video(...), then reads the resulting MP4 back and extracts the frames into a tensor. It's a wrapper, not a reimplementation - which is exactly why the install is heavier than the node itself looks.
The inputs that matter
- portrait (
IMAGE): the static face that becomes your avatar. A clean front-facing headshot works best. - audio (
AUDIO): the driving voice. The node auto-converts to 16kHz WAV, and it'll accept MP3/WAV buffers from ComfyUI audio nodes without complaint. - prompt (
STRING): the text guide for what's being said and the delivery. Note the default is in Chinese - you can replace it freely.
The four knobs you'll actually touch, all optional:
- sample_steps (default 20): sampling steps. Standard trade-off - fewer is faster, more is smoother.
- sample_text_guide_scale and sample_audio_guide_scale (both default 3.0): separate guidance for text adherence versus audio/lip-sync adherence. Crank the audio one if the mouth drifts; ease off if things get weird.
- teacache_thresh (default 0.2): TeaCache's temporal-cache threshold. TeaCache skips redundant computation across similar frames - it's the well-known Wan speed trick. Higher = faster but lazier; users report disabling it (0.0) improves face consistency at the cost of speed.
- seed / control_after_generate: standard seed control -
fixedreplays the same result,dynamicrolls a new seed each run.
The single output is frames (IMAGE, an (F, C, H, W) sequence). Wire it into something like VHS' Save Video or a VideoViewer to actually save or preview it. Here's the gotcha: the README advertises a VIDEO object output, but the code this build ships returns only the frames tensor. Don't go hunting for a missing output port - it just isn't there yet.
Installing it - the real way
This one isn't a clean Manager one-click. Manager can install the pack, but the node is only half the story: it imports the original OmniAvatar repo at runtime, so you need that too.
cd ComfyUI/custom_nodes
git clone https://github.com/Omni-Avatar/OmniAvatar # the original project + configs
git clone https://github.com/CallMe1101/ComfyUI_OmniAvatar
# download the 14B model weights and point the config at them
Then two manual bits the README insists on:
export PYTHONPATH=/path/to/custom_nodes/OmniAvatar:$PYTHONPATH # so it can find WanInferencePipeline
pip install -r requirements.txt
That requirements file is a haul: torch, xfuser, peft, transformers, dlib, face_alignment, librosa, ffmpeg-python and friends. Plus the OmniAvatar repo's own requirements on top. Expect a real setup session, and expect the 14B weights to want serious VRAM - 1.3B ran on 8GB, but 14B OOMs on modest cards.
Troubleshooting
- "找不到WanInferencePipeline" / ImportError on
WanInferencePipeline: the classic. The node imports fromcustom_nodes/OmniAvatar/scriptsand.../OmniAvatar/OmniAvatar, so the clone must be a sibling ofComfyUI_OmniAvatar, and yourPYTHONPATHmust point at it. Restart after fixing. - OOM on the 14B: real and common - the community hit it testing the 14B before the 1.3B existed. Try the 1.3B config if your card can't hold it.
- No video appears in the UI: you're probably expecting a
VIDEOoutput that this build doesn't have. You getframes; pipe them into a save/video node.
It's a young, small pack from a single author, with zero traction yet - so treat it as a wrapper to experiment with, and check the upstream OmniAvatar repo when something behaves oddly. For the first time, though, "make this face say this thing" is a single node on the canvas.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| portrait | IMAGE | — | |
| audio | AUDIO | — | |
| prompt | STRING | 你好,欢迎体验 OmniAvatar | — |
| sample_stepsopt | INT | 201–100 | — |
| sample_text_guide_scaleopt | FLOAT | 3.00–20 | — |
| sample_audio_guide_scaleopt | FLOAT | 3.00–20 | — |
| teacache_threshopt | FLOAT | 0.200–1 | — |
| seedopt | INT | 911234567890–18446744073709550000 | — |
| control_after_generateopt | COMBO | fixed | 2 options: fixed, dynamic |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| frames | IMAGE | — |