Nodes/RyanOnTheInside/Whisper Time Adjuster βš‘πŸ…‘πŸ…žπŸ…£πŸ…˜
ComfyUI Node

Whisper Time Adjuster βš‘πŸ…‘πŸ…žπŸ…£πŸ…˜

Shove all your Whisper timestamps by a constant amount

By ryanontheinsideΒ·Created 2 years agoΒ·Updated 5 months agoΒ· 852
Whisper Time Adjuster βš‘πŸ…‘πŸ…žπŸ…£πŸ…˜
  • alignment_data
  • whisper_alignment
β—„time_offset0.0β–Ί

The blunt instrument next to WhisperAutoAdjust's clever one. If a word-synced effect built on Whisper timing looks consistently early or consistently late by roughly the same amount the whole way through your clip, you don't need energy-based detection - you just need to shift every timestamp by a fixed offset. That's the entire job here.

Like the rest of the RyanOnTheInside Whisper family, this node consumes alignment_data produced by a separate pack, ComfyUI-Whisper - it doesn't transcribe anything itself, it just adjusts timing that already exists.

How it works

One input beyond the alignment data: time_offset, in seconds, from -1000 to 1000. Positive delays every timestamp in the alignment; negative advances them. Zero does nothing. There's no smoothing, no detection, no per-word logic - every timestamp in the whole alignment moves by exactly the same amount.

The inputs and outputs that matter

alignment_data (whisper_alignment) is the alignment you're correcting. time_offset (default 0) is the only thing you'll actually touch - figure out how many frames or seconds off your effect looks, convert to seconds, and dial it in. The output is whisper_alignment, shifted, ready to feed into WhisperFeature or WhisperToPromptTravel.

In practice, the way people actually land on a number is by eyeballing a render: count how many frames early or late a word-synced effect fires, divide by your project's fps to get seconds, and that's your starting time_offset. A handful of small render-and-check passes gets you there faster than trying to reason your way to the exact value up front - this node is cheap to re-run, so treat it as a dial you turn and check rather than a value you need to solve for analytically.

How to install it

Via ComfyUI Manager, search "RyanOnTheInside." Manually:

cd ComfyUI/custom_nodes
git clone https://github.com/ryanontheinside/ComfyUI_RyanOnTheInside.git
cd ComfyUI_RyanOnTheInside
pip install -r requirements.txt

Restart ComfyUI. Same note as its Whisper-family siblings: you'll also need ComfyUI-Whisper installed to actually generate alignment_data before this node has anything to work on.

Common issues & troubleshooting

This node only fixes a constant offset. If the sync drift grows or shrinks over the course of the clip rather than staying steady from start to end, a flat time_offset won't fully fix it - that's a sign either your audio and video aren't actually running at the fps/duration you think they are, or that the mismatch needs the energy-based approach in WhisperAutoAdjust instead.

It's also easy to double-correct without noticing: run this after WhisperAutoAdjust has already fixed the timing, and you can just as easily nudge yourself back out of sync as into it. Change one offset at a time, re-check the result, and don't stack adjustments you haven't verified individually.

CategoryRyanOnTheInside/FlexFeatures/Sources/Whisper

Inputs (2)

NameTypeDefaultDescription
alignment_datawhisper_alignmentWhisper alignment data to adjust
time_offsetFLOAT0.0-1000–1000Seconds to shift all timestamps: - Positive: Delay speech timing - Negative: Advance speech timing - 0.0: No adjustment

Outputs (1)

NameTypeDescription
whisper_alignmentwhisper_alignmentβ€”