anaksor-ocr
Sokheng · Kit
Reads Khmer and English text from documents, receipts and photos of signs, using a detector for text lines and a recogniser for each line. Suits developers who…
An n8n workflow that checks whether an image shows a crop your Qdrant collection knows. Voyage AI embeds the picture, and a short text names the closest crop or raises an alert.
Crop image anomaly check against a Qdrant collection is an n8n workflow in the Developer category, listed by Mindket. It is free. This is version 1, last updated on . Download it on this page or copy its JSON, then import it into an n8n canvas. Nothing runs until you activate it in n8n.
Called by another workflow
It starts when an agent or another workflow calls it with an image address. Set first:
A short text that either says the picture looks like a named crop or raises an alert for an unknown one
What you need before you start.
Embeddings
Turns the picture into a vector with the multimodal embeddings model.
NeedsVoyage AI API key
Vector database
Counts the crops, then returns the stored centre points closest to the picture’s vector.
NeedsQdrant address and API key
Checked by Mindket on 13 Nov 2026
This n8n workflow checks whether a picture shows a crop that a Qdrant collection already knows. You give it one image address. Voyage AI turns the picture into a vector, and Qdrant returns the stored centre point of each crop that sits closest to it. The workflow compares each score with that crop’s own threshold. It answers that the picture looks like a named crop, or it raises an alert when the picture matches none of the stored crops closely enough to count as known. The answer is one line. Nine nodes run it, beside seven sticky notes.
Developers and data teams who keep image vectors in Qdrant and want a quick outlier check on new pictures, or a tool that an AI agent can call to screen field photos. Skip it if you have no collection yet. The workflow only reads one, and its layout is set out below.
| Industry | Who uses it | How they use it | Example |
|---|---|---|---|
| Agriculture | Agronomy data teams | Flag photos that match none of the crops they track | A team sends a new field photo and gets an alert when it fits no known crop. |
| Quality control | Dataset curators | Screen new uploads before they join a training set | A curator checks each batch and removes the pictures that raise an alert. |
| Software | Developers of AI agents | Give an agent a tool that says whether an image is known | An agent calls the workflow with an image address and reads the answer. |
| Research | Machine learning researchers | Try anomaly rules on image vectors | A researcher compares two threshold settings on the same pictures. |
You need some n8n and a Qdrant collection laid out as described below, plus two credentials.
Any n8n that can reach Voyage AI and your Qdrant will run it. It is a tool workflow, so another workflow or an agent calls it with an image address. It has no web address of its own.
Download saves a zip with workflow.json and Mindket’s setup notes in your downloads folder. Import the file, add the two credentials, set your Qdrant address and test it with one image address.
| Need | Detail |
|---|---|
| n8n | On n8n Cloud or on a server of your own |
| Qdrant | A collection named agricultural-crops with a vector called voyage, a crop_name field and one marked centre point per crop |
| Voyage AI | An API key |
workflow.json. Save it.Authorization and the value Bearer <YOUR_VOYAGE_API_KEY>. Select it in Embed image.Total Points in Collection, Each Crop Counts and Get similarity of medoids.Variables for medoids, replace <YOUR_QDRANT_URL> with your cluster’s address.{ "query": { "imageURL": "<YOUR_IMAGE_URL>" } } on Execute Workflow Trigger, with the address of a real picture, and press Test workflow.Call the workflow with an image address in a field named query.imageURL. It counts the crops in the collection, embeds the picture and asks Qdrant for the closest centre points. Read the answer in the last node. Test with a known crop first.
| To change | Where |
|---|---|
| The wording of the two answers | Compare scores |
| The collection and its centre fields | Variables for medoids |
| The embedding model | Embed image, after you rebuild the collection with it |
| Where the address comes from | Image URL from input |
A data team keeps pictures of many crops in Qdrant, with a centre point and a threshold for each. A new photo arrives from the field, and a script sends its address to this workflow.
If the photo scores above the threshold of any crop, the answer reads Looks similar to followed by the best match. If it clears none of them, the answer reads ALERT, we might have a new undefined crop!. Use the alert as a prompt to look at the picture. A wrong threshold can mislabel an odd photo as a known crop.
If you are new. n8n draws a workflow as boxes joined by lines, and each box, a node, does one job. A vector is a list of numbers that stands for a picture, and pictures that look alike get vectors that sit close together. Qdrant stores those vectors and finds the closest ones. That is all the matching there is.
For experts. The check is nearest centre with a per crop threshold, so the thresholds in the collection decide how strict it is.
| Node | What it does | What to know |
|---|---|---|
Each Crop Counts | Asks Qdrant for the values of crop_name with their counts | The number of distinct crops sets how many centre points the later query returns |
Embed image | Posts the image address to Voyage’s multimodal embeddings | The model is voyage-multimodal-3, and the input type is document |
Get similarity of medoids | Queries the voyage vector, only among points marked as centres | It returns one point per crop, so each crop needs exactly one centre |
Compare scores | Compares each score with the threshold stored on its point | JavaScript in Mindket’s copy, with the same logic as the original |
The workflow needs a collection you build yourself, and its thresholds decide how strict it is. It only reads that collection and never writes to it.
voyage vector, crop_name, is_medoid and the threshold fieldvoyage-multimodal-3.5 and voyage-multimodal-3 as recommended. The file keeps the older one, because the stored vectors must come from the same modelAn n8n workflow that takes the address of one image and says whether it shows a crop your collection already knows. It
turns the picture into a vector with Voyage AI, compares that vector with one centre point per crop in a Qdrant
collection, and answers with a short text. If the picture matches no crop closely enough, the text raises an alert.
workflow.json: the workflow as n8n exports it, 9 nodes and 7 sticky notes. It holds no credential.README.md: these notes.Variables for medoids now holds <YOUR_QDRANT_URL>.Compare scores was a Python Code node that read _input and _(). n8n's documentation says Pyodide, which provided_items and _item, with no imports byImage URL hardcode hardcoded nothing: it reads query.imageURL from the call. It is now calledImage URL from input, and Embed image points at the new name.The workflow does not build the collection. The author made it in two earlier pipelines that are not in this file, so you
need your own. It must look like this:
agricultural-crops. Change it in Variables for medoids if yours differs.voyage, filled with Voyage multimodal embeddings of crop pictures made withvoyage-multimodal-3.crop_name payload field with the crop's name.is_medoid is true, and is_medoid_cluster_threshold holds a number.is_text_anchor_medoid and is_text_anchor_medoid_cluster_threshold.Variables for medoids.The workflow counts the crop names in the collection, and it asks Qdrant for that many centre points.
workflow.json. Save it.Authorization and the value Bearer <YOUR_VOYAGE_API_KEY>.Embed image.Total Points in Collection,Each Crop Counts and Get similarity of medoids.Variables for medoids, replace <YOUR_QDRANT_URL> with your cluster's address, without a slash at the end.Execute Workflow Trigger and press Test workflow:{ "query": { "imageURL": "<YOUR_IMAGE_URL>" } }query field.Execute Workflow Trigger receives the call.Image URL from input copies query.imageURL into a field called imageURL.Variables for medoids sets the Qdrant address, the collection name and the two centre field names.Total Points in Collection asks Qdrant for an exact count of the points. Each Crop Counts asks for the values ofcrop_name with their counts, and Info About Crop Labeled Clusters keeps how many crops there are.Embed image sends the picture's address to Voyage's multimodal embeddings with the model voyage-multimodal-3,Get similarity of medoids queries Qdrant with that vector against the voyage vector, only among the points markedCompare scores checks each result against its own threshold. If at least one reaches it, the answer isLooks similar to <crop>, with the crop of the highest score. If none does, the answer isALERT, we might have a new undefined crop!.Compare scores.Variables for medoids.Embed image. A new model makes vectors that do not fit the stored ones, so rebuild theImage URL from input to read another field.voyage-multimodal-3.5 and voyage-multimodal-3 as its recommended multimodal models. TheNOTICE.md 669 B README.md 6 KB workflow.json 12 KB
Sokheng · Kit
Reads Khmer and English text from documents, receipts and photos of signs, using a detector for text lines and a recogniser for each line. Suits developers who…
Qwen · Kit
Qwen2.5-7B-Instruct as GGUF files in eight quantization sizes, to chat with locally through llama.cpp. For people who want a capable 7.6B model on their own co…
ACE-Step · Kit
Generates music from text with a 4B diffusion decoder, 50 steps and guidance control, aiming for higher audio quality than the base. For creators with a GPU of…
alirezarezvani · Skill
Adds 411 ready-made skills for Claude Code and other coding agents, grouped by role from engineering and product to marketing, finance and compliance. Installs…
block · Kit
Self-hostable workspace where people and AI agents share the same rooms, built on a Nostr relay that logs every action as a signed event. For teams that want t…
backnotprop · Kit
Opens your AI coding agent's plans, specs and code changes in a browser so you can annotate or comment on them and send the feedback straight back to the agent.