DAELAB · 生成节点
One request, one credit spend, and a request_id you must not lose
- first_frame
- last_frame
- reference_images
- reference_video
- video
- comfytv_video
- local_path
- task_report
- image
Video generation nodes are where ComfyUI's usual "just queue it again" instinct becomes expensive. This one is built around that fear: it treats a generation as a named request you can go back and pick up, not as a fire-and-forget API call.
LibTV Video / 统一视频指令 drives the official libtv CLI using your existing local login, and spends LibTV credits - never Comfy credits. It imports no ComfyTV code, despite speaking ComfyTV's video type. Setup is a one-time thing in a terminal:
libtv login web --open
Then create a canvas in LibTV, copy its UUID into project_uuid, and you're ready.
The request identity model
This is the part worth understanding before you spend anything. A request is identified by project_uuid + request_id. An input fingerprint is persisted before submission. Run it again with the same ID and the same inputs and you get the existing downloaded file (or the original remote node recovered) - no charge. Change the inputs while keeping the ID and the node rejects it rather than silently re-billing. To deliberately pay for another generation, you change request_id.
That makes request_id (default video-001) a commitment device. Bump it when you mean "new shot"; leave it alone when you mean "the last one failed, get me the result".
Failures are handled with the same discipline: a disconnected or failed --run is never automatically retried. Rerun and the node queries the existing remote node; if it's still running, come back later. A genuinely failed remote task needs a new request ID before it'll try again.
Inputs
The controls are the usual video suspects: model, mode (text2video for a smoke test, mixed2video when you're feeding references), prompt, duration (default 4), resolution, ratio, sound. Defaults are chosen so a first run is cheap: 4 seconds, 480p, 16:9, no sound. MiniMax H3 wants 5 seconds and 768P instead, and has no sound toggle at all.
Optional sockets do the interesting work:
first_frameandlast_frame- exactly one IMAGE each. These are keyframe interpolation; they're not "reference images."reference_images- a batch, for style/subject references.reference_video- aCOMFYTV_VIDEOinput.text_input- extra text alongside the prompt.reference_files- a JSON array of local paths or Comfy/viewURLs, order preserved. Input order is fixed: first frame, last frame, image batch, file list, then reference video.
Prompts can address references by name - @image_1, @video_1, @audio_1 - numbered one-based within each media type, translated into LibTV's own node references. That's the feature that makes this feel like a real director's tool rather than a prompt box.
Outputs
video (a native VIDEO you can preview or save), comfytv_video (the COMFYTV_VIDEO local URL, which is what a downstream ComfyTV node wants), local_path (the downloaded file's path, for scripting) and task_report.
Keep Comfy's batch count at 1. One output per run is the contract; batching it is asking for one credit spend and a mismatched result.
Settings that aren't dials
The model's live schema validates duration, resolution, aspect ratio and reference counts before upload. Unsupported combinations come back as errors, not as silent substitutions - which is better than it sounds, because a silent substitution on a paid video job is the worst possible outcome. But it does mean you can't just nudge a value and hope; if 720p + 3s + sound isn't a legal combination for your model, you'll be told.
This node also doesn't hide incompatible controls dynamically. It exposes a common set and lets validation do the work. Expect to read one or two error messages while you learn a model's envelope.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/TeutonicMepheles/ComfyUI-DAELab-Custom-Nodes-Library.git
Restart ComfyUI and refresh the browser. This is a V3 node on comfy_api.latest - if the log mentions No module named 'comfy_api', update ComfyUI core; there is no pip package to install. You also need the libtv CLI on the machine running ComfyUI, logged in as the same user the Comfy process runs as, because it reads the CLI's existing local login.
ComfyUI Manager: search the pack title "ComfyUI-DAELab-Custom-Nodes-Library".
Gotchas
The channel's status. The pack's README (as of the late-October 2026 update) says the LibTV channel has been retired for new cloud tasks, with everything moving to Comfy account credits, and that the old LibTV storyboard batch node is disabled outright. This single-generation node is a different code path and still runs on the CLI, but if you're starting fresh, check the pack's credit-generation doc first - building a 2027 pipeline on a channel the author has publicly wound down is a bad bet.
References must be real files. Local paths have to resolve inside Comfy's input, output or temp directories, or be a valid /view URL. Anything else raises rather than uploading something surprising.
One frame means one frame. Passing a batch to first_frame errors. Batch the workflow, not the socket.
Inputs (17)
| Name | Type | Default | Description |
|---|---|---|---|
| project_uuid | STRING | — | |
| request_id | STRING | video-001 | — |
| model | COMBO | 5 options: Seedance 2.5, Seedance 2.0, Seedance 2.0 Mini, Seedance 2.0 Fast, Minimax H3 | |
| mode | COMBO | 5 options: text2video, singleImage2video, frames2video, image2video, mixed2video | |
| prompt | STRING | — | |
| duration | INT | 44–30 | — |
| resolution | COMBO | 6 options: 480p, 720p, 1080p, 4k, 768P, 2K | |
| ratio | COMBO | 7 options: 16:9, 9:16, 1:1, 4:3, 3:4, 21:9, +1 | |
| sound | BOOLEAN | false | — |
| reference_files | STRING | [] | JSON array of local paths or Comfy /view URLs. Order is preserved; first/last frame sockets precede these references. |
| first_frameopt | IMAGE | — | |
| last_frameopt | IMAGE | — | |
| reference_imagesopt | IMAGE | — | |
| reference_videoopt | COMFYTV_VIDEO | — | |
| text_inputopt | STRING | — | |
| table_jsonopt | STRING | — | |
| task_dataopt | STRING | — |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |
| comfytv_video | COMFYTV_VIDEO | — |
| local_path | STRING | — |
| task_report | STRING | — |
| image | IMAGE | — |