LC Create Video π¬
Turn a frame batch into a video pipe β no encoding, just facts
- images
- audio
- pipe
- pipe
- images
- frame_rate
- duration
- frame_count
The name is a little misleading, and that's the first thing to get straight: LC Create Video does not create a video file. It takes an IMAGE batch (your frames, in playback order) plus a frame rate, and packages them - along with optional audio and any pipe metadata - into an LC_AV_PIPE. The actual encoding to an mp4 happens later, in LC Save Video. This node is the "define the video as data" step; Save Video is the "write it to disk" step.
That separation is a deliberate design, and it's the right one. Your frames exist as a tensor the moment a VAE decode finishes; whether you then want an h264, an av1, a different fps, or no file at all (just the pipe passed to something that reads frames) shouldn't force a re-run of the whole pipeline. By packaging frames + fps + audio into a pipe first, you can branch: save one copy, preview another, measure a third - all from a single generation. It's the video analogue of how the ecosystem treats the workflow itself as data until the last possible moment.
How it works
Feed it images (a [B, H, W, C] batch in playback order) and frame_rate (default 24). It computes the obvious derived facts and stores them on the pipe: duration = frame_count / frame_rate, plus the pixel width/height and frame_count. The optional audio input rides along on the pipe so Save Video can mux it in at encode time. The optional pipe socket accepts an existing LC_AV_PIPE - or even an image-side LC_PIPE, which contributes only prompts/seed/steps/size - so you can carry generation metadata forward instead of losing it at the video boundary.
The inputs and outputs that matter
images- the frame batch. Order is playback order.frame_rate- playback fps (0.01β240). The value that decides how long the clip feels.audio- optional soundtrack, stored for later muxing.pipe- optional, to merge in metadata or extend an existing AV pipe.
Outputs: pipe (the LC_AV_PIPE - wire it to Save Video or Pipe Out), plus images, frame_rate, duration, and frame_count passed out as plain values for anything that wants them directly.
How to install it
Ships in lonecatone23/ComfyUI_LC_AV_nodes (LC Audio_Video nodes, MIT, by lonecatone23 - the AV sibling of ComfyUI_LC123_nodes; install as a separate repo, don't merge folders):
- ComfyUI Manager: search "LC Audio_Video" or
ComfyUI_LC_AV_nodes. - Manual:
cd ComfyUI/custom_nodes && git clone https://github.com/lonecatone23/ComfyUI_LC_AV_nodes, restart ComfyUI.
Console prints [LC AV] total 16 nodes. No model downloads; core Python only.
The trap that catches everyone
The most common "bug" here is running the graph, seeing no file, and assuming it failed. It didn't - nothing encodes until an LC Save Video is on the wire. If you don't see a file, check you've actually wired the pipe (or the images output) into a Save Video node. The second gotcha is order: frame order in the batch is playback order, so if your frames come out shuffled or reversed upstream, that's exactly the order you'll get. Wire a preview on the images output if you ever doubt it.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | Frame batch [B,H,W,C]. Order is playback order. | |
| frame_rate | FLOAT | 24.000.01β240 | Playback rate. duration = frame_count / frame_rate. |
| audioopt | AUDIO | Optional soundtrack. Stored on LC_AV_PIPE; Save Video muxes when possible. | |
| pipeopt | LC_AV_PIPE | LC_AV_PIPE or LC_PIPE. LC_PIPE contributes prompts/seed/steps/size only. |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| pipe | LC_AV_PIPE | β |
| images | IMAGE | β |
| frame_rate | FLOAT | β |
| duration | FLOAT | β |
| frame_count | INT | β |