Nodes/ComfyUI_Fill-Nodes/FL Scan Analysis
ComfyUI Node

FL Scan Analysis

Bundle a shot's depth, normals and tracking into one wire

By filliptm·Created 3 years ago·Updated a day ago· 638
FL Scan Analysis
  • depth
  • normals
  • subject_masks
  • detections
  • pose_keypoints
  • analysis

Interactive Scan FX needs four different kinds of per-frame analysis to do its thing: depth, surface normals, subject masks, and tracked boxes. Wiring all four into one node means a dozen cables crossing your graph - and worse, for a multi-shot video you'd need that bundle repeated per shot and kept in exact sync.

FL Scan Analysis is the fix. It packages one shot's aligned analysis into a single FL_SCAN_ANALYSIS object. Wire a few of them in chronological order and the Scan FX node gets everything it needs, in order, with much less rope to hang yourself with.

The node's own description is refreshingly blunt about scope: "Does not run or load models." It is a packaging node, nothing more. The depth model, the normal estimator and the detectors are all your choice, upstream.

The inputs

depth and normals are required. subject_masks, detections and pose_keypoints are optional, and each one lights up a feature downstream - no masks means no subject-aware effects, no pose keypoints means no pose overlay.

The validation is on alignment, and it's the right check: non-empty depth and normals frames, matching frame counts and spatial dimensions, and normals with three channels. Getting this wrong is the classic way to end up with garbage in a video pipeline - a normal map that's one frame out of step with its depth map produces plausible but subtly wrong relief, and nothing crashes. Here it crashes, which is better.

depth wants a grayscale-ish distance map, one frame per video frame. White means near, which is the convention the whole pipeline assumes. Depth Anything V2 Large has been the working default for this since 2024 and nothing has displaced it for conditioning-style work; the important thing is consistency, not which model you chose.

normals wants RGB surface normals, three channels - the same normal-map data you'd feed a normal-relief render. The Scan FX node uses them for the voxel extrusion effect, so the quality of this map is what decides whether surfaces have real relief or look like flat stickers.

subject_masks is a MASK batch, one per frame. detections is a FL_SCAN_TRACKS from FL Scan Video Detections - person masks and tracked boxes with stable ids. pose_keypoints is ComfyUI's standard pose keypoint format, so whichever pose estimator you already use plugs in.

Where it goes

Output is analysis, type FL_SCAN_ANALYSIS, and the wiring pattern is the thing to get right: one Scan Analysis node per shot, in chronological order, all feeding FL Interactive Scan FX. If you have a single-shot video, that's one node. If you have a shot list from a prompt schedule, the pack provides nodes that split the video by shot and collect the results - but the contract is always the same: the analysis frames, concatenated in order, must cover the video exactly, with no padding and no repeats. The Scan FX node counts frames and tells you when they don't add up, including the per-shot lengths, which is a much better error message than most node packs manage.

Install

cd ComfyUI/custom_nodes
git clone https://github.com/filliptm/ComfyUI_Fill-Nodes

Restart. This node needs no models and no extra libraries beyond the pack's usual long pip list. Everything expensive lives in the nodes around it, not here.

Why the bundle approach pays off

Splitting analysis from effect is a good pattern regardless of which pack you use. Multi-shot Scan FX renders are slow and you will iterate on the effect - cursor lanes, voxel relief, cut timing - far more often than you'll re-run depth estimation. Freezing the analysis into a compact object per shot means the expensive half runs once and the fun half is cheap to rerun. Cache eagerly, tune lazily.

Category🏵️Fill Nodes/VFX

Inputs (5)

NameTypeDefaultDescription
depthIMAGE
normalsIMAGE
subject_masksoptMASK
detectionsoptFL_SCAN_TRACKS
pose_keypointsoptPOSE_KEYPOINT

Outputs (1)

NameTypeDescription
analysisFL_SCAN_ANALYSIS