How to search footage by what's in it and what's said
StoryFolder —
Last updated: 2 September 2026.
You know the shot exists. The guy adjusts his hard hat, and about two seconds later he says the thing about safety. You have already watched this footage twice. A transcript will find the safety line, because he said it out loud. It will not find the hard hat, because nobody narrated it. Finding both takes one index built from two inputs: what somebody recorded about the picture, and what the transcript captured of the words. In StoryFolder that is one search box. A single query runs across the metadata typed against each shot and the transcript lines that overlap that shot.
StoryFolder indexes footage you have imported into it. It does not edit video by editing text, which is Descript's and Reduct's whole product and they are good at it. Your picks do not come back out as an FCPXML selects sequence. It knows nothing about which drive a file came off, and it will not tell you what is on the shelf. What it does is make the shots you have imported findable by picture or by dialogue in one pass.
New in 0.4. Transcription now runs on your own machine and starts itself after an import, and the library gained collections, quick filters and video-level fields. How local transcription works · what one search covers.
Why does transcript-only search miss most of a real footage library?
Because most clips in a working library have nobody talking in them. The open-source arkiv project indexed a real production library of 1,506 clips. 1,161 of those clips are dialogue-free b-roll. A transcript-only tool has spoken text for the other 345 clips, which is 23% of that library.
That is one library, not a law of physics. A courtroom doc and a travel spot sit at opposite ends of the ratio. But 1,506 clips is a real corpus somebody counted, and it puts a number on something editors already argue about. From a thread on r/editors: "we found a LOT in our selects that the transcribe did not and could not". From the same research: "Transcriptions don't let you know where a voice cracked with emotion."
Both of those are the same complaint from different directions. The first is about coverage: the drone pass, the reaction, the hands on the bench, the establishing wide, the entire second half of a testimonial job that consists of the client's product doing things quietly. The second is about resolution: even inside the footage that talks, the transcript records the words and drops the delivery. Nobody ever typed "voice cracks" into an interview.
The two-tool tax follows from that. Transcript in one app, shot notes in a spreadsheet, footage in folders named after the job, selects in the NLE. Four places, and the transcript is not connected to the picture in any of them, so the join happens in your head at 11pm.
What does one search box actually search?
One query, evaluated against three things per shot in a single pass: the video's title and description, the fields you type into on a shot or on the video, and the transcript segments that overlap the shot's time range. Text, Dropdown, Tag and Number fields are all searched as text alongside the transcript. Rating and Checkbox are not — those two narrow results as filter chips instead.
The result tells you why it matched. StoryFolder attributes each hit to a filter, a metadata field, or the transcript, and ranks them in that order: your own filters first, then metadata fields, then transcript. So a search for forklift can return a shot captioned Content Type above a shot captioned Transcript, and you can see at a glance which one is the thing somebody typed and which is the thing somebody said.
The board's box asks the same question of one project and gives the same answers, and what each search destination covers is the rest of that story. The words half comes from transcription that runs on your machine.
This box does case-insensitive substring matching. Type two words and both have to match, in any order, within the same value. It is not fuzzy. If you type restock and the transcript says rest ock, this box finds nothing. The fuzzy matcher exists, and it lives in a different box, in the transcript editor. Two searches, two jobs, and knowing which is which saves you from concluding that a search failed when it did what it was asked.
One more practical note: a query stacks with your filters rather than replacing them. Video-level filters narrow the browse list first, so a video a filter has already ruled out contributes no shots to the results, and what you get back is the intersection of what you typed and what you left switched on.
How are the spoken words joined back to the picture?
By time. Each transcript segment is attached to the shot whose time range it falls inside, so the transcript stops being a separate document and becomes an attribute of the picture.
You see that most clearly in the By shot reading mode, one of five reading modes in the transcript editor along with By speaker, Continuous, Captions and Plain text. By shot puts the thumbnails down the page with the spoken lines grouped underneath the shot they were said in. It is the same join the search box uses, drawn out where you can read it.
The join survives the export. StoryFolder's transcript CSV carries a shot number column beside the start, end, speaker and text, so the file you hand to a translator or a producer already knows which picture each line belongs to. The storyboard PDF prints the per-shot transcript under each card in full, with no truncation.
How does silent b-roll become searchable?
Somebody has to put words on the picture, and there are two ways to do it.
The first is typing them, which is less grim than it sounds because you are typing into fields you chose. StoryFolder ships a default set of shot fields out of the box, including Key Takeaways, Action, Visuals / Cinematography, Sound & Music, Emotional tone and a Tags field. On a Pro plan you can create your own. The fields that make footage findable a year later tend to be blunt and short. Real ones from a working library: Location, Content Type, Talent Name, B-ROLL, and one field a customer named Find in Folder for the sole purpose of writing down where the thing physically lives.
The second is AI Autofill, which looks at the frame and writes values into the fields you switched on. Two things decide whether you reach for it:
- It is a cloud call, and it is on Pro. Frames are sent to StoryFolder's central server, which calls a vision model. Transcription runs on your own machine, and the two live next to each other in the app.
- Every field ships with its Autofill switch off. It fills the ones you turn on, and only where the field is empty, so it never overwrites something you typed.
Either way, the payoff is the same: a clip with an empty transcript still has words attached to it, and it comes back in the search on a metadata reason with no transcript reason at all. When transcription reports "No speech found in this video" on a music-only clip, that is a correct result about the audio, and it says nothing about whether the clip is findable.
What happens when the transcript heard the wrong word?
The transcript editor's own search box absorbs it. A wrong vowel, a dropped letter or two swapped letters still land on the word. It also joins and splits tokens across the gap Whisper left: search tick tock and it finds the line that reads TikTok, flagged as approximate so you know it was not a literal match. Phrases match across line boundaries, because a phrase does not stop being a phrase when the speaker pauses. It works in any script, Cyrillic and Japanese included. And it takes you to the best hit rather than the earliest one, which matters because with fuzzy matching the earliest hit is routinely the weakest.
There is a floor, on purpose. Very short words get no allowance, so cute never matches cube. At that length a single edit reaches a different word rather than a mishearing.
Where should the search workflow stop?
At the edge of what you imported. StoryFolder indexes the videos you gave it, so a drive sitting on a shelf is invisible to it. "Which drive is it on" is a question for NeoFinder or DiskCatalogMaker.
Three more limits worth knowing before you build a habit around this. There is no round-trip to your NLE, so picks do not arrive back as an FCPXML or EDL selects sequence. It is a desktop app for macOS and Windows, with no Linux build. And it is not a live review session, so nobody is watching along with you from another city.
Transcription itself degrades where you would expect: heavy accents, people talking over each other, noisy location sound, and specialist jargon. Words the model was unsure about carry a dotted underline, never a percentage, because the underlying probability is not calibrated well enough to print. That toggle is off until you turn it on under Display.
What can you export after finding the shot?
The transcript comes out as SRT, WebVTT, plain text, CSV or Fountain, and none of that is paywalled. The CSV is the one with the shot-number join. The per-shot transcript also prints inside the storyboard PDF.
The spreadsheet and shot-list export, which carries your own metadata columns, is on Pro, as are custom fields, Statistics and AI Autofill. On the free tier a board shows 12 shots and you get 3 boards, which is enough to see whether the join is useful to you and not enough to run a library on.
FAQ
How much of the arkiv library had no dialogue? 1,161 of 1,506 clips, or 77%, are dialogue-free b-roll, leaving 345 clips a transcript-only tool can reach.
Does the search box check shot metadata and the transcript at the same time? Yes. One query runs against both in one pass, and each result is labelled with the metadata field or the transcript that matched it.
Is StoryFolder's library search fuzzy? No. Library and board search is case-insensitive substring matching. The fuzzy matcher is in the transcript editor's search box.
Which metadata field types does the search box read? Text, Dropdown, Tag and Number, plus the transcript. Rating and Checkbox narrow results as filter chips rather than as searchable text.
Can I search for a speaker's name? No. Transcript search reads spoken words only. Speakers are handled by a separate visibility filter that runs before the query.
Does StoryFolder edit video by editing text? No. Descript and Reduct do that. StoryFolder indexes imported video and does not cut it from the transcript.
Which transcript export keeps the shot number? The transcript CSV, which carries start, end, shot number, speaker and text on every line.
What does "No speech found" mean? Transcription ran and found nothing spoken — music, ambience or silence. It is a status, not an error, and the clip is still findable through its metadata.