All Stories
2026-09-093 min read

Video Search · CLIP · Frame Iterator · Multimodal AI · TableModel · Pixeltable Cloud · Vector Search

ClipFinder: Natural-Language Video Moment Search in One app.py

Upload MP4s, search “person typing on a laptop,” get the top moments with a preview frame. Pixeltable is the frames, CLIP index, and incremental insert — not FFmpeg plus Pinecone.

Pierre Brunelle

Pierre Brunelle

Pixeltable Team

Summary: ClipFinder is the product a video-tool founder actually wants: drop raw MP4s, search a visual moment in English, land on a timestamp and a preview. You do not write an FFmpeg worker, a frame table, and a vector database. You declare Videos and a Frames view. CLIP is an index on the frame. Tomorrow’s insert is searchable without a rebuild. pip install pixeltable.

The Product#

  • Ingest an MP4 with video_id, title, category
  • Sample the file every second without an FFmpeg script
  • Text query → top 5 moments with a preview frame
  • A new upload tomorrow is indexed; the old library is not re-embedded

Image-to-video search is the sibling path: find a video from an image. This post is text → moment. The 20-minute kitchen-sink pipeline is video intelligence. Here the receipt is one query.

The Stitch You Delete#

Object store for bytes. A job that dumps JPEGs. CLIP in a GPU box. Pinecone for the vectors. A cron so yesterday’s clip is in the index. That is the Frankenstein stack. Pixeltable is the catalog those joints were approximating.

The Receipt#

python

frame is the iterator column. One CLIP embedder on that column serves the text query. Insert a row; the view and the index follow. Same file locally and on Cloud:

bash

What This Is Not#

Not a hosted consumer search engine — that is PixelSearch. Not per-moment audio. Not Twelve Labs. Poster-only search is the Photos post; this one is every sampled frame.

People Also Ask#

Do I need Pinecone? No. The index lives on the view.

What fps? 1 is the default for interviews and B-roll. Lower it for long archives.

How do I go to Cloud? Same app.py. PIXELTABLE_API_KEY, pxt://org:db, then pxt db updatepxt schema updatepxt service update.

Search the Moment, Not the Filename#

Declare the table. Apply the file. Insert the MP4. Call find_video_moments. Keep the product. Delete the frame farm.

Declarative. Multimodal. Incremental.

Focus on innovation, not infrastructure.

10-minute tutorial · Join community