Multi-Ref Sheet Builder
Up to five references, one composite, three fit strategies
- ref_image_1
- ref_image_2
- ref_image_3
- ref_image_4
- ref_image_5
- sheet
- n_refs
- debug
Where BFSEntitySheet2x2 in this same pack is a rigid, meaning-per-quadrant layout for one specific checkpoint, BFSMultiRefSheetBuilder is the flexible version: plug in anywhere from one to five reference images and it composites them onto the same fixed 1536x1024 canvas the multi-ref LoRA family in this pack was trained on. The node's own description is direct about the one thing to remember: leave a slot empty and it's simply skipped, not padded with a blank placeholder - so a 2-image sheet doesn't reserve dead space for the three you didn't fill.
This kind of multi-reference composite sheet is the same broad idea behind what the LTX community calls multi-subject-reference conditioning - feeding several distinct reference images into one conditioning pass instead of training or applying separate LoRAs per subject. It's a technique gaining real traction in the wider LTX-2.3 LoRA ecosystem as an alternative to training bespoke character LoRAs.
The inputs, and the setting that decides how they get cropped
ref_image_1 through ref_image_5 are all optional - the node's own tooltips describe them in "compositional prompt" terms: ref_image_1 is image0, the anchor, ref_image_2 is image1, and so on. That framing matters if your downstream LoRA was trained to treat the first reference as special (an anchor subject) versus the rest as supporting context - check what convention your specific checkpoint expects before assuming slot order is arbitrary.
fit_mode, the one required field, controls how each reference gets placed into its panel on the sheet:
crop- zoom and center-crop to fill each panel completely. Matches the training data most closely, but may cut off edges of your reference.fit- scale each reference down to fit entirely inside its panel with no cropping, one uniform scale factor for both axes, padding leftover space with background. Nothing gets cut off, but you lose panel space to padding if your reference's aspect ratio doesn't match its slot.cover- similar tofitin that it preserves aspect ratio, but fills the entire 1536x1024 canvas on both axes instead of leaving background bars, cropping only the minimum amount needed to do so.
If you're not sure which to pick: crop is what the training data actually looked like, so it's the safest default for matching a checkpoint's expectations; reach for fit specifically when losing any part of a reference image would defeat the point (a full-body reference where cropping the feet matters, say).
Outputs
sheet - the composited 1536x1024 image. n_refs - how many of the five slots you actually filled. debug - a diagnostic string.
Installing it
Through ComfyUI Manager, search "ComfyUI-BFSNodes." By hand:
cd ComfyUI/custom_nodes
git clone https://github.com/alisson-anjos/ComfyUI-BFSNodes.git
cd ComfyUI-BFSNodes
pip install -r requirements.txt
Restart ComfyUI. Pure compositing, no model needed to build the sheet itself - but the output only means something to a multi-ref LoRA trained on this specific 1536x1024 composite convention, so pair it with a compatible checkpoint (and, per the pattern used elsewhere in this pack, feed the result through an identity/Edit Anything conditioning node with ref_resize_mode=native_resolution so the fixed-size sheet doesn't get cropped again downstream).
Where this trips people up
The fit_mode choice is the biggest lever most people miss - defaulting to crop without checking whether it's cutting off something important in a non-square reference is an easy way to lose exactly the detail you needed the reference for in the first place. And because empty slots are genuinely skipped rather than reserved, don't assume ref_image_3 always lands in a fixed physical position on the canvas if you're only using three of the five - check n_refs and the actual sheet output if downstream placement matters to your workflow.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| fit_mode | COMBO | crop | crop: zoom+center-crop to fill each panel completely (matches training data, may cut off edges). fit: scale each reference down to fit entirely inside its panel with no cropping (preserves every pixel, aspect ratio never distorted -- one uniform scale factor for both axes -- leftover space padded with background). cover: row-justified like fit, but fills the WHOLE 1536x1024 canvas on both axes (no background bars) by cropping the minimum shared amount needed. |
| ref_image_1opt | IMAGE | image0 in the compositional prompt (anchor). | |
| ref_image_2opt | IMAGE | image1. | |
| ref_image_3opt | IMAGE | image2. | |
| ref_image_4opt | IMAGE | image3. | |
| ref_image_5opt | IMAGE | image4. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| sheet | IMAGE | — |
| n_refs | INT | — |
| debug | STRING | — |