This workflow applies a consistent, frame-by-frame style transfer to any input video using the Flux.2 Klein 4b Distilled image editing model. It decodes your video with LoadVideo and reads resolution/FPS via GetVideoComponents, then uses VHS_SelectEveryNthImage to choose how densely to process frames (every frame, or every Nth for speed). Frames are organized with ImpactImageBatchToImageList so each image can be paired with a per-frame prompt.
Style prompts are generated and aligned with frames using a small prompt pipeline: GeminiNode can draft style-transfer lines following the Author Notes, RegexReplace cleans and normalizes the text (for example, removing numbering and enforcing "the source frame" phrasing), and FL_PromptMulti distributes one prompt per frame in a repeating cycle. Each frame and its corresponding prompt are fed into the Flux.2 Klein 4b editing node (the Flux.2 Klein 4b Distilled image editing model) to produce a stylized image while preserving the source frame’s structure. The processed images are repacked with ImageListToImageBatch, converted to a video using CreateVideo (matching the original FPS from GetVideoComponents), previewed via PreviewAny as needed, and written to disk 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)。
常见问题














