Nodes/MSCH 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 21 days ago·Updated 17 days ago· 1
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_1–strength_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—