Nodes/ComfyTV/Time Remap
ComfyUI Node

Time Remap

Speed ramps, freeze frames, and remapped time without leaving the graph

By jtydhr88·Created 3 months ago·Updated about 15 hours ago· 725
Time Remap
  • video
  • video
force_run_token0
project_id
parent_output_id0
modespeed
speed_keys
smooth_fps0
hold_frame0
hold_increment0

Time remap is the difference between a clip that plays and a clip that's edited: speed ramps, where a moment slows to a crawl and snaps back to real time, and freeze frames, where the action stops dead on one image. That's the entire product category of every "epic" montage on the internet, and ComfyTV's Time Remap stage does it as a node.

It's a ComfyTV Video stage: wire a video in, hit Run, get a re-timed snapshot downstream. It's one of the file-producing stages rather than a pure FX-spec one, because re-timing changes the frame count - there's a real output to write.

The inputs

  • mode - speed (default) or hold.
  • speed_keys - in speed mode, JSON keyframes of the shape [{t (output s), v (speed ×), interp}]. t is the output timestamp, v is the speed multiplier, interp is the easing. You'll draw these on the node's curve UI rather than typing JSON; a value of 0.5 means half speed, 2 means double.
  • smooth_fps (0–120, default 0) - 0 is off; a value > 0 pre-interpolates the source to that framerate before remapping. The tooltip warns it's slow, but it's how you get buttery speed ramps instead of chunky ones on low-fps AI clips.
  • hold_frame (0–100000) and hold_increment (0–1000) - used in hold mode: hold freezes on hold_frame, and hold_increment lets you step forward through a sequence of held frames (a stutter effect).

The project_id / parent_output_id / force_run_token inputs are internal frontend bookkeeping - ignore them.

How it works

In speed mode it reads your keyframes and re-maps the source's timeline onto the output timeline, so a keyframe at output-second 2 with speed 0.5 spends 2 seconds of source stretched over a longer output. Without keys it refuses to run - the error message tells you constant speed is what the separate Video Speed node is for. Hold mode freezes a frame and optionally steps through held frames at an increment. If you turn on smooth_fps, the source gets interpolated first so the ramp has actual in-between frames to work with.

Install

ComfyTV ships ~190 stages in one pack, so installing the pack covers this node.

cd ComfyUI/custom_nodes
git clone https://github.com/jtydhr88/ComfyTV

Restart ComfyUI fully and look under ComfyTV → Video. ComfyUI Manager finds it by searching "ComfyTV". No model downloads, no extra Python deps. On ComfyUI Desktop or macOS, clone into the running instance's absolute path from the startup log rather than trusting the relative cd.

Troubleshooting

  • "add speed keyframes on the node first" - expected; constant speed isn't this node's job, so drop a keyframe or two (or use Video Speed).
  • Ramps look choppy on AI video. That's a low source framerate problem, not a bug - set smooth_fps to 2× your source (e.g. 48 for a 24fps clip) and accept the slower run.
  • Freeze doesn't start where you want. hold_frame is a frame index, not seconds - at 24fps, frame 48 is 2 seconds in.

It's the "make it dramatic" node. Learn the difference between speed and hold and you've unlocked half of what makes edit-heavy content feel produced.

CategoryComfyTV/Video

Inputs (9)

NameTypeDefaultDescription
force_run_tokenINT00–2147483647Internal — bumped on Run to invalidate ComfyUI's input cache.
project_idSTRINGInternal — populated by the projectStore on the frontend.
parent_output_idINT00–2147483647Internal — lineage parent set by spawn handlers on the frontend.
modeCOMBOspeed2 options: speed, hold
speed_keysSTRINGJSON [{t (output s), v (speed ×), interp}]
smooth_fpsINT00–1200 = off; >0 pre-interpolates the source to this fps (slow)
hold_frameINT00–100000
hold_incrementINT00–1000
videooptCOMFYTV_VIDEO

Outputs (1)

NameTypeDescription
videoCOMFYTV_VIDEO