search
Locate any word in spoken transcript and on-screen text from recordings. Every hit provides timestamps and frame position to jump straight to the evidence, with optional speaker filtering.
Instructions
Case-insensitive word search across BOTH transcript segments and frame OCR text: a text hits when EVERY word of the query matches it as a substring — any order, any distance (ё and е are interchangeable). Hits carry source (transcript|ocr), t_ms, t_wall when known, the matched text, and the nearest frame position — everything needed to jump straight to evidence. Optional speaker="S2" narrows to one voice's transcript hits. No embeddings. When NOT to use: fuzzy/semantic questions ("anything about performance?") — page get_transcript and read; regex is not supported. Examples:
search(job_id="...", query="login") — every spoken or on-screen mention of login
user: "what did I say about the login button?" → search(job_id, "login button") → get_moment at hits
search(job_id, "TypeError") — on-screen stack traces and error text are OCR-indexed; great for bug repros
search(job_id, "€49") — prices, IDs, and literals on screen are findable via OCR
take hit.t_wall and grep your server logs ±30 s around it to pair remark ↔ log line
no hits? shorten the stem: "notif" matches notification / notifications / notify
multi-word = ALL words as substrings, any order: "first phase" hits "the first real phase"
stems beat inflected phrases: "кнопк отправк" finds «Кнопка отправки» and «кнопку отправки»
every hit has nearest_frame_ms → get_frames(job_id, at_ms=) shows the moment
diarized job: transcript hits carry "speaker" — "who mentioned the deadline?" is answered by the hit itself
search(job_id, "deadline", speaker="S2") — only S2's mentions; OCR hits are excluded (screens have no voice)
audio-only job → transcript hits only (there is no OCR index)
anti-example: "summarize the pricing discussion" → get_transcript(format="text") and read it
anti-example: finding an icon or layout glitch with no text → get_frames over the range; OCR sees text only
anti-example: "everything S2 said" → get_transcript and collect speaker=="S2" — search always needs a query
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| job_id | Yes | ||
| speaker | No |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||