Nodes/arkennemasis - ChatGPT / Codex / fal AI nodes/arkennemasis fal · VEED Fabric 1.0 Text · $0.08-0.15/s
ComfyUI Node

arkennemasis fal · VEED Fabric 1.0 Text · $0.08-0.15/s

Skip the TTS node, put the script straight on the node

By Hishamahmer·Created 3 months ago·Updated 9 days ago· 11
arkennemasis fal · VEED Fabric 1.0 Text · $0.08-0.15/s
  • image
  • video
  • video_path
  • info
◄text►
◄voice_description►
◄resolution720p►
◄max_cost_usd20.0►
◄reuse_identical_runtrue►
◄extra_json►
◄max_concurrent1►

This is the version of Fabric you actually want if you're building a talking head from scratch. The other two nodes in the family need an audio track - which means a TTS node upstream, an extra dependency, an extra failure point, and an extra set of takes to manage. Here you paste the script into a text box and the model writes the voice itself.

Image in, text in, talking video out. It's the shortest path from "I have a portrait and a paragraph" to "I have a video of that person reading the paragraph," and at 480p it's $0.08 per second of generated speech.

The inputs

image is the person, and it's required. There's no prompt to rescue a bad photo, so this is where the quality is won or lost: front-on, evenly lit, mouth visible. Feed the model a profile shot or a heavily filtered selfie and you'll get exactly what you paid for.

text is the script. Plain speech - the way you'd want a voice-over read, with punctuation doing the pacing work. The output length follows the rendered speech, and so does the bill, so a wordy paragraph is a longer, more expensive clip.

voice_description is optional, and this is the clever bit: the primary voice description is auto-generated from the image, and this field adds to it. The tooltip's own examples span simple descriptors like "British accent" or "Confident" all the way up to a full description ("Confident male voice, mid-20s, with notes of…"). Leave it empty and you take whatever the model infers from the picture - consistent, but not chosen.

resolution is 720p (default) or 480p. That's the entire settings surface. No prompt weighting, no seed, no motion strength. The model is doing the acting; you're choosing the face, the words and the voice flavour.

Outputs: video, video_path, and info, the JSON blob holding the request id, the cost estimate, the saved files and fal's full answer. Files land in output/fal/veed_fabric-1.0_text/.

Plus the pack-wide controls: max_cost_usd (default $20 cap - worth lowering while you experiment), reuse_identical_run, extra_json, max_concurrent.

When this loses to the audio-input version

If the voice matters - a specific person, a specific performance, a real recording - you want the plain Fabric 1.0 node and an audio track. Fabric's own launch pitch was against Kling Speak and the local avatar crowd on delivering a talking video, and the voice you get here is generated, not cloned. For anything with a brand voice or a real narrator, generate the speech separately (there's a load of options: local Chatterbox if you want it offline, or any of the pack's hosted TTS endpoints) and feed the audio in.

For placeholder narration, storyboards, internal demo videos, and the twenty-avatars-a-day case, the text node is simply faster to live with - one node instead of three.

Install

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

Manager → search arkennemasis. Then:

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

in the .env next to run_nvidia_gpu.bat, restart ComfyUI, and look under arkennemasis/fal/Lip Sync/VEED.

Notes from using the family

  • Cost tracks the rendered speech, not your word count - so trimming a rambling sentence saves real money at $0.15/s on 720p. Set max_cost_usd before you paste in a five-hundred-word monologue.
  • The voice_description field only adds to an auto-generated description. It won't replace the voice the image implies; it colours it.
  • Everything is cached by default. reuse_identical_run returns the files from an identical earlier run instead of paying again - including after a ComfyUI restart. Editing the text or the image is what forces a new call.
  • Long renders survive a crash on fal's side. The request id is logged in output/fal/_requests.jsonl; fal Recover Result downloads the finished job for free.
Categoryarkennemasis/fal/Lip Sync/VEED

Inputs (8)

NameTypeDefaultDescription
imageIMAGE—
textSTRING—
voice_descriptionSTRINGOptional additional voice description. The primary voice description is auto-generated from the image. You can use simple descriptors like 'British accent' or 'Confident' or provide a detailed description like 'Confident male voice, mid-20s, with notes of...' Empty leaves it out.
resolutionCOMBO720pResolution
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.