Timeline 3D Viewer
A 3D viewport that syncs to your animation timeline — no Three.js install
Timeline 3D Viewer is the preview monitor in ComfyTimeline (the FemtoStudio/comfyui-timeline pack): a node that loads a 3D model into ComfyUI's canvas and plays it in lockstep with the pack's global timeline bar. If you've ever tried to line up an animated GLTF against a frame-by-frame diffusion pass - camera move here, character bob there - you know how much guesswork that is when the animation lives in a separate app. This node puts the model right in the graph, scrubbing and playing against the same playhead that drives your per-frame curves.
It's not a model maker and it doesn't render 3D to images. It's a monitor: load a model, orbit the camera, scrub the bar, and watch the animation move at the exact frame you're generating. Pair it with the pack's Timeline Animation node and you've got one clock for the whole shot.
How it works
Here's the part people find surprising: there's no new renderer involved. The node is a thin wrapper around the native 3D viewport that ships inside ComfyUI itself (the Three.js-backed bundle core lazy-loads since frontend 1.45). The pack adds no Python or JS 3D dependency at all - pyproject.toml declares zero runtime deps - so nothing to pip-install, and it reuses ComfyUI's own loaders for GLTF, GLB, OBJ, FBX, STL, PLY, and splat formats (.spz, .splat, .ksplat).
The playhead lives on the shared ComfyTimeline model, not in a node input. That's deliberate: scrubbing only seeks the viewer in JavaScript (the code subscribes to the timeline's frame and range events), so moving the playhead never re-runs your graph, and the queue stays a clean cache hit. The one real requirement is frontend version - you need ComfyUI frontend 1.45.15 or newer, with 1.45.20 as the tested target. Older frontends get a clear "Native 3D unavailable" message in the node while the rest of the pack keeps working.
The inputs that matter
Only two, and both are widgets rather than socket inputs:
model_file- a dropdown listing everything in ComfyUI'sinput/3dfolder. The toolbar on the node adds Upload model (a single self-contained file; prefer GLB) and Upload folder (one GLTF plus its external buffers and textures), which land in a uniqueinput/3d/timeline_uploadssubfolder.clip_index- which embedded animation clip to play, default0. The toolbar manages this with a dropdown and it's hidden on the node, so you can ignore it until a model has multiple clips.
There are no outputs - this is an output/display node. It's a terminal, not a producer; nothing wires out of it.
Installing it
Grab the pack through ComfyUI Manager (search "ComfyTimeline") or by hand:
cd ComfyUI/custom_nodes
git clone https://github.com/FemtoStudio/comfyui-timeline
Restart ComfyUI, then open the bottom panel via View → Bottom Panel (or hit Alt+T to jump straight to the Timeline tab). No model files to download.
Gotchas worth knowing
- Folder uploads cap at ~48 MiB - anything bigger should be converted to a single GLB first. Single files cap at 100 MiB.
- The upload path is safety-checked: GLTF/GLB contents are scanned for external URLs, and some compressed formats are rejected (Draco, KTX2, meshopt), because ComfyUI's native loader can't read them. OBJ/MTL sidecar pairs are excluded too - not self-contained.
- Only clips embedded in the model show up in the clip dropdown. No embedded animation, no dropdown - the viewer just shows the model.
- Want zero dropped frames while playing? Use the EF (play-every-frame) transport mode on the bar instead of real-time.
For what it is - a frame-accurate 3D preview inside the graph - there's nothing else quite like it in the ecosystem yet. If you're doing any animation work that mixes diffusion frames with a real 3D model, this is the node you'll reach for.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| model_file | COMBO | Model from ComfyUI's input/3d directory. The viewer toolbar provides Nodes 1.0/2.0-safe model and companion-folder upload controls. | |
| clip_index | INT | 00–65535 | Selected embedded animation clip. Managed by the native viewer toolbar and hidden on the node. |
Outputs (0)
No outputs