Nodes/arkennemasis - ChatGPT / Codex / fal AI nodes/arkennemasis fal · Sync Lipsync 2 · $3/min
ComfyUI Node

arkennemasis fal · Sync Lipsync 2 · $3/min

The $3-a-minute workhorse

By Hishamahmer·Created 3 months ago·Updated 9 days ago· 11
arkennemasis fal · Sync Lipsync 2 · $3/min
  • video
  • audio
  • video
  • video_path
  • info
◄modellipsync-2►
◄sync_modecut_off►
◄max_cost_usd20.0►
◄reuse_identical_runtrue►
◄extra_json►
◄max_concurrent1►

If you have a face and a voice and you need them to agree, this is the node you'd actually reach for. Sync Labs' lipsync-2 model, $3 per minute of video, no length cap in the node's checks, four widgets. It doesn't do emotion and it doesn't do 4K detail; it makes a mouth move correctly, and $3 a minute is the sane middle of this pack's lip-sync ladder - a 20-second talking head is a dollar.

The one setting that matters

There's a model combo with two options, lipsync-2 (default) and lipsync-2-pro, and the field's own text tells you the trade: pro costs roughly 1.67× as much for the same duration. The node's price badge multiplies accordingly, so you don't have to hold the arithmetic in your head. Leave it on lipsync-2 here - if you want the pro pass, there's a dedicated node in this pack and the decision is worth making deliberately rather than by leaving a combo in the wrong place.

Then sync_mode, which is what happens when the audio and the video disagree about how long the shot is: cut_off (default), loop, bounce, silence, remap. The names describe the behaviour - the shorter of the two sets the pace, and cut_off simply stops. If your narration runs longer than your clip, the default is the mode most likely to leave you with a mouth that stops talking mid-sentence. Match the durations before you wire them: the pack's Narration Length node exists to make the shot long enough for its own voice-over.

Inputs and outputs

video and audio are both required; there's no upper length limit enforced by the node, which is why this one is usable for real dubbing work rather than per-15-second fragments. Outputs are video (ComfyUI VIDEO - save it, or feed the assembly chain), video_path (STRING, the file under output/fal/fal-ai_sync-lipsync_v2/), and info (JSON: request id, cost estimate, saved files, fal's full answer).

Around that, the shared fal furniture: FAL_KEY from the .env next to your launcher and never from a widget anywhere in this pack, a cost estimate compared against max_cost_usd (default $20) before any upload, max_concurrent (default 1) so paid nodes go one at a time unless you raise it, and reuse_identical_run (default on) so re-running an identical job doesn't bill twice - even after a ComfyUI restart.

Also check the cheap option first. If the video is your own render and you already know the exact dialogue timing, a local audio-driven model may get you there for electricity instead of $3 a minute. Where this node wins is a real face from real footage, in one call, with no local model wrangling.

Install

cd ComfyUI/custom_nodes
git clone https://github.com/Hishamahmer/comfyui-arkennemasis

Restart, or install through ComfyUI-Manager by searching arkennemasis (pack title comfyui-arkennemasis). The only dependency in requirements.txt is httpx, and that serves the pack's Codex nodes - the fal provider is standard library only, so this is a clean install into an existing environment.

FAL_KEY=your-key-from-fal.ai/dashboard/keys

goes in the .env beside run_nvidia_gpu.bat.

Where people get burned

  • A mouth that stops mid-sentence. sync_mode was cut_off and your audio was longer. Fix the durations, or pick a mode that pads or repeats.
  • You accidentally paid 1.67× for the pro model. That model combo is the difference between $3 and $5 a minute.
  • A slow, expensive run on the wrong face. Lip sync can't fix a face that's turned too far away, half off-screen, or inside a hard shadow. Frame the subject toward camera, in decent light, mouth visible.
  • You forgot the audio is a ComfyUI AUDIO value. Wire it from a speech node or a loader; it's not a file path.
  • ComfyUI died while a long job was running. The fal request didn't - and you were charged. Take the id from output/fal/_requests.jsonl and collect the result with the pack's free fal Recover Result node.
Categoryarkennemasis/fal/Lip Sync/Sync

Inputs (8)

NameTypeDefaultDescription
modelCOMBOlipsync-2The model to use for lipsyncing. `lipsync-2-pro` will cost roughly 1.67 times as much as `lipsync-2` for the same duration.
videoVIDEOURL of the input video
audioAUDIOURL of the input audio
sync_modeCOMBOcut_offLipsync mode when audio and video durations are out of sync.
max_cost_usdoptFLOAT20.00–100000Safety cap. If the estimated cost of this run is above this many US dollars the node stops BEFORE sending anything to fal. 0 = no cap.
reuse_identical_runoptBOOLEANtrueIf these exact inputs (the settings AND the same pictures/clips/audio) were already paid for and the files are still in output/fal, return them instead of paying again - also after a ComfyUI restart. Turn off for a fresh take with the same settings.
extra_jsonoptSTRINGAdvanced: a JSON object merged into the request last, for any fal field this node has no box for. Example: {"seed": 7}. Leave empty normally.
max_concurrentoptINT11–32How many paid fal calls may run at the same time in one run, across every fal node. 1 (default) = one after another. This node starts its paid part only while fewer than this many fal calls are running. Once any fal node fails, the ones still waiting are not started, so nothing more is billed.

Outputs (3)

NameTypeDescription
videoVIDEO—
video_pathSTRING—
infoSTRINGJSON: request id, cost estimate, saved files and fal's full answer.