Show HN: Summarize – local-first tool that turns videos into notes

martinopiaggi1 pts0 comments

Summarize - Martino Piaggi

Summarize

Jul 12, 2026

project

Summarize is an open-source tool I built that turns any video (URL or file) into notes you can actually use.

Not “a summary.” Notes. The kind you keep.

It exists because there’s too much content and too little time.

What it helps with:

A long podcast, lecture, or conference talk compressed into something you can skim in five minutes.

A Reddit post, X video, or Instagram reel where there is one idea buried under two minutes of fluff.

A video you already watched but want to remember without rewatching.

Under the hood, Summarize is UX sugar (Streamlit, CLI, HTTP API, Docker, even a Raycast extension) over a simple pipeline: get a transcript YouTube captions when they exist; otherwise Whisper), chunk it, send the chunks to an LLM with a prompt from `prompts.json`.

Sounds simple. It is simple.

"endpoint": "/v1/chat/completions",<br>"content": "Summarize this post"

But the felt experience of getting a clean summary is completely different from doing the thing yourself. The gap between “I could do this manually” and “I actually do this regularly” is where tools like this live.

Origin story: Colab

In October 2023 I wanted to summarize videos without watching them. So I opened a Colab notebook, threw in a couple of parallel calls to OpenAI’s Whisper, and used free Colab compute.

Then I found summarize.tech: ten dollars a month is a lot for something that is mostly automation over scraping. I figured I could do it better, faster, and basically for free (not just for YouTube, but for any URL or VTT file).

In my free time the architecture matured the way good software does:

Not by design, but by accumulated embarrassment.

The monolithic Colab notebook became a modular CLI. Then a Streamlit app. Then a Docker-deployable service. Then an HTTP API. Then a Raycast extension and an agent skill, because once you have a clean main config everything else is just another front door.

For non-YouTube sources (TikTok, Instagram, X, Reddit, Facebook) download goes through a fallback chain: yt-dlp first, then Cobalt as a local Docker sidecar when yt-dlp fails. YouTube is special-cased: captions when available, audio download + Whisper when they’re not. Local files, Google Drive, Dropbox work too. Same pipeline, different front ends.

The tool speaks any OpenAI-compatible LLM endpoint. I’ve run it against Gemini, Groq, Ollama, OpenRouter, Perplexity, DeepSeek, NVIDIA’s API, and plain OpenAI. You put providers in summarizer.yaml, keys in .env, and you’re done. Switching models is a one-line change. That’s the whole point of not hardcoding a vendor.

There’s also a transcript cache. Re-summarize the same video with a different prompt or model and you skip transcription entirely. Sounds minor until you notice you do that constantly.

NotebookLM ?

For a while I stopped using Summarize and just used NotebookLM. I’ve always been fascinated by it.

Then the lack of control got to me. No real chunking. Weak support for anything outside YouTube. No “use this model with this prompt and this cost.” So I came back.

This is free, in the way that matters: you pay for compute, not for a product wrapping compute. Even with Whisper on Groq you’re looking at roughly $0.04 per hour of audio and only when you actually need transcription. YouTube captions are free. Open-source models at 20B or even 120B are commodities now. Cents per summary. Sometimes fractions of cents.

Groq deserves a mention. Their LPUs transcribe at roughly 25× real-time. A one-hour podcast finishes in under three minutes. That’s an order of magnitude faster than running Whisper locally on a GPU, and about 3× cheaper than OpenAI’s Whisper API. The API is OpenAI-compatible, so switching is boring in the best way.

Whispering

I added a --speed flag that speeds up the audio before Whisper sees it. The idea is almost dumb: feed Whisper a 1-hour file at 1.5x and it only processes 40 minutes. You pay less. It finishes faster. ffmpeg chains atempo filters so any positive speed works, not just the 0.5–2.0 range of a single stage.

The tradeoff is accuracy. At 1.5x the degradation is barely noticeable. At 2x it starts to show, especially with fast speakers or accents. There’s no rigorous published benchmark. It’s one of those tricks people poke at in Whisper’s GitHub issues. I tested it on my own stuff and decided the imprecision was worth the savings. Your mileage may vary.

If you want to go deeper: faster-whisper , whisper.cpp and Whisper Turbo / small / tiny etc.

Eyes

And if you don’t want transcription at all: --visual sends the video straight to a vision-capable model. Same prompts. Same config. Different path.

No captions. No Whisper. No “what was said.” You get notes from the image stream itself, not from a speech-to-text approximation of it. The model is forced to watch scenes, on-screen text, gestures, cuts, the stuff a transcript throws away.

Visual mode is for when the payload is on the screen:...

whisper summarize youtube video openai free

Related Articles