ComfyUI Node

HeyGen Video 1.0

Talking-head video without a local video stack

By Runware·Created 2 years ago·Updated 24 days ago· 142
HeyGen Video 1.0
  • referenceImages
  • frameImages
  • referenceVideos
  • video
◄positivePrompt—►
◄size768p (~16:9)►
◄seed0►
◄duration5►
◄numberResults1►
◄settings.promptEnhancementturbo►
◄safetyfalse►
◄safety.checkContentfalse►
◄safety.modefast►
◄ttlfalse►
◄ttl_value60►
◄outputFormatMP4►
◄outputQuality95►
◄advanced_json►

Why a hosted video node is the sane choice here

Video is where the local stack still loses on cost of effort. A five-second clip locally means a Wanderful workflow, an 18GB checkpoint, a text encoder competing for VRAM with your browser, and a queue that eats your evening. HeyGen's line is the other end of that: avatar and presenter video, generated on a server, returned as a file.

This node is the general heygen:[email protected] endpoint rather than the avatar-specific tiers - the pack also ships HeyGen Avatar IV, Avatar V and Video Agent if you know you want a talking presenter. Video 1.0 is the flexible one: a prompt plus reference stills, frame images, reference video, and optionally reference audio, which is what turns it into a lip-sync job. If you want a person saying your copy, the path is a reference image of that person, the line they're saying in the prompt, and audio in via advanced_json.

It's an API node, so the usual toll applies: your reference images and audio go to Runware, every clip is metered, and video is where metered adds up fastest. Nothing in the software world is free, and the community complaint about hosted video is always the same one - a handful of renders eats a subscription's worth of credit.

How it works

The node builds a heygen:[email protected] request with taskType: videoInference. Wired IMAGE inputs are inlined as base64 PNG data URIs; referenceVideos is a typed builder socket (RUNWARE_REFERENCEVIDEOS) rather than a plain IMAGE. The job is submitted through the runware-sdk over REST and, on completion, the returned video URL is downloaded into your ComfyUI output folder as runware_<hex>.mp4.

What you get back depends on your ComfyUI version. If comfy_api's video class is importable you get a native VIDEO object you can wire into ComfyUI's own video nodes. If it isn't, the node degrades gracefully and returns the file path as a string - same clip, less wiring. Cost and NSFW status print on the title bar.

Dependencies are runware-sdk, pillow and soundfile; no FFmpeg requirement, no model download. The key comes from RUNWARE_API_KEY, else ComfyUI Settings, else ~/.runware/config.yaml.

The inputs that matter

  • positivePrompt - required. This is what's happening in the shot.
  • size - 768p (~16:9) is the default, with 480p and 768p variants across 4:3, 1:1, 3:4, 9:16 and 21:9, plus two "(from input)" options that match your reference. Pick a real aspect ratio; there's no custom width/height on this node.
  • duration - 5 to 15 seconds. Total frames come out of that times the model's frame rate, and so does the bill.
  • referenceImages - IMAGE; the subject or look you're anchoring to.
  • frameImages - IMAGE; keyframes to steer the shot.
  • referenceVideos - a RUNWARE_REFERENCEVIDEOS socket, which means you wire a Runware Reference Videos builder node into it, not a raw video tensor.
  • settings.promptEnhancement - disabled / turbo (default) / quality. Turbo rewrites your prompt lightly, quality goes further. Turn it off when you need your words to be the words.
  • advanced_json - the escape hatch, and its tooltip names exactly what it's for: inputs.referenceAudios. This is how you drive a lip-sync/presenter shot.
{ "inputs": { "referenceAudios": ["https://example.com/line.wav"] } }
  • numberResults (1–4) - capped low, because video results are expensive. Output is a single video (VIDEO, or a path string on older ComfyUI builds).

Installing it

ComfyUI Manager → search Runware → install → restart. Manual:

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

Set the key in ComfyUI Settings → Runware API key or export RUNWARE_API_KEY. Runware bills by top-up with a minimum charge and a card on file - worth sorting out before your first 15-second render.

Where people get burned

  • Wiring a video tensor where a builder goes. referenceVideos wants the Runware Reference Videos builder's output; feed it something else and the socket won't take it.
  • The output is a path, not a VIDEO. On ComfyUI builds without the video API class, the node returns a saved file path instead. If your downstream video nodes reject the input, that's why - not a bug in your workflow.
  • Duration is the bill. 15 seconds at numberResults: 2 is a real charge. Read the cost line on the title bar after the first run before you queue a batch.
  • Prompt enhancement quietly rewrites you. turbo is the default; set disabled for anything you need to reproduce.
  • Filters are the provider's. safety.checkContent and safety.mode (fast/full) surface the NSFW flag, but you can't relax what HeyGen refuses.
  • Errors arrive as one short line - Runware: … [parameter 'duration', code …, HTTP 400] and nothing else. RUNWARE_DEBUG=1 gets you the stack.
CategoryRunware/Video/heygen

Inputs (17)

NameTypeDefaultDescription
positivePromptSTRINGText prompt describing elements to include in the generated output.
referenceImagesoptIMAGE—
frameImagesoptIMAGE—
referenceVideosoptRUNWARE_REFERENCEVIDEOS—
sizeoptCOMBO768p (~16:9)Output size. Only one of resolution or dimensions is sent.
seedoptINT00–4294967295Random seed for reproducible generation. When not provided, a random seed is generated in the unsigned 32-bit range.
durationoptINT55–15Length of the generated video in seconds. The total number of frames produced is determined by duration multiplied by the model's frame rate (fps).
numberResultsoptINT11–4Number of results to generate. Each result uses a different seed, producing variations of the same parameters.
settings.promptEnhancementoptCOMBOturboLevel of automatic prompt rewriting applied before generation.
safetyoptBOOLEANfalseEnable to set safety. Off uses the model's default.
safety.checkContentoptBOOLEANfalseEnable or disable content safety checking. Increases total generation time.
safety.modeoptCOMBOfastSafety checking mode for video generation.
ttloptBOOLEANfalseEnable to set ttl. Off uses the model's default.
ttl_valueoptINT60Time-to-live (TTL) in seconds for generated content. Only applies when `outputType` is `URL`.
outputFormatoptCOMBOMP4File format for the generated video.
outputQualityoptINT9520–99Compression quality of the output. Higher values preserve quality but increase file size.
advanced_jsonoptSTRINGOptional JSON merged into the request. For: inputs.referenceAudios

Outputs (1)

NameTypeDescription
videoVIDEO—