DINOv3 Process
DINOv3 Process turns clicks into similarity heatmaps — and one of its outputs is a lie
- dinov3_model
- image
- positive_points
- negative_points
- Positive Feature Images
- Negative Feature Images
- Processed Image
- All Features
DINOv3 Process is the workhorse of this pack. It takes the model from DINOv3 Loader, runs it over your image, and turns your clicks into per-point similarity heatmaps - viridis-colored maps that show, for every patch in the image, how strongly it matches the patch you clicked. Click a lion's face and the whole image lights up wherever there's lion; click a car door and you get every panel that looks like that door. It's the DINO feature-matching trick made visible, and it's the actual payoff of installing the pack.
The intended flow is simple: DINOv3 Loader → DINOv3 Process → your image, with DINOv3 Point Collector feeding positive_points and negative_points into the optional inputs. Out the other side come the heatmaps you stare at while you iterate on your clicks.
How it works
Under the hood it's a clean little pipeline. The node takes your image, resizes it, normalizes it with ImageNet stats, and calls model.forward_features() to get the x_norm_patchtokens - one feature vector per patch in a grid. For each point you clicked, it finds the patch that point falls in, computes cosine similarity between that patch's feature and every other patch, upscales the resulting grid back to image resolution, and paints it with the viridis colormap, dropping a red circle on the clicked patch so you can see where the query came from.
One behavioral quirk worth knowing: with auto_resize on (the default), the image gets squashed to a square - both dimensions set to your smaller dimension, rounded down to a multiple of 16 and clamped between 224 and 1024. Aspect ratio is not preserved. For feature similarity that's usually harmless, but if you're staring at a squashed map and wondering why things look off, that's why.
The inputs and outputs that matter
- dinov3_model - from DINOv3 Loader. Nothing runs without it.
- image - the input image.
- resize / auto_resize - leave auto_resize on and you rarely touch resize; turn it off to force a specific square size (must be a multiple of 16, min 224, max 1024).
- positive_points / negative_points (optional) - SAM3_POINTS_PROMPT from DINOv3 Point Collector. Feed these in and you get per-point heatmaps for each.
The four outputs are where you need to be careful:
- Positive Feature Images - the similarity maps for your positive points, one per point (stacked if multiple). This is the output you actually want.
- Negative Feature Images - same thing for negative points.
- Processed Image - ignore it. Despite the name, the code returns a hard-coded empty 1×1 tensor here. It's a placeholder, not your processed image.
- All Features - also a lie in disguise. It's not the feature tensor; it's a jet-colormap visualization of each patch's feature magnitude. Interesting to look at, useless to wire anywhere.
The trap nobody warns you about
Despite being called "Process," this node outputs images only - all four outputs are type IMAGE. Nowhere does it emit a DINOV3_FEATURES object, even though the pack's fourth node, DINOv3 Similarity, demands one. As shipped, you cannot connect this node to DINOv3 Similarity. The similarity maps this node generates are computed internally and returned as images, and the "features" output type appears to be leftover from an earlier design. Don't fight it - just use the feature images.
Install
Same as the rest of the pack, and yes, the dinov3 source clone matters even though it's invisible:
cd ComfyUI/custom_nodes
git clone https://github.com/xuheyao/comfyui-dinov3-point-prompt
cd comfyui-dinov3-point-prompt
git clone https://github.com/facebookresearch/dinov3
Restart, then point DINOv3 Loader at your downloaded checkpoint (gated on Hugging Face - accept the model-card terms first). The pack needs no extra pip installs beyond what ComfyUI already ships. Common pain: forgetting the dinov3 clone, or leaving model_path at the author's default path - both fail at the loader, before Process ever runs.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| dinov3_model | DINOV3_MODEL | DINOv3 model from DINOv3Loader node | |
| image | IMAGE | Input image to process | |
| resize | INT | 640224–1024 | Image resize size (must be multiple of 16) |
| auto_resize | BOOLEAN | true | Automatically calculate optimal resize size |
| positive_pointsopt | SAM3_POINTS_PROMPT | Positive points from DINOv3PointCollector or SAM3 nodes | |
| negative_pointsopt | SAM3_POINTS_PROMPT | Negative points from DINOv3PointCollector or SAM3 nodes |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| Positive Feature Images | IMAGE | — |
| Negative Feature Images | IMAGE | — |
| Processed Image | IMAGE | — |
| All Features | IMAGE | — |