Workflow

From search to timeline: exporting to Premiere, Resolve & Final Cut

Finding the right ten seconds is only half the job. The other half is getting those seconds into your editor without scrubbing for them by hand. MediaFind turns a set of search results into a real timeline — frame-accurate, drop-frame aware — that imports straight into Premiere Pro, DaVinci Resolve, or Final Cut.

You searched your library, you found the six moments you want, and now you face the dullest task in editing: opening your NLE, locating each of those clips, and scrubbing to the same in-and-out points you already identified. MediaFind closes that gap. Tick the moments you want, hit Export timeline, and you get a file your editor opens as a sequence — every clip already trimmed and laid down in order.

It's a deliberately small, sharp feature, and almost all of its difficulty hides in one place: time. The rest of this post is about how a list of moments measured in floating-point seconds becomes a timeline an editor trusts down to the frame.

Two formats, by design

There is no single timeline format every NLE agrees on, so MediaFind writes two — and lets the format match the job:

Both are plain text generated by pure Python — no After Effects scripting bridge, no vendor SDK, no heavyweight dependency. That keeps the export keyless, offline, and unit-testable without shelling out to anything.

The hard part: seconds are not frames

MediaFind models a moment as { media_path, start, end } in float seconds, because that's what transcripts and embeddings produce. NLEs model time in frames. The gap between those two is where naïve exporters quietly go wrong: place a cut at 12.4137s on a 23.976 fps timeline and the editor will round it somewhere — just not necessarily where you expected, and not consistently across clips.

So every export does two things before it writes a single line. First it probes the true frame rate of each source file — the same ffprobe-backed metadata the player chips use — because a 60 fps screen recording and a 23.976 fps camera file can sit side by side in one set of results. Then it snaps every in- and out-point to a frame boundary at that file's real rate, so the times written are exact integer multiples of a frame duration, not approximations.

found moments (seconds) clipA 12.41 → 18.90 clipB 03.00 → 07.25 clipC 44.10 → 49.97 probe fps / file ffprobe · per source snap to frames DF / NDF timecode timeline.fcpxml timeline.edl unreadable rate → assume default fps (≈ 23.976), record a warning, and surface it in the UI — a guess you can see, never a silent one.
The export is a tiny pipeline: probe → snap → write. Frame rate is read per source file, every point is rounded to a frame boundary at that exact rate, and the result is emitted as FCPXML (rich) and EDL (universal). A file whose rate can't be read falls back to a sensible default and tells you so.
Drop-frame is not optional. 29.97 and 59.94 fps timecode runs slightly slower than wall-clock, and the broadcast world papers over it with drop-frame timecode (the one with semicolons). Get this wrong and a long export drifts seconds out of sync by the end. MediaFind detects those exact rates and writes drop-frame timecode (DF) where it belongs and non-drop (NDF) everywhere else, rather than pretending every project is a clean 24 or 25.

Markers, not just cuts

An EDL gives you trimmed clips in order. FCPXML can carry more, so MediaFind uses it: each placed clip keeps the label that earned it — the matched phrase, the speaker, or your search query — as a marker on the timeline. When you open the sequence, you're not staring at clip_0044.mov; you're looking at "what the CEO said about pricing," parked on the exact frame it was said. The search context survives the handoff.

Consolidate to a proxy bundle

A timeline file is only useful if the editor can find the media it points at. That's fine on the machine that did the indexing, but it breaks the moment you hand the project to a collaborator or move it to an edit bay. So there's an optional consolidate step: instead of referencing your originals in place, MediaFind can gather just the regions you used into a self-contained bundle and point the timeline at those, padding each hit slightly so you have handles to trim against. One folder, one timeline file, everything relative — drop it on any machine and it opens.

Where it lives in the app

The export is one POST /api/export/timeline call behind a button on the bulk-selection bar: select moments anywhere results appear, pick a format and (optionally) a project frame rate, and save. For DaVinci Resolve specifically there's an even shorter path — a headless handoff that writes the picks to a file a bundled Resolve script reads, importing the media and appending it onto your current timeline in one click. (That deeper Resolve integration is its own packaging story.)

Why build it at all

Search that ends at a list of results makes you do the transcription-to-timeline translation in your head. The whole point of indexing a library is to act on what you find — and the most common action, for anyone cutting video, is "put these moments on a timeline." Doing that conversion correctly — per-file frame rates, drop-frame timecode, frame-snapped edits, a portable bundle — is unglamorous, easy to get subtly wrong, and exactly the kind of thing software should do for you. So it does, locally, with no upload and no round-trip through anyone's cloud.


The export speaks your editor's language, but the moments it places came from understanding your media in the first place. Next: how a folder of raw files becomes the searchable index all of this reads from.

Find the moments, then cut them

Search your library, tick the keepers, and export a timeline your editor opens. Locally, with no upload. Free trial.

Download for macOS