ComfyUI Node

ADMD_MakeBatchList

Two image batches in, one list out — the glue node for multi-clip training

By kijai·Created 3 years ago·Updated 2 years ago· 187
ADMD_MakeBatchList
  • images
  • images2
  • image_batch_list

ADMD_MakeBatchList is the pack's simplest node and it doesn't train anything. It takes two IMAGE inputs and returns one output: a Python list of image batches instead of a single stacked tensor. That's the whole job.

Why would you want that? Because ADMD_InitializeTraining's images input (and ADMD_TrainLora's opt_images_override) accept a list of tensors, and when the trainer sees one, it treats each entry as a separate training clip rather than one long video. AnimateDiff's native context is 16 frames, and a 16-frame clip is a natural unit: you feed one clip per list entry, and the trainer cycles through them. So this node is how you build a tiny multi-clip dataset out of two video loaders without writing any code - each IMAGE becomes one batch in the list.

Both inputs are required, and both accept either a single tensor or a list already: the node appends non-list inputs as one entry and extends the list with list inputs. That means you can chain them - output of one MakeBatchList into a second one's images2 - to fold four or eight clips together. It's unglamorous glue, and it's all it is. No resolution checking, no frame-count validation, no normalization; that all happens downstream in the trainer.

Where it sits

The minimal wiring: VHS_LoadVideoImageResize+ADMD_MakeBatchListADMD_InitializeTraining.images. Keep each source clip at 16 frames and a small resolution (the workflows warn 256/384/512 are the sizes that behave), because the trainer's per-clip VAE-encode and latent storage multiply with every list entry.

Gotchas

The list semantics are the one real trap: when this node hands InitializeTraining a list, the trainer iterates the clips in cycles, stepping through them round-robin over your training steps. That's exactly what you want for varied motion - but it also means the total training budget (max_train_steps) is spread across clips, so each clip gets fewer effective updates than it would alone. If your clips are near-duplicates, you're just paying training time to see the same motion; if they're genuinely different actions, it's a mini-dataset for a motion that generalizes. And if all this list plumbing feels like overkill, it is - for a single 16-frame clip you can skip this node entirely and wire the video loader straight into InitializeTraining.

CategoryAD_MotionDirector

Inputs (2)

NameTypeDefaultDescription
imagesIMAGE
images2IMAGE

Outputs (1)

NameTypeDescription
image_batch_listIMAGE