KNN Image Classifier with n8n and Qdrant for Land Use

This n8n workflow classifies satellite images into land use categories using KNN and Qdrant vector search, solving tie situations by increasing neighbors. It boosts accuracy to 93.24%, automating what was a tedious manual classification task.
httpRequest
code
set
+3
Workflow Identifier: 1929
NODES in Use: httpRequest, code, set, if, executeWorkflowTrigger, stickyNote
Automate land use classification with n8n and Qdrant

Press CTRL+F5 if the workflow didn't load.

Learn how to Build this Workflow with AI:

What This Automation Does ⚙️

This workflow takes a satellite image URL and finds out what type of land it shows, like forest or beach.
It works fast and stops mistakes that happen when people do this by hand.
The system uses image vectors and looks for close matches in a special database to make a reliable choice.
If it cannot decide easily, it asks for more neighbors to help.
The final answer is the land use class it gives back for that image.


How the Workflow Works: Input → Process → Output

Input: A URL linking to a satellite image.
Process: The image travels through several steps.
First, it changes into numbers (embedding) with Voyage AI API.
Then, the workflow searches Qdrant database for the closest matches.
Next, it counts which land classes appear most among those matches.
If two classes tie, it asks for more neighbors until one wins or hits a max.
Output: The workflow gives the best land use class name.


Tools and Services Used

  • Voyage AI Multimodal Embeddings API: Changes images into vector numbers.
  • Qdrant Cloud Vector Search Database: Stores many labeled image vectors and finds nearest neighbors.
  • n8n Automation Platform: Controls the workflow steps and logic.

Beginner Step-by-Step: How to Use This Workflow in n8n Production

Step 1: Download and Import Workflow

  1. Find the workflow file here on this page and click the Download button.
  2. In your open n8n editor, go to “Workflows” then choose “Import from File”.
  3. Load the downloaded file into n8n.

Step 2: Add Credentials and Update Settings

  1. Enter your Voyage AI API Key in the authentication part of the Embed image node.
  2. Fill in your Qdrant Cloud URL and collection name in the “Qdrant variables + embedding + KNN neighbours” node.
  3. If needed, update any IDs, emails, or channels used in other parts of the workflow.

Step 3: Test the Workflow

  1. Run the workflow once using a sample satellite image URL.
  2. Check that it outputs a land use class without errors.

Step 4: Activate for Production Use

  1. Turn on the workflow so it runs automatically when a new image URL comes in.
  2. Use API calls or other n8n workflows to send image URLs to the workflow.
  3. If hosting n8n yourself, be sure your server has internet access to the APIs.
    Consider using self-host n8n for better control.

Step-by-Step Guide to Build This Classifier

Step 1: Understand the Data and Collect Image URL

Start by preparing your test image URL. This should point to a satellite image you want to classify. For example, “https://storage.googleapis.com/n8n-qdrant-demo/land-use/images_train_test_val/test/buildings/buildings_000323.png”.
This URL is fed into the initial node that triggers the workflow execution.
Common mistake: Using an invalid or inaccessible image URL will cause the process to fail early.

Step 2: Execute Workflow Trigger Node

In n8n, click WorkflowsNew Workflow. Add the Execute Workflow Trigger node.
This node receives the image URL input JSON and initiates the classification workflow.
Check the example input from previous step is present in the node execution data.
Outcome: Workflow is ready to process image URLs in real-time.

Step 3: Set Image Test URL

Add a Set node named “Image Test URL”. Navigate to it and under Assignments, add a new field “imageURL” of type string. Set its value to {{$json.query.imageURL}}.
This correctly extracts the image URL from the initial input for use in further steps.
Visual: You should see your test image URL appearing in the node output JSON data under “imageURL” field.

Step 4: Embed Image Using HTTP Request Node

Add an HTTP Request node named “Embed image”. Set the method to POST and URL https://api.voyageai.com/v1/multimodalembeddings.
Under authentication, set your generic HTTP header auth to use your Voyage AI API key.
For the Body enter the following JSON template:

{
 "inputs": [
 {
 "content": [
 {
 "type": "image_url",
 "image_url": "$json.imageURL"
 }
 ]
 }
 ],
 "model": "voyage-multimodal-3",
 "input_type": "document"
}

Common mistake: Forgetting to replace $json.imageURL dynamically will break requests.
Outcome: You will receive a vector embedding representing the image content.

Step 5: Define Qdrant Collection Variables

Add a Set node called “Qdrant variables + embedding + KNN neighbours”. Assign variables:

  • ImageEmbedding: from previous HTTP Request node data $json.data[0].embedding
  • qdrantCloudURL: your Qdrant cloud base URL, e.g. “https://your-qdrant-instance.cloud.qdrant.io”
  • collectionName: set to your lands dataset collection name in Qdrant, e.g. “land-use”
  • limitKNN: set initial number of neighbors to query, e.g. 10

This prepares variables for the nearest neighbors search.

Step 6: Query Qdrant for Nearest Neighbors

Add an HTTP Request node named “Query Qdrant”. Set method to POST. URL should be {{$json.qdrantCloudURL}}/collections/{{$json.collectionName}}/points/query.
The JSON Body is constructed dynamically as:

{
 "query": $json.ImageEmbedding,
 "using": "voyage",
 "limit": $json.limitKNN,
 "with_payload": true
}

Use QdrantApi as authentication with proper credentials.
This node fetches the nearest neighbor points along with their land use labels.

Step 7: Propagate Loop Variables

Add a Set node called “Propagate loop variables” to hold and update limitKNN and query results.
Assignments include:

  • =limitKNN from $json.result.points.length
  • result object from $json.result

This allows dynamic adjustment in the loop.

Step 8: Calculate Majority Vote Using Python Code Node

Add a Code node named “Majority Vote” using Python language.
Paste this code snippet:

from collections import Counter

input_json = _input.all()[0]
points = input_json['json']['result']['points']
majority_vote_two_most_common = Counter([point["payload"]["landscape_name"] for point in points]).most_common(2)

return [{
 "json": {
 "result": majority_vote_two_most_common 
 }
}]

This code tallies the two most common neighbor classes.

Step 9: Check for Tie Using IF Node

Add an IF node named “Check tie” with these conditions:

  • If result length is more than 1,
  • AND the counts of top two classes are equal,
  • AND limitKNN less than or equal 100

If true, loop back to increase neighbor count.
Else, proceed to finalize output.

Step 10: Increase limitKNN Setting Node to Resolve Ties

Add a Set node named “Increase limitKNN”. Set limitKNN to current limitKNN + 5.
This increases neighbors used to break ties.

Step 11: Return the Final Class

Add a Set node called “Return class” to extract the class name from majority vote results.
Set property ‘class’ to {{$json.result[0][0]}}.
This is the classification result output.


Customization Ideas ✏️

  • Change the start number of neighbors (limitKNN) in “Qdrant variables + embedding + KNN neighbours” to try faster or more precise results.
  • Make the tie break step bigger or smaller by changing the increase amount in “Increase limitKNN” node.
  • Try different embedding models by changing the model name in the “Embed image” node API call.
  • Add extra data from Qdrant like region info and update the Python code to use it for better votes.

Troubleshooting ????

Problem: “HTTP Request to Voyage API fails with unauthorized error.”
Cause: API Key wrong or expired.
Solution: Change the API Key in the “Embed image” node Authentication section.

Problem: “Qdrant query returns zero neighbors or empty result.”
Cause: Wrong collection name or cloud URL.
Solution: Check and update the Qdrant variables in “Qdrant variables + embedding + KNN neighbours” node.
Try the same query in Postman to confirm.

Problem: “Tie loop does not end as limitKNN passes 100.”
Cause: Dataset may be too small or too uniform.
Solution: Increase maximum neighbors or check dataset variety.


Pre-Production Checklist ✅

  • Make sure your Voyage AI API Key works by testing embeddings.
  • Confirm Qdrant collection has correct vectors and labels.
  • Test your KNN queries with sample data outside n8n.
  • Run the full workflow with sample images to see no errors.
  • Backup your Qdrant database and n8n workflow before real use.

Deployment Guide

Enable the workflow inside n8n.
Send satellite image URLs to the Execute Workflow Trigger node using API calls or other workflows.
Check the run logs and timing for any issues.
When self hosting n8n, use self-host n8n with good internet access to API services.


Summary

✓ Finds land use class from satellite image URL automatically.
✓ Uses Voyage AI to embed images into vectors.
✓ Queries Qdrant vector DB for nearest neighbors.
✓ Uses majority vote to classify with tie handling.
✓ Saves hours of manual work with over 93% accuracy.
✓ Easy to set up and run inside n8n with minimal coding.


Automate land use classification with n8n and Qdrant

Visit through Desktop to Interact with the Workflow.

Author
Written By
Vikash Kumar
Building AI agents, n8n workflows and end-to-end automation for 30+ Brands across India, the US, Europe, Dubai & Australia. 7+ years of Experience saving founders real hours every week - no code required.
Author
Written By
Vikash Kumar
Building AI agents, n8n workflows and end-to-end automation for 30+ Brands across India, the US, Europe, Dubai & Australia. 7+ years of Experience saving founders real hours every week - no code required.

Frequently Asked Questions

Yes. The workflow can be changed to work with other vector databases that have similar search and query APIs.
The workflow makes one call to Voyage AI per image plus several Qdrant queries based on how many neighbors it needs.
Yes. Both APIs use HTTPS and API Keys. Store API keys securely inside n8n credentials.
Yes. n8n can process batches but API rate limits should be watched and concurrency managed.

Related Workflows

Automate Twist Channel Creation and Messaging with n8n

This workflow automates creating and updating a channel in Twist and sending a personalized message to specific users. It eliminates manual setup errors and saves time managing Twist communications.

Automate Ideogram Image Generation with Google Sheets & Gmail

This workflow automates graphic design image generation via Ideogram AI, storing image data in Google Sheets and Google Drive, with email alerts via Gmail. It saves designers hours by automating image creation, remixing, review, and record-keeping.

Automate IT Support with Slack and OpenAI in n8n

Streamline IT support by automating Slack message handling using n8n and OpenAI. This workflow handles Slack DMs, filters bots, queries a Confluence knowledge base, and delivers AI-generated responses, improving support efficiency and response time.

Automate Crypto Analysis with CoinMarketCap & n8n AI Agent

Discover how this unique n8n workflow leverages CoinMarketCap’s multi-agent AI to deliver precise, real-time cryptocurrency insights directly via Telegram. Manage crypto data analysis efficiently with automated multi-source API integration.

Automate Gumroad to Beehiiv Subscriber Sync with n8n

Learn how to automatically add new Gumroad sales customers as Beehiiv newsletter subscribers using n8n automation. This workflow saves time by syncing sales data to Google Sheets CRM and notifying your Telegram channel instantly.

Generate On-Brand Blog Articles Using n8n and OpenAI

This workflow automates the creation of on-brand blog articles by analyzing existing company content using n8n and OpenAI. It extracts article structures and brand voice to produce consistent draft articles, saving significant content creation time.
1:1 Free Strategy Session
Your competitors are already automating. Are you still paying for it manually?

Do you want to adopt AI Automation?

Every hour your team does repetitive work, you're burning real money.
While you wait, faster businesses are cutting costs and moving quicker.
AI and automations aren't the future anymore — they're the present.

Book a live 1-on-1 session where we show you exactly which of your daily tasks can be automated — and what it’s costing you not to.