Skip to main content
Go to documentation:
⌘U
Weaviate Database

Develop AI applications using Weaviate's APIs and tools

Deploy

Deploy, configure, and maintain Weaviate Database

Weaviate Agents

Build and deploy intelligent agents with Weaviate

Weaviate Cloud

Manage and scale Weaviate in the cloud

Additional resources

Integrations
Contributor guide
Events & Workshops
Weaviate Academy

Need help?

Weaviate LogoAsk AI Assistant⌘K
Community Forum

Multimedia search

Multimedia search uses images, video, audio and other multimedia formats as a search input to perform vector similarity search via the near_media operator.

Image search

For image-only search using near_image, see the dedicated Image search page. The near_media operator shown here provides a unified interface for multiple media types.

How to configure Weaviate to use multimedia search?

Configure multimedia search

To use images, video, or audio as search inputs, configure a multi-modal vectorizer integration that supports these media types for your collection.

For example, Google's multi2vec-google with the gemini-embedding-2-preview model supports image, video, and audio inputs. See the model provider integrations page for available options.

Collection configuration

The collection must be configured with the appropriate media fields. For example:

from weaviate.classes.config import Configure, Property, DataType

client.collections.delete("MediaExample")
client.collections.create(
name="MediaExample",
properties=[
Property(name="title", data_type=DataType.TEXT),
Property(name="mediaType", data_type=DataType.TEXT),
],
vector_config=Configure.Vectors.multi2vec_google_gemini(
model="gemini-embedding-2-preview",
text_fields=["title"],
# video_fields=["video"],
# image_fields=["image"],
),
)

By local file path

Use the near_media operator to search by providing a file path to a video.

py docs  API docs
More infoCode snippets in the documentation reflect the latest client library and Weaviate Database version. Check the Release notes for specific versions.

If a snippet doesn't work or you have feedback, please open a GitHub issue.
from pathlib import Path

from weaviate.classes.query import NearMediaType


collection = client.collections.use("MediaExample")

response = collection.query.near_media(
media=Path("./videos/dog.mp4"),
media_type=NearMediaType.VIDEO,
return_properties=["title", "mediaType"],
limit=5,
)

for obj in response.objects:
print(obj.properties)

By base64 representation

You can also provide a base64-encoded video string:

py docs  API docs
More infoCode snippets in the documentation reflect the latest client library and Weaviate Database version. Check the Release notes for specific versions.

If a snippet doesn't work or you have feedback, please open a GitHub issue.
import base64
from weaviate.classes.query import NearMediaType

with open("./videos/butterfly.mp4", "rb") as f:
video_base64 = base64.b64encode(f.read()).decode("utf-8")

collection = client.collections.use("MediaExample")

response = collection.query.near_media(
media=video_base64,
media_type=NearMediaType.VIDEO,
return_properties=["title", "mediaType"],
limit=5,
)

for obj in response.objects:
print(obj.properties)

Set a maximum distance

Set a maximum distance to filter results and return the distance metadata:

py docs  API docs
More infoCode snippets in the documentation reflect the latest client library and Weaviate Database version. Check the Release notes for specific versions.

If a snippet doesn't work or you have feedback, please open a GitHub issue.
import base64
from weaviate.classes.query import MetadataQuery, NearMediaType

with open("./videos/cat.mp4", "rb") as f:
video_base64 = base64.b64encode(f.read()).decode("utf-8")

collection = client.collections.use("MediaExample")

response = collection.query.near_media(
media=video_base64,
media_type=NearMediaType.VIDEO,
distance=0.8, # Maximum accepted distance
return_metadata=MetadataQuery(distance=True),
return_properties=["title", "mediaType"],
limit=5,
)

for obj in response.objects:
print(f"{obj.properties} - Distance: {obj.metadata.distance}")

With a filter

Combine near media searches with filters to narrow results:

py docs  API docs
More infoCode snippets in the documentation reflect the latest client library and Weaviate Database version. Check the Release notes for specific versions.

If a snippet doesn't work or you have feedback, please open a GitHub issue.
import base64
from weaviate.classes.query import NearMediaType
from weaviate.classes.query import Filter

with open("./videos/dog.mp4", "rb") as f:
video_base64 = base64.b64encode(f.read()).decode("utf-8")

collection = client.collections.use("MediaExample")

response = collection.query.near_media(
media=video_base64,
media_type=NearMediaType.VIDEO,
filters=Filter.by_property("mediaType").equal("animals"),
return_properties=["title", "mediaType"],
limit=5,
)

for obj in response.objects:
print(obj.properties)

Other media types

The near_media operator supports other media types such as audio. Set the media_type parameter to the appropriate NearMediaType value:

py docs  API docs
More infoCode snippets in the documentation reflect the latest client library and Weaviate Database version. Check the Release notes for specific versions.

If a snippet doesn't work or you have feedback, please open a GitHub issue.
import base64
from weaviate.classes.query import NearMediaType

collection = client.collections.use("MediaExample")

response = collection.query.near_media(
media=Path("./audio/dog.wav"),
media_type=NearMediaType.AUDIO,
return_properties=["title", "mediaType"],
limit=5,
)

for obj in response.objects:
print(obj.properties)

Supported media types

The NearMediaType enum supports the following media types. Available types depend on the vectorizer module and model used.

Media typeEnum valueDescription
AudioNearMediaType.AUDIOAudio files (e.g., .wav, .mp3)
ImageNearMediaType.IMAGEImage files (e.g., .jpg, .png). See also Image search.
VideoNearMediaType.VIDEOVideo files (e.g., .mp4, .avi)
DepthNearMediaType.DEPTHDepth map data
ThermalNearMediaType.THERMALThermal image data
IMUNearMediaType.IMUInertial measurement unit data
Model support

Not all models support all media types. For example, gemini-embedding-2-preview supports image, video, and audio. Check your model provider's documentation for supported modalities.

Further resources

Questions and feedback

If you have any questions or feedback, let us know in the user forum.