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

# Image Search

> Find visually similar moments using a reference image instead of words.

Provide a reference image and Pureframe AI finds frames that look like it — useful when you have an example of what you're looking for but no good words to describe it.

```bash theme={null}
curl -X POST https://api.pureframe.ai/v1/search \
  -H "Authorization: Bearer pf_..." \
  -F "image=@reference.jpg"
```

Or supply a public URL instead of uploading a file:

```bash theme={null}
curl -X POST https://api.pureframe.ai/v1/search \
  -H "Authorization: Bearer pf_..." \
  -F "image_url=https://example.com/reference.jpg"
```

Send either `image` or `image_url`, never both. Unlike text search, `collection_id` is optional — omitting it searches your entire library.

## Constraints

* Max file size: 10 MB
* Minimum dimensions: 64×64 pixels — smaller images are rejected as too low-quality to match reliably
* `image_url` is fetched server-side with SSRF protection; URLs resolving to private, loopback, or link-local addresses are rejected

## What it matches

Image search operates on visual content only (`type: "frame"` segments) — a static image has no transcript to compare against. If you combine `image` with a text `query` in the same request, the image is treated as primary and the text is used to re-rank: results are 60% image similarity, 40% text similarity.

```bash theme={null}
curl -X POST https://api.pureframe.ai/v1/search \
  -H "Authorization: Bearer pf_..." \
  -F "image=@product-shot.jpg" \
  -F "query=on a store shelf" \
  -F "collection_id=col_abc123"
```

## Combining with text-derived filters

You can still pass `labels` alongside an image query to restrict matches to frames with specific auto-detected scene labels — see [Combined Queries](/search/combined-queries).
