All Stories
2026-09-17•3 min read

Education · Video · Document RAG · CLIP · TableModel · Multimodal AI · Pixeltable Cloud

LectureSync: Slide-Grounded Lecture Q&A Without an Aligner Service

Pair an MP4 with a slide PDF. Split pages, sample frames, retrieve, then cite. Pixeltable is two views on one lecture — not PyMuPDF plus FFmpeg plus Pinecone.

Pierre Brunelle

Pierre Brunelle

Pixeltable Team

View as Markdown

Summary: LectureSync is the student loop: a lecture video and a slide deck become searchable pages and sampled frames, then an answer cites the slide and the transcript. You do not stitch a PDF splitter, a frame farm, and two vector databases. You declare Lectures, a Slides view, and a Frames view. Retrieve first. Generate second. pip install pixeltable.

The Product#

  • Ingest lecture_video + slides_pdf
  • One row per slide page (text + page image)
  • One row per sampled second of video
  • Ask “What does backpropagation compute?” and land on a page plus nearby speech

Passage RAG on a prospectus is DocuVision. Visual moments in a clip library are ClipFinder. This post is both media types on one lecture.

The Stitch You Delete#

PyMuPDF for pages. FFmpeg for JPEGs. Whisper in a GPU box. Chroma for slide text. CLIP in Pinecone for frames. A notebook that hopes the timestamps line up. Delete the PDF; the chunks in Chroma are your problem. In a catalog, delete the lecture; both views follow.

The Receipt#

python

Retrieval is the index. Generation is one Gemini call over those strings — not a shipped slide-aligner. Frames is the visual audit trail at 1 fps, same iterator as ClipFinder. Same app.py on Cloud: pxt db update → pxt schema update → pxt service update.

What This Is Not#

Not an LMS. Not Zoom. Not “we forced every slide to a timestamp with a private model.” You retrieve the page, you retrieve nearby speech, you generate. Auth and grades stay where they are.

People Also Ask#

Why separators='page'? Decks are pages, not 300-token passages. DocuVision uses token_limit for prospectuses. Change the iterator kwargs; do not change the table.

Do I need two CLIP indexes? Slide images and video frames are different rows. Each view gets its own index. Do not mix embedding= and image_embed= on one snippet.

How do I go to Cloud? Same file. PIXELTABLE_API_KEY, pxt://org:db, then db → schema → service.

Is this an AI automation workflow? Yes. Insert the deck and the lecture; splitter, frames, and retrieve-then-generate run as the table. The category is AI automation workflow.

Ground the Answer in the Deck#

Declare the lecture. Split the PDF. Sample the video. Retrieve, then generate. Keep the citation. Delete the aligner service.

Declarative. Multimodal. Incremental.

One Python file for tables, indexes, and HTTP. Start locally, or sign up for Cloud.

Get started

Docs quickstart · 10-minute tutorial · GitHub · Discord