Nodes/msch-comfyui-nodes/Scan FX (thermal / nightvision / hud / ...)
ComfyUI Node

Scan FX (thermal / nightvision / hud / ...)

Thermal, night vision, HUD and 57 more looks stacked eight deep — a scan-effect station in one node

By mariobilly·Created a day ago·Updated a day ago· 0
Scan FX (thermal / nightvision / hud / ...)
  • image
  • mask
  • image
mix1.00
mask_feather4.0
invert_maskfalse
animation_speed1.0
seed0
effect_1thermal
strength_11.00
effect_2none
strength_21.00
effect_3none
strength_31.00
effect_4none
strength_41.00
effect_5none
strength_51.00
effect_6none
strength_61.00
effect_7none
strength_71.00
effect_8none
strength_81.00

Every surveillance-glam shot needs the same handful of looks: thermal glow, green night vision, a HUD sweep, a glitch burst. Usually you'd collect that from five different packs and spend an afternoon lining up their color spaces. ScanFX (display "Scan FX (thermal / nightvision / hud / ...)") bundles 61 of these procedural treatments into a single node with eight stacked effect slots - and then adds the one trick that makes it actually useful: an optional mask so the effect only bites part of the frame, like a drone's thermal camera painting only the subject.

How it works

Each effect slot (effect_1 through effect_8, each with its own matching strength_1strength_8 knob) is an ordered layer. The stack runs top to bottom - slot 1 on the original, slot 2 on the result, and so on - which is how you build compound looks like "thermal base, then a HUD sweep over it, then film grain." Every effect is a synthetic graphic treatment computed in-node: the author is upfront that the thermal/depth/scan appearances are approximations, not real sensor data. There's no model weight, no depth map required, and it runs on any IMAGE batch. Animated effects (sweep, sonar, ekg, code-rain, hologram) advance with frame position and animation_speed, so they only move if you feed multiple frames.

The effect menu is genuinely long - none, thermal, nightvision, xray, lidar, wireframe, holo_sweep, hud, sonar, glitch, hologram, ekg, coderain, chroma, falsecolor, depthmap, sketch, blueprint, halftone, ascii, pixelate, posterize, sobel, bloom, lensflare, vhs, crt, filmgrain, lightpaint, motionblur, slitscan, kaleidoscope, fisheye, tiltshift, doubleexp, solarize, duotone, neon, heathaze, dissolve, voronoi, spectrum, topographic, flowfield, inkbleed, oilpaint, liquidmetal, refraction, caustics, godrays, matrixfloor, vaporwave, aerochrome, uvblacklight, schlieren, bokeh, prism, crosshatch, stipple, frost, teslaarc - plus more. That's a lot of dropdown, so don't memorize it: set slot 1 and iterate.

The controls that matter

  • mix (default 1) is global opacity for the whole effect stack - pull it down to ghost the effect over the original.
  • mask (optional MASK input) confines everything to a region; mask_feather softens the edge and invert_mask flips it. This is the killer feature - a thermal face over a clean background, or a HUD only in the corner.
  • animation_speed drives sweep/sonar/ekg/code-rain motion. seed controls randomness.
  • Leave most of the eight slots on none until you need layering. There is no shame in using one slot.

Wiring it

Input is image (IMAGE), output is image (IMAGE). It sits between a video source and the encoder like any per-frame stylizer - Load Video → ScanFX → Save Video. For the animated effects to do anything you need a frame batch, not a single still. The output frame count matches the input, so you can also run it mid-graph and composite the scan look over clean footage with a mask or a mixer.

Install

ScanFX is one node in the unified MSCH Nodes pack - one install covers all 35 nodes. Via ComfyUI Manager search for "MSCH Nodes" / msch-comfyui-nodes, or:

cd ComfyUI/custom_nodes
git clone https://github.com/mariobilly/msch-comfyui-nodes.git
cd msch-comfyui-nodes
python -m pip install -r requirements.txt

then restart ComfyUI. Effects are computed with torch/Pillow - no models download, nothing optional to fetch.

Gotchas

Two real ones. First, "thermal" and friends are color-grade approximations, so don't expect sensor-accurate heat maps - for surveillance footage you'd generate with ControlNet or similar, it's close enough to read instantly on screen, which is the point. Second, stacking all eight slots at strength 1 is how you get a brown mush; effects compose multiplicatively, so lower strengths and leave mix room. And remember this node has no memory of time beyond the frames you hand it - for a sweep that starts when the beat drops you'll want it downstream of your beat-synced video, not feeding it.

CategoryScanFX

Inputs (23)

NameTypeDefaultDescription
imageIMAGE
mixFLOAT1.000–1Global opacity of the whole effect stack inside the mask.
mask_featherFLOAT4.00–256Soften the mask edge (pixels).
invert_maskBOOLEANfalse
animation_speedFLOAT1.00–10Speed of moving effects (sweep, sonar, ekg, code-rain).
seedINT00–4294967295
effect_1COMBOthermal61 options: none, thermal, nightvision, xray, lidar, wireframe, +55
strength_1FLOAT1.000–1
effect_2COMBOnone61 options: none, thermal, nightvision, xray, lidar, wireframe, +55
strength_2FLOAT1.000–1
effect_3COMBOnone61 options: none, thermal, nightvision, xray, lidar, wireframe, +55
strength_3FLOAT1.000–1
effect_4COMBOnone61 options: none, thermal, nightvision, xray, lidar, wireframe, +55
strength_4FLOAT1.000–1
effect_5COMBOnone61 options: none, thermal, nightvision, xray, lidar, wireframe, +55
strength_5FLOAT1.000–1
effect_6COMBOnone61 options: none, thermal, nightvision, xray, lidar, wireframe, +55
strength_6FLOAT1.000–1
effect_7COMBOnone61 options: none, thermal, nightvision, xray, lidar, wireframe, +55
strength_7FLOAT1.000–1
effect_8COMBOnone61 options: none, thermal, nightvision, xray, lidar, wireframe, +55
strength_8FLOAT1.000–1
maskoptMASK

Outputs (1)

NameTypeDescription
imageIMAGE