Protoface LongCat Avatar 1.5 · Talking Avatar
A talking head with no prompt field at all
- video
- files
- run id
Two inputs, one video
Most generation nodes are a prompt plus some knobs. This one has no prompt. You give it a portrait and a speech clip, and it gives you back a talking-avatar video where the mouth matches the audio. That's it. Meituan's LongCat Avatar 1.5 does the lip-sync and head motion; the performance was decided the moment your voice track was recorded.
That's the useful bit for beginners: nothing about the output is prompted, so the lever you control is the audio. Pacing, pauses, emphasis, how much the voice moves around - all of it reads through the video. Which is why this node pairs so naturally with a TTS step upstream (a speech node in this same pack, or a local TTS you already run) rather than with a mic. Iterating on a voice track is cheap; iterating on rendered video is not.
Scope it honestly. This is a talking head for a product clip, an explainer, a character beat - a face delivering lines. It isn't a body-activation model and it isn't going to invent a performance that wasn't in the recording. Local lip-sync stacks exist and are free, but they come with a face-alignment pipeline and a per-frame loop and a good afternoon of debugging; this is one queue and a bill.
The inputs
speech is the audio. Tooltip is explicit that the API measures its duration itself, so length drives both pricing and output length - and it caps at 64 seconds. One asset, so a batch of takes gets rejected; split it and run them one at a time.
person is the portrait. Feed it from Load Image. Framing matters more than resolution: a clear, front-facing face with room above the shoulders gives the model something to work with, and a tight crop or a profile is asking for a slightly uncanny result.
quality defaults to 720p. The tooltip mentions upscaled tiers are identified in output_quality_descriptions, so the list isn't just resolutions - some entries are upscales of a lower native render, and those cost more without adding information.
aspect_ratio defaults to auto, and the tooltip is the most useful sentence on the node: auto preserves the portrait's framing, while an explicit ratio center-crops the portrait before generation. So the default is "use my photo as-is," and picking 16:9 means you're throwing away the sides of your image first. For a talking head, leave it on auto.
generation_id keeps a paid job's identity - fixed to resume, incremented for a new generation. request_scope is the frontend-assigned dedup scope; headless workflows supply their own.
Outputs
video is a native VIDEO in a list, so it chains or maps like any other video output. files holds the original download (via PROTOFACE_FILE - Protoface Save File writes it out), and run id is the string that gets your money back into a job if the browser dies mid-poll: hand it to Protoface Resume Run and you get the finished render without a second charge.
Install
No weights, no GPU - it's a network node. ComfyUI 0.41.0+ and Python 3.10+, then either Manager (search Protoface, install protoface-nodes) or:
cd ComfyUI/custom_nodes
git clone --branch v0.1.0 --depth 1 https://github.com/protoface-ai/protoface-comfyui.git protoface
python -m pip install -r protoface/requirements.txt
av>=14 in that requirements file is what handles video in and out; if the install blows up, it's almost always there. Restart, reload the browser, then click Protoface bottom-right and enter your key.
Where people get bitten
The key. It's stored in server memory and cleared on restart - the "authentication error" people report after an update or reboot is usually just a missing key, not a bad one.
Second: audio over 64 seconds. Nothing about the widget tells you before you queue; the API measures and refuses, and you've wasted a round trip.
Third: thinking of generation_id as a seed. It isn't. Change the audio or the portrait and you've already made a new request; leaving the ID alone is correct there. Leave it fixed only when you're retrying the identical job - and if a run times out or the browser disconnects, that's exactly what you should do rather than queueing again from scratch. Cancels are best effort and carry no refund promise, so a "stop everything" click mid-job is not a safe way to save credits.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| speech | COMBO | Speech audio as a public URL, data URI, or asset id, no longer than 64 seconds. The API measures its duration automatically for pricing and video length. | |
| quality | COMBO | 720p | Output resolution tier. Upscaled tiers are identified in output_quality_descriptions. |
| aspect_ratio | COMBO | auto | Auto preserves the portrait framing; an explicit ratio center-crops the portrait before generation. |
| person | COMBO | A public URL, a data URI, or an asset id. | |
| generation_id | INT | 00–9007199254740991 | Keep fixed to reuse/resume this paid job. Increment for a fresh paid generation; independent of the model seed. |
| request_scope | STRING | Automatically assigned per node. Headless clients must supply a stable unique workflow/node ID. This is not a secret. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |
| files | PROTOFACE_FILE | — |
| run id | STRING | — |