Skip to main content

Video Summarizer

Video summarizer demo

Documentation · GitHub stars

Local-first, multi-source video summarization for YouTube, social platforms, cloud drives, and local files. Works with any OpenAI-compatible LLM, supports an optional vision path, and includes NotebookLM-style workflows.

Not steipete/summarize. This project is a self-hosted video pipeline with transcript caching, Cobalt fallback, a Streamlit workspace, and an agent skill. steipete/summarize is a generic URL clipper.

Bring your own API keys. Configuration lives in summarizer.yaml and .env. Full documentation: summarize.martino.im.

Features

  • 11+ sources — YouTube, Instagram, TikTok, X/Twitter, Reddit, Facebook, Google Drive, Dropbox, and local files
  • Any LLM — OpenAI, Groq, Gemini, Ollama, OpenRouter, NVIDIA, Perplexity, LiteLLM, and other OpenAI-compatible endpoints
  • Two modes — Transcript-based summarization (default) or visual mode with vision-capable models
  • Summary styles — Q&A, distillation, fact-checking, tutorials, Mermaid diagrams, essays, and custom prompts via summarizer/prompts.json
  • Multiple interfaces — CLI, Streamlit UI, HTTP API, Docker, Raycast extension, and agent skill
  • Transcript cache — Reuse cached transcripts across runs; optional Cobalt sidecar for yt-dlp fallbacks

Requirements

  • Python 3.7+
  • ffmpeg on PATH
  • At least one LLM API key in .env
  • Cobalt (optional, included in Docker Compose) for URLs that yt-dlp cannot handle

Installation

Summarizer is a CLI application. Install it in an isolated environment so upgrades to other Python tools (groq, litellm, openai, MCP servers, etc.) cannot break it. The most common failure mode is a pydantic / pydantic-core version mismatch when many packages share one ~/.local site-packages directory.

Method Best for
pipx (recommended) CLI, HTTP API, and day-to-day use
venv Development or a manually managed environment
pip install --user Quick try only — can conflict with other tools in ~/.local
Docker Streamlit GUI with no local Python dependencies
# Recommended — isolated app environment
pipx install martino-summarize

# HTTP API (includes FastAPI + uvicorn)
pipx install "martino-summarize[server]"

# Everything: server + local Whisper + LiteLLM
pipx install "martino-summarize[all]"

Alternative with a virtual environment:

python3 -m venv ~/summarizer-venv
source ~/summarizer-venv/bin/activate   # Windows: ~/summarizer-venv\Scripts\activate
pip install "martino-summarize[server]"

Quick Start

Set an OpenAI-compatible API key in .env. Groq (GROQ_API_KEY) offers a free tier; OPENAI_API_KEY works with --provider openai.

pipx install martino-summarize
summarizer --init-config
echo "GROQ_API_KEY=your_key_here" > .env
summarizer --source "https://www.youtube.com/watch?v=arj7oStGLkU"

Summaries are saved to summaries/watch_YYYYMMDD_HHMMSS.md.

Docker

git clone https://github.com/martinopiaggi/summarize.git
cd summarize
cp summarizer.docker.yaml summarizer.yaml   # Docker-optimized defaults
echo "GROQ_API_KEY=your_key_here" > .env     # or OPENAI_API_KEY, etc.
docker compose up -d

Open http://localhost:8501, paste a URL, and summarize. GUI summaries and transcript cache persist under ./summaries/ (including .cache/transcripts/).

Pre-built image:

docker pull ghcr.io/martinopiaggi/summarize:latest

Compose variants:

docker compose up -d                                              # + Cobalt sidecar
docker compose -f docker-compose.gui-only.yml up -d               # YouTube-only
docker compose -f docker-compose.yml -f docker-compose.named-volume.yml up -d  # named volume

docker-compose.yml mounts .env, summarizer.yaml, and ./summaries/. Cobalt runs as a sidecar for TikTok, Instagram, and other yt-dlp fallbacks.

Interfaces

Interface Command
Streamlit GUI docker compose up -d → http://localhost:8501
CLI summarizer --source <source>
HTTP API pipx install "martino-summarize[server]" then summarizer serve → http://localhost:8000/docs
Docker docker compose up -d
Agent Skill .agent/skills/summarize/SKILL.md
Raycast extensions/raycast-summarize/

How It Works

  • Transcript path (default): downloads audio or video, transcribes with Whisper or captions, caches the transcript, then summarizes with an LLM.
  • Visual path (--visual): sends the video directly to a vision-capable model, skipping transcription. Uses the same prompts, provider config, and .env keys as the transcript path. Supports base64 chunks (default) and url passthrough for YouTube.

Full pipeline diagram: summarize.martino.im/how-it-works

Troubleshooting

Issue Resolution
pydantic-core version mismatch on summarizer serve Not a summarizer bug — your Python environment has mismatched packages. Fix: pip install --upgrade pydantic pydantic-core, or reinstall in isolation: pipx install "martino-summarize[server]"
Server dependencies not installed on serve Install the server extra: pipx install "martino-summarize[server]" or pip install "martino-summarize[server]" inside a venv
Strange import errors after upgrading other tools Reinstall in an isolated environment (pipx or a dedicated venv) instead of shared ~/.local site-packages
yt-dlp or platform errors Ensure Cobalt is running (docker compose includes it) or set COBALT_BASE_URL
Missing API key Add the provider key to .env (see summarizer.example.yaml for provider names)
No config file Run summarizer --init-config or pass --base-url and --model with --no-config
ffmpeg not found Install ffmpeg and ensure it is on your PATH

Full guide: summarize.martino.im

Contributing

git clone https://github.com/martinopiaggi/summarize.git
cd summarize
pip install -e ".[all]"
pip install pytest
pytest tests/

See CONTRIBUTING.md.

License

MIT

Release files for martino-summarize 0.2.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for martino-summarize 0.2.2
File Size Uploaded
martino_summarize-0.2.2.tar.gz 67.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for martino-summarize 0.2.2
File Interpreter ABI Platform
martino_summarize-0.2.2-py3-none-any.whl Python 3 none any Details

Total release size: 130.6 kB

Release files / martino_summarize-0.2.2.tar.gz

Download URL martino_summarize-0.2.2.tar.gz
Size 67.0 kB
Tags Source
SHA-256 checksum
How to use checksums
f82144579dedd177e9510ee2296455c1a0db06575a6e824ab9eaf96098ea34cd
BLAKE2b-256 checksum
How to use checksums
dabcfa2820ee2fd0c97b342ffdd826e79a95dfd00712638f25733c277d0649fc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 4, 2026.

Transparency log

Release files / martino_summarize-0.2.2-py3-none-any.whl

Download URL martino_summarize-0.2.2-py3-none-any.whl
Size 63.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
75bc8b03f19e92de4f661f42a58b802b7d58c481b886f0e3cbf45429d47fbe4d
BLAKE2b-256 checksum
How to use checksums
01dfca5e87bd15aa135ad6c71d3c4cf0b0a01a1b11c0f5f3ae7c069b1644ef37
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 4, 2026.

Transparency log

Release history Release notifications | RSS feed

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

This release

0.2.2 This release

2 release files

0.2.1

2 release files

0.2.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page