HUD Overlay
The HUD look, no After Effects required
- images
- images
You know the look even if you can't name it: X-shaped crosshairs scattered over a shot, thin colored bars, corner brackets framing the frame, and a blinking "REC" line with a hex code under it. It's the sci-fi "operator HUD" aesthetic - the author cribs it from the @thesystms TimeSlice montages - and until this node it meant exporting your clip and opening a compositor. HUDOverlay does it inline, on every frame of a video batch, with no model and no extra pass.
The whole trick is that it's a decorative overlay. The pack's own description is blunt about it: "this is a decorative overlay; it does not detect or track objects." Crosshairs land on randomized positions, not faces or targets. If you want an actual tracking HUD glued to something moving, this isn't the tool. If you want the vibe - mission-control chrome on a render, a fake camera feed, a glitchy sci-fi text crawl - it's perfect.
Where it drops in
It's IMAGE in, IMAGE out, so it sits between your video frames and the encoder. The frames can come from anywhere: a Wan/LTX render, the pack's own WarpWiggle Stylize node (the README's suggested chain for "the full look"), or a clip loaded with VideoHelperSuite. You feed it N frames and get N frames back - same length, same timing - then send them to a Video Combine / save node.
Mechanically it's Pillow drawing, not a neural anything: convert the tensor, draw an ImageDraw layer, composite. The seed fixes a base layout of crosshairs and bars, then each frame gets its own deterministic random state - that's what jitter and flicker drive. jitter nudges element positions by a few pixels per frame so nothing sits rock-still; flicker randomly drops elements like a dying CRT. It's per-frame Python over a CPU tensor, fine for normal clips, but don't feed it an hour of 4K and expect realtime.
The inputs that matter
Everything is required, but you'll touch maybe five of them:
color_scheme-rgb_glitch(default),red,green, ormono. This is 90% of the vibe.monogives clean white-on-black data-feed energy;rgb_glitchis the full RGB-split explosion.crosshair_countandbar_count- density of the two element types. Set either to 0 and it disappears, handy if you want brackets and text only.jitterandflicker- life settings. Defaults (0.5 / 0.25) read well; crank flicker if you want it twitchy, drop both for a cleaner corporate look.text- the main label, defaultREC ● SYS//TIMESLICE. Type whatever your fake system says.glitch_texttoggles the smaller status line under it, which the code rolls through a random hex code, a timecode, a frame number, or an ISO value each frame - small touches that sell it.seed- changes where everything lands. Same seed, same layout.
The rest are opacity, corner_brackets, scanlines, and line_width. scanlines (default off) adds faint horizontal lines every few pixels if you want the CRT texture on top.
Install
Same story as the whole pack - it lives in mariobilly/msch-warp-wiggle:
cd ComfyUI/custom_nodes
git clone https://github.com/mariobilly/msch-warp-wiggle.git
Then a full restart of ComfyUI (close the server, relaunch) and a hard browser refresh (Ctrl+F5). No model files, no heavy deps: the requirements are just numpy, Pillow and torch, which ComfyUI already ships - INSTALL.txt literally says nothing to pip install. You'll find it under the WarpWiggle category; Manager support is still pending, so git clone is the reliable path.
One heads-up worth knowing before you clone: the README announces this repo is superseded by the unified MSCH Nodes pack (msch-comfyui-nodes) - new nodes and fixes land there, and this standalone copy is kept for existing installs. If you're starting fresh, that's where the author points you; if you already have this one, keep just one copy to avoid duplicate nodes.
Common gotchas
- Node missing / widgets showing UNKNOWN - the classic no-restart symptom. Restart the server, not just the browser tab.
- "Why is the text blurry/tiny?" - the font scales off frame height, and it falls back to a bundled font if it can't find a monospace one. On small frames there's only so much resolution to go around.
- Expecting it to follow a subject - it won't; positions are randomized. Layer the vibe, don't sell it as tracking.
It's a cheap, deterministic flavor node, and that's exactly its strength: one node between your frames and the encoder, and your render comes out looking like the machine woke up and is watching you.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| color_scheme | COMBO | rgb_glitch | 4 options: rgb_glitch, red, green, mono |
| opacity | FLOAT | 0.900–1 | — |
| crosshair_count | INT | 60–60 | — |
| bar_count | INT | 80–80 | — |
| corner_brackets | BOOLEAN | true | — |
| scanlines | BOOLEAN | false | — |
| glitch_text | BOOLEAN | true | — |
| text | STRING | REC ● SYS//TIMESLICE | — |
| jitter | FLOAT | 0.500–1 | — |
| flicker | FLOAT | 0.250–1 | — |
| line_width | INT | 21–8 | — |
| seed | INT | 00–4294967295 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |