LSM
Video & evidence

Framewise.

Batch-extract speech and on-screen text into a searchable video catalog.

Turn a video collection into searchable speech and on-screen text. Follow a phrase to the matching video, open its speech window or sampled frame, and review the surrounding context.

Local applicationVideo analysisASR / OCREvidence search
Conceptual illustration of video thumbnails beside a speech waveform and highlighted text matches.
01

The investigative need

A suspicious request may be spoken in one video and displayed as a caption or message in another. Searching titles can miss both. When an investigation spans a large collection, repeatedly watching every clip for the same wording makes it difficult to follow a lead.

I built Framewise to make those words searchable across the collection. An investigator can find relevant speech and on-screen text, identify which videos contain it, and return to the source to understand what is happening.

02

What Framewise does

Import videos and choose whether to extract spoken audio, on-screen text, or both. Framewise saves the extracted text in a searchable catalog, with video identifiers and timing information that link matches back to their sources.

The two extraction paths cover different places where an investigative lead can appear. An analyst can search them together or focus on just one source.

ASR

Spoken audio → Searchable text

Automatic speech recognition transcribes the audio, so you can search for a request made aloud even when it is absent from the title or visible captions. Each transcript is linked to an approximate audio window.

OCR

On-screen wording → Searchable text

Optical character recognition reads sampled video frames. It can surface wording in captions, messages, signs, and other visible text, with timestamps that let you inspect the sampled source frame.

03

How an analyst uses it

Imagine you have 300 videos associated with suspected account-recovery scams. Some may contain a fake support agent asking for a verification fee or an account code. Others may be warnings, reports, or unrelated discussions. You need to find the relevant wording before deciding which videos deserve closer review.

Extract the speech and on-screen text into Framewise, then search the saved collection for the phrases you are investigating. A match tells you which video to open and gives you a starting point within it. You watch the surrounding context to understand whether the request is being made, quoted, or challenged.

  1. Step 01

    Import the videos and choose what to extract

    Submit the collection in batches of up to 100 videos. Select spoken audio, on-screen text, or both, and review the extraction settings. For a payment-request investigation, using both sources helps you find wording whether it is spoken or displayed.

    Framewise setup with a labeled synthetic video, both extraction sources enabled, a 30-second audio window and the one-second OCR default.View screenshot

    Configure speech and OCR extraction. This setup shows a one-second OCR interval; the completed run used four seconds.

  2. Step 02

    Build the searchable catalog

    Start the queue and follow extraction as videos are processed one at a time. Completed speech windows and OCR observations are saved. Open a finished video to review its full text or timestamped results, and resume unfinished work from the saved checkpoints when needed.

    Framewise paused at eight seconds, showing a synthetic fee request beside its ASR transcript, two sampled OCR observations, and a synchronized timeline.View screenshot

    Review the speech transcript and sampled on-screen text beside the video and timeline.

  3. Step 03

    Search for the wording you are investigating

    Enter a keyword or phrase and choose whether to search both sources, spoken audio, or on-screen text. In the recorded example, “refundable verification fee” finds one video with a speech match and an OCR match. Search reads the saved text, so repeating a search does not repeat extraction.

    Framewise keyword search for refundable verification fee showing one video, two matches, and the selected on-screen text match beside its eight-second video preview.View screenshot

    Search the saved text and open the fee-request match at 00:08, alongside its sampled observations.

  4. Step 04

    Review the source and carry the findings forward

    Open a match and inspect the surrounding video. The sampled frame at 00:08 shows “Pay a refundable verification fee,” while the speech result opens its approximate audio window. Decide what the wording means in context, then export matching videos and their text to Excel for further review or handoff.

04

Read and refine the search results

One video can contain the same phrase in more than one source. The recorded example below shows what a speech match and an on-screen match each establish, and where they take the reviewer.

Recorded synthetic example

One phrase, two paths back to the video

Search phrase: “refundable verification fee”

Spoken audio

00:00–00:24 · Approximate speech window

The message demands a refundable verification fee and asks for a one-time code to restore access.

Open this audio window and listen for the phrase in context. Its timestamp identifies the window, rather than the precise moment each word was spoken.

On-screen text

00:08 and 00:12 · Sampled observations

Pay a refundable verification fee.

Open the sampled frame to see the visible wording. These two observations show that it was read at those times; the gap between them remains unsampled.

Recorded combined extraction · 24-second synthetic clip · 2 Oct 2026. The sample’s investigative labels were supplied by its author.

Match all / any
Match all requires every included term somewhere in the same video’s selected text sources. Match any finds videos containing at least one. A multi-word term stays together as a literal phrase.
Source and filters
Search both sources, spoken audio, or on-screen text. Narrow the collection by batch or date added when you want to focus on a particular group of videos.
Exclusions
Excluded terms remove a video when they occur in either its ASR or OCR text, even if the inclusion search uses only one source. Choose exclusions carefully so you do not discard useful context.
Follow the matches
Previous and Next match move through occurrences in the selected video. A phrase spanning transcript entries opens Full text when there is no reliable single timestamp to show.
05

What the extracted text tells you

The catalog helps you locate wording and prioritize videos for review. Interpretation comes from the source context: a video discussing a fee request can be a solicitation, a warning, or a report. ASR and OCR readings should also be checked against the audio and visible text when an important detail depends on them.

Speech timing
ASR times describe approximate audio windows. Use them to reach the relevant part of a video, then listen for the exact wording and its context.
OCR sampling
OCR reads selected frames, so brief text can fall between samples. Repeated readings can be grouped for display; the recorded times remain observations of sampled frames.
Source previews
The app recreates source frames from a retained compressed HD copy. Small details can differ from the original upload, so account for that when reviewing the preview.
Saved text and exports
Saved model text stays tied to its video. Excel can carry full ASR/OCR text and identifiers into a team’s workbook; JSON and TXT preserve model formatting, with raw observations and diagnostics available in JSON. Search exports include all matching videos across pages.
06

How it was built

Explore extraction, checkpoints, search, and exports

Separate speech transcription and local OCR

Speech transcription sends audio windows to OpenAI. PaddleOCR-VL-1.6 runs locally, using periodic and visual-change sampling to choose frames. PyAV provides frame presentation timestamps; MLX supports the local OCR runtime on Apple Silicon.

Resume from saved work

A persistent coordinator processes queued videos sequentially. Saved speech windows and OCR observations support recovery of unfinished work, and a failed video does not block the rest of the queue. Successive submissions of up to 100 videos build larger collections without implying that a single batch accepts more.

Search without new model inference

A SQLite FTS5 catalog supports collection search alongside literal matching of saved text. Matching ignores letter case and repeated whitespace, while preserving the stored text. Permanent video IDs provide direct lookup, and batch/date filters narrow the collection. Search and Library exports include the full matching or filtered set across pages.

Retain the distinction between observations and display

The stored model responses are retained without translation, summarization, or correction by the application. OCR grouping and display formatting do not establish recognition accuracy or continuous visibility. JSON keeps raw observations and diagnostics; ASR SRT/VTT exports use approximate timing. Source frames are reconstructed from the retained lossy HD copy.

What the recorded run establishes

One approved combined run extracted speech and on-screen text from a 24-second synthetic clip. The executed settings used a 30-second audio window and a four-second OCR interval; the setup screenshot shows the earlier one-second default. Saved output, search results, source links, and exports were checked. This demonstrates the workflow on that clip, rather than general accuracy or throughput across a 300-video collection.

Built with

Python · Flask · Waitress · PyAV · FFmpeg · OpenAI speech transcription · PaddleOCR-VL-1.6 · MLX · SQLite FTS5 · JSON checkpoints

Next case study / 01

Trend Trainer

Dynamic Machine Learning Classifier Explore case study
Back to App Portfolio
Application screenshot

Fitted to width. Select Full resolution to inspect details.