ComfyUI Node

DINOv3 Process

DINOv3 Process turns clicks into similarity heatmaps — and one of its outputs is a lie

By xuheyao·Created 9 months ago·Updated 9 months ago· 0
DINOv3 Process
  • dinov3_model
  • image
  • positive_points
  • negative_points
  • Positive Feature Images
  • Negative Feature Images
  • Processed Image
  • All Features
resize640
auto_resizetrue

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.

CategoryDINOv3

Inputs (6)

NameTypeDefaultDescription
dinov3_modelDINOV3_MODELDINOv3 model from DINOv3Loader node
imageIMAGEInput image to process
resizeINT640224–1024Image resize size (must be multiple of 16)
auto_resizeBOOLEANtrueAutomatically calculate optimal resize size
positive_pointsoptSAM3_POINTS_PROMPTPositive points from DINOv3PointCollector or SAM3 nodes
negative_pointsoptSAM3_POINTS_PROMPTNegative points from DINOv3PointCollector or SAM3 nodes

Outputs (4)

NameTypeDescription
Positive Feature ImagesIMAGE
Negative Feature ImagesIMAGE
Processed ImageIMAGE
All FeaturesIMAGE