Combine Videos

Concatenate multiple video clips with transitions and per-clip frame trim.

Overview

The Combine Videos node joins multiple video clips in sequence with configurable transitions between them. Supports drag-and-drop reordering of connected clips and per-clip head/tail frame trimming. All processing is done via FFmpeg.

Configuration

Field Type Default Description
Transition Select fade Transition type between clips
Transition Duration Number 0.5 VIDEO transition length in seconds (0.1-2s), hidden for “cut”
Audio Mode Select crossfade How to handle audio during transitions
Crossfade Duration Number 0.5 AUDIO-only crossfade length (0-5s, shown when Audio = Crossfade). Never affects the video. Falls back to Transition Duration on older workflows.
Crossfade Curve Select linear Audio fade curve (shown when Audio = Crossfade)
Boundary Cut Select manual How each clip-to-clip boundary is cut. Manual trims an exact number of frames (fields below). The Smart methods (Nodaro Cloud only) find the cut automatically: best-pair (the single most similar frame pair), preroll-keep-next or preroll-keep-prev (see below). Manual and Smart are alternatives, not layers
Smart: prev window Number 8 Frames searched at the END of each clip (1-24, shown for Smart methods). A value outside the range is narrowed to it before the run
Smart: next window Number 8 Frames searched at the START of the following clip (1-24). A value outside the range is narrowed to it before the run
Trim Start Frames Number 1 Manual method only. Frames trimmed from the start of EACH clip except the first (0-120). Default 1 drops the duplicated boundary frame AI continuation clips carry
Trim End Frames Number 2 Manual method only. Frames trimmed from the end of EACH clip except the last (0-120). Default 2 drops boundary generation artifacts
Clip Ordering Drag list Reorder connected video clips

Transition Options

50+ FFmpeg xfade transitions are available, organized into a tabbed picker in the config panel. The Common tab surfaces the most-used handful; the remaining tabs group every option by family. Each tile shows a looping mini-preview so you can compare options at a glance.

Common tab — the everyday handful:

Transition Description
cut Hard cut — instant switch, no blend. Fastest.
fade Smooth alpha cross-fade. Classic clean blend.
dissolve Random-pixel dissolve. Grainy, organic feel — good for memory beats.
dip-to-black Fade through black. Use between scenes or time jumps.
dip-to-white Fade through white. Bright, ethereal — flashbacks.
wipe-left, wipe-right Hard edge sweeps across the frame.
slide-left, slide-right Next clip pushes the current one off-screen.
circle-open Circular iris opens to reveal the next clip from center.

All groups — full catalog (id → FFmpeg xfade name):

Group Transitions
Fades & Dips cut (concat), fade, dissolve, dip-to-black (fadeblack), dip-to-white (fadewhite), fadegrays
Wipes wipe-left, wipe-right, wipe-up, wipe-down, wipe-tl, wipe-tr, wipe-bl, wipe-br
Slides slide-left, slide-right, slide-up, slide-down
Smooth smooth-left, smooth-right, smooth-up, smooth-down (feathered-edge wipes)
Shapes circle-open, circle-close, circle-crop, rect-crop, horz-open, horz-close, vert-open, vert-close, diag-tl, diag-tr, diag-bl, diag-br
Slices hl-slice, hr-slice, vu-slice, vd-slice
Reveals reveal-left, reveal-right, reveal-up, reveal-down
Covers cover-left, cover-right, cover-up, cover-down
Effects pixelize, radial, hblur, distance, zoom-in, squeeze-h, squeeze-v

Back-compat note: Workflows saved with the old 5-value transition field (cut / fade / dissolve / dip-to-black / dip-to-white) keep working. dip-to-black and dip-to-white now use FFmpeg’s built-in fadeblack / fadewhite xfade transitions instead of interleaving generated solid-color clips — visually identical, one fewer ffmpeg pass per dip. dissolve now produces the FFmpeg dissolve xfade (pixel-noise pattern), which differs subtly from fade — previously the two were aliased.

Audio Modes

The audio crossfade never influences the video. Its duration and curve shape only the soundtrack: at a cut the video stream is copied byte-for-byte (identical whether crossfade is on or off), and at blend transitions the video fade length is governed solely by Transition Duration.

How crossfade behaves per transition type:

Audio normalization: every clip is re-encoded to a common format before joining (24fps H.264, AAC 44.1kHz stereo), so clips from different providers — which often ship different sample rates — always splice cleanly. If some clips have audio and others are silent, the silent clips get a silent audio track injected so the combined track never drops out mid-video.

Smart Cut

Nodaro Cloud only. Smart Cut’s boundary-matching algorithms run from Nodaro’s cloud engine; self-hosted Community and Business editions offer the exact frame trims (Trim Start/End Frames) instead, and the API returns cloud_only_feature if smartCutEnabled is requested there.

For continuation clips (each generated from the previous clip’s last frame), the seam usually stutters because the models re-render a near-identical moment on both sides. Smart Cut looks at the last N frames of each clip and the first M of the next and places the cut for you. All three methods share the same windows and the same fixed-trims fallback; they differ in where the cut lands:

Fallback: frames only count as a genuine match when they are close enough to be the same moment, and the pre-roll methods additionally require a real run of matching frames rather than one isolated pair. Boundaries with a match use the method’s cut; boundaries without one (clips that don’t actually continue each other, or a failed search) fall back to the default trims (start 1 / end 2). Custom trim values belong to the Manual method only — switching to a Smart method resets them, so nothing hidden steers the fallback.

Voice at smart boundaries (audio-preserving cut): the trimmed frames are duplicated video, but their audio is not a duplicate — continuation models re-render the picture overlap while the speech simply carries on, so cutting both streams would clip words mid-syllable. With Audio = Crossfade and a hard-cut transition (cut, or any transition at duration 0), a matched boundary therefore trims only the previous clip’s video: its real audio tail keeps playing under the next clip’s first moments and fades out over the audio-crossfade length — an L-cut made of the genuine recording instead of a synthetic stretch. Unmatched boundaries, the Manual method, keep/remove audio, and blend transitions keep the classic symmetric trim.

Window bounds. Both windows accept 1-24. A value outside that range — typed into the panel, carried over by an imported workflow, or written into the workflow JSON by an agent — is narrowed to the nearest legal value before the request is sent (48 becomes 24, 0 becomes 1), and a non-numeric value falls back to the default 8. The run proceeds; it is never rejected for this.

Every junction is searched independently — with 3 clips there are 2 boundaries, each with its own result. The applied values are reported in the job’s output_data.smartCuts:

"smartCuts": [
  { "boundary": 0, "prevClipEndTrimFrames": 0, "nextClipStartTrimFrames": 1, "psnrDb": 30.19, "matched": true, "searchedPrevFrames": 8, "searchedNextFrames": 8 },
  { "boundary": 1, "prevClipEndTrimFrames": 2, "nextClipStartTrimFrames": 1, "psnrDb": 11.7, "matched": false, "searchedPrevFrames": 8, "searchedNextFrames": 8 }
]

boundary k is the join between clip k and clip k+1. Every pair in the searchedPrevFrames × searchedNextFrames grid is compared (the requested windows, clamped to short clips). The trim fields are the values actually applied (drop counts: prevClipEndTrimFrames: 0 = the match was the previous clip’s very last frame, kept; nextClipStartTrimFrames: 1 = the next clip dropped just its duplicated first frame). matched: false means no pair cleared the threshold — the reported values are the fixed trims the boundary fell back to. psnrDb: >30 ≈ visually identical, 100 = pixel-identical, null = the search errored.

Crossfade Curve (only when Audio = Crossfade)

Curve FFmpeg acrossfade=curve= When to use
Linear tri Default — predictable but can dip in the middle for music
Equal Power qsin Keeps perceived loudness roughly constant — best for music
Smooth (Sine) hsin Gentler than equal-power — good for dialogue and ambient
Logarithmic log Compensates for the ear’s logarithmic loudness response; long, slow tails
Exponential exp Sharp out / slow in — punchy, good for impact moments

Inputs & Outputs

Inputs: 2+ video clips (connected via input handles) Outputs: Single combined video

Credit Cost

Combine Videos is dynamically priced based on output length and input count:

The estimator walks back through the connected upstream nodes to read each clip’s duration. When an upstream hasn’t generated yet, an 8-second fallback is used per missing entry.

Examples:

Configuration Estimated Output Credits
2 clips × 5s, cut transition 10s 2
3 clips × 10s, fade 0.5s 29s 7 (6 base + 1 input adder)
5 clips × 8s, dissolve 0.5s, trim 24+24 frames per clip 28s 9 (6 base + 3 input adder)

The Run button shows the live estimate.

Best Practices

Common Use Cases

Tips