ComfyUI Node
😺NKD Timeline
Lay several videos and audio tracks on a multi-track timeline and get fps, frame count and resolution back as connectable sockets, so the material can be coordinated before it enters the graph. Gaps in the timeline are regions to generate: the `coverage` output is WHITE there, ready to use as a temporal inpainting mask.
😺NKD Timeline
- media
- images
- mask
- coverage
- generate
- audio
- width
- height
- fps
- frame_count
- duration
- current_frame
- current_image
- markers
◄timeline►
◄import_modestack►
◄aspect_ratioCustom►
◄width0►
◄height0►
◄megapixels1.00►
◄size_multiple16►
◄fitcontain►
◄fps24.00►
◄modelfree►
◄quantize_n8►
◄start_frame0►
◄frame_count0►
◄clip_audiotrue►
◄clip_markersfalse►
Category😺NKD Nodes/Preview
Inputs (16)
| Name | Type | Default | Description |
|---|---|---|---|
| media | COMFY_AUTOGROW_V3 | Connect a video, an image sequence, a mask or audio - the same socket takes any of them and the timeline puts it on the right lane. More slots appear as you connect. | |
| timeline | STRING | — | |
| import_mode | COMBO | stack | Where a newly connected source is placed. 'stack' gives each one its own track from frame 0, so they layer like any other timeline - the higher track is the one you see. 'append' puts it after the previous one on the same track, to assemble a sequence. |
| aspect_ratio | COMBO | Custom | 'Custom' uses width/height below, which is what this node always did. Any other ratio computes them from the megapixel budget, and the monitor follows immediately - no run needed. |
| width | INT | 00–16384 | 0 = take the width of the first clip. |
| height | INT | 00–16384 | 0 = take the height of the first clip. |
| megapixels | FLOAT | 1.000.05–16 | Pixel budget for the chosen ratio. Ignored when aspect_ratio is 'Custom'. |
| size_multiple | INT | 161–64 | Round the computed size to a multiple of this. Match the model's canvas grid (MiniMax H3 uses 32) or it resizes every frame again on its way in. |
| fit | COMBO | contain | How a clip is fitted when its aspect ratio does not match the output. The preview shows this live. |
| fps | FLOAT | 24.001–240 | Timeline frame rate. Sources at a different rate are resampled. |
| model | COMBO | free | The model this timeline feeds. Its frame count is snapped to the grid that model requires: Wan, Hunyuan Video, Kandinsky, Cosmos Predict and SCAIL use 4n+1; LTX and Cosmos 1 use 8n+1; Mochi uses 6n+1; MiniMax H3 uses 17n+5. |
| quantize_n | INT | 81–256 | Only used by 'custom (multiple of N)'. |
| start_frame | INT | 00–1000000 | — |
| frame_count | INT | 00–1000000 | 0 = up to the end of the last clip. |
| clip_audio | BOOLEAN | true | Include the videos' own audio in the mix. |
| clip_markers | BOOLEAN | false | Also emit the first and last frame of every picture clip on the 'markers' output, AHEAD of the hand-placed markers: clip 1 in, clip 1 out, clip 2 in… NKD Freeze Frames then freezes each cut's boundary frames without marking them by hand. |
Outputs (13)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |
| mask | MASK | The mask lane, and nothing else. |
| coverage | MASK | White where there is NO material, i.e. the stretches the editor labels 'generate'. Feed it straight to a temporal inpainting mask. For the gaps PLUS the mask lane, use 'generate'. |
| generate | MASK | Everything the model should generate: the mask lane UNION the gaps. A gap is a region to generate, so it belongs in the conditioning mask - 'mask' alone leaves it black and nothing is generated there. This is the socket for temporal inpainting. |
| audio | AUDIO | — |
| width | INT | — |
| height | INT | — |
| fps | FLOAT | — |
| frame_count | INT | — |
| duration | FLOAT | Length of the output range in seconds. |
| current_frame | INT | — |
| current_image | IMAGE | — |
| markers | STRING | Comma-separated indices of the freeze-frame markers (press M on a clip), counted INTO the 'images' batch. Feed it to NKD Freeze Frames. |