Fast summaries from URLs, files, and media. Works in the terminal, a Chrome Side Panel and Firefox Sidebar.
--force-summary to override).
One‑click summarizer for the current tab. Chrome Side Panel + Firefox Sidebar + local daemon for streaming Markdown.
Chrome Web Store: Summarize Side Panel
YouTube slide screenshots (from the browser):

npm i -g @steipete/summarizebrew install summarizesummarize daemon install --token <TOKEN> --port 8787Why a daemon/service?
If you only want the CLI, you can skip the daemon install entirely.
Notes:
summarize daemon install --token <TOKEN> adds another paired browser token instead of invalidating the old one.summarize daemon install --token <TOKEN> --port <PORT>, then set the same value in Options → Runtime → Daemon → Port.summarize daemon install starts the daemon for the current container session but does not register a Scheduled Task. Chrome Daemon mode also needs the pending packaged Windows native-host executable; Direct and Browser modes remain available.free via summarize refresh-free (needs OPENROUTER_API_KEY). Add --set-default to set model=free.More:
yt-dlp, native ffmpeg, and optional tesseract OCR.pnpm -C apps/chrome-extension buildchrome://extensions → Developer mode → Load unpackedapps/chrome-extension/.output/chrome-mv3pnpm -C apps/chrome-extension build:firefoxabout:debugging#/runtime/this-firefox → Load Temporary Add-onapps/chrome-extension/.output/firefox-mv3/manifest.jsonpnpm summarize daemon install --token <TOKEN> --dev --extension-id <UNPACKED_ID>
Requires Node 24+.
npx -y @steipete/summarize "https://example.com"
npm i -g @steipete/summarize
npm i @steipete/summarize-core
import { createLinkPreviewClient } from "@steipete/summarize-core/content";
brew install summarize
Homebrew ships from homebrew/core via brew install summarize.
If Homebrew is unavailable in your environment, use the npm global install above.
Install these if you want media-heavy features:
ffmpeg: optional native accelerator with broader codec support; bundled WebAssembly is the fallbackyt-dlp: required for YouTube slide extraction and some remote media flowstesseract: optional OCR for --slides-ocrGROQ_API_KEYASSEMBLYAI_API_KEYELEVENLABS_API_KEY (speaker diarization)GEMINI_API_KEY / GOOGLE_GENERATIVE_AI_API_KEY / GOOGLE_API_KEYOPENAI_API_KEYFAL_KEYDEEPGRAM_API_KEYmacOS (Homebrew):
brew install ffmpeg yt-dlp
brew install tesseract # optional, for --slides-ocr
If native ffmpeg/ffprobe are unavailable, Summarize uses the bundled WebAssembly build. Native ffmpeg remains recommended for speed and broader codec/filter support.
summarize ... (no daemon needed).summarize "https://example.com"
Inspect the effective model setup. Status only lists configured or usable providers; it never prints keys or missing-provider noise.
summarize status
summarize status --verbose
summarize status --probe
summarize status --json
--probe checks supported model-list endpoints without running paid inference. CLI providers are
reported as available when their enabled executable is present; API providers are reported as
configured when an effective key is present.
URLs or local paths:
summarize "/path/to/file.pdf" --model google/gemini-3-flash
summarize "https://example.com/report.pdf" --model google/gemini-3-flash
summarize "/path/to/audio.mp3"
summarize "/path/to/video.mp4"
Stdin (pipe content using -):
echo "content" | summarize -
pbpaste | summarize -
# binary stdin also works (PDF/image/audio/video bytes)
cat /path/to/file.pdf | summarize -
Notes:
- argument tells summarize to read from standard inputYouTube (supports youtube.com and youtu.be):
summarize "https://youtu.be/dQw4w9WgXcQ" --youtube auto
Podcast RSS (transcribes latest enclosure):
summarize "https://feeds.npr.org/500005/podcast.xml"
Apple Podcasts episode page:
summarize "https://podcasts.apple.com/us/podcast/2424-jelly-roll/id360084272?i=1000740717432"
Spotify episode page (best-effort; may fail for exclusives):
summarize "https://open.spotify.com/episode/5auotqWAXhhKyb9ymCuBJY"
HLS playlist:
summarize "https://example.com/master.m3u8"
--length controls how much output we ask for (guideline), not a hard cap.
The built-in default is long.
Set a default in ~/.summarize/config.json with output.length.
summarize "https://example.com" --length long
summarize "https://example.com" --length 20k
short|medium|long|xl|xxl1500, 20k, 20000--max-output-tokens <count> (e.g. 2000, 2k)--length unless you need a hard cap.--force-summary to always run the LLM.--length numeric values must be >= 10 chars; --max-output-tokens must be >= 16.packages/core/src/prompts/summary-lengths.ts):Best effort and provider-dependent. These usually work well:
text/* and common structured text (.txt, .md, .json, .yaml, .xml, ...)application/pdf (provider support varies; Google is the most reliable here)image/jpeg, image/png, image/webp, image/gifaudio/*, video/* (local audio/video files MP3/WAV/M4A/OGG/FLAC/MP4/MOV/WEBM automatically transcribed, when supported by the model)Notes:
Use gateway-style ids: <provider>/<model>.
Examples:
openai/gpt-5.4openai/gpt-5.4-miniopenai/gpt-5.4-nanoopenai/gpt-5-miniopenai/gpt-5-nanogithub-copilot/gpt-5.4anthropic/claude-sonnet-4-5xai/grok-4-fast-non-reasoninggoogle/gemini-3-flashzai/glm-4.7minimax/MiniMax-M3openrouter/openai/gpt-5-mini (force OpenRouter)Note: some models/providers do not support streaming or certain file media types. When that happens, the CLI prints a friendly error (or auto-disables streaming for that model when supported by the provider).
gpt-5.4-mini and gpt-5.4-nano are treated as real model ids; the same shorthand also works under github-copilot/....
Fast mode is a request option, not a model id:
summarize "https://example.com" --model openai/gpt-5.5 --fast --thinking medium
summarize "https://example.com" --model openai/gpt-5.4 --service-tier fast --thinking low
--fast is shorthand for --service-tier fast.--service-tier default|fast|priority|flex controls OpenAI service tier. fast is the summarize/Codex-facing spelling and is sent to OpenAI as service_tier="priority".--thinking none|low|medium|high|xhigh controls OpenAI reasoning effort. Aliases: off → none, min → low, mid / med → medium, x-high / extra-high → xhigh.--service-tier default clears a configured tier for one run.Config equivalent:
{
"model": "openai/gpt-5.5",
"openai": {
"serviceTier": "fast",
"thinking": "medium"
}
}
Compatibility aliases still work, but prefer the explicit flags above:
--model gpt-fast / --model fast → openai/gpt-5.5 + fast tier + medium thinking--model openai/gpt-5.5-fast → openai/gpt-5.5 + fast tiersummarize <input> [flags]
Use summarize --help or summarize help for the full help text.
--model <provider/model>: which model to use (defaults to auto)--model auto: automatic model selection + fallback (default)--model <name>: use a built-in or config-defined preset (see Configuration)$ claude mcp add summarize \
-- python -m otcore.mcp_server <graph>