Nodes/ComfyUI-BFSNodes/AMV Guide Builder
ComfyUI Node

AMV Guide Builder

Turn keyframes (and beats) into an LTXV guide sequence

By alisson-anjos·Created 5 months ago·Updated 10 days ago· 100
AMV Guide Builder
  • video
  • images
  • audio
  • guide
  • debug
mode
length121
hold4
fill
placement
fps25.00
indices
scene_threshold0.10

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 a video input automatically, gated by scene_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 via indices, 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 fresh images batch, and placement decides how they land on the timeline: even spaces them out uniformly, indices uses the same manual list as above, and audio_beats - the one that gives this node its name - syncs keyframe placement to detected beats in an audio input, converted to frame positions via fps.

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.

CategoryBFS/video

Inputs (11)

NameTypeDefaultDescription
modeCOMBO3 options: auto_scene, manual_indices, external_images
lengthINT1211–100000
holdINT41–64Frames each keyframe is shown (>=4 survives LTX 8x temporal VAE).
fillCOMBO2 options: white, black
placementCOMBOexternal_images: how to position the images on the timeline.
fpsFLOAT25.001–120Used to convert audio beat times -> frame indices.
videooptIMAGESource frames (auto_scene / manual_indices).
imagesoptIMAGEKeyframe images batch (external_images).
audiooptAUDIODrives placement=audio_beats (sync cuts to the music).
indicesoptSTRINGComma list e.g. '0,16,34' (placement=indices / manual).
scene_thresholdoptFLOAT0.100–1

Outputs (2)

NameTypeDescription
guideIMAGE
debugSTRING