± Frame Counter Time Offset
Shift a curve in time, not in frames — offsets expressed in seconds
- frame_counter
- frame_counter
Frame Counter Offset [Dream] shifts your position by whole frames. Frame Counter Time Offset [Dream] does the same thing, but you get to type seconds - which is the natural unit when you're thinking "this camera move should start half a second after that beat lands," not "17 frames later." It converts the seconds to frames using your animation's fps and hands back a shifted counter.
It's part of the Dream Project Animation Nodes pack (alt-key-project), the 2023 Deforum-style animation toolkit. A utility node that's as simple as its sibling but with more convenient units.
How it works
Inputs: frame_counter and offset_seconds (FLOAT, default 0). Output: a frame_counter.
The conversion is right there in the source: offset = offset_seconds * frame_counter.frames_per_second, then incremented(offset). So with a 30 fps animation, offset_seconds = 0.5 shifts by 15 frames; -2.0 shifts back by 60. The fractional frames get rounded the way the underlying counter handles them, but for whole-second offsets it's exact.
Since the shift is computed from the counter's fps, the same node behaves correctly no matter what framerate your animation uses - that's the actual advantage over thinking in frames. You write the timing in seconds, and it stays right even if you change the fps later.
Where it earns its keep
- Audio-synced timing. If you're aligning animation to a soundtrack (and this pack's author literally made it to score his own music videos), "0.35 seconds after the kick drum" is the natural way to think, and this node is the translation layer.
- Layering with offsets. Feed one counter into Time Offset with a positive value and another with a negative value and you get two curve evaluations bracketing the current moment - handy for smoothing, echoes, or "look ahead" control.
- Delaying curve effects. Want a sine curve that starts its sweep half a second after frame zero? Offset the counter you feed it by the right seconds and the whole curve shifts.
Pair it with Image Sequence Loader and you can even load "the frame half a second ago" as an anchor image without hardcoding a frame number.
Installing
cd ComfyUI/custom_nodes
git clone https://github.com/alt-key-project/comfyui-dream-project.git
Or via ComfyUI Manager under "Dream Project Animation". No model downloads; deps are imageio, scipy, torchvision, pilgram, evalidate - and the usual numpy<2.0 pin to keep an eye on. Find it under Dream → animation.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| frame_counter | FRAME_COUNTER | — | |
| offset_seconds | FLOAT | 0.00 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| frame_counter | FRAME_COUNTER | — |