ComfyUI Node

Echo_Predata

Echo_Predata — where your portrait and audio become a talking-head conditioning

By lieding·Created 8 months ago·Updated 7 months ago· 0
Echo_Predata
  • info
  • image
  • audio
  • clip_vision
  • video_images
  • emb
prompt Gesture, Body, Face Expressions and Movements: Hands and Fingers Movements: The person's hands are not visible in the image, so there are no specific hand or finger movements to describe. Body Positions and Posture: The person is standing upright with a straight posture. Body Coverage in Frame: The person is fully visible from the waist up. Face Expressions Change: The person appears to have a neutral expression with a slight smile. Eyes Movement: The eyes are looking directly at the camera. Head Movement: The head is slightly tilted forward. Overall Description: The character is standing in a front-facing shot, wearing a pink knitted vest over a white collared shirt and a white pleated skirt. The background appears to be a studio setting with soft lighting and some blurred elements that suggest a modern, clean environment. The person is adorned with pearl earrings, adding a touch of elegance to their appearance. The overall impression is one of a professional or casual presentation, possibly for a broadcast or a photoshoot.
negative_prompt Gesture is bad. Gesture is unclear. Strange and twisted hands. Bad hands. Bad fingers. Unclear and blurry hands. 手部快速摆动, 手指频繁抽搐, 夸张手势, 重复机械性动作.
pose_dir
width512
height512
fps25.00
facemask_ratio0.1
facecrop_ratio0.8
length100
partial_video_length
draw_mousefalse
motion_sync_false

Echo_Predata is the middle node in the three-node EchoMimic V3 flash chain (Echo_LoadModelEcho_PredataEcho_Sampler). LoadModel spent your VRAM on the model; this one takes the two things you actually care about - a portrait image and an audio clip - and turns them into the conditioning (emb) the sampler needs. Think of it as the "prep" node: it's where you set resolution, length, and the memory-vs-quality dials that determine whether the run fits on your GPU at all.

How it works

Three things happen here. First, your audio gets written out and fed through the wav2vec audio encoder, which produces an embedding per frame - that's the lip-sync and expression signal. Second, the reference image gets normalized to the target size (with optional face cropping) and passed through a CLIP image encoder so the model knows what it's animating. Third, the clip length is derived from the audio: the actual number of frames is min(audio_duration × fps, length), snapped to the model's temporal compression.

One honest gotcha, straight from the source: in this flash build, the prompt and negative_prompt text boxes aren't actually fed to a text encoder. The pack ships precomputed prompt embeddings in its text_embeds/ folder (person_speaking, negative) and uses those. The typed prompt is cosmetic here - don't burn an hour hand-tuning it expecting behavior to change. The motion semantics come from the audio plus the reference image.

Inputs that matter

  • image - your portrait reference. Feed it from any node that outputs an IMAGE (Load Image, or a video's first frame).
  • audio - an AUDIO input, from something like the core Load Audio node. This is the real driver; a cleaner, louder clip gives cleaner lip sync.
  • width / height - output resolution, 128–1024 in steps of 64. Default 512×512 is safe; the README's flash sweet spots are 768×768 on 12 GB and 768×512 on 6.5 GB.
  • length - total frames; duration = length / fps. Default 100 at 25 fps is a 4-second clip.
  • fps - 5–120, default 25.
  • partial_video_length - the big VRAM lever, and the one you'll reach for first when you OOM. Options are 33/65/97/113/129/193; lower means less VRAM. The README's guidance: 65 on 12 GB, 97 on 16 GB, 113+ on bigger cards. It chunks the video into blocks during sampling.
  • facemask_ratio - how much the face region is masked/conditioned (0–1, default 0.1).
  • facecrop_ratio - face zoom via cropping: magnification is 1/ratio, so 0.5 gives a 2× face crop. Only lower it when the face is tiny in frame; 1 or 0 means no crop.
  • pose_dir - a list of default poses (pose_01…pose_ultraman) plus any dirs found in your input/tensorrt_lite. That's pose-driven machinery inherited from the parent pack; the audio-driven flash path doesn't branch on it.
  • draw_mouse, motion_sync_ - extras from upstream; leave them off unless you specifically need the pose-sync behavior they describe.

Optional sockets exist for clip_vision and video_images, but in this fork the flash path uses the CLIP encoder it loads itself in LoadModel, so don't worry if those stay empty.

Output

  • emb (MODEL_EMB_E) - all the conditioning, wired into Echo_Sampler's emb input. It also carries the settings (version, fps, resolution) the sampler reads back.

Installing

It's the same pack install as its siblings - ComfyUI Manager (search ComfyUI_EchomimicV3_DL) or:

cd ComfyUI/custom_nodes
git clone https://github.com/lieding/ComfyUI_EchomimicV3_DL
cd ComfyUI_EchomimicV3_DL
pip install -r requirements.txt

Restart after. The requirements (librosa, transformers, diffusers, moviepy, ffmpeg-python, numpy==2.1) are what this fork actually imports; the README's mmgp/retina-face/tensorflow extras belong to the parent pack's non-flash V3 and don't apply here. Model placement is the LoadModel node's job - if Predata throws "audio model not found," the chinese-wav2vec2-base folder under ComfyUI/models/echo_mimic/ is the thing to check.

Common issues

Out of memory. This is the node whose knobs fix it: drop partial_video_length (65 on 12 GB), lower width/height toward 512, and cut length. Keep block_offload on upstream in LoadModel.

Nothing changes when you edit the prompt. Not a bug - see above. In this build the text conditioning is precomputed.

Wrong duration. Remember the clip length is capped by the audio; a 2-second clip won't produce your requested 100 frames. Lengthen the audio, not just the length slider.

CategoryEchoMimic

Inputs (17)

NameTypeDefaultDescription
infoMODEL_INFO_E
imageIMAGE
audioAUDIO
promptSTRING Gesture, Body, Face Expressions and Movements: Hands and Fingers Movements: The person's hands are not visible in the image, so there are no specific hand or finger movements to describe. Body Positions and Posture: The person is standing upright with a straight posture. Body Coverage in Frame: The person is fully visible from the waist up. Face Expressions Change: The person appears to have a neutral expression with a slight smile. Eyes Movement: The eyes are looking directly at the camera. Head Movement: The head is slightly tilted forward. Overall Description: The character is standing in a front-facing shot, wearing a pink knitted vest over a white collared shirt and a white pleated skirt. The background appears to be a studio setting with soft lighting and some blurred elements that suggest a modern, clean environment. The person is adorned with pearl earrings, adding a touch of elegance to their appearance. The overall impression is one of a professional or casual presentation, possibly for a broadcast or a photoshoot.
negative_promptSTRING Gesture is bad. Gesture is unclear. Strange and twisted hands. Bad hands. Bad fingers. Unclear and blurry hands. 手部快速摆动, 手指频繁抽搐, 夸张手势, 重复机械性动作.
pose_dirCOMBO8 options: pose_01, pose_02, pose_03, pose_04, pose_fight, pose_good, +2
widthINT512128–1024
heightINT512128–1024
fpsFLOAT25.005–120
facemask_ratioFLOAT0.10–1
facecrop_ratioFLOAT0.80–1
lengthINT10012–5000
partial_video_lengthCOMBO6 options: 33, 65, 97, 113, 129, 193
draw_mouseBOOLEANfalse
motion_sync_BOOLEANfalse
clip_visionoptCLIP_VISION
video_imagesoptIMAGE

Outputs (1)

NameTypeDescription
embMODEL_EMB_E