Guide · Deep dive

How to Find Footage by Bib or Jersey Number

The request for everything with number 100 becomes a thirty second job. Numbers are read from the frames themselves, on your machine.

3 min read

If you film races, dance competitions or team sports, you already know the request: "send me everything with number 100." Answering it used to mean scrubbing through the whole card. Since FrameQuery 1.2.1 it's a search. Type bib:100 and every result opens the video at the moment the number is actually on screen.

This guide covers setup, the syntax, scanning footage you indexed before the feature existed, and what to expect from different kinds of numbers.

Turn on number reading

Open Settings → AI Models and switch on Competitor Numbers. A small model bundle downloads once, about 19 MB. From then on, every video you index gets scanned as part of normal processing.

Everything runs locally. The reading happens on your machine and the numbers stay in your library, same as the rest of FrameQuery. If you want the reasoning behind that, it's in why we chose local-first.

What actually happens per frame: find the people, find printed text on their torsos, read it. The reader is restricted to digits. That restriction sounds minor and isn't. Generic OCR turns S into 5 and B into 8 all day; a reader that doesn't know letters exist can't make those mistakes. Text on banners and scoreboards never gets read at all, because it isn't on a person.

Search with bib: or number:

Both spellings are the same filter:

bib:100
number:100

Each result is a scene. The thumbnail on the card is the actual frame the number was read from, and clicking it seeks the player to that second. Leading zeros don't matter; bib:7 matches a bib printed "007" and vice versa.

It combines with the rest of the search operators:

bib:100 date:2026-06        number 100, June only
bib:42 "final round"        number 42 in clips matching a phrase
bib:18 res:4k               number 18, 4K sources only

There's no fuzzy matching, on purpose. Searching 100 returns clips where 100 was read, not numbers that look similar. Sending a client the wrong competitor is expensive. Running a second search isn't.

Scan the footage you already have

Anything indexed before you enabled the feature needs one pass: Settings → AI Models → Scan library.

It runs in the background with a progress bar and a time estimate. You can cancel it, quit the app mid-run, come back tomorrow. It picks up where it stopped. No processing minutes are used. This is local work.

On a large library, plan for it to take a while. Where FrameQuery still has the frames it sampled during indexing, scanning is quick. Where those frames were cleaned up, the source files get decoded again, and that's the slow part. Disconnected drives and unmounted NAS shares are skipped, not failed; the next scan collects them once they're back.

What reads well, and what doesn't

Black digits printed on white are the home turf. Race bibs read extremely well. Ballroom and dance numbers pinned to the back read well every time the wearer turns away from the camera, and in a rotation that happens constantly. On our test tape from a dance competition, 52 minutes long, every actively competing couple was read dozens of times.

That repetition is what makes the feature dependable. A single missed frame doesn't matter when the same number gets another chance every few seconds.

Harder cases, honestly stated:

  • Jersey numbers are read at lower confidence. Knit fabric, outline fonts and dark numbers on dark kits all hurt.
  • Wide shots have a floor. A number needs real size in frame to read, so background competitors in a wide floor shot won't register until they come closer. They usually do.
  • Motion blur costs individual frames, not the video. See repetition, above.

For the close-ups where no number is visible at all, combine this with person search: the bib covers the wide shots, faces cover the rest.

The disk space question

Number reading works from sampled frames kept on disk, and the frames where a number was found are retained so search results can show them. You can see exactly what this costs in the dashboard's storage breakdown, under Sampled frames, and clear it from Settings → Data Management if you need the space.

Before clearing, know the trade: a future rescan will have to decode your source files again, and bib results will show a nearby scene image rather than the exact frame where the number was spotted. Nothing breaks either way. If disk space isn't tight, leave it alone.

Try it on your next event

Number search ships in FrameQuery 1.2.1, free on Windows and macOS. Download FrameQuery, index the cards, flip the toggle, and the next "everything with 100" email takes half a minute.

Common questions

How do you find footage by bib number?
Turn on Competitor Numbers in FrameQuery's Settings → AI Models, let it scan your footage, then search bib:100. FrameQuery reads printed numbers from the video frames themselves and returns every clip where that number was spotted, with each result opening the video at the moment the number is visible.
Does bib number search work on old footage?
Yes, after a one-time scan. Settings → AI Models → Scan library runs a background pass over everything indexed before the feature was on. It resumes if interrupted, skips offline drives until they reconnect, and uses no processing minutes.
Can it read jersey numbers, not just race bibs?
Yes, with lower confidence. Black digits printed on white are the strongest case. Printed jersey numbers are read too, but knit fabric, outline fonts and dark numbers on dark colours reduce accuracy. Repetition compensates: a number missed in one frame is usually caught a few seconds later.
Is number reading done in the cloud?
No. The models run on your machine and the numbers they read stay in your local library, the same as FrameQuery's face and voice matching. Nothing is uploaded.

Try it on your own footage

Index a folder and search it the way this guide describes. Searching your library is free and works offline once indexing is done.