Key takeaways
- EmbeddingGemma 2 is a 740M Apache 2.0 model that embeds text, code, images, video and audio into one 768-dimensional space.
- You can start with the 270M text-only configuration and add vision or audio later without re-embedding existing vectors.
- Cutting vectors to 128 dimensions costs about 4% on English text but about 23% on Google’s multimodal benchmark.
- Every modality shares one 8,192-token window: about 29 images, 58 video frames or 5.5 minutes of audio.
- All benchmark numbers so far are Google’s own. Run your own retrieval test before switching.
Google released EmbeddingGemma 2 on 6 October 2026, an open embedding model that puts text, code, images, video and audio into one 768-dimensional vector space.1 It has 740 million parameters, ships under Apache 2.0 and is small enough that Google demonstrates it on a phone. The most useful design choice is that its encoders are modular. You can run the 270M text-only part today, add the image or audio encoder later, and the new vectors land in the same space as the old ones.
Every benchmark number published so far comes from Google. We searched on 13 October and found no independent evaluation, so the scores below are vendor-reported. The model card is unusually detailed about the trade-offs, though. Three of them decide whether the model suits a given search product. Quality falls faster for images and audio than for text when you shorten the vectors, every modality shares one context window, and two settings degrade embeddings without raising an error.
This post goes through what Google released, what the card’s numbers say and don’t say, and how we would test the model before moving a search index onto it.
What Google released on 6 October
| Item | Detail |
|---|---|
| Size | 740M parameters in total; 270M text and code core, 170M vision encoder, 300M audio encoder |
| Base | Gemma 4 architecture, sharing Gemma 4’s text tokenizer and audio encoder |
| Inputs | Text, code, images, visual documents such as PDFs and slides, video frames, audio, and interleaved mixes |
| Output | 768 dimensions, truncatable to 512, 256 or 128 |
| Context | 8,192 tokens shared across all inputs, four times EmbeddingGemma 1 |
| Licence | Apache 2.0 |
| Training data cutoff | January 2025 |
| Where | Hugging Face and Kaggle; LiteRT builds for devices; Model Garden “coming soon” |
Sources: Google’s launch post, developer guide and model card.123 Google lists support in Transformers, Sentence Transformers, vLLM, SGLang, MLX, llama.cpp, Ollama, LM Studio and transformers.js, and Qdrant for storage.
Four configurations from one checkpoint
The developer guide describes four ways to load the same weights.2
| Configuration | Parameters | What it can embed |
|---|---|---|
| Text only | 270M | Text and code |
| Text and vision | 440M | Adds images, visual documents and video frames |
| Text and audio | 570M | Adds speech and other audio |
| Full | 740M | Everything |
Google says all four share one vector space, so a query embedded with the 270M configuration can match documents embedded with the full model, and adding an encoder later doesn’t require recomputing existing embeddings.2
That changes how you can roll out multimodal search. With most stacks, adding image search means a second model, a second index and a fusion step, or a full re-embed with a multimodal model. Here a team can ship text search on the small configuration, keep the text vectors, and later embed only the new images with the vision encoder enabled. Text queries then find images, and image queries find text, in one index. We haven’t tested how well text-to-image matching works in practice, and the card has no number for it in isolation. That belongs in your own evaluation.
Google’s numbers, and what they compare against
The model card reports these results at 768 dimensions and full precision.3
| Benchmark | Metric | EmbeddingGemma 2 | EmbeddingGemma 1 |
|---|---|---|---|
| MTEB multilingual v2 | Mean (task) | 61.36 | 61.15 |
| MTEB code v1 | NDCG@10 | 78.68 | 68.76 |
| MIEB (lite), images | Mean (task type) | 64.64 | – |
| MMEB v2 Image | Hit@1 | 57.28 | – |
| MMEB v2 VisDoc | NDCG@5 | 67.84 | – |
| MMEB v2 Video | Hit@1 | 50.67 | – |
| MSEB retrieval, speech | MRR@10 | 69.54 | – |
| MAEB, audio | Mean (task) | 49.39 | – |
Read it for what it compares. The only model named on the card is EmbeddingGemma 1. Multilingual text is flat, at 61.36 against 61.15. Code is the real gain, about 10 points or 14% relative, which Google’s guide also quotes.2 The launch post says the model leads sub-1B multimodal embedders on MTEB Code and MAEB and outperforms “some specialist models” more than twice its size, without naming those models in the text.1
So the card tells you EmbeddingGemma 2 is at least as good as its predecessor on text and much better on code. How it ranks against the hosted embedding API or the CLIP-style model you already run is still an open question. For image search in particular, a domain-tuned model can beat a general one by a wide margin. When we compared FashionSigLIP, CLIP and DINOv2 for visual product search, the fashion-tuned model put the right product in the top five 63% of the time, against 38% for general CLIP. A general multimodal embedder has to be tested against that kind of baseline on your own data.
Shorter vectors cost multimodal quality first
EmbeddingGemma 2 uses Matryoshka representation learning, so you can keep the first 512, 256 or 128 dimensions of each vector. The model card gives scores at each size.3
| Dimensions | MTEB English | MTEB code | MIEB | MMEB overall | MSEB | MAEB |
|---|---|---|---|---|---|---|
| 768 | 68.46 | 78.68 | 64.64 | 59.01 | 69.54 | 49.39 |
| 512 | 68.41 | 77.24 | 64.32 | 58.38 | 69.18 | 49.21 |
| 256 | 67.78 | 76.18 | 63.13 | 56.24 | 66.76 | 48.91 |
| 128 | 65.68 | 71.41 | 59.06 | 45.65 | 56.71 | 46.92 |
The losses are uneven. Going from 768 to 128 dimensions costs English text about 4% of its score (68.46 to 65.68). It costs the MMEB multimodal score about 23% (59.01 to 45.65) and speech retrieval about 18% (69.54 to 56.71). At 256 dimensions the multimodal drop is under 5%. The card says 128 dimensions “degrades multimodal quality substantially” and suits text-only workloads.
Storage is the reason to shorten at all. Google’s guide puts a million 768-dimension vectors in bfloat16 at about 1.5 GB and the same million at 128 dimensions at about 250 MB.2 Its own advice is 768 or 512 for multimodal and visual-document retrieval, 256 for storage-constrained indexes, and 128 for large text-only indexes or a first-stage shortlist. A common pattern that fits these numbers is to shortlist with 128-dimension vectors and rerank the shortlist with the full 768.
One 8,192-token budget for every modality
The 8K window is shared. The model card gives the default token cost of each input type.3
| Input | Default token cost | Fits in 8,192 tokens |
|---|---|---|
| Text | 1 per subword | 8,192 tokens |
| Image | 280 per image | About 29 images |
| Video | 140 per frame, sampled at 1 frame per second | About 58 frames, so about a minute of video |
| Audio | 25 per second, 16 kHz mono | About 327 seconds |
The vision budget per image can be set anywhere from 70 to 1,120 tokens, which trades detail for count. At the low end about 114 images or frames fit. Interleaved inputs share the same budget, so a product page with text, four photos and a short clip uses it up quickly.
For video, this decides your chunking. One embedding covers roughly a minute at the default frame rate, so a ten-minute lecture becomes at least ten vectors, and a search hit points to a segment. One of Google’s demo apps, Video Moments Finder, is built around finding moments in video.1 Audio works the same way at about five and a half minutes per vector.
Settings that degrade embeddings without an error
Three details from the model card and guide would cost recall quietly if you missed them.32
Don’t run it in float16. The card says the model’s activations exceed float16’s range and can return NaN or “silently degraded” embeddings without raising an error. Use bfloat16 where the hardware supports it, or float32. Check which precision your inference server actually loads, because half precision is a common setting for speed.
Use the task prompts. Text inputs take a prompt name. Retrieval uses SearchQuery for queries and Document for documents, and the card lists others for question answering, fact checking, code retrieval, classification, clustering and similarity. It warns that leaving out the prefix may reduce quality. The Document prompt fills in title: none, so if your documents have titles, format them yourself as title: {title} | text: {content}. Prefixes apply only to text. Images, video and audio go in without one.
Match the audio format. The guide expects 16 kHz mono audio. Resample before embedding rather than trusting each loader to do it.
With Sentence Transformers 6.1 or later, a text-only setup with the right prompts and a shorter vector looks like this:
from sentence_transformers import SentenceTransformer
model = SentenceTransformer(
"google/embeddinggemma-2",
config_kwargs={"vision_config": None, "audio_config": None}, # 270M text-only
truncate_dim=256,
)
docs = model.encode(["title: Refund policy | text: Refunds are issued within 14 days..."], prompt_name="Document")
query = model.encode("how long do refunds take", prompt_name="SearchQuery")
print(model.similarity(query, docs))
Note that the document is formatted with its title by hand, and the query and document use different prompts.
Running it on a device
Google’s launch post reports about 191 MB of active RAM for quantised text-only weights and about 567 MB for the full multimodal model, measured on a Pixel 11 Pro.1 Google also publishes LiteRT builds of the 740M and 270M text-only variants and supports MediaPipe and transformers.js with WebGPU.1 We haven’t measured latency or memory ourselves, and Google gives no latency figures in the post.
On-device embedding matters for products that index private content, such as photos, notes and recordings, where uploading everything to a server is a privacy or cost problem. The card also notes that this is a pre-trained embedding model that “does not undergo post-training alignment, safety tuning, or output-level moderation”, and leaves retrieval filtering and fairness testing to the developer.3
How we would test it before switching
The model card is enough to decide that EmbeddingGemma 2 is worth testing. The decision to switch needs your own queries. Our routine for an embedding change:
- Collect 100 to 300 real queries with the documents a person judged correct. For multimodal search, include text-to-image, image-to-text and image-to-image queries in proportion to real traffic.
- Embed the corpus with the current model and with EmbeddingGemma 2 at the dimension you’d actually deploy, not only at 768.
- Compare Recall@10 and nDCG@10, and read the queries where the two models disagree. The disagreements show you what each model is good at.
- Check the precision setting and the prompts on the inference server you’ll use in production, since both change the vectors.
- If you plan to start text-only and add vision later, test that path directly. Embed the text corpus with the 270M configuration, the images with the vision configuration, and measure cross-modal queries against that mixed index.
| Situation | Our starting choice |
|---|---|
| Text and code search, self-hosted, cost-sensitive | Worth testing at 256 dimensions against your current model |
| Mixed text and image catalogue, no tuned image model yet | Worth testing, especially the single-index setup |
| Domain image search already served by a tuned model | Keep the tuned model unless your test says otherwise |
| Search over private content on phones or in the browser | An open, Apache 2.0 option that covers audio and video; test memory on your oldest target device |
| Long documents | Chunk to fit 8,192 tokens; nothing here changes chunking for text |
-
Google, “EmbeddingGemma 2 is a best-in-class open model for natively multimodal embeddings”, 6 October 2026, https://blog.google/innovation-and-ai/technology/developers-tools/embeddinggemma-2/ ↩↩↩↩↩↩
-
Google Developers Blog, “EmbeddingGemma 2: The Developer Guide”, October 2026, https://developers.googleblog.com/embeddinggemma-2-the-developer-guide/ ↩↩↩↩↩↩
-
Google, EmbeddingGemma 2 model card, Hugging Face, read 13 October 2026, https://huggingface.co/google/embeddinggemma-2 ↩↩↩↩↩↩
Frequently asked questions
What is EmbeddingGemma 2?
An open embedding model from Google, released on 6 October 2026. It has 740 million parameters, is built on Gemma 4 and maps text, code, images, video and audio into a shared 768-dimensional vector space under the Apache 2.0 licence.
Can EmbeddingGemma 2 run on a phone?
Google says yes. It reports about 191 MB of active RAM for the quantised text-only weights and about 567 MB for the full multimodal model on a Pixel 11 Pro. Those are vendor figures.
Is EmbeddingGemma 2 better than EmbeddingGemma 1?
On Google’s model card it scores 78.68 on MTEB code against 68.76, and 61.36 on MTEB multilingual against 61.15. So it is much better on code and about the same on multilingual text, plus it adds images, video and audio.
Can I use EmbeddingGemma 2 commercially?
Yes. The model card lists the Apache 2.0 licence, which allows commercial use and fine-tuning. Google’s Gemma Prohibited Use Policy still applies to deployments.
Why does EmbeddingGemma 2 return NaN embeddings?
The model card warns against float16 inference. Its activations exceed float16’s range, which can produce NaN or quietly degraded vectors without an error. Use bfloat16 or float32.
Building something like this?
9io is a small team of senior engineers with a fractional CTO, and we work by the hour. Send us a note about your product. The reply comes from the person who'd do the work.