This ComfyUI workflow performs a video face swap by applying a single reference face image to every frame of a driving video, then recombining the frames into a final clip. The pipeline starts with VHS_LoadVideo to decode the source video into frames and LoadImage to bring in your reference face. A custom face-swap node (dc72113f-8276-4a5a-af12-85d6bec89ed5) drives the actual face transfer using the LTX 2.3 LoRA trained by @Alissonerdx. PrimitiveFloat and PrimitiveInt nodes expose key controls (such as effect strength, region size, or frame step), while ImageResizeKJv2 aligns the reference face scale to your target footage.
To stabilize results and keep the background intact, the workflow composites the generated face back onto each original frame with ReservedRegionFrameComposer. This node lets you define a consistent “reserved” region for the face and blend it with feathered edges, reducing temporal jitter and preserving hair, lighting, and scene motion. ComfyMathExpression is used to derive dynamic values (for example, region size from video resolution), keeping settings in sync with whatever you load. For quality checks, ImageConcanate can assemble side-by-side previews of original vs. swapped frames. Finally, the processed frames are encoded to a video using VHS_VideoCombine or CreateVideo, and the result is written out with SaveVideo.
API
通过代码使用此工作流
每个 Comfy 工作流都是一个 JSON 图。下面的内容就是此工作流的完整数据,ComfyUI 运行时也是如此——你可以从该 URL 获取、放入版本控制,或在 ComfyUI 中加载并逐节点运行。
使用 Comfy SDK 从 TypeScript 或 Python 运行。相同代码可用于 Comfy Cloud 或你自托管的 ComfyUI——只需更改基础 URL。
// Install (beta)
npm i @comfyorg/sdk
// Run this workflow (TypeScript)
import { Comfy } from "@comfyorg/sdk";
const client = new Comfy({ apiKey: "comfyui-..." });
const wf = await client.workflows.fromFile("workflow_api.json");
const job = await client.run(wf);
await job.getOutputs("<output-node-id>")[0].toFile("output.png");SDK 需要 API 格式的工作流:在 ComfyUI 中打开此工作流,使用 文件 → 导出工作流(API)。
常见问题














