Frame Ranged Face Loader
Slice a frame range into a FACE_SEQUENCE
- image
- face_sequence
This is the entry point into a small family of nodes this pack ships around a custom FACE_SEQUENCE type - a wrapper that carries not just images but the frame range they belong to. FrameRangedFaceLoader is where that type gets created: give it an image batch and a frame range, and it hands back a FACE_SEQUENCE other nodes in this pack (FaceSequenceBatch, ReservedRegionFrameComposer) know how to consume.
Why bother with a dedicated type instead of just passing IMAGE around? Because a face composite job - like ReservedRegionFrameComposer, which stacks face crops into a reserved strip of a video frame - needs to know which frame each face corresponds to, not just the pixels. A bare IMAGE batch loses that. A FACE_SEQUENCE keeps it.
Inputs
image - your source batch, presumably a sequence of face crops or a full video's frames that you're about to sub-select from. frame_start (default 0) and frame_end (default -1, meaning "to the end" - the standard Python-style convention) define the slice. There's nothing in the schema suggesting automatic face detection or cropping here - the name is "Frame Ranged," not "Face Detected," so this node's job is selecting a range, not finding faces within a frame. If your input images aren't already face crops, expect this node to pass through whatever's actually in that range, faces or not.
Output: face_sequence, typed FACE_SEQUENCE, ready to feed into FaceSequenceBatch (to combine with another sequence) or straight into ReservedRegionFrameComposer.
Installing it
Search "ComfyUI-BFSNodes" in ComfyUI Manager, or install 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. No model or LoRA needed - this is pure sequence bookkeeping, not a generative node, so it'll work regardless of what produced your source images.
How this fits together
Think of this as step one of a three-node pipeline documented in this pack: load a ranged sequence with this node, optionally merge two sequences together with FaceSequenceBatch if you're combining face sets from different sources or time ranges, then hand the result to ReservedRegionFrameComposer to actually composite the faces into a reserved region of your output frames. Used on its own, this node doesn't do much visually interesting - its value is entirely in producing the typed FACE_SEQUENCE object the rest of the pipeline expects.
Where it can go wrong
frame_end defaulting to -1 is convenient but easy to forget about if you're chaining this into a workflow where you actually meant to cap the range - double-check it explicitly rather than assuming it inherited a sensible bound from elsewhere in your graph. And since there's no face-detection step here, if your ReservedRegionFrameComposer output looks like it's compositing the wrong content (a shoulder, a background element, whatever happened to be at that frame range), the fix is upstream of this node - crop your image input to actual faces before it ever reaches this loader, not after.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| frame_start | INT | 00–999999 | — |
| frame_end | INT | -1-1–999999 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| face_sequence | FACE_SEQUENCE | — |