Pseudocolor
Map luminance onto a colormap and fake a thermal camera in one pass
- video
- video
Pseudocolor replaces the picture's colors by mapping brightness onto a palette - dark-to-bright becomes a smooth gradient of the colormap's colors. You've seen this every time someone shows a thermal camera or a scientific heatmap: the hottest spots glow, the coldest go dark blue. It's the node for faking a thermal look, giving footage a data-viz aesthetic, or just doing a bold, weird recolor.
It's a rendered stage - needs a ▶ Run - and like Posterize it runs through ffmpeg's pseudocolor filter, which ComfyUI already has. No model download, no GPU-heavy lift beyond the render. In goes COMFYTV_VIDEO, out comes COMFYTV_VIDEO.
The two parameters
About as small a schema as ComfyTV ships:
pseudo_preset- the palette to map onto. Defaultviridis(that purple-to-yellow scientific standard), and the family includesmagma,turbo, and the rest of the matplotlib-style colormaps.viridisreads as "scientific visualization,"turboreads as "fake thermal" (cyan→green→red),magmareads as "hot metal."pseudo_opacity- 0–1 (default 1) how much of the pseudocolor replaces the original. At 1.0 it's a full recolor; dial it down to blend the heatmap look over the real footage, which keeps your subject recognizable while still reading as thermal. That partial-opacity move is the difference between "thermal camera footage" and "I recolored a clip."
One output: video (COMFYTV_VIDEO).
Where it fits
Three genuinely different jobs, per the pack's docs: a thermal/heatmap look (surveillance, sci-fi HUD, "here's where the heat is" explainers), a data-viz aesthetic (wind, depth, density maps), and a bold stylized recolor of a shot. Because it's luminance-driven, high-contrast footage reads the strongest; a low-contrast clip will just look like a gradient wash, so grade before you pseudocolor.
It's grouped with Old Film, Posterize, and Regrain in the "texture & era" VideoFX family - and one real workflow trick: pseudocolor is a great preview tool when you're building a depth or luminance-based effect and want to see what your values actually are.
Install
Pack-wide one-liner:
cd ComfyUI/custom_nodes
git clone https://github.com/jtydhr88/ComfyTV
Restart ComfyUI - Desktop/macOS users: clone into the running instance by absolute path, verify __init__.py at the top level, and restart the backend rather than just refreshing the browser. ComfyUI Manager finds it as "ComfyTV". No extra Python dependencies.
Same snapshot caveat as the rest of the pack: the video output is a project snapshot, not a native ComfyUI tensor, so route through a Bridge if native nodes are waiting downstream. And don't forget the seed-free nature of this one - it's deterministic, so what you see is what you get.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| force_run_token | INT | 00–2147483647 | Internal — bumped on Run to invalidate ComfyUI's input cache. |
| project_id | STRING | Internal — populated by the projectStore on the frontend. | |
| parent_output_id | INT | 00–2147483647 | Internal — lineage parent set by spawn handlers on the frontend. |
| pseudo_preset | COMBO | viridis | 21 options: magma, inferno, plasma, viridis, turbo, cividis, +15 |
| pseudo_opacity | FLOAT | 1.000–1 | — |
| videoopt | COMFYTV_VIDEO | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| video | COMFYTV_VIDEO | — |