mixpeek/video-embedding-benchmark

Head-to-head benchmark of multimodal embedding models for text-to-video retrieval. 6 models, 20 CC0 videos, 60 queries, reproducible IR metrics (NDCG, MRR, Recall).

Python

5

2 commits

updated Aug 14, 2026

See the code

README

Video Embedding Model Benchmark: Retrieval Quality for Information Retrieval

A head-to-head comparison of multimodal embedding models for text-to-video retrieval, tested on a standardized dataset with reproducible IR metrics.

Results (6 of 7 models — Nova pending)

ModelDimsNDCG@5NDCG@10R@1R@5MRRmAP@10Latency (ms)Vec Size
Gemini Embedding 230720.6710.7640.2000.6790.8960.702209412,288 B
Twelve Labs Marengo 2.7*10240.7210.7600.2500.7431.0000.737181484,096 B
Mixedbread Wholembed v3**ColBERT0.6440.7570.2160.6490.9320.688500N/A
X-CLIP Base (temporal)5120.3270.4700.0670.3670.5200.3381922,048 B
SigLIP 2 SO400M (frame-avg)11520.2020.3250.0750.2370.4660.2046364,608 B
InternVideo2-Stage2 6B7680.1860.3020.0460.2370.4050.170248173,072 B

* Marengo results based on 34/60 queries (56%) due to Twelve Labs free-tier daily rate limit (50 req/day). Full results pending re-run. ** Mixedbread results based on 37/60 queries (62%) due to rate limiting. Uses Stores API (ColBERT-style late interaction) — no single embedding vector.

Gemini row re-run August 2026. The key exposes three Gemini embedding ids, but on video they reduce to this one row: gemini-embedding-2-preview returns byte-identical embeddings to gemini-embedding-2 (cosine 1.0), and gemini-embedding-001 is text-only and cannot embed video. Evidence and coverage in results/GEMINI-GENERATIONS.md.

Key takeaways:

  • The top 3 are all API models — Gemini, Marengo, and Mixedbread cluster tightly at NDCG@10 0.757–0.764
  • Marengo's perfect MRR means the correct video was always ranked #1 across all 34 evaluated queries — remarkable for a video-specialist model
  • Mixedbread Wholembed v3 is a strong third at NDCG@10=0.757 with perfect MRR on hard negatives (1.000) — its ColBERT-style late interaction works well for video
  • All three API models are 2x+ better than the best open-source option (X-CLIP at 0.470 NDCG@10)
  • X-CLIP is the best open-source model despite being the smallest (512d) — temporal cross-frame attention matters more than model size
  • InternVideo2 6B underperforms despite being 12x larger than X-CLIP — its Stage2 checkpoint is optimized for multimodal pretraining, not zero-shot retrieval
  • Frame-averaging (SigLIP) is a poor proxy for video understanding — temporal structure matters
  • Latency varies wildly: X-CLIP at 192ms (local GPU) vs Marengo at 18s (API processing). Mixedbread query latency is 500ms but requires upfront video upload
  • Mixedbread's Stores-based approach is architecturally different — you upload videos once and search via API, no embedding vectors to manage

Pending: Amazon Nova Multimodal (need Bedrock model access). Marengo re-run for remaining 26 queries after rate limit reset.

Models Under Test

#ModelProviderDimsVideo NativeTypeStatus
1Gemini Embedding 2Google768–3072 (Matryoshka)YesAPIDone
2Twelve Labs Marengo 2.7Twelve Labs1024YesAPIPartial (34/60 queries)
3Mixedbread Wholembed v3MixedbreadColBERT (late interaction)YesAPI (Stores)Partial (37/60 queries)
4X-CLIP BaseMicrosoft512Yes (cross-frame attn)Open-sourceDone
5Amazon Nova MultimodalAmazon (Bedrock)256–3072 (Matryoshka)YesAPIPending (need Bedrock)
6SigLIP 2 SO400MGoogle (open)1152No (frame-avg baseline)Open-sourceDone
7InternVideo2-Stage2 6BOpenGVLab768Yes (temporal ViT)Open-sourceDone

Why These Models

  • Gemini Embedding 2: Launched March 2026. First model to unify text, image, video, audio, and documents in one embedding space. The new standard.
  • Twelve Labs Marengo 3.0: Purpose-built for video. Claims 78.5% composite vs. Nova's 61.8%. Handles 4K and 4-hour videos. The specialist.
  • Mixedbread Wholembed v3: ColBERT-style late-interaction retrieval. Uses Stores API — upload videos, search with text. No single embedding vector; retrieval is done server-side.
  • X-CLIP Base: Microsoft's video-text contrastive model. Extends CLIP with cross-frame temporal attention. Best open-source model with true temporal understanding.
  • Amazon Nova: AWS's five-modality model on Bedrock. The enterprise default.
  • SigLIP 2 SO400M: SOTA open-source image-text encoder. No video understanding — mean-pools 8 frames. Included as a baseline to quantify the cost of ignoring temporal structure.
  • InternVideo2-Stage2 6B: OpenGVLab's video foundation model. Contrastive video-text pretraining with temporal ViT backbone + BERT-large text encoder. The largest open-source model in this benchmark.

Dataset

20 CC0 videos from Pexels (640x360, 24fps, ≤10s, H.264), normalized with ffmpeg:

CategoryVideosContent
Sports4Basketball, soccer, swimming, running
Cooking4Chopping, stirring, pouring, plating
Nature4Waterfall, ocean, forest, birds
Urban4Traffic, pedestrians, construction, skyline
Technology4Typing, soldering, 3D printing, robotics

60 text queries with graded relevance (following BEIR/MTEB conventions):

  • relevance=2: Exact match (query describes this specific video)
  • relevance=1: Partial match (query describes the category)
  • relevance=0: Irrelevant (implicit)

Three query types per video:

  1. Exact — "A person chopping vegetables with a knife on a cutting board"
  2. Partial — "Someone preparing food in a kitchen"
  3. Hard negative — semantically adjacent but wrong domain (e.g., "A technician carefully assembling small electronic parts by hand" for a cooking video)

Downloading

python download_dataset.py  # No API key needed — uses direct Pexels CDN links

Metrics

Following standard IR evaluation (BEIR, MTEB):

  • NDCG@K — Normalized Discounted Cumulative Gain with graded relevance (primary metric)
  • Recall@K — Fraction of relevant docs retrieved in top K
  • MRR — Mean Reciprocal Rank of first relevant result
  • mAP@10 — Mean Average Precision at 10
  • Latency — Embedding time per video (median, p95)
  • Storage — Bytes per embedding vector (float32)

Running the Benchmark

Prerequisites

pip install -r requirements.txt

API Keys (only for API models)

export GEMINI_API_KEY="..."            # Gemini Embedding 2
export TWELVE_LABS_API_KEY="..."       # Marengo 3.0
export AWS_ACCESS_KEY_ID="..."         # Nova (Bedrock)
export AWS_SECRET_ACCESS_KEY="..."
export AWS_DEFAULT_REGION="us-east-1"
export MIXEDBREAD_API_KEY="..."        # Wholembed v3

X-CLIP and SigLIP 2 run locally (MPS/CUDA/CPU).

Run

# Download dataset (no API key needed)
python download_dataset.py

# Run individual models
python benchmark.py --model gemini
python benchmark.py --model marengo
python benchmark.py --model xclip
python benchmark.py --model nova
python benchmark.py --model siglip
python benchmark.py --model mixedbread

# Run all
python benchmark.py --all

# Generate comparison report
python report.py

Results are written to results/ as JSON + results/COMPARISON.md.

Detailed Results by Query Type

Exact Match (text describes a specific video)

ModelNDCG@1NDCG@5R@1R@5MRR
Marengo 2.7*0.5560.6620.2500.6671.000
Gemini Embedding 20.6000.6520.2000.6000.887
Mixedbread Wholembed v3**0.5640.6300.2310.6150.962
X-CLIP Base0.2670.3780.1000.4000.606
SigLIP 2 (frame-avg)0.1330.1600.0750.2120.435
InternVideo2 6B0.0500.1760.0370.2630.396

Hard Negative (adjacent domain — model should NOT be confused)

ModelNDCG@1NDCG@5R@5MRR
Marengo 2.7*1.0000.8460.8411.000
Mixedbread Wholembed v3**1.0000.8020.7501.000
Gemini Embedding 20.8000.7900.8000.900
X-CLIP Base0.2000.3220.3500.467
SigLIP 2 (frame-avg)0.4000.2360.2000.556
InternVideo2 6B0.2000.2200.2500.423

Marengo and Mixedbread both achieve perfect NDCG@1 and MRR on hard negatives — never fooled by adjacent-domain queries. Gemini is close behind at 0.900 MRR.

* Marengo: partial results — 34/60 queries evaluated. ** Mixedbread: partial results — 37/60 queries evaluated. Uses Stores-based retrieval (ColBERT-style).

Cost Comparison

ModelPricing ModelEst. Cost / 1000 Videos
Gemini Embedding 2Free tier (1K/day), then per-token~$0 (free tier)
Marengo 3.0$0.033/min~$5–15
Mixedbread Wholembed v3Free tier, then per-token~$0 (free tier)
X-CLIP BaseSelf-hostedGPU/CPU cost only
Nova MultimodalBedrock per-token~$2–8
SigLIP 2Self-hostedGPU/CPU cost only

Methodology Notes

  • All embeddings L2-normalized to unit vectors; retrieval uses cosine similarity
  • Random seed fixed at 42 for reproducibility
  • Videos normalized to uniform specs (640x360, 24fps, 10s max, H.264) to control for input variation
  • SigLIP 2 samples 8 frames uniformly and mean-pools frame embeddings
  • X-CLIP samples 8 frames with cross-frame temporal attention
  • Gemini processes the full video natively via file upload
  • Marengo processes the full video natively via file upload (purpose-built video model)
  • InternVideo2 samples 4 frames with temporal ViT backbone + BERT-large text encoder (6B params, CPU inference)
  • Mixedbread uses Stores API (ColBERT-style late interaction) — videos uploaded once, retrieval via search endpoint. No single embedding vector; ranking done server-side
  • Graded relevance (NDCG) is the primary metric because binary relevance (R@K) doesn't capture partial matches

License

Benchmark code: MIT. Videos: CC0 (Pexels). Model weights subject to their respective licenses.

mixpeek/video-embedding-benchmark

Head-to-head benchmark of multimodal embedding models for text-to-video retrieval. 6 models, 20 CC0 videos, 60 queries, reproducible IR metrics (NDCG, MRR, Recall).

Python

5

2 commits

updated Aug 14, 2026

See the code

README

Video Embedding Model Benchmark: Retrieval Quality for Information Retrieval

A head-to-head comparison of multimodal embedding models for text-to-video retrieval, tested on a standardized dataset with reproducible IR metrics.

Results (6 of 7 models — Nova pending)

ModelDimsNDCG@5NDCG@10R@1R@5MRRmAP@10Latency (ms)Vec Size
Gemini Embedding 230720.6710.7640.2000.6790.8960.702209412,288 B
Twelve Labs Marengo 2.7*10240.7210.7600.2500.7431.0000.737181484,096 B
Mixedbread Wholembed v3**ColBERT0.6440.7570.2160.6490.9320.688500N/A
X-CLIP Base (temporal)5120.3270.4700.0670.3670.5200.3381922,048 B
SigLIP 2 SO400M (frame-avg)11520.2020.3250.0750.2370.4660.2046364,608 B
InternVideo2-Stage2 6B7680.1860.3020.0460.2370.4050.170248173,072 B

* Marengo results based on 34/60 queries (56%) due to Twelve Labs free-tier daily rate limit (50 req/day). Full results pending re-run. ** Mixedbread results based on 37/60 queries (62%) due to rate limiting. Uses Stores API (ColBERT-style late interaction) — no single embedding vector.

Gemini row re-run August 2026. The key exposes three Gemini embedding ids, but on video they reduce to this one row: gemini-embedding-2-preview returns byte-identical embeddings to gemini-embedding-2 (cosine 1.0), and gemini-embedding-001 is text-only and cannot embed video. Evidence and coverage in results/GEMINI-GENERATIONS.md.

Key takeaways:

  • The top 3 are all API models — Gemini, Marengo, and Mixedbread cluster tightly at NDCG@10 0.757–0.764
  • Marengo's perfect MRR means the correct video was always ranked #1 across all 34 evaluated queries — remarkable for a video-specialist model
  • Mixedbread Wholembed v3 is a strong third at NDCG@10=0.757 with perfect MRR on hard negatives (1.000) — its ColBERT-style late interaction works well for video
  • All three API models are 2x+ better than the best open-source option (X-CLIP at 0.470 NDCG@10)
  • X-CLIP is the best open-source model despite being the smallest (512d) — temporal cross-frame attention matters more than model size
  • InternVideo2 6B underperforms despite being 12x larger than X-CLIP — its Stage2 checkpoint is optimized for multimodal pretraining, not zero-shot retrieval
  • Frame-averaging (SigLIP) is a poor proxy for video understanding — temporal structure matters
  • Latency varies wildly: X-CLIP at 192ms (local GPU) vs Marengo at 18s (API processing). Mixedbread query latency is 500ms but requires upfront video upload
  • Mixedbread's Stores-based approach is architecturally different — you upload videos once and search via API, no embedding vectors to manage

Pending: Amazon Nova Multimodal (need Bedrock model access). Marengo re-run for remaining 26 queries after rate limit reset.

Models Under Test

#ModelProviderDimsVideo NativeTypeStatus
1Gemini Embedding 2Google768–3072 (Matryoshka)YesAPIDone
2Twelve Labs Marengo 2.7Twelve Labs1024YesAPIPartial (34/60 queries)
3Mixedbread Wholembed v3MixedbreadColBERT (late interaction)YesAPI (Stores)Partial (37/60 queries)
4X-CLIP BaseMicrosoft512Yes (cross-frame attn)Open-sourceDone
5Amazon Nova MultimodalAmazon (Bedrock)256–3072 (Matryoshka)YesAPIPending (need Bedrock)
6SigLIP 2 SO400MGoogle (open)1152No (frame-avg baseline)Open-sourceDone
7InternVideo2-Stage2 6BOpenGVLab768Yes (temporal ViT)Open-sourceDone

Why These Models

  • Gemini Embedding 2: Launched March 2026. First model to unify text, image, video, audio, and documents in one embedding space. The new standard.
  • Twelve Labs Marengo 3.0: Purpose-built for video. Claims 78.5% composite vs. Nova's 61.8%. Handles 4K and 4-hour videos. The specialist.
  • Mixedbread Wholembed v3: ColBERT-style late-interaction retrieval. Uses Stores API — upload videos, search with text. No single embedding vector; retrieval is done server-side.
  • X-CLIP Base: Microsoft's video-text contrastive model. Extends CLIP with cross-frame temporal attention. Best open-source model with true temporal understanding.
  • Amazon Nova: AWS's five-modality model on Bedrock. The enterprise default.
  • SigLIP 2 SO400M: SOTA open-source image-text encoder. No video understanding — mean-pools 8 frames. Included as a baseline to quantify the cost of ignoring temporal structure.
  • InternVideo2-Stage2 6B: OpenGVLab's video foundation model. Contrastive video-text pretraining with temporal ViT backbone + BERT-large text encoder. The largest open-source model in this benchmark.

Dataset

20 CC0 videos from Pexels (640x360, 24fps, ≤10s, H.264), normalized with ffmpeg:

CategoryVideosContent
Sports4Basketball, soccer, swimming, running
Cooking4Chopping, stirring, pouring, plating
Nature4Waterfall, ocean, forest, birds
Urban4Traffic, pedestrians, construction, skyline
Technology4Typing, soldering, 3D printing, robotics

60 text queries with graded relevance (following BEIR/MTEB conventions):

  • relevance=2: Exact match (query describes this specific video)
  • relevance=1: Partial match (query describes the category)
  • relevance=0: Irrelevant (implicit)

Three query types per video:

  1. Exact — "A person chopping vegetables with a knife on a cutting board"
  2. Partial — "Someone preparing food in a kitchen"
  3. Hard negative — semantically adjacent but wrong domain (e.g., "A technician carefully assembling small electronic parts by hand" for a cooking video)

Downloading

python download_dataset.py  # No API key needed — uses direct Pexels CDN links

Metrics

Following standard IR evaluation (BEIR, MTEB):

  • NDCG@K — Normalized Discounted Cumulative Gain with graded relevance (primary metric)
  • Recall@K — Fraction of relevant docs retrieved in top K
  • MRR — Mean Reciprocal Rank of first relevant result
  • mAP@10 — Mean Average Precision at 10
  • Latency — Embedding time per video (median, p95)
  • Storage — Bytes per embedding vector (float32)

Running the Benchmark

Prerequisites

pip install -r requirements.txt

API Keys (only for API models)

export GEMINI_API_KEY="..."            # Gemini Embedding 2
export TWELVE_LABS_API_KEY="..."       # Marengo 3.0
export AWS_ACCESS_KEY_ID="..."         # Nova (Bedrock)
export AWS_SECRET_ACCESS_KEY="..."
export AWS_DEFAULT_REGION="us-east-1"
export MIXEDBREAD_API_KEY="..."        # Wholembed v3

X-CLIP and SigLIP 2 run locally (MPS/CUDA/CPU).

Run

# Download dataset (no API key needed)
python download_dataset.py

# Run individual models
python benchmark.py --model gemini
python benchmark.py --model marengo
python benchmark.py --model xclip
python benchmark.py --model nova
python benchmark.py --model siglip
python benchmark.py --model mixedbread

# Run all
python benchmark.py --all

# Generate comparison report
python report.py

Results are written to results/ as JSON + results/COMPARISON.md.

Detailed Results by Query Type

Exact Match (text describes a specific video)

ModelNDCG@1NDCG@5R@1R@5MRR
Marengo 2.7*0.5560.6620.2500.6671.000
Gemini Embedding 20.6000.6520.2000.6000.887
Mixedbread Wholembed v3**0.5640.6300.2310.6150.962
X-CLIP Base0.2670.3780.1000.4000.606
SigLIP 2 (frame-avg)0.1330.1600.0750.2120.435
InternVideo2 6B0.0500.1760.0370.2630.396

Hard Negative (adjacent domain — model should NOT be confused)

ModelNDCG@1NDCG@5R@5MRR
Marengo 2.7*1.0000.8460.8411.000
Mixedbread Wholembed v3**1.0000.8020.7501.000
Gemini Embedding 20.8000.7900.8000.900
X-CLIP Base0.2000.3220.3500.467
SigLIP 2 (frame-avg)0.4000.2360.2000.556
InternVideo2 6B0.2000.2200.2500.423

Marengo and Mixedbread both achieve perfect NDCG@1 and MRR on hard negatives — never fooled by adjacent-domain queries. Gemini is close behind at 0.900 MRR.

* Marengo: partial results — 34/60 queries evaluated. ** Mixedbread: partial results — 37/60 queries evaluated. Uses Stores-based retrieval (ColBERT-style).

Cost Comparison

ModelPricing ModelEst. Cost / 1000 Videos
Gemini Embedding 2Free tier (1K/day), then per-token~$0 (free tier)
Marengo 3.0$0.033/min~$5–15
Mixedbread Wholembed v3Free tier, then per-token~$0 (free tier)
X-CLIP BaseSelf-hostedGPU/CPU cost only
Nova MultimodalBedrock per-token~$2–8
SigLIP 2Self-hostedGPU/CPU cost only

Methodology Notes

  • All embeddings L2-normalized to unit vectors; retrieval uses cosine similarity
  • Random seed fixed at 42 for reproducibility
  • Videos normalized to uniform specs (640x360, 24fps, 10s max, H.264) to control for input variation
  • SigLIP 2 samples 8 frames uniformly and mean-pools frame embeddings
  • X-CLIP samples 8 frames with cross-frame temporal attention
  • Gemini processes the full video natively via file upload
  • Marengo processes the full video natively via file upload (purpose-built video model)
  • InternVideo2 samples 4 frames with temporal ViT backbone + BERT-large text encoder (6B params, CPU inference)
  • Mixedbread uses Stores API (ColBERT-style late interaction) — videos uploaded once, retrieval via search endpoint. No single embedding vector; ranking done server-side
  • Graded relevance (NDCG) is the primary metric because binary relevance (R@K) doesn't capture partial matches

License

Benchmark code: MIT. Videos: CC0 (Pexels). Model weights subject to their respective licenses.