> ## Documentation Index
> Fetch the complete documentation index at: https://docs.pixeltable.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Find similar images with CLIP

> Find visually similar images in Pixeltable using CLIP and other vision embeddings with similarity search over indexed image columns.

<a href="https://kaggle.com/kernels/welcome?src=https://github.com/pixeltable/pixeltable/blob/release/docs/release/howto/cookbooks/search/search-similar-images.ipynb" id="openKaggle" target="_blank" rel="noopener noreferrer"><img src="https://kaggle.com/static/images/open-in-kaggle.svg" alt="Open in Kaggle" style={{ display: 'inline', margin: '0px' }} noZoom /></a>  <a href="https://colab.research.google.com/github/pixeltable/pixeltable/blob/release/docs/release/howto/cookbooks/search/search-similar-images.ipynb" id="openColab" target="_blank" rel="noopener noreferrer"><img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open in Colab" style={{ display: 'inline', margin: '0px' }} noZoom /></a>  <a href="https://raw.githubusercontent.com/pixeltable/pixeltable/refs/tags/release/docs/release/howto/cookbooks/search/search-similar-images.ipynb" id="downloadNotebook" target="_blank" rel="noopener noreferrer"><img src="https://img.shields.io/badge/%E2%AC%87-Download%20Notebook-blue" alt="Download Notebook" style={{ display: 'inline', margin: '0px' }} noZoom /></a>

<Tip>This documentation page is also available as an interactive notebook. You can launch the notebook in
Kaggle or Colab, or download it for use with an IDE or local Jupyter installation, by clicking one of the
above links.</Tip>

export const quartoRawHtml = [`
<table>
<thead>
<tr>
<th>Query</th>
<th>Expected matches</th>
</tr>
</thead>
<tbody>
<tr>
<td style="vertical-align: middle;">sunset photo</td>
<td style="vertical-align: middle;">Other sunset/beach images</td>
</tr>
<tr>
<td style="vertical-align: middle;">product image</td>
<td style="vertical-align: middle;">Similar products</td>
</tr>
<tr>
<td style="vertical-align: middle;">user upload</td>
<td style="vertical-align: middle;">Matching content in library</td>
</tr>
</tbody>
</table>
`, `
<table class="dataframe" data-quarto-postprocess="true" data-border="1">
<colgroup>
<col style="width: 50%" />
<col style="width: 50%" />
</colgroup>
<thead>
<tr style="text-align: right;">
<th data-quarto-table-cell-role="th">image</th>
<th data-quarto-table-cell-role="th">score</th>
</tr>
</thead>
<tbody>
<tr>
<td style="vertical-align: middle;"><div class="pxt_image" style="width:240px;">
<img
src="data:image/webp;base64,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"
width="240" />
</div></td>
<td style="vertical-align: middle;">0.213</td>
</tr>
<tr>
<td style="vertical-align: middle;"><div class="pxt_image" style="width:240px;">
<img
src="data:image/webp;base64,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"
width="240" />
</div></td>
<td style="vertical-align: middle;">0.208</td>
</tr>
</tbody>
</table>
`, `
<table>
<thead>
<tr>
<th>Parameter</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td style="vertical-align: middle;"><code>image_embed</code></td>
<td style="vertical-align: middle;">Model for embedding images</td>
</tr>
<tr>
<td style="vertical-align: middle;"><code>string_embed</code></td>
<td style="vertical-align: middle;">Model for embedding text queries</td>
</tr>
</tbody>
</table>
`];

Build visual similarity search to find images that look alike using
OpenAI’s CLIP model.

## Problem

You have a collection of images and need to find visually similar
ones—for duplicate detection, content recommendations, or visual search.

<div style={{ 'margin': '0px 20px 0px 20px' }} dangerouslySetInnerHTML={{ __html: quartoRawHtml[0] }} />

## Solution

**What’s in this recipe:**

* Create image embeddings with CLIP
* Search by image similarity
* Search by text description (cross-modal)

You add an embedding index using CLIP, which understands both images and
text. This enables finding similar images or searching images by text
description.

### Setup

```python theme={"theme":{"light":"light-plus","dark":"dark-plus"}}
%pip install -qU pixeltable sentence-transformers torch
```

### Load images

```python theme={"theme":{"light":"light-plus","dark":"dark-plus"}}
import pixeltable as pxt
from pixeltable.functions.huggingface import clip

# Create a fresh directory
pxt.drop_dir('image_search_demo', force=True)
pxt.create_dir('image_search_demo')
```

<pre style={{ 'margin': '-20px 20px 0px 20px', 'padding': '0px', 'background-color': 'transparent', 'color': 'black' }}>
  Connected to Pixeltable database at: postgresql+psycopg://postgres:@/pixeltable?host=/Users/pjlb/.pixeltable/pgdata
  Created directory 'image\_search\_demo'.
  \<pixeltable.catalog.dir.Dir at 0x13ca93c50>
</pre>

```python theme={"theme":{"light":"light-plus","dark":"dark-plus"}}
images = pxt.create_table(
    'image_search_demo/images', {'image': pxt.Image}
)
```

<pre style={{ 'margin': '-20px 20px 0px 20px', 'padding': '0px', 'background-color': 'transparent', 'color': 'black' }}>
  Created table 'images'.
</pre>

```python theme={"theme":{"light":"light-plus","dark":"dark-plus"}}
# Insert sample images
images.insert(
    [
        {
            'image': 'https://raw.githubusercontent.com/pixeltable/pixeltable/main/docs/resources/images/000000000036.jpg'
        },
        {
            'image': 'https://raw.githubusercontent.com/pixeltable/pixeltable/main/docs/resources/images/000000000090.jpg'
        },
        {
            'image': 'https://raw.githubusercontent.com/pixeltable/pixeltable/main/docs/resources/images/000000000106.jpg'
        },
        {
            'image': 'https://raw.githubusercontent.com/pixeltable/pixeltable/main/docs/resources/images/000000000139.jpg'
        },
    ]
)
```

<pre style={{ 'margin': '-20px 20px 0px 20px', 'padding': '0px', 'background-color': 'transparent', 'color': 'black' }}>
  Inserting rows into \`images\`: 4 rows \[00:00, 973.44 rows/s]
  Inserted 4 rows with 0 errors.
  4 rows inserted, 8 values computed.
</pre>

### Create CLIP embedding index

Add an embedding index using CLIP for cross-modal search:

```python theme={"theme":{"light":"light-plus","dark":"dark-plus"}}
# Add CLIP embedding index (supports both image and text queries)
images.add_embedding_index(
    'image', embedding=clip.using(model_id='openai/clip-vit-base-patch32')
)
```

### Search by text description

Find images matching a text query:

```python theme={"theme":{"light":"light-plus","dark":"dark-plus"}}
# Search by text description
query = 'people eating food'
sim = images.image.similarity(string=query)

results = (
    images.order_by(sim, asc=False)
    .select(images.image, score=sim)
    .limit(2)
)
results.collect()
```

<div style={{ 'margin': '0px 20px 0px 20px' }} dangerouslySetInnerHTML={{ __html: quartoRawHtml[1] }} />

## Explanation

**Why CLIP:**

CLIP (Contrastive Language-Image Pre-training) understands both images
and text in the same embedding space. This enables:

* Image-to-image search (find similar photos)
* Text-to-image search (find photos matching a description)

**Index parameters:**

<div style={{ 'margin': '0px 20px 0px 20px' }} dangerouslySetInnerHTML={{ __html: quartoRawHtml[2] }} />

**Both must use the same model** for cross-modal search to work.

**New images are indexed automatically:**

When you insert new images, embeddings are generated without extra code.

## See also

* [Semantic text
  search](/howto/cookbooks/search/search-semantic-text)
* [Vector database
  documentation](/platform/embedding-indexes)
