LLM Guides

Build Visual Search with Image Embeddings

Aug 21, 2026

A user uploads a photo of a beige chair.

They do not know the product name.
They do not know the SKU.
They do not know the collection.
They do not know whether your catalog calls it “sand,” “cream,” “warm linen,” or “minimalist oak dining chair with upholstered seat.”

They only know one thing:

“Show me things that look like this.”

That is the whole magic of visual search.

Image embeddings help an app understand visual similarity, so it can compare images by appearance rather than relying only on filenames, tags, categories, or whatever someone typed into a product CMS three years ago during a caffeine emergency.

With Image Embeddings on LLMAPI, an app can turn images into vectors, store those vectors in a search index, and retrieve visually similar items later. That can power product matching, duplicate detection, visual recommendations, image search, moderation queues, catalog cleanup, marketplace trust workflows, and creative asset discovery.

This guide is structured differently on purpose. We’ll treat visual search like a set of product design cards: what users expect, what embeddings actually store, what the database needs, how ranking works, where LLMAPI fits, and how to keep the system from returning “technically similar but emotionally cursed” results.

First, the three visual search moments

Visual search usually starts from one of three moments.

Moment 1: “Find this exact thing”

The user has an image and wants the same item.

Examples:

  • Same shoe
  • Same chair
  • Same dress
  • Same spare part
  • Same artwork
  • Same listing photo
  • Same product from a competitor page

This is product matching.

The system needs to find near-identical or very close images.

Moment 2: “Find something like this”

The user wants visual similarity, not exact identity.

Examples:

  • Similar lamps
  • Similar outfits
  • Similar UI screenshots
  • Similar jewelry
  • Similar room styles
  • Similar packaging
  • Similar stock photos

This is visual discovery.

The system should care about style, shape, color, composition, and category.

Moment 3: “Have we seen this before?”

The app wants to detect duplicates or reused images.

Examples:

  • Marketplace duplicate listings
  • Reused profile photos
  • Duplicate product uploads
  • Fraudulent reposts
  • Same image with crop or compression
  • Asset library cleanup
  • Near-duplicate catalog items

This is deduplication.

The system should catch images that are visually almost the same, even if filenames, sizes, crops, and metadata differ.

These three moments use the same core idea: turn images into embeddings, then search by vector similarity.

What image embeddings actually give your app

An image embedding is a list of numbers that represents visual content.

That vector might encode information related to:

  • Shape
  • Color
  • Texture
  • Layout
  • Object type
  • Scene type
  • Visual style
  • Composition
  • Similarity to other images
  • Sometimes alignment with text descriptions, depending on the model

The CLIP paper, Learning Transferable Visual Models From Natural Language Supervision, showed how image and text representations can be learned together from 400 million image-text pairs, which helped popularize embedding spaces where images and text can be compared for retrieval tasks. Pinecone’s image search example also explains that CLIP can convert images into vectors that can be indexed and searched inside a vector database.

The product version of that explanation:

image
→ embedding model
→ vector
→ vector database
→ similarity search
→ visually similar results

The app no longer needs the user to describe the image perfectly.

The image becomes the query.

The visual search stack

A practical visual search system has six layers.

LayerWhat it does
Image intakeAccepts product photos, uploads, screenshots, or catalog images
Embedding generationConverts each image into a vector
Vector storageStores vectors and metadata in a searchable index
Query embeddingConverts the user’s uploaded image into a vector
Similarity searchFinds nearest vectors in the index
Ranking and filtersCombines visual similarity with business rules

A simple architecture:

catalog images
→ Image Embeddings on LLMAPI
→ vectors + metadata
→ vector database

user query image
→ Image Embeddings on LLMAPI
→ query vector
→ nearest-neighbor search
→ filtered and ranked results

LLMAPI fits at the embedding and AI workflow layer. The vector database stores and searches the vectors. Your app decides how results should be filtered, ranked, shown, and reviewed.

The data shape that keeps everything sane

Visual search gets messy when vectors are separated from useful metadata.

Do not store a vector by itself and call it a day.

A useful image record looks like this:

{
  "image_id": "img_92841",
  "item_id": "sku_4451",
  "image_url": "https://cdn.example.com/products/sku_4451_front.jpg",
  "embedding": [0.012, -0.044, 0.283],
  "metadata": {
    "title": "Linen dining chair",
    "category": "furniture",
    "subcategory": "chairs",
    "brand": "Northline",
    "color": "beige",
    "price": 149.00,
    "currency": "USD",
    "in_stock": true,
    "created_at": "2026-08-25"
  }
}

The vector helps find similar images.

The metadata helps make results useful.

Without metadata, your search might return a visually similar product that is out of stock, unavailable in the user’s country, too expensive, or from the wrong category.

Vector search gives candidates.

Product logic turns candidates into results.

Recipe card 1: product matching

The user story

A shopper uploads a photo of a sneaker and wants to find that sneaker or a very similar one in your catalog.

What the system should optimize for

  • Same object type
  • Similar shape
  • Similar color
  • Similar style
  • Similar angle when possible
  • Same brand or category when known
  • Available products first

Good result behavior

The top results should feel visually obvious.

If the query is a white running shoe, the app should not return white sandals just because they share a color.

Useful metadata filters

{
  "category": "shoes",
  "in_stock": true,
  "region": "US"
}

Ranking formula idea

final_score =
  visual_similarity * 0.70
  + category_match * 0.15
  + availability * 0.10
  + popularity * 0.05

This gives visual similarity the main role while still respecting product rules.

Where LLMAPI helps

Use Image Embeddings on LLMAPI to create vectors for product photos and the query image. Then use LLMAPI text or vision workflows after retrieval if you want product summaries, comparison blurbs, or review notes.

Example final result:

{
  "query_image_id": "upload_123",
  "results": [
    {
      "item_id": "sku_4451",
      "title": "Linen dining chair",
      "image_url": "https://cdn.example.com/products/sku_4451_front.jpg",
      "visual_similarity": 0.91,
      "reason": "Similar beige upholstery, curved back, and wooden legs."
    }
  ]
}

Recipe card 2: image deduplication

The user story

A marketplace wants to catch reused or duplicate listing images.

What the system should optimize for

  • Near-identical images
  • Cropped versions
  • Resized versions
  • Recompressed versions
  • Same photo with light edits
  • Duplicate catalog uploads
  • Reused seller images

Good result behavior

The app should flag likely duplicates for review, especially if the same image appears under different sellers, products, or accounts.

Useful metadata filters

{
  "seller_id": {
    "$ne": "current_seller"
  },
  "marketplace": "us"
}

Suggested threshold logic

SimilarityAction
0.95 to 1.00Likely duplicate
0.88 to 0.94Possible near-duplicate
0.75 to 0.87Similar, review only if risk is high
Below 0.75Usually ignore

These thresholds are placeholders. They need testing on your own image set.

Where LLMAPI helps

LLMAPI can help create embeddings for new listing images and compare them against the existing image index. It can also help generate reviewer notes after duplicate candidates are found.

Example review note:

{
  "risk_level": "medium",
  "review_reason": "The uploaded listing photo is visually similar to an existing listing from another seller. Manual review is recommended before approval."
}

Deduplication should be careful.

Two sellers can use the same manufacturer image legitimately. The business policy decides what happens next.

Recipe card 3: visual recommendations

The user story

A shopper views a product and wants similar items.

What the system should optimize for

  • Style similarity
  • Category match
  • Color family
  • Price range
  • Availability
  • Personalization
  • Diversity of results

Good result behavior

The results should feel visually related, but not boring.

If the product is a black leather handbag, returning ten nearly identical black handbags may be useful for exact comparison. For discovery, the app may need variety: similar shape, different brands, slightly different textures, nearby price points.

Ranking idea

candidate pool:
  top 200 visually similar items

rerank by:
  category match
  stock status
  price range
  user preferences
  diversity
  margin or business goals

Where LLMAPI helps

After vector retrieval, LLMAPI can help create human-readable recommendation labels:

{
  "section_title": "Similar minimalist chairs",
  "reasoning_summary": "These products share a light neutral palette, simple wooden frame, and upholstered dining-chair style."
}

Use that for UX copy, not as the only ranking signal.

Recipe card 4: image search by text

The user story

The user types “green velvet sofa with gold legs” and expects image results.

What the system should optimize for

  • Text-to-image matching
  • Visual concepts
  • Product attributes
  • Category constraints
  • Color and material terms
  • Availability and price filters

CLIP-style models can place image and text in a shared embedding space, which allows both image-to-image and text-to-image retrieval. Pinecone’s CLIP image search guide describes using CLIP for text-to-image and image-to-image search, while its broader semantic search docs describe retrieving records by dense-vector similarity.

Data flow

text query
→ text embedding in same multimodal space
→ vector search over image embeddings
→ metadata filters
→ visual results

Good result behavior

The results should satisfy the visual phrase, not only the category.

“Green velvet sofa with gold legs” should not return any green couch. It should prefer images that match color, material, object type, and leg style.

Important limitation

Compositional image-text matching is still hard. A model may understand “green sofa” and “gold legs” separately but struggle to bind every attribute correctly to the right object. Research on compositional image-text retrieval notes weaknesses in pretrained models such as CLIP when entity grounding and compositional matching are required.

So text-to-image search should include filters and reranking when details matter.

The index design board

Before building, decide how your index should work.

DecisionOptionsRecommendation
One vector per item or imageItem-level, image-levelUse image-level for visual search
Multiple images per productFront, side, detail, lifestyleEmbed each image separately
MetadataCategory, brand, price, stockStore enough for filtering
Similarity metricCosine, dot product, EuclideanMatch the embedding model’s recommendation
Update methodBatch, streaming, webhookBatch for catalog, streaming for uploads
Query typeImage, text, bothSupport both if model allows
Result groupingImage results, item resultsGroup by item to avoid duplicates
Review modeAuto, manual, hybridHybrid for risky workflows
ThresholdsStatic, per categoryTune per category where possible

For product catalogs, image-level indexing usually works better because each product can have multiple visual identities.

A chair’s front view, side view, and lifestyle scene may produce different embeddings. Indexing each image gives the system more chances to match the query.

Then group results by item_id.

The visual search API shape

A clean visual search endpoint might look like this:

POST /visual-search
Content-Type: multipart/form-data

image=<uploaded file>
category=furniture
top_k=20

Response:

{
  "query_id": "query_123",
  "results": [
    {
      "item_id": "sku_4451",
      "image_id": "img_92841",
      "title": "Linen dining chair",
      "image_url": "https://cdn.example.com/products/sku_4451_front.jpg",
      "visual_similarity": 0.91,
      "rank": 1,
      "metadata": {
        "category": "furniture",
        "subcategory": "chairs",
        "price": 149.0,
        "in_stock": true
      }
    }
  ],
  "warnings": []
}

For deduplication:

POST /images/check-duplicate
Content-Type: multipart/form-data

image=<uploaded file>

Response:

{
  "status": "possible_duplicate",
  "risk_level": "medium",
  "matches": [
    {
      "image_id": "img_11200",
      "item_id": "listing_4482",
      "similarity": 0.93,
      "relationship": "near_duplicate"
    }
  ],
  "recommended_action": "manual_review"
}

Different workflow, same embedding engine.

The vector database role

Image embeddings need somewhere to live.

A vector database or vector search index stores vectors and finds nearest neighbors efficiently.

Pinecone describes semantic search as nearest neighbor or vector search, where records are retrieved by similarity to a query vector. Its docs also explain that embedding models can be external or integrated into the index.

Common vector database options include:

OptionGood for
PineconeManaged vector search and production scaling
MilvusOpen-source or self-managed vector search
WeaviateVector search with schema and hybrid options
QdrantVector search with filtering and payloads
FAISSLocal or self-managed similarity search
Elasticsearch/OpenSearch vector searchTeams already using search infrastructure
PostgreSQL with pgvectorSmaller systems or teams wanting SQL-native storage

Pick based on:

  • Catalog size
  • Update frequency
  • Query volume
  • Metadata filtering needs
  • Team infrastructure skill
  • Latency requirements
  • Cloud preference
  • Cost
  • Compliance requirements

For a small prototype, FAISS or pgvector can be enough.

For a production marketplace or catalog with millions of images, use a proper vector database.

Similarity alone can get weird

Visual similarity is useful, but raw similarity can produce odd results.

Example: a query image shows a white sneaker on a gray background.

Raw vector search might return:

  • White sneakers
  • White sandals
  • Gray product photos
  • White handbags with similar studio lighting
  • Cropped product shots with the same composition

The system may be visually correct in some abstract way while feeling wrong to the user.

That is why ranking needs filters.

Use:

FilterWhy
CategoryPrevents chairs from matching sofas when category is known
AvailabilityRemoves out-of-stock items
RegionShows products the user can buy
Price rangeKeeps results realistic
BrandUseful for exact matching
ColorHelpful for fashion and furniture
Aspect or view typeProduct image vs lifestyle scene
Safety flagsAvoids showing blocked content
User permissionsPrevents private asset leakage

A good result is a combination of visual similarity and product sense.

Multimodal search needs extra planning

Visual search gets more powerful when users can search with both image and text.

Example queries:

Show me chairs like this but darker.
Find similar dresses, but no sleeves.
Search this screenshot for dashboards with a similar layout.
Find this lamp shape in brass.

This requires combining visual and text signals.

Possible approaches:

ApproachHow it works
Image onlyQuery image embedding searches image index
Text onlyText embedding searches image index
Image plus filtersImage search plus structured filters
Image plus text rerankImage results are reranked using text condition
Combined embeddingImage and text are embedded in shared space, if model supports it
Two-stage retrievalVisual retrieval first, then LLM or reranker checks the text requirement

The safest production approach is often two-stage retrieval.

image query
→ retrieve visually similar candidates
→ apply metadata filters
→ rerank with text condition
→ return final results

This avoids expecting one embedding to understand every subtle instruction perfectly.

Product matching vs aesthetic similarity

These two get confused all the time.

Product matching asks:

Is this the same or very similar item?

Aesthetic similarity asks:

Does this look like the same style?

Different ranking rules.

Use caseSimilarity should care about
Exact product matchObject identity, shape, brand, details
Similar productShape, category, color, attributes
Style recommendationMood, material, aesthetic, visual cluster
DeduplicationNear-identical pixel or semantic similarity
Asset searchComposition, subject, theme
UI screenshot searchLayout, components, visual structure
Marketplace trustReuse, manipulation, listing similarity

Do not use one threshold for all of these.

A score of 0.86 might be a great style match and a weak duplicate match.

Context decides what the number means.

Batch indexing workflow

Catalog indexing usually runs as a batch job.

load product images
→ resize or normalize if needed
→ send images to Image Embeddings on LLMAPI
→ store vector + metadata
→ mark item indexed
→ log failures

Useful batch fields:

{
  "batch_id": "batch_2026_08_25",
  "image_id": "img_92841",
  "item_id": "sku_4451",
  "status": "indexed",
  "embedding_model": "image-embedding-model",
  "vector_database": "products_visual_index",
  "created_at": "2026-08-25T00:45:00-05:00"
}

Track failures:

{
  "image_id": "img_92842",
  "status": "failed",
  "reason": "image_url_unreachable"
}

Do not silently skip failed images.

A catalog with missing embeddings creates confusing search gaps.

Real-time upload workflow

For marketplaces, moderation queues, profile images, and user-uploaded assets, indexing may happen immediately.

user uploads image
→ validate file
→ generate embedding
→ search for duplicates or similar risky images
→ store embedding
→ continue, warn, or review

Useful checks before embedding:

  • File type
  • File size
  • Image dimensions
  • Corrupt file detection
  • NSFW or policy checks where relevant
  • Virus scan for uploaded files
  • EXIF privacy handling
  • Duplicate hash check
  • User permission check

Embeddings should not replace basic file validation.

They solve visual similarity.

They do not solve every upload problem.

The review queue pattern

For deduplication and trust workflows, use a review queue.

Example:

{
  "review_id": "rev_123",
  "upload_image_id": "img_new_884",
  "risk_type": "possible_duplicate",
  "risk_level": "medium",
  "matches": [
    {
      "image_id": "img_existing_114",
      "similarity": 0.94,
      "item_id": "listing_9001"
    }
  ],
  "recommended_action": "review"
}

Reviewer actions:

ActionMeaning
ApproveImage is acceptable
MergeDuplicate product or asset
RejectPolicy violation or bad upload
Ask for new imageImage is unclear or suspicious
EscalateNeeds fraud, compliance, or catalog review
Ignore matchSimilarity is harmless

This is especially useful when visual similarity affects users, sellers, creators, or accounts.

A high similarity score should not automatically punish someone.

Where LLMAPI helps beyond embeddings

Image embeddings are the retrieval layer.

LLMAPI can also support the surrounding workflow.

NeedLLMAPI role
Embedding generationConvert images into vectors
Result explanationCreate short “why this matched” notes
Product copySummarize similar products
Review notesExplain duplicate or risk signals
Category cleanupNormalize product categories after retrieval
Query rewritingTurn vague text into search constraints
Multimodal reasoningCompare image result candidates with text requirements
Batch summariesSummarize clusters of similar images
Support workflowsExplain why an upload was flagged
Catalog QAFind inconsistent titles or tags among similar images

Example explanation:

{
  "match_reason": "Both images show a light upholstered dining chair with rounded back support and natural wood legs."
}

Use explanations as UX support.

Keep the actual ranking tied to measurable signals.

The “looks similar” problem

Users say “similar,” but they mean different things.

A fashion shopper may mean:

  • Same color
  • Same silhouette
  • Same vibe
  • Same occasion
  • Same material
  • Same price range

A spare-parts user may mean:

  • Same shape
  • Same connector
  • Same dimensions
  • Same function
  • Same model compatibility

A designer may mean:

  • Similar composition
  • Similar mood
  • Similar layout
  • Similar palette
  • Similar typography

A marketplace risk team may mean:

  • Same image reused
  • Same product photo stolen
  • Same seller pattern
  • Same fake listing style

So ask: similar for what?

Your product should encode that answer into ranking.

Evaluation set: the part teams skip and then regret

Visual search needs evaluation.

Do not judge it only by trying five cute examples.

Build a test set.

Example:

[
  {
    "query_image_id": "query_chair_001",
    "expected_item_ids": ["sku_4451", "sku_4452"],
    "task": "similar_product"
  },
  {
    "query_image_id": "query_duplicate_014",
    "expected_image_ids": ["img_8841"],
    "task": "duplicate_detection"
  },
  {
    "query_text": "green velvet sofa with gold legs",
    "expected_item_ids": ["sku_7821", "sku_7822"],
    "task": "text_to_image"
  }
]

Track metrics:

MetricWhy
Recall@KDid the right item appear in top K?
Precision@KWere top results actually useful?
Mean reciprocal rankDid the best result appear high?
Duplicate detection precisionAre flagged duplicates real duplicates?
Duplicate detection recallAre real duplicates being missed?
Click-through rateDo users engage with results?
Add-to-cart rateDoes search produce business value?
Manual review accuracyAre reviewers confirming flags?
False positive rateAre harmless images flagged?
LatencyIs search fast enough?

For image retrieval, research continues to refine embedding models because different retrieval tasks can behave differently. A 2024 paper on optimizing CLIP models for image retrieval notes the challenge of improving image-based similarity search while preserving text-to-image retrieval capabilities.

That is a useful reminder.

Your own data matters.

Common failure patterns

FailureWhat it looks likeFix
Color overmatchingAll beige things match all beige thingsAdd category filters
Background matchingStudio background dominates resultsCrop or detect object region
Category driftShoes match bags by textureFilter or rerank by category
Duplicate floodingSame product appears ten timesGroup by item ID
Trend collapsePopular style dominates all resultsAdd diversity
Poor text-image binding“red bag with gold chain” returns red items without chainAdd reranking
Out-of-stock resultsSimilar but unavailable items appear firstFilter stock
Bad catalog tagsMetadata filters remove good itemsClean catalog data
High false positives in dedupeSimilar stock photos flaggedAdjust thresholds by category
Slow query timeIndex too large or unoptimizedUse vector DB tuning and caching

Visual search quality is rarely fixed by embeddings alone.

Most improvements come from ranking, filters, data cleanup, and evaluation.

Privacy and policy notes

Image embeddings may still be sensitive.

Even if the vector is not the original image, it can represent visual content and should be treated carefully, especially for:

  • Faces
  • Identity documents
  • Private photos
  • Medical images
  • Home interiors
  • Workplace images
  • Children’s images
  • Sensitive locations
  • User-generated content
  • Regulated workflows

Good practices:

  • Explain why image search is used.
  • Store only images and embeddings you need.
  • Restrict access to private image indexes.
  • Separate public catalog indexes from user-private indexes.
  • Apply retention rules.
  • Avoid using private uploads to improve public search without permission.
  • Log access to sensitive image records.
  • Do not expose raw nearest-neighbor results across tenants.
  • Add human review for high-risk matching decisions.
  • Delete embeddings when the source image must be deleted.

A visual search system can leak information if permissions are weak.

Always filter by what the user is allowed to see before showing results.

Security pattern: never search the wrong index

For multi-tenant apps, index boundaries matter.

Bad pattern:

query image
→ search every company’s image index
→ filter after retrieval

Better pattern:

query image
→ determine allowed workspace/customer scope
→ search only allowed index or apply strict metadata filter
→ return authorized results

Search should happen inside the permission boundary.

Do not rely on the UI to hide unauthorized results.

Practical launch checklist

Before shipping visual search, check:

  • Images are embedded consistently.
  • Each vector has metadata.
  • Query images use the same embedding model.
  • Vector dimensions match the index.
  • Metadata filters work.
  • Results are grouped by product or asset when needed.
  • Duplicate thresholds are tested.
  • Category-specific thresholds are considered.
  • Private images are permission-scoped.
  • Failed indexing jobs are visible.
  • Results have fallback behavior.
  • Users can report bad matches.
  • Evaluation metrics are tracked.
  • Review queues exist for high-risk decisions.
  • Deletion removes both image and embedding.
  • Cost and latency are monitored.
  • Model version is logged.

That checklist is less exciting than a demo, but it is what keeps the feature alive after launch.

What visual search feels like when it works

A good visual search feature feels almost unfairly simple.

The user uploads a chair and gets chairs that look right.
A seller uploads a duplicate listing photo and the review system catches it.
A designer searches an asset library by mood instead of filename.
A marketplace groups near-identical products without manually comparing thumbnails.
A shopper types “black ceramic lamp with round shade” and sees products that actually match the phrase.

Under the hood, there is a whole pipeline:

image embeddings
→ vector search
→ metadata filters
→ ranking logic
→ review rules
→ UX copy
→ monitoring

The user only sees the nice part.

That is the goal.

Final notes for builders

Image Embeddings on LLMAPI can make visual search much less painful because your app can compare images by visual meaning instead of relying only on titles, tags, filenames, or manually written descriptions.

Use embeddings for the candidate search. Use metadata for filters. Use ranking rules for product sense. Use review queues when similarity affects trust, sellers, accounts, or compliance. Use LLMAPI around the workflow for explanations, summaries, query help, and reviewer notes.

The most important design question is simple:

What does “similar” mean in this product?

For shopping, it may mean style.
For deduplication, it may mean near-identical.
For asset search, it may mean composition.
For trust and safety, it may mean suspicious reuse.

Answer that first, then build the embedding system around it.

That is how visual search becomes useful instead of just impressive.

Deploy in minutes