Face Blur
Privacy-mask footage with zero model downloads
- video
- video
Street footage, a crowded demo, a video of someone who didn't consent to being in it - the fastest way to make it shareable is to blur or pixelate faces. Face Blur finds them for you and masks them automatically, every frame, and here's the part worth knowing before you install anything: it needs no model file at all.
Most "face blur in AI" tools lean on a detector model you have to fetch. This one uses OpenCV's built-in Haar cascade - haarcascade_frontalface_default.xml, which ships inside OpenCV itself. It's old-school, it's fast, and it runs entirely on CPU if you want it to. For a privacy pass over real footage it's the right tool: you don't need state-of-the-art face detection, you need "find the faces and don't miss one." (If you've read about the ADetailer-style detect → crop → re-render loop, this is the non-generative cousin - it just blurs the box.)
How it works
ComfyTV is jtydhr88's canvas app - ~190 stages, each its own node, with per-node Run handled by hidden frontend inputs (force_run_token, project_id, parent_output_id) you never touch. Face Blur is a straightforward video pass: it detects faces, draws a mask over each one, and applies the effect. Two settings do the real work:
- recheck (default 12) - how often it re-runs detection. Faces move; re-detecting every frame is slow, but leaving
rechecktoo high means a face that turns or enters late stays uncovered. Every 12 frames is a sane default; drop it if people are constantly moving in and out of frame. - search_scale (default 1.2) - how aggressively the cascade upscales to find small faces. Raise it for wide shots where faces are tiny.
The mode combo gives you blur, pixelate, and box (a solid block), and shape picks rect or ellipse for the mask - ellipse looks more natural on a head. strength (4–64, default 24) is the blur amount, neighbors is the Haar cascade's min-neighbors (higher = fewer false positives, but it can skip real faces), and min_size ignores anything smaller than N pixels - handy for not nuking a distant crowd you actually want visible.
Optional video in, video out. No video in, nothing happens.
Installing it
Same as every ComfyTV stage - one pack:
cd ComfyUI/custom_nodes
git clone https://github.com/jtydhr88/ComfyTV
or ComfyUI Manager ("ComfyTV"). Full backend restart, then ComfyTV → VideoFX.
The install gotcha that gets people: on ComfyUI Desktop, macOS, or multiple installs, the relative cd can land in the wrong instance and the pack never shows up. Clone into the running instance by absolute path, verify custom_nodes/ComfyTV/__init__.py exists (not nested), and fully quit/relaunch. The pack declares zero pip dependencies, but this node specifically imports cv2 (OpenCV) and video handling imports PyAV (av). A bare pip ComfyUI may lack them: pip install opencv-python av into ComfyUI's environment and restart.
Common issues
- "OpenCV haar cascade not found" - OpenCV isn't installed or its data files are missing.
pip install opencv-python(not justopencv-python-headless, which skips the cascade data in some setups) and restart. - Faces missed when someone turns their head - that's
recheck. Lower it, or raisesearch_scalefor small faces. - Background details wrongly blurred - Haar cascades hallucinate faces on textures (the classic "rock formation looks like a face"). Raise
neighborsandmin_size. - Crowds of faces - it will happily blur every face, which is probably what you asked for; just know each one costs detection time.
Inputs (11)
| 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. |
| mode | COMBO | blur | 3 options: blur, pixelate, box |
| shape | COMBO | ellipse | 2 options: rect, ellipse |
| strength | FLOAT | 244–64 | — |
| recheck | INT | 121–120 | re-detect faces every N frames |
| search_scale | FLOAT | 1.201.05–2 | — |
| neighbors | INT | 41–10 | — |
| min_size | INT | 248–400 | — |
| videoopt | COMFYTV_VIDEO | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| video | COMFYTV_VIDEO | — |