search
Find any spoken or on-screen phrase in recordings across transcripts and OCR. Returns timestamps, speaker, and frame positions to jump straight to evidence. Optional speaker and match-mode filters.
Instructions
Case-insensitive word search across BOTH transcript segments and frame OCR text. The default match_mode="all_words" requires EVERY query word as a substring; match_mode="any_word" requires at least one (ё 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 accepts a raw label ("S2") or saved name and narrows to that voice's transcript hits. Duplicate saved names search all matching labels honestly. 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
broad lexical recall: search(job_id, "timeout latency", match_mode="any_word")
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)
search(job_id, "deadline", speaker="Vera") — saved names are matched case-insensitively
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: "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 | ||
| match_mode | No | all_words |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||