AntflyAntfly
Back to Builder Stories

Visiting Media

Three engineers put retrieval over 100 terabytes of hospitality media, and their team ran a head-to-head nobody planned.

100+ TB
Media indexed
~24 hours
Full library ingest
50K/sec
Assets processed, one node
3
Engineers on Antfly code

When a hotel gets an inquiry for an outdoor wedding of 100, the seller answers with a tour: a tailored, visual walk through the property built for that one buyer. Visiting Media makes the software that builds those tours, and the raw material is media. Hundreds of terabytes of it: photos, videos, floor plans, the accumulated visual record of every property they serve.

Increasingly, no person picks the photos. An agent does. Ask Visiting Media's platform for that wedding tour and an agent searches the asset library, selects the images that fit an outdoor wedding, and assembles the tour. Nobody reviews the shortlist in between. If retrieval surfaces the wrong assets, the seller sends the wrong story about the property. That made the quality of retrieval the whole ballgame, and it's what CTO Eric Sniff's team built on Antfly.

A hundred terabytes in a day#

The first surprise was ingest. The team pointed Antfly at the asset library, with Titan embeddings running on Amazon Bedrock, and watched it go.

"We were like, this is going so fast. It was processing 50,000 assets a second," Eric said. "Then we realized it was only running on one node. We hadn't even scaled it out."

The entire library was indexed in about 24 hours: images stored natively, videos as summaries and extracted labels, product metadata alongside.

The A/B test nobody planned#

Getting Antfly into Visiting Media's AWS cluster hit some technical issues early on, since fixed. The delay produced something more useful than a smooth rollout: a controlled experiment.

While the deployment was blocked, the team built the same retrieval features on pgvector. They were not neutral about it. "The whole team was like, why don't we just use pgvector? You're just pushing Antfly on us," Eric said. In parallel, they ran Antfly locally in standalone mode and built against that too. Same features, same engineers, two stacks. Running the real thing locally took one command:

antfly start --mode standalone

The comparison did not take long. On the vector extension, everything lived in application code. Titan defaults to 128-dimension vectors, which produced bad results ("we'd search for images of Hawaii and get back anything with a beach, even when it was clearly Miami"), and raising the dimensionality meant real work. There was no reranker. And the path they actually wanted, fusing graph relationships into semantic search, wasn't realistic at all.

Assets Metadata Knowledge Base Embeddings API fixed dimensions App Code chunk · fuse · glue Vector Extension vector · SQL Agent Query Answer data flow inference Visiting Media’s Retrieval on a Vector Extension

"The description I get is that it was like pushing through mud. Every step was a challenge of some kind," Eric said. "As soon as they went to Antfly, it just got easier. They could create indexes on the fly at different dimensionalities and just start testing right away."

When the AWS deployment unblocked, the team had been running the real thing locally the whole time. They launched, and the skeptics didn't look back. "After a couple of weeks of fighting with pgvector and all the code they had to write inside the app, they were very happy when they finally got to switch."

Antfly Assets Metadata Knowledge Base Learn embed · chunk Index semantic · keyword Knowledge Graph NER · taxonomy Search fuse · rerank Tour Agent Query Answer data flow inference Visiting Media’s Tour Agent on Antfly

What they built#

The number-one use case inside the product is the Cmd+K bar. Press it anywhere in Visiting Media's application and you get global retrieval over everything: assets, product metadata, and answers. "How do I add a user?" takes you to the right screen. "How many users do I have?" returns the list.

Behind it, the control logic lives in their application, built with Genkit. A first pass classifies the query's intent: a how-to question routes to the knowledge base; a search routes through semantic retrieval fused with graph search, then through Antfly's built-in reranker. The team started with semantic search plus reranking and has since moved to full GraphRAG, which they say gives them much better results.

Architecture
1
Source Data
100+ terabytes of property photos and video, product metadata, and a support knowledge base, running on AWS
2
Learn
Titan embeddings via Bedrock; images stored natively, video as summaries and extracted labels
3
Index
One hybrid semantic + keyword index, plus a knowledge graph over the same documents
4
Search
Semantic and graph results fused, then passed through Antfly's built-in reranker
5
Tour Agent
Genkit control logic routes each query by intent; agents assemble property tours from the retrieved assets

The same retrieval powers the seller-facing features. The RFP responder takes an inbound email and generates a tour from it. Next is an MCP endpoint, so a seller can generate a tour without leaving their inbox, and after that, ephemeral tours: a visitor on a customer's website asks to see the beach, and an agent builds a beach tour on the spot.

Then there's the part that isn't a feature at all. To choose an embedding model, the team had Claude build an evaluation harness on promptfoo, powered by Antfly: it spins up parallel tables, loads assets into each, and scores configurations against each other. Titan multimodal versus Titan text versus Gemini. Different quantizations of GLiNER for entity extraction.

"How do you test different quantizations of GLiNER against each other with pgvector? You can't, really," Eric said. "Here we're testing the raw output of the entire system, not just the individual embeddings."

"We point Claude at the docs and it just does great"#

Three engineers touch the Antfly code, and Eric says there was no real learning curve. Part of that is the product. Part of it, he argues, is who's doing the learning now.

"The AIs understand it really well. We point Claude at the docs and it just does great," he said. "Everyone thinks they want SQL because that's what everyone knows. But it's really about what the AIs can learn. If AIs can consume Antfly faster, that's way more important."

His theory: decades of tutorials, outdated answers, and abandoned repos make older tools noisy for a model to learn from, while Antfly's documentation is small, current, and consistent. "There isn't this legacy of old versions to confuse it. It's all high quality." He compares it to the hiring mantra: hire for slope, not intercept. The same test now applies to infrastructure.


Antfly Cloud is generally available. Retrieval over the data you already have, first query in minutes: start at antfly.io.