Nodes/timeline_viewer_AV_comfyUI/Timeline Viewer 🎬
ComfyUI Node

Timeline Viewer 🎬

Scrub your generated video like it's a real NLE β€” Timeline Viewer is the preview VHS never gave you

By AlvidiΒ·Created 5 months agoΒ·Updated 5 months agoΒ· 0
Timeline Viewer 🎬
  • images
  • audio
    β—„frame_rate24.0β–Ί
    β—„loopfalseβ–Ί
    β—„filename_prefixTimelineViewerβ–Ί
    β—„save_outputtrueβ–Ί
    β—„frame_in0β–Ί
    β—„frame_out0β–Ί
    β—„max_width1920β–Ί

    If you generate video in ComfyUI - AnimateDiff, Wan, LTX, whatever's hot this month - you know the ritual. Queue up a long batch, wait, and then stare at the tiny inline player from VHS VideoCombine, which gives you roughly play/pause and not much else. Finding the exact frame where the motion breaks means squinting and clicking. Timeline Viewer (class TimelineViewer) is a single-node answer to that specific annoyance: an interactive player with a real scrubber, built as an explicit alternative to the VHS preview.

    It's not another video encoder. It's a review tool - the thing you drop at the end of your graph when you want to actually look at what you made, the way you'd review a render in an edit suite.

    How it works

    Feed it your frame batch and it encodes an MP4 with ffmpeg (H.264, yuv420p, CRF 18) via a bundled imageio_ffmpeg binary or your system ffmpeg. Then a small JS frontend (js/timeline_viewer.js) paints a DOM widget right onto the node: video, a play button, a frame counter, and a click-and-drag timeline canvas. The scrubber shows a waveform if you passed audio, plus tick marks with real frame numbers. Drag it and the video seeks live.

    Two details show the author thought about actual use. The frame counter uses the global offset - if you trim with frame_in, the readout still matches your original sequence instead of restarting at zero. And the loop toggle is reactive: flip it and the running video's loop property updates without re-rendering the graph. It's an output node with no tensor outputs - it wires to nothing, it just plays.

    The inputs that matter

    Most of the schema is set-and-forget. The ones you'll actually touch:

    • images - your decoded frame batch (what normally feeds VHS_VideoCombine).
    • audio (optional) - a ComfyUI AUDIO track. Powers the waveform and gets muxed into the MP4.
    • frame_rate - fps for the encode, default 24.
    • frame_in / frame_out - trim the range you want. The tooltip on frame_out says it in Spanish: 0 = hasta el final (0 = until the end). Off-by-one trap alert: leave frame_out at 0 for the full sequence.
    • max_width (default 1920) - if your frames are wider, it downscales with LANCZOS before encoding. Preview bandwidth, not a quality setting - it only ever shrinks.
    • loop, filename_prefix, save_output - playback, the output filename, and whether it lands in output/ (true) or the temp dir.

    Install

    The easiest path is ComfyUI Manager: search timeline_viewer_AV_comfyUI, install, restart. Same thing by hand:

    cd ComfyUI/custom_nodes
    git clone https://github.com/Alvidi/timeline_viewer_AV_comfyUI
    # restart ComfyUI
    

    It shows up under the Video category. No requirements.txt, no model files, no heavy downloads - just numpy (you have it), ffmpeg (bundled via imageio_ffmpeg or system), and torchaudio if you want audio. That's the whole install story.

    Where people get burned

    • Audio silently disappears. Audio processing is wrapped in a try/except: if torchaudio isn't installed, the node prints [TimelineViewer] Audio error in the console and carries on with no waveform and a silent video. If you wire audio and hear nothing, that's it - pip install torchaudio.
    • No ffmpeg β†’ a Spanish error. The failure message is ffmpeg no encontrado (the author's Spanish bleeds into the tooltips too - Ancho maximo del preview). ComfyUI's portable build ships ffmpeg, so this is rare, but if you hit it, get ffmpeg on your PATH.
    • Stale UI vs stale logic. Python changes (inputs, trimming) need a ComfyUI restart; JS changes need a hard browser refresh (Ctrl+Shift+R). If the player looks old after an update, refresh first.

    The author's "optimized for network drives" claim checks out in the code: the encode writes to /tmp first and moves the finished file into place, so you're not hammering a network mount mid-encode.

    Is it world-changing? No. It's a focused utility that fixes one real pain: previewing long video batches without reaching for another tool. If you live in video workflows, it earns its spot next to VHS.

    CategoryVideo

    Inputs (9)

    NameTypeDefaultDescription
    imagesIMAGEβ€”
    frame_rateFLOAT24.01–120β€”
    loopBOOLEANfalseβ€”
    filename_prefixSTRINGTimelineViewerβ€”
    save_outputBOOLEANtrueβ€”
    frame_inINT00–99999β€”
    frame_outINT00–999990 = hasta el final
    max_widthINT1920256–4096Ancho maximo del preview
    audiooptAUDIOβ€”

    Outputs (0)

    No outputs