VEED Fabric 1.0
Turn a photo and an audio clip into a talking presenter, in the cloud
- image
- acceleratorOptions
- video
VEED Fabric is VEED's avatar-style video model, and "Fabric 1.0 (hosted)" is the version Runware serves. The use case is one sentence: give it a person's photo and an audio clip, and it produces video of that person talking in sync with the audio. Think presenter videos, talking-head content, localized voiceovers with lip movement. This is the kind of thing that used to mean hours of fiddling with a local lip-sync stack; here it's two required inputs - image and audio - and a VIDEO out.
The "(hosted)" suffix is doing real work. VEED's Fabric line comes in hosted and (in some deployments) self-hosted flavors; on Runware you're getting the hosted version, which means VEED's own infra handles the heavy lifting behind Runware's API. For you, the practical consequence is that this node behaves like the rest of the pack - cloud call, native output, no local model. The input contract, though, is strict: both image (the face to animate) and audio (what it should say) are required. There's no text-to-speech built in here like the Sync node has - the audio has to already exist as a UUID or URL.
How it works
The node (veed:[email protected], videoInference) builds a request, uploads your image tensor through the SDK automatically, passes the audio reference (UUID or URL) through, and sends it all over REST. When the job completes, the resulting video downloads into a native VIDEO output. The resolution control is a preset list (720p default) rather than free pixels, and there's a genuine creative knob hiding in settings.audioCFGScale - a classifier-free-guidance dial for audio-video alignment (default 3.05), which is exactly the thing you nudge when the lip sync feels loose.
The inputs that matter
- image (required) - the
IMAGEtensor of the person. A clean, front-facing, well-lit photo works best; this is the whole performance. - audio (required) - UUID or URL of the audio the video should lip-sync to. This must be an existing asset, not text.
- resolution - output preset,
720pdefault; auto-matches the input's aspect ratio. - settings.audioCFGScale - sync tightness, default 3.05. Higher = stronger audio-video alignment.
- settings.colorCorrection - apply color correction to keep colors consistent across segments. Cheap to turn on, worth it for multi-clip edits.
- seed / numberResults - reproducibility and variations.
Then the standard tail: acceleration (default medium), outputFormat (MP4), outputQuality, safety, ttl.
Install and API key
Same install as the rest of the pack:
cd ComfyUI/custom_nodes
git clone https://github.com/Runware/ComfyUI-Runware
pip install -r ComfyUI-Runware/requirements.txt
Restart ComfyUI (or install Runware from ComfyUI Manager). API key from runware.ai/api-keys, set in ComfyUI Settings → Runware API key, exported as RUNWARE_API_KEY, or via runware auth login.
Gotchas
The most common failure here is audio that never was: people type text into the audio field and wonder why nothing works. It needs a UUID or URL, so get your audio into Runware storage first (or point at a hosted file) before wiring this node. Second, the face matters more than the prompt - Fabric animates what you give it, so a photo with poor lighting, an odd angle, or heavy occlusion will produce an uncanny result no setting can fix. And remember the image-vs-video cost reality: avatar video is on the expensive end of this pack's price list, and numberResults multiplies it. If the lip sync is close but not perfect, tweak settings.audioCFGScale before you burn another queue.
Inputs (16)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| audio | STRING | Audio input (UUID or URL). | |
| acceleratorOptionsopt | RUNWARE_ACCELERATOROPTIONS | — | |
| resolutionopt | COMBO | 720p | Resolution preset for the output. When used with input media, automatically matches the aspect ratio from the input. |
| seedopt | INT | 00–9223372036854776000 | Random seed for reproducible generation. When not provided, a random seed is generated in the unsigned 32-bit range. |
| numberResultsopt | INT | 11–4 | Number of results to generate. Each result uses a different seed, producing variations of the same parameters. |
| accelerationopt | COMBO | medium | Optimization level. |
| settings.audioCFGScaleopt | FLOAT | 3.050–20 | Classifier-free guidance scale for audio synchronization. Higher values produce stronger audio-video alignment. |
| settings.colorCorrectionopt | BOOLEAN | false | Apply color correction to the generated video. Helps maintain consistent colors across video segments. |
| safetyopt | BOOLEAN | false | Enable to set safety. Off uses the model's default. |
| safety.checkContentopt | BOOLEAN | false | Enable or disable content safety checking. |
| safety.modeopt | COMBO | fast | Safety checking mode for video generation. |
| ttlopt | BOOLEAN | false | Enable to set ttl. Off uses the model's default. |
| ttl_valueopt | INT | 60 | Time-to-live (TTL) in seconds for generated content. Only applies when `outputType` is `URL`. |
| outputFormatopt | COMBO | MP4 | File format for the generated video. |
| outputQualityopt | INT | 9520–99 | Compression quality of the output. Higher values preserve quality but increase file size. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |