AMV Guide Builder
Turn keyframes (and beats) into an LTXV guide sequence
- video
- images
- audio
- guide
- debug
If you're building an AMV-style workflow - cutting distinct keyframes into a timeline rather than generating one continuous scene - you eventually need something that turns "here are my keyframes" into an actual frame sequence LTXV can condition on, with blank stretches in between held for the model to fill. That's this node's whole job: it builds the guide sequence, and the interesting part is how it decides where each keyframe lands.
Three modes for one question: where do the keyframes go?
mode picks the strategy, and it changes which other inputs actually matter:
auto_scene- detects scene cuts in avideoinput automatically, gated byscene_threshold(default 0.1). Use this when you already have a rough-cut source video and want the node to find the cut points for you.manual_indices- you specify exact frame positions yourself viaindices, a comma-separated string like"0,16,34".external_images- you're not deriving keyframes from an existing video at all; you're supplying a freshimagesbatch, andplacementdecides how they land on the timeline:evenspaces them out uniformly,indicesuses the same manual list as above, andaudio_beats- the one that gives this node its name - syncs keyframe placement to detected beats in anaudioinput, converted to frame positions viafps.
That last combination - external_images plus placement=audio_beats plus an audio track - is the actual AMV use case: drop in your chosen shots, let the node cut them in on the beat instead of hand-placing indices.
The settings that shape the result regardless of mode
length sets the total output frame count (default 121). hold (default 4) controls how many frames each keyframe stays visible for before the gap begins - the tooltip is specific that this needs to be at least 4 to survive LTXV's 8x temporal VAE compression without the keyframe getting compressed away entirely. fill picks the color (white or black) for the blank stretches between keyframes, the regions LTXV is actually meant to generate. fps matters even outside the beat-sync case, since it's what converts any time-based input into frame indices.
Outputs: guide - the assembled image sequence, meant to feed straight into VAE encoding or a reference/guide input elsewhere in your workflow - and debug, a diagnostic string.
Installing it
Search "ComfyUI-BFSNodes" in ComfyUI Manager, or clone it manually:
cd ComfyUI/custom_nodes
git clone https://github.com/alisson-anjos/ComfyUI-BFSNodes.git
cd ComfyUI-BFSNodes
pip install -r requirements.txt
Restart ComfyUI. This is a pure sequence-building node - no LoRA or specific LTXV checkpoint required to run it, though what you do with the resulting guide sequence downstream will usually involve one of this pack's LTXV conditioning nodes or a standard LTXV workflow.
Things worth knowing before you rely on this
hold below 4 frames is explicitly called out as risky given LTXV's temporal compression - if a keyframe isn't showing up clearly in your final render, check this before assuming the conditioning pipeline downstream is at fault. scene_threshold in auto_scene mode is a sensitivity dial with no single correct value; a low threshold catches subtle cuts but risks over-segmenting a video with gradual lighting or motion changes, so expect to tune it per source clip rather than trusting the 0.1 default blindly. And if you're using audio_beats placement and the cuts don't feel musically right, remember fps is doing real conversion work between beat time and frame index - a mismatched fps value will shift every beat-synced cut uniformly off-time even if beat detection itself was accurate.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| mode | COMBO | 3 options: auto_scene, manual_indices, external_images | |
| length | INT | 1211–100000 | — |
| hold | INT | 41–64 | Frames each keyframe is shown (>=4 survives LTX 8x temporal VAE). |
| fill | COMBO | 2 options: white, black | |
| placement | COMBO | external_images: how to position the images on the timeline. | |
| fps | FLOAT | 25.001–120 | Used to convert audio beat times -> frame indices. |
| videoopt | IMAGE | Source frames (auto_scene / manual_indices). | |
| imagesopt | IMAGE | Keyframe images batch (external_images). | |
| audioopt | AUDIO | Drives placement=audio_beats (sync cuts to the music). | |
| indicesopt | STRING | Comma list e.g. '0,16,34' (placement=indices / manual). | |
| scene_thresholdopt | FLOAT | 0.100–1 | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| guide | IMAGE | — |
| debug | STRING | — |