Flashback Auto Sync
Beat-synced morph videos without downloading a single video model
- ori1
- edit1
- ori2
- edit2
- ori3
- edit3
- ori4
- edit4
- audio
- frames
The name is a description: feed this node eight images, one audio file, and it hands back a full-length video where an image morphs into its edited twin on every beat of the song, with glitch stutter between segments. No video model, no checkpoint download, no API key. Flashback Auto Sync is the "original vs. edited" beat-sync effect you see all over short-form feeds, rendered deterministically with optical flow instead of diffusion.
That last part is the point. In a ComfyUI world where "video" usually means hauling out AnimateDiff, Wan, or Hunyuan and waiting minutes per clip, this is a completely different lane. It's a video editing effect, not a generator - the frames it makes are warped versions of images you already have, so it renders a whole track in seconds rather than minutes, and it does the same thing every run. Same seed, same frames.
How it works
The workflow expects a 4-segment / 8-image setup: four image pairs, each with an "original" and an "edited" version of the same shot (img2img or a few minutes in Photoshop both work). You also drop in your song via ComfyUI's Load Audio node - the node needs the audio's waveform, not just its length.
Auto Sync does the beat-finding itself with librosa onset detection. It splits the track into four equal segments and expects each to follow a bass + 5-beat pattern: on the bass hit you hold the original, then each of the five "da"s triggers a warp that flips you between the edited and original versions, landing on the edited frame until the next segment's transition. If the detector finds fewer than five onsets in a segment, it pads with evenly spaced triggers rather than crashing - the edit just falls back to a steady rhythm.
Each warp is a dense optical flow morph: OpenCV Farneback flow at half resolution on CPU, then a bidirectional torch.nn.functional.grid_sample warp on GPU with Gaussian motion blur across the middle of the transition (CUDA if you have it, CPU if you don't). The glitch - horizontal scanline displacement plus chromatic aberration - fires at segment boundaries and, with a small probability, randomly on held frames.
The inputs that matter
The eight required slots are ori1..4 and edit1..4 (IMAGE) plus audio (AUDIO from Load Audio). The optional list is bigger, but you'll actually touch these:
onset_delta(default 0.08) - beat-detection sensitivity. Lower = more sensitive. If morphs are missing beats, drop it toward 0.01 before blaming your song.trans_dur(default 0.12) - how fast each warp completes. Snappier edits want lower; dreamier ones want higher.glitch_intensity(default 8.0) - strength of the scanline/CA effect. Set 0 to disable it.fps,width,height(defaults 30, 1080×1080) - output resolution and frame rate.
The single output is frames, an IMAGE batch (T×H×W×C, float32), and it's the entire audio track long. Wire it into VHS Video Combine (VideoHelperSuite) set to the same fps you gave the node.
Installing it
There's nothing to download except the code - this pack ships zero model files.
cd ComfyUI/custom_nodes
git clone https://github.com/GuardSkill/ComfyUI-video-warptrans
pip install -r ComfyUI-video-warptrans/requirements.txt
Then restart ComfyUI. Or, easier: ComfyUI Manager → Custom Nodes → search Video WarpTrans. The real dependencies are opencv-python-headless, librosa, and numpy; torch is in requirements.txt too but you already have it or ComfyUI wouldn't be running. Python 3.10+.
Gotchas
The two pain points are both predictable. First, if you see ImportError: pip install librosa or the opencv equivalent in the console, the pack's deps didn't land - run the pip line above and restart. Second, remember the output length equals the audio length, so dropping in a full 3-minute song renders the whole 3 minutes at 1080×1080. It's fast, but not instant; render shorter or at lower res to iterate on the timing. And if the morphs just won't land on your beats, it's often the track, not the node - this thing is tuned for a bass + 5-beat structure, and some music won't fit it no matter what onset_delta says. That's exactly what Flashback Manual Sync is for, and why it exists.
Inputs (18)
| Name | Type | Default | Description |
|---|---|---|---|
| ori1 | IMAGE | — | |
| edit1 | IMAGE | — | |
| ori2 | IMAGE | — | |
| edit2 | IMAGE | — | |
| ori3 | IMAGE | — | |
| edit3 | IMAGE | — | |
| ori4 | IMAGE | — | |
| edit4 | IMAGE | — | |
| audio | AUDIO | — | |
| fpsopt | INT | 301–120 | — |
| widthopt | INT | 108064–4096 | — |
| heightopt | INT | 108064–4096 | — |
| glitch_intensityopt | FLOAT | 8.00–30 | — |
| trans_duropt | FLOAT | 0.120.04–0.5 | — |
| inter_trans_duropt | FLOAT | 0.350.05–1 | — |
| onset_deltaopt | FLOAT | 0.080.01–0.5 | — |
| glitch_probopt | FLOAT | 0.250–1 | — |
| glitch_hold_strengthopt | FLOAT | 0.350–1 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| frames | IMAGE | — |