AI index embeddings
Overview
Embeds the images of one dataset, and the objects annotated on them, into the workspace’s embedding index, then keeps that index current as the dataset changes. Similar pairs, Embedding map, Label diagnostics and Embedding anomalies all read what this node wrote, so run it on a dataset before any of them.
Two kinds of embedding are built side by side. The semantic one (CLIP, PE-Core or SigLIP 2) also understands text, so a written prompt can find matching images and objects. The visual one (DINOv3) compares how things look rather than what they mean, which is what near-duplicate and outlier work needs.
The badge on the node counts the images added in the latest run.
Prerequisites
How it works
Embeds the images and annotated objects that the workspace index is still missing, a batch at a time.
Writes the new embeddings, once for the semantic model and once more for DINOv3 when visual embedding is on.
FAQ
Which settings do the other nodes need?
Each reader looks in the index of the model you pick on it, so index with that model first. Embedding map clusters on DINOv3 by default, which needs Enable visual embedding on. Label diagnostics works on objects, so it needs Enable object indexing on, and it only counts objects indexed by a node pointed at that same dataset.
What happens on a second run over an indexed dataset?
Nothing is recomputed while the dataset is untouched: the run ends right away and the badge reads 0 images. Once images or annotations change, only what is missing gets embedded, everything already indexed is reused, and objects whose annotation is gone are removed from the index.
Do I have to start the node myself?
No. Once it is configured, the node checks its dataset every ten minutes on its own. You can also run it by hand.
Can I switch the node to another dataset or another model?
No. The first run binds the node to that dataset, that embedding model, the visual embedding setting and the object embedding method, and changing any of them afterwards stops the run with an error. Add a second node for a second dataset or a different model. Turning object indexing off later is allowed: it stops new objects from being embedded and leaves the ones already indexed in place.
Why does the node refuse a new version of the same dataset?
The binding is to the exact dataset version of the first run. When the dataset input moves to a newer version, for example because an upstream node reran and wrote one, the run stops with the same error as for a different dataset. Index the new version with a new node.
Does indexing change my dataset?
No. Images and annotations are read only. The embeddings live next to the dataset, in an index shared by the whole workspace. An image already indexed through another dataset is not embedded again.
Which annotated objects get their own embedding?
Every object of the image’s annotation, taken from the box around its shape, whatever the shape is. An object whose box reaches past the edge of its image is skipped, and so is an annotation that does not record the image size.
What does this node not support?
Images only. Videos and other assets are not indexed. And because the workspace keeps one DINOv3 index, every node writing visual embeddings into it has to use the same object embedding method.
Why does a run stop with an embeddings service error?
The service that stores the embeddings is unreachable or not configured for this instance. The dataset is left as it was, so the node picks up where it stopped once the service answers again.
Inputs
Dataset to index, with its images and their annotated objects. A node stays bound to the exact dataset version it first indexes, so indexing another dataset or version takes another node. Key: DATASET.
Model used for image, object, and text-compatible embeddings. CLIP is the fastest and the weakest at matching objects to a text prompt. PE-Core and SigLIP 2 are both much stronger, but which one leads depends on the imagery, and PE-Core costs an order of magnitude more time per object. Index a sample both ways and compare before committing a large dataset. Key: EMBEDDING_MODEL.
Options:
- CLIP (
clip) - PE-Core (
pecore) - SigLIP 2 (
siglip2)
Extra embeddings that compare images by how they look rather than by what they mean, using DINOv3. Similar pairs, Embedding map and Label diagnostics can then search on it. Turn off only when you need a faster run. Key: ENABLE_VISUAL_EMBEDDING.
Also embed every annotated object, not just whole images, for both the semantic and visual (DINOv3) collections. Turn off to index only whole images. Key: ENABLE_OBJECT_INDEXING.
Crop gives every bounding box its own full-resolution pass. Regions runs DINOv3 once per whole image and pools patch features inside each box, costing one pass per image instead of one per object, but leaving each object only the feature cells its area covers. Crop separated classes better at every object size measured, and by a wide margin for small objects, so prefer Regions only to trade accuracy for indexing speed on object-dense images. All DINOv3 nodes in one workspace write to the same index, so they all have to use the same method. Visible when ENABLE_OBJECT_INDEXING is True. Key: OBJECT_EMBEDDING_MODE.
Options:
- Regions (ROI pooling) (
regions) - Crop (
crop)
Number of images downloaded and embedded together. Minimum: 1. Maximum: 256. Step: 1. Key: BATCH_SIZE.
Outputs
Number of new image vectors written during this run. Shown on the node as a badge. Key: INDEXED_IMAGES.
Internal scan state. Do not edit. Hidden from the flow editor. Key: STATE.
JSON config
Machine-readable node interface for automation and advanced usage.