Nodes/Protoface/Protoface LongCat Avatar 1.5 · Talking Avatar
ComfyUI Node

Protoface LongCat Avatar 1.5 · Talking Avatar

A talking head with no prompt field at all

By protoface-ai·Created 22 days ago·Updated 13 days ago· 0
Protoface LongCat Avatar 1.5 · Talking Avatar
    • video
    • files
    • run id
    ◄speech▾►
    ◄quality720p►
    ◄aspect_ratioauto►
    ◄person▾►
    ◄generation_id0►
    ◄request_scope►

    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.

    CategoryProtoface/Video/meituan

    Inputs (6)

    NameTypeDefaultDescription
    speechCOMBOSpeech 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.
    qualityCOMBO720pOutput resolution tier. Upscaled tiers are identified in output_quality_descriptions.
    aspect_ratioCOMBOautoAuto preserves the portrait framing; an explicit ratio center-crops the portrait before generation.
    personCOMBOA public URL, a data URI, or an asset id.
    generation_idINT00–9007199254740991Keep fixed to reuse/resume this paid job. Increment for a fresh paid generation; independent of the model seed.
    request_scopeSTRINGAutomatically assigned per node. Headless clients must supply a stable unique workflow/node ID. This is not a secret.

    Outputs (3)

    NameTypeDescription
    videoVIDEO—
    filesPROTOFACE_FILE—
    run idSTRING—