Mindket

Crop photos embedded with Voyage and saved to Qdrant

Newversion 1 · updated

Overview

An n8n workflow you start by hand: it lists crop photos in a Google Cloud Storage bucket and embeds them with Voyage AI. The vectors are saved in a Qdrant collection, four photos at a time.

Crop photos embedded with Voyage and saved to Qdrant 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.

At a glance

Runs in
  • n8n Cloud: import the file into a new workflow there
  • Your own n8n server: the same file and steps
  • Qdrant Cloud or your own Qdrant: the collection that holds the vectors
  • Another bucket or folder: change the bucket name and the prefix to load a different image set

Platform

Connects 3 apps

How it works

Trigger

Manual run

It starts when you press Execute workflow, with these values set in two nodes:

  • The Qdrant cluster address, the collection name, the vector size and the batch size, set in Qdrant cluster variables
  • The bucket name and the folder prefix, set in Google Cloud Storage

Actions

  1. Qdrant is asked whether the collection exists, and a missing one is created with a keyword index on the crop name
  2. Every object under the folder prefix is listed in the Google Cloud Storage bucket
  3. A public link and the crop name, taken from the folder, are worked out for each photo, and the tomato photos are dropped
  4. The photos are grouped in batches of four and each one gets a UUID
  5. Voyage AI turns each batch into embeddings
  6. The vectors are saved in Qdrant as points with their crop name and link

Result

A Qdrant collection with one point for each photo, holding its vector, its crop name and its link

Integrations

What you need before you start.

Qdrant

Vector database

Holds the photo vectors as points with the named vector voyage, and creates the collection and its index when they are missing.

NeedsA Qdrant cluster address and an API key, in a Qdrant API credential

Voyage AI

Embedding model

Turns each photo into a vector with voyage-multimodal-3 from its public address.

NeedsA Voyage AI API key, in a Header Auth credential

Google Cloud Storage

Photo storage

Lists the objects under a folder prefix in a bucket, which hold the photos.

NeedsA Google Cloud account, in a Google Cloud Storage credential

Workflow check

Checked by Mindket on 13 Nov 2026

Steps
13 steps, starting by hand
AI
No step calls an AI model
Sign-ins
Signs in to: Qdrant, Google Cloud Storage and api.voyageai.com
API keys
No API key is left in the file
Step types
Mindket’s checker reads all 7 of its step types

Read from the workflow’s file, not from a run.

About

What it is

This n8n workflow fills a Qdrant collection with picture vectors. A manual trigger starts it. It checks whether the collection exists and creates it, with an index on crop_name, when it does not. Then it lists the photos in a Google Cloud Storage bucket, leaves out the tomato folder and asks Voyage AI for an embedding of each photo, four at a time. Every photo becomes a point with its crop name and its address. Thirteen nodes do the work, beside twelve sticky notes that explain the steps.

Who it suits

Developers and data teams who want a labelled image collection in a vector database, for search, classification or anomaly checks. Skip it if your pictures are private. Voyage downloads each photo from a public address, so the bucket files must be readable without signing in.

Who uses it, and how
IndustryWho uses itHow they use itExample
AgricultureData teamsIndex labelled crop photos for later classificationA team loads photos sorted in folders by crop, such as cucumber and wheat.
E-commerceCatalog engineersBuild an image index for products sorted by categoryAn engineer loads product photos from folders named after each category.
Machine learningML engineersPrepare a labelled collection for a nearest neighbour testAn engineer loads one folder for each class and tests a classifier on the points.
ResearchAnalystsKeep an image dataset in a vector database to search it by meaningAn analyst keeps the photos and their folder names together in one collection.

You need some n8n and a little cloud know-how: three credentials, a public bucket and a Qdrant cluster.

Where to use it

Any n8n that can reach Qdrant, Voyage AI and Google Cloud Storage will run it. Qdrant can be a Cloud cluster or a server of your own.

  • n8n Cloud: import the file into a new workflow there
  • Your own n8n server: the same file and steps
  • Qdrant Cloud or your own Qdrant: the collection that holds the vectors
  • Another bucket or folder: change the bucket name and the prefix to load a different image set

Setup

Download saves a zip with workflow.json and Mindket’s setup notes in your downloads folder. Four accounts are involved.

What you need first
NeedDetail
n8nOn n8n Cloud or on a server of your own
QdrantA cluster with its address and an API key, saved in a Qdrant API credential
Voyage AIAn API key, saved in a Header Auth credential named Authorization with the value Bearer and your key
Google Cloud StorageA bucket with public pictures sorted in folders by class, and a Google Cloud Storage credential
  1. In n8n, create a workflow, open its menu, choose Import from File and pick workflow.json.
  2. Add the Qdrant API credential and select it in the four nodes that call Qdrant: Check Qdrant Collection Existence, Create Qdrant Collection, Payload index on crop_name and Batch Upload to Qdrant.
  3. Add the Voyage Header Auth credential and select it in Embed crop image.
  4. Add a Google Cloud Storage credential. Select it in Google Cloud Storage, replace <YOUR_BUCKET_NAME> with your bucket and set prefix to the folder that holds the class folders.
  5. Open Qdrant cluster variables and replace <YOUR_QDRANT_CLUSTER_URL> with your cluster address. Check the collection name, the batch size of 4 and the vector size of 1024.
  6. Look at Filtering out tomato to test anomalies. It skips the tomato folder on purpose, so delete or edit it if you want every class.
  7. Press Execute workflow.

How to use it

Press Execute workflow. The run creates the collection when it is missing, lists the bucket, embeds the photos in batches and saves them. Run it once for each collection, because a second run saves every photo again.

What to change for a different result
To changeWhere
The bucket and the folderbucketName and prefix in Google Cloud Storage
The collection, the batch size and the vector sizeThe values in Qdrant cluster variables
The folders that are skippedThe condition in Filtering out tomato to test anomalies
The fields saved with each photobatchPayloadQdrant in Batches in the API's format
The embedding modelmodel in Embed crop image, with the vector size to match

Example

A bucket holds agricultural-crops/cucumber/ and agricultural-crops/wheat/ with a few photos in each, and a tomato folder.

The run skips the tomato photos. Every other photo becomes a point in the collection with the vector voyage, a crop_name such as cucumber and an image_path that links to the photo.

For newcomers and experts

If you are new. n8n draws a workflow as boxes joined by lines, and each box, a node, does one job. This one has two stages. The first prepares the Qdrant collection. The second turns the photos into vectors and saves them. Try it on a bucket with ten photos first.

For experts. Qdrant and Voyage are called with plain HTTP Request nodes, so the named vector voyage and the batch point format stay in your hands.

Where to look closer
NodeWhat it doesWhat to know
Check Qdrant Collection ExistenceAsks Qdrant whether the collection existsIf collection exists reads result.exists
Create Qdrant CollectionMakes the collection with one named vector, Cosine distanceThe vector size has to match the model, 1024 for the file’s model
Payload index on crop_nameAdds a keyword index on crop_nameCounting the photos of each crop later needs this index
Batch Upload to QdrantSaves ids, vectors and payloads in the batch formatThe ids are the UUIDs made in the Code node

Good to know

The batching step was rewritten in JavaScript, and a second run saves every photo again.

  • Code: the original batching step was a Python Code node. In n8n 2, native Python has no _input and blocks standard library imports such as uuid unless the instance allows them (n8n’s docs, read on 12 November 2026). Mindket’s copy does the same job in JavaScript
  • Second runs: the UUIDs are random on every run, so a second run adds every photo again as new points
  • Public photos: Voyage fetches each picture from its address. Its docs, read on 12 November 2026, allow PNG, JPEG, WEBP and GIF up to 20 MB and 16 million pixels
  • Model: the file uses voyage-multimodal-3, which those docs still list as a recommended model
  • Calls: with the batch size of 4, one hundred photos make 25 calls to Voyage and 25 to Qdrant
  • Your data: the photo addresses go to Voyage, and the addresses and crop names go to Qdrant. The file holds no credential

README and files

README

Crop photos embedded with Voyage and saved to Qdrant

An n8n workflow you start by hand. It lists the crop photos in a Google Cloud Storage bucket, turns each one into an embedding with Voyage AI and saves the vectors in a Qdrant collection, four photos at a time.

What is inside

  • workflow.json: the workflow as n8n exports it, twenty-five nodes. Thirteen do the work and twelve are sticky notes that explain the steps. It holds no credential.
  • README.md: these notes.

What we changed from the original copy

  • The step that splits the photos into batches and gives each one a UUID was a Python Code node. In n8n 2, native Python offers only _items and _item, has no _input, and blocks standard library imports such as uuid unless the instance allows them (n8n's docs, read on 12 November 2026). Mindket's copy does the same job in JavaScript.
  • The Qdrant cluster address and the bucket name belonged to the original author. They are now the placeholders <YOUR_QDRANT_CLUSTER_URL> and <YOUR_BUCKET_NAME>.
  • Several nodes were linked to credentials in the author's n8n. The links are gone, so select your own.
  • Nothing else. The tomato filter, the batch size and the sticky notes are the file's own.

Before you start

  • An n8n instance, on n8n Cloud or your own server.
  • A Qdrant cluster, on Qdrant Cloud or your own server, with its address and an API key.
  • A Voyage AI API key.
  • A Google Cloud Storage bucket whose pictures anyone can read without signing in, sorted in folders by class, such as agricultural-crops/cucumber/photo-1.jpg. Voyage downloads every picture from its address.

Set it up

  1. In n8n, create a workflow, open its menu and choose Import from File. Pick workflow.json.
  2. Add a Qdrant API credential with your cluster address and key. Select it in Check Qdrant Collection Existence, Create Qdrant Collection, Payload index on crop_name and Batch Upload to Qdrant.
  3. Add a Header Auth credential for Voyage. Name it Authorization and give it the value Bearer <YOUR_VOYAGE_KEY> with your own key. Select it in Embed crop image.
  4. Add a Google Cloud Storage credential and select it in Google Cloud Storage.
  5. In that node, replace <YOUR_BUCKET_NAME> with your bucket. Set prefix to the folder that holds the class folders. The file uses agricultural-crops.
  6. Open Qdrant cluster variables and replace <YOUR_QDRANT_CLUSTER_URL> with your cluster address, with https:// in front and no slash at the end. Check the collection name, the batch size of 4 and the vector size of 1024.
  7. Look at Filtering out tomato to test anomalies. It skips the tomato folder on purpose. Delete the node or edit it if you want every class.
  8. Press Execute workflow.

How a run goes

  1. The manual trigger starts the run when you press Execute workflow, and Qdrant cluster variables sets the cluster address, the collection name, the vector size and the batch size.
  2. Check Qdrant Collection Existence (HTTP Request 4.2) asks Qdrant whether the collection exists, and If collection exists reads the answer.
  3. If it does not exist, Create Qdrant Collection makes it with one named vector, voyage, compared by Cosine distance. Payload index on crop_name then adds a keyword index on the crop_name field.
  4. Google Cloud Storage lists every object under the prefix. Get fields for Qdrant builds a publicLink for each photo and takes the cropName from the folder that holds it.
  5. Filtering out tomato to test anomalies drops the tomato photos.
  6. A Code node groups the photos into batches of batchSize and gives each photo a UUID, because Qdrant does not make point ids. Batches in the API's format reshapes each batch for Voyage and for Qdrant.
  7. Embed crop image sends a batch to Voyage's multimodal embeddings API with the model voyage-multimodal-3 and input_type set to document. Batch Upload to Qdrant saves the batch with its ids, vectors and payloads.

Change the result

  • Bucket and folder: bucketName and prefix in Google Cloud Storage.
  • Collection, batch size and vector size: the values in Qdrant cluster variables.
  • Skipped folders: the condition in Filtering out tomato to test anomalies.
  • Fields saved with each photo: batchPayloadQdrant in Batches in the API's format.
  • Embedding model: model in Embed crop image. Change the vector size to match and use a new collection.

Good to know

  • Run it once for each collection. The UUIDs are random on every run, so a second run saves every photo again as new points.
  • Voyage fetches each picture from its address, so the files must be public. Voyage's docs, read on 12 November 2026, say a picture must be a PNG, JPEG, WEBP or GIF, at most 20 MB and 16 million pixels. Its address must also answer with a content length and respect robots.txt.
  • The file uses voyage-multimodal-3, which those docs still list as a recommended model.
  • With the batch size of 4, one hundred photos make 25 calls to Voyage and 25 to Qdrant.
  • Voyage bills the embeddings to your key, and Qdrant keeps the vectors in your cluster.
  • The public address of each photo goes to Voyage, and the address and crop name go to Qdrant.
  • The file holds no credential and no key.
Files
NOTICE.md  749 B
README.md  5 KB
workflow.json  22 KB

3 files, 27 KB, downloaded as a zip.

What’s new

  • Version 1 · 2026-11-12

Reviews

No ratings yet

Write a review

No reviews yet.

More from Mindket

See all from Mindket

Huashu Design

alchaincyf · Skill

Turns a one-line request in your AI agent into a finished design: a launch animation, a clickable app prototype, an editable slide deck, an infographic or a se…

New29.4k

Guizang PPT Skill

op7418 · Skill

Skill that makes single-file HTML slide decks, slide illustrations and platform covers in two visual styles, with a presenter mode for rehearsal. For speakers…

New29.8k

Claude Code Skills & Plugins

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…

New29.8k

Similar in Developer

See all in Developer

buzz

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…

New37.3k

plannotator

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.

New10.5k

open-code-review

alibaba · Kit

Reviews Git changes with an AI agent that reads files and searches the codebase, then writes comments tied to exact lines. It suits developers who want automat…

New50.7k