Search with natural language
Default photo search is live on Voyage:voyage-multimodal-3.5 embeds each indexed image together with its caption into a 1,024-dimensional vector. At query time, semantic retrieval and caption keyword matching select candidates, then rerank-3 ranks their text for the query. The launch index contains 1,852,370 captioned images, including stock photography and specialist sources.
Describe what matters for your use: subject, recognizable names, visible text, era, aesthetic, mood, lighting, composition, or space for a headline. Captions improve retrieval but can contain mistakes; inspect the image and its source when exact identification matters.
query_id, results, backend, mode, ranking, reranked, pool_size, latency_ms, and timing_ms. Each result includes an asset ID, file URLs, dimensions, source, license information, and attribution. A normal Voyage search reports backend: "voyage" and ranking: "text". Use the API reference for field shapes.
Search latency excludes downloading and rendering result images. Provider and network conditions vary; there is no fixed latency guarantee.
Modes
All search modes use the same Voyage index. Old
mode:visual requests are accepted as auto; rerank_text is retained for compatibility but no longer changes the backend. Graphics-related queries search the current captioned collection, without switching to the old index.
Request controls
The playground exposes the same modes, but may choose a larger result/rerank count for its grid.
/v1/health reports API defaults. Start with defaults; increase candidate counts only when useful for your queries.
Defaults you get without asking
Three filters are applied whenever you leave them out, because most callers want them and forgetting them produced the worst results in our own evaluations:
To opt out of a default, send the key with
null: {"filters": {"ai_generated": null}} removes the AI-generation restriction; it does not add assets outside the current index. Every result carries ai_generated so you can badge it.
Results are also de-duplicated: when the same file is indexed under two sources (a Flickr photo also collected by a second Flickr crawl, or a CC0 stock image mirrored on two stock sites) only the highest-ranked copy is shown.
Filters
Filters constrain retrieval before ranking. Omitted default filters still apply as described above. The playground lists the 17 sources present in the current captioned index. Its “Any size” selection explicitly removes the width minimum, and unchecking “Commercial use only” includes noncommercial licenses. The explicit-content control usesnsfw_max:0.2; turning it off sends null. Unknown scores remain eligible. Color treatment uses measured metadata; records without that metadata are excluded when a specific treatment is selected.
Format matching accepts case and extension aliases such as JPEG, jpeg, and jpg. Image format refers to the indexed original, not necessarily the thumbnail format.
Search with an image
Use the same/v1/search endpoint for image-only or image-plus-text search. Supply at least text or one image. Uploaded/reference images are query inputs; they are not added to the searchable collection.
Public image URL plus text:
query for image-only search. For local files, send image_base64 as raw base64 or a data URL instead of image_url:
image_base64 and image_url fields through search_images; reconnect clients to refresh tool schemas.
Responses identify query_type as text, image, or image_text. In auto mode, image-only returns ranking:image without text reranking. Image-plus-text returns ranking:multimodal: reciprocal-rank fusion gives joint-embedding similarity 65% weight and caption text ranking 35%. These are rank scores, not probabilities. Added text steers retrieval; this does not edit or generate an image, or guarantee exact constraints. mode:text forces text ranking, and mode:none skips reranking. A reranker failure returns an explicitly degraded response.
Raw query images and source URLs are not persisted in search logs. Search logs retain the query text, query type and a fingerprint of the normalized image; query embeddings may be cached for up to one hour.
Similar images
Use/v1/similar for an existing indexed asset ID. Use /v1/search above for a new image upload:
Files and rights
GET /v1/asset/{asset_id} returns metadata and file URLs. Use the returned thumb or file URL to fetch an image; delivery is separate from the search request. URLs include the query ID so downloads can be attributed to their search. Existing legacy asset links remain supported.
Licenses and permission flags come from source metadata. A caption is not proof of identity, permission, or a model/property release. See Rights answers.
Readiness and errors
Default Voyage photo search does not start a Lightdrift GPU.GET /v1/warm reports the selected backend, configuration readiness, and recent provider successes; key presence is not proof that a fresh provider request will succeed. GET /v1/health?deep=true checks database/index connectivity. Actual searches are the end-to-end availability check.
Search no longer uses the legacy GPU service. Temporary Voyage provider failures return an availability error; retry according to Retry-After.
A successful response can include
degraded: "reranker unavailable; lane-order results". It contains retrieval-order results, with null rerank scores, and is still a successful billed search. Inspect this field if reranked ordering is essential.
Send a stable Idempotency-Key for retries of the same logical request to avoid duplicate search charges. Do not reuse it for different queries.