CV Aesthetic Overlay
The paint job for all that tracking data
- image
- detections
- blobs
- tracks
- image
The detector and the blob tracker are both data producers - they find things and hand you numbers. This node is where the numbers become a picture. CV Aesthetic Overlay takes the CV_DETECTIONS, CV_BLOBS, and CV_TRACKS outputs from the rest of the pack and draws them in that clean technical/surveillance style the pack is named for: corner brackets, crosshairs, trajectory trails, plexus lines, and little HUD info panels. If the pack is a sandwich, this is the bread you actually taste.
What it draws, and how
Feed it detection data and you get plain bounding boxes with a class + confidence label on a dark chip. Feed it blob data and it goes full surveillance mode: corner brackets on the box, a crosshair at the centroid, a fading trajectory trail behind the blob, and a text panel that tracks the blob's ID, age, size in pixels, and confidence. Feed it tracks (from the blob tracker) and it draws the connecting lines - and it's smart about them: strong connections render solid, medium ones dashed, weak ones dotted, and plexus connections get a faint glow treatment. Tracks are drawn first, behind everything else, so they don't cover your boxes.
The mechanism is plain OpenCV drawing - rectangles, lines, circles, putText - on a working copy of each frame. It's batch-aware too, so the same node handles both a single image and a stack of video frames.
The inputs that matter
Most of the inputs are styling, and they're all straightforward:
border_color/text_color/track_color- hex without the#(the tooltips say so:00FF00for green,FF0080for that magenta,FFFFFFfor white). Default look is green boxes, magenta tracks. Very 1999 hacker-movie, which is the point.border_thickness(2) andtrack_thickness(1) - line weights.text_size(16),text_background_opacity(0.7) - the label chips behind the text.show_tracks(on) - master switch for the connecting lines. Turn it off if you just want boxes.track_opacity(0.6) - how see-through the connecting lines are.
The three optional inputs are detections, blobs, and tracks - exactly the typed outputs from CV Object Detector and CV Blob Tracker. Wire in whichever one you're using. The single output is image, ready for a Preview node or VHS Video Combine.
Wiring it up
CV Object Detector → ┐
├→ CV Aesthetic Overlay → Preview / VHS Video Combine
CV Blob Tracker → ┘ (detections / blobs / tracks)
For the full constellation look, use the blob tracker's blobs and tracks outputs, with enable_plexus on in the tracker.
Installing
You know the drill by now - ComfyUI Manager (search "ComfyUI-CVOverlay") or:
cd ComfyUI/custom_nodes
git clone https://github.com/joosthel/ComfyUI-CVOverlay.git
Restart. This node needs the opencv stack (opencv-python, numpy) but not ultralytics - the drawing path is independent of YOLO.
Troubleshooting
- Everything renders green no matter what you pick. The hex parser falls back to default green on invalid input. You're probably including the
#, or pasting something with letters outside A-F. The parser actually tolerates a leading#and 3-digit shorthand, but six clean hex chars is the safe bet. - Boxes but no lines.
show_tracksis off, or you didn't wire thetracksoutput in - the lines come from data, not from the image. - Text looks cramped or oversized.
text_sizescales both the font and its thickness; small sizes can look chunky at default spacing. It's a fixed look, not a layout editor - you control colors, thickness, and text size, not where the panels sit. - Double-drawn mess. You fed in both
detectionsandblobsfor the same image and got both drawn on top of each other. Usually you want one or the other.
Worth flagging: like the rest of this pack, it's new, small, and MIT-licensed, with no community track record yet - treat the exact aesthetics as a starting point, not a contract. If you want a different look, you're reading the code and hacking it.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| border_color | STRING | 00FF00 | Border color in hex (without #, e.g., 00FF00 for green) |
| border_thickness | INT | 21–20 | — |
| text_color | STRING | FFFFFF | Text color in hex (without #, e.g., FFFFFF for white) |
| text_background_opacity | FLOAT | 0.700–1 | Black background opacity behind text |
| text_size | INT | 166–72 | — |
| show_tracks | BOOLEAN | true | Show connecting lines between tracked blobs |
| track_color | STRING | FF0080 | Track line color in hex (without #, e.g., FF0080 for magenta) |
| track_thickness | INT | 11–15 | — |
| track_opacity | FLOAT | 0.600–1 | — |
| detectionsopt | CV_DETECTIONS | — | |
| blobsopt | CV_BLOBS | — | |
| tracksopt | CV_TRACKS | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |