ADMD_MakeBatchList
Two image batches in, one list out — the glue node for multi-clip training
- 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_LoadVideo → ImageResize+ → ADMD_MakeBatchList → ADMD_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.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| images2 | IMAGE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image_batch_list | IMAGE | — |