QuickVisual CRM, patent pending
Describe the shot. Get the exact three seconds.
QuickAds tags every moment of your footage across 237 fields, then reads what you meant, not only the words you typed. You get the clip, the timecode and the reason it matched.
The creator does a full 360-degree turn in the dress to show its fit and the flow of the skirt.
The problem
Search looks easy. With 237 fields, it isn't.
A search box invites people to type the way they talk. The footage, meanwhile, is stored as hundreds of structured facts per moment. The work is in getting from one to the other without guessing.
A woman wearing a red dress talking about this product
A woman
subject.primary = personL4Who or what the shot is aboutperson.count = 1L4Counted in frame, not inferred from the voicesubject.descriptionL5How she looks, never who she iswearing a red dress
look.toppersonThe garment on the visible person, not one held on a hangerlook.top_color = redpersonA black dress is a near miss, and stays outlook.patternpersonSolid, floral or geometrictalking
moment.kind = speech lineL5A spoken line, cut on its own word timingsperson.speaking = trueL5On screen and speaking, not a voiceoverperson.addresspersonTo camera, or to someone elseabout this product
speech.entitiesL5What the line namesproduct.skuL5Which product is on screenproduct.prominenceL5Hero of the frame, or in the backgroundAnd the parts nobody types. Is there a clean in-point? Is a bystander or a minor in frame? Is there a talent release? Does it work as a hook, a demo or an end card? Search checks edit.clean_start, rights.bystander, rights.minor_present and ad.section on every candidate, and holds back what can't be used, with the reason.
Same idea, different words
People write "spins". The tags say "twirls". A keyword index treats those as strangers.
Example: spins around so you can see how the dress moves
Numbers, typos and languages
"Twenty" against "20". "Droper" against "dropper". A brief written in Spanish against tags written in English.
Example: Mujer girando con un vestido
Style lives in fields
"Black and white" and "slow motion" are rarely in a description. They are a color grade and a capture speed.
Fields: color.grade, cam.speed
Structure isn't a word
A hook, a demo, an end card. These are roles in an ad, read from what happens and when, not from vocabulary.
Fields: ad.section, hook.first_line
Saying isn't showing
A line that says "watch it twirl" is not proof the clip shows a twirl. Visual claims are checked against what was seen, not what was said.
Spoken words and on-screen text never stand in for the picture.
Knowing when to say no
The library has twirls in black and geometric dresses. Asked for a red one, the right answer is nothing, and an editor would rather hear that than scrub through near misses.
Example: A woman twirling in a red dress
Every moment the account has tagged is scored on the request's words, filters and ad section. Rights holds and unusable takes drop out here.
The request is rewritten into up to four alternative phrasings in the taxonomy's own vocabulary. Synonyms, translations and fixed typos pull in moments the words alone would miss.
A model reads each candidate's saved fields, keeps only real matches, and must quote the field values that prove each one. Nothing is returned without evidence.
Ten live searches
Where keyword search breaks, and what comes back instead
Each request below was typed into QuickAds on 11 November 2026 against a library of 18 videos and 131 moments. The clips play the exact span that was returned. For comparison, the same requests were run as plain keyword search over the same moments' descriptions and transcripts.
For partners
The same search, as an API
QuickAds' own Create Video flow finds footage for each script beat through these endpoints. Partners can call them the same way: tag a library, search it with a line of script, and cut the moment you pick.
Tag one uploaded image or video. Add force=true to tag it again with the latest analysis.
Status (queued, processing, ready, failed), progress, and the tags once ready.
A line of script in, ranked moments out, each with a timecode, score, reason and evidence.
Every tagged moment, narrowed by filters, with no ranking. Useful for pickers.
Cut one moment into a ready clip in 9:16, 16:9, 1:1, 4:5, 3:4, 4:3 or 21:9. Returns a task to poll.
A video's full breakdown: every level, record and field with its value, confidence and source.
The 237 fields, their levels and allowed values. Use these keys in want and hard.
# All paths are relative to the API base URL, /api/v1 curl -X POST "$QUICKADS_API/video-library/moments/search" \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "domain_id": "cd8e258d-…", "text": "We make twenty ad videos for your store in one week", "section": "hook", "kind": "talk", "want": { "person.address": "to camera" }, "hard": { "rights.minor_present": false }, "duration": 4, "k": 10, "min_score": 0.6 }'
{
"results": [{
"item_id": "d95fcd41-9c72-45b8-970c-03c5b2811ee8",
"moment_id": "m002",
"item_name": "20_ads_in_7_dayssound_42604",
"t0": 5.96, "t1": 9.89,
"kind": "speech line",
"transcript": "We'll create 20 video ads for your e-com brand in 7 days.",
"score": 0.95,
"notes": ["The speaker directly states the exact offer to create 20 video ads for an e-commerce brand in 7 days."],
"evidence": [
{ "field": "speech.transcript", "quote": "We'll create 20 video ads for your e-com brand in 7 days." }
],
"matched": ["speech.transcript", "claim.span_text"],
"keyframe_url": "https://…/moments/kf_002.jpg",
"video_url": "https://…/20_ads_in_7_dayssound_42604.mp4"
}],
"held_back": [],
"search_mode": "kie_gemini",
"candidates_reviewed": 32,
"eligible_candidates": 131,
"shortlist_limited": true,
"indexed_items": 18,
"total_moments": 131,
"notice": null
}
# 1. Ask for the cut curl -X POST "$QUICKADS_API/video-library/moments/clip" \ -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \ -d '{ "item_id": "d95fcd41-…", "moment_id": "m002", "aspect_ratio": "9:16" }' # => { "task_id": "…" } # 2. Poll every 2 seconds until Completed or Error curl "$QUICKADS_API/video-library/tasks/$TASK_ID" -H "Authorization: Bearer $TOKEN" # => { "status": "Completed", # "response": { "url": "https://….mp4", "item_id": "…", "moment_id": "m002", # "t0": 5.96, "t1": 9.89, "duration": 3.93 } }
Search request fields
| Field | Type | What it does |
|---|---|---|
text | string, up to 500 | The line of script or description, in any language. Required unless want or hard is set. |
section | string | Limit to one ad role: hook, body: problem, body: story, body: demo, body: proof, close: offer, close: CTA, end card. |
kind | auto | talk | broll | Someone speaking, footage without a speaker, or whichever fits better. Voiceover over visuals counts as b-roll. |
want | object | Soft preferences as taxonomy keys, for example {"cam.shot_size": "close-up"}. They raise the score; they never exclude. |
hard | object | Must-match taxonomy keys. A moment without a confident value for the key is excluded. |
duration | number, seconds | Target length for spoken lines. Lines much shorter than this are skipped. |
item_ids | string[] | Search only these videos. Defaults to every tagged video in the brand. |
k | integer, 1 to 20 | How many results to return. Default 10. |
min_score | number, 0 to 1 | Drop results below this ranking score. A ranking score, not a probability. |
Evidence on every result
evidence quotes the saved field values that justify the match, so your UI can show why a clip came up and a reviewer can check it.
Held back, with reasons
Moments blocked by rights (minors, bystanders, missing releases) or a weak take come back in held_back with the reason and whether a person can clear it.
Timing
On the 131-moment test library, searches answered in 12 to 31 seconds. Tagging a 20 to 45 second video takes about 3 to 6 minutes.
Put footage search in your product
Partner access, authentication and base URLs are set up with the QuickAds team.