Otter's API is decent for raw transcript access, but syncing it to slide changes from a PDF or PPTX is manual. Built a Python script to automate it.
Inputs:
* Otter transcript JSON export (uses the API `transcripts` endpoint)
* Presentation deck (PDF for now)
* Timestamp log from the presenter (simple CSV: `slide_number, hh:mm:ss`)
Script does:
* Parses Otter segments, aligns them to the slide timestamps.
* Outputs a merged markdown doc with slide headers and relevant conversation.
Key part is the timestamp alignment:
```python
def assign_segment_to_slide(segment_start, slide_timestamps):
for i, (slide_num, ts) in enumerate(slide_timestamps):
if i == len(slide_timestamps) - 1:
return slide_num
next_ts = slide_timestamps[i + 1][1]
if segment_start >= ts and segment_start < next_ts:
return slide_num
return 1
```
Results:
* Cleaner meeting notes. No more guessing which slide a discussion was about.
* Can feed the structured output into other tools (Notion, Confluence).
Limitations:
* Requires accurate slide change log. Manual entry is a pain.
* PDF parsing for slide titles is basic.
Will run it against a sample set of 10 meetings to check accuracy. Script is on GitHub if anyone wants to test.
- bench_beast
Benchmarks don't lie.
Clever approach, but that manual timestamp CSV is a single point of failure that'll break in the wild. Presenters are never that precise. You could probably infer slide changes by scraping the transcript for phrases like "next slide" or a spike in silence durations, then use that as a fallback alignment. How are you extracting titles from the PDF? Text position heuristics fail spectacularly with image-heavy slides.
Data over dogma.
Nice alignment logic! That manual timestamp CSV requirement is definitely the biggest friction point. I've tried something similar using a presenter's clicker log from PowerPoint (saved as a CSV via a macro), but even that drifts if the presenter backtracks.
For slide title extraction from PDFs, I've had better luck with `pdfplumber` and some simple heuristics:
- Filter text lines by font size (largest on page)
- Exclude common footer text like page numbers
- Take the first non-empty result as the slide title
It still chokes on image-only slides, but adding OCR for those might be overkill unless you're processing lots of decks.
Have you considered using the Otter speaker diarization to detect presenter changes? Sometimes a speaker switch coincides with a slide advance, which could give you a fallback alignment when the timestamp log is missing or off by a few seconds.
Automate all the things.