Bartolomeo Zisa5 downloadsAuto-summarize PDF slide decks into study-ready Markdown class notes with LaTeX equations and LLM-picked figure crops. Providers: Gemini, OpenAI, Anthropic, Ollama.
An Obsidian plugin that turns a PDF slide deck into study-ready Markdown class notes: concise notes per slide, LaTeX equations, and only the relevant figures — picked by the LLM with bounding boxes, cropped out of the slide, and embedded.
Works with Google Gemini (default), OpenAI, Anthropic Claude, and Ollama (fully local). Providers are modular — see Adding a provider.
Requires Obsidian 1.4.0 or later.
Not in the directory yet (submission in progress). Until then, use one of the options below. You can follow the listing at https://community.obsidian.md/plugins.
BRAT installs plugins straight from a GitHub repo and keeps them updated.
Ctrl/Cmd+P → BRAT: Add a beta plugin for testing.https://github.com/BartolomeoZisa/obsidian-slide-autosummarizeBRAT tracks the latest GitHub release, so future versions arrive without manual copying.
Open the releases page and pick the latest release.
Download the three assets: main.js, manifest.json, styles.css
(under Assets; do not download the "Source code" archives).
Create this folder in your vault:
<your-vault>/.obsidian/plugins/slide-autosummarize/
C:\Users\<you>\Documents\<vault>\.obsidian\plugins\slide-autosummarize\~/Documents/<vault>/.obsidian/plugins/slide-autosummarize/~/Documents/<vault>/.obsidian/plugins/slide-autosummarize/The folder must be named exactly slide-autosummarize and the three files must sit
directly inside it (not in a subfolder).
In Obsidian: Settings → Community plugins → turn off Restricted mode if needed → click the refresh icon next to Installed plugins → enable Slide Autosummarize.
If it does not appear, restart Obsidian.
Direct download links (once a release is published):
Or from a terminal:
VAULT="$HOME/Documents/MyVault" # <- your vault path
DEST="$VAULT/.obsidian/plugins/slide-autosummarize"
mkdir -p "$DEST"
BASE=https://github.com/BartolomeoZisa/obsidian-slide-autosummarize/releases/latest/download
for f in main.js manifest.json styles.css; do curl -fL "$BASE/$f" -o "$DEST/$f"; done
Windows PowerShell equivalent:
$vault = "C:\Users\you\Documents\MyVault"
$dest = Join-Path $vault ".obsidian\plugins\slide-autosummarize"
New-Item -ItemType Directory -Force -Path $dest | Out-Null
$base = "https://github.com/BartolomeoZisa/obsidian-slide-autosummarize/releases/latest/download"
foreach ($f in "main.js","manifest.json","styles.css") {
Invoke-WebRequest "$base/$f" -OutFile (Join-Path $dest $f)
}
git clone https://github.com/BartolomeoZisa/obsidian-slide-autosummarize.git
cd obsidian-slide-autosummarize
npm install
npm run build # typecheck + production bundle -> main.js
Then copy main.js, manifest.json, styles.css into
<vault>/.obsidian/plugins/slide-autosummarize/ and enable the plugin.
Development: npm run dev watch-builds main.js on save.
Ctrl/Cmd+P → BRAT: Check for updates to all beta plugins.main.js from the latest release and replace the old one
(keep your data.json — that file holds your settings and API keys).Open Settings → Slide Autosummarize and pick a provider.
gemini-3.5-flash-lite is the default) or choose
Custom… and type any model id.sk-… key.gpt-4o-mini, gpt-4o, …) or Custom… for another id.sk-ant-… key.Install Ollama and pull a vision model, e.g.:
ollama pull qwen2.5vl
Other options: llava, gemma3. Text-only models work too — turn off
Send slide images to the LLM first.
Provider: Ollama (local), base URL http://localhost:11434/v1, model qwen2.5vl.
No key needed.
Provider: Custom OpenAI-compatible → set the base URL
(http://host:port/v1), an optional API key, and the model id.
Works with vLLM, LM Studio, llama.cpp server, OpenRouter, Mistral, Together, …
Ctrl/Cmd+P → Slide Autosummarize: Summarize active PDF, orOutput goes to Summaries/<pdf-name>.md by default, with figures in
Attachments/slides/<pdf-name>/.
---
source-pdf: "[[lecture-03.pdf]]"
generated: 2026-10-17T09:12:44.000Z
provider: gemini
model: gemini-3.5-flash-lite
slides: 24
---
# lecture-03 — Slide Summary
> Auto-generated class notes from `[[lecture-03.pdf]]` (24 slides) with Google Gemini
> (`gemini-3.5-flash-lite`) on 2026-10-17.
## Slide 1
Notes for slide 1 …
## Slide 2
Notes, with math: the loss is $L(\theta) = -\sum_i \log p_\theta(y_i \mid x_i)$
$$
\nabla_\theta L = \mathbb{E}[\nabla_\theta \log p_\theta(y \mid x)]
$$
![[Attachments/slides/lecture-03/lecture-03-p02-fig1.png]]
*attention pattern across heads*
$…$ inline, $$…$$ display) and render in Reading view.FIGURE [x1,y1,x2,y2] | caption (0–1000 coordinates) and the plugin cropping
that region out of the page render.| Setting | What it does |
|---|---|
| LLM provider | Gemini / OpenAI / Anthropic / Ollama / Custom. |
| Model | Curated dropdown per provider, plus Custom… for any model id. |
| Output folder | Where the Markdown notes go (default Summaries). |
| Image folder | Where cropped figures (and optional full renders) are saved. |
| Send slide images to the LLM | Multimodal input. Required for figure detection. Turn off for text-only models / to save tokens. |
| Embed relevant figures in the note | Crop LLM-picked figures and embed them. Off = text-only note. |
| Keep full slide renders | Also save every rendered slide PNG (not embedded). Off by default. |
| Slides per LLM call | Batch size (default 3). Lower it if the model truncates output. |
| Render scale | Resolution of rendered slides (default 2.0). Higher = sharper crops, more tokens. |
| Temperature | On = omit the parameter and use the provider's own default. |
| Max tokens | Response cap per batch. |
| Auto-retry on overload | Retries per batch on 429/5xx/timeouts, exponential backoff honoring Retry-After (default 5, 0 = fail fast). |
| Extra instructions | Appended to every prompt, e.g. “Write in Italian, undergraduate level, focus on derivations.” |
| Auto-summarize new PDFs | Summarize every PDF added to the vault automatically. |
“Could not start the PDF engine” — the pdf.js worker is bundled inside main.js
and loaded from a Blob URL, so no network access is needed. If you see this, check the
developer console (Ctrl+Shift+I) for the underlying error.
HTTP 503 / “model is experiencing high demand” — transient. The plugin retries automatically with backoff; raise Auto-retry on overload if your deck is long. Switch models if it persists.
Empty or truncated notes — lower Slides per LLM call (e.g. 1–2) and raise Max tokens.
No figures in the note — figures require Send slide images to the LLM and Embed relevant figures. Text-only models cannot detect figures.
Wrong crop regions — the model returned bad coordinates. Lower Slides per LLM call (fewer slides per request = better spatial attention) or use a stronger vision model.
Wrong model id — use Custom… and paste the exact id from the provider's docs.
src/pdf.ts — extracts text per page with pdf.js and renders each page to PNG.
If rendering fails, the plugin continues text-only.src/summarizer.ts — batches slides, sends text + images + prior notes to the
provider, then assembles and writes the Markdown note.src/figures.ts — parses FIGURE lines, converts 0–1000 boxes to pixels,
crops the PNGs, and swaps the directives for embeds.src/llm/ — one file per API behind a single LLMProvider interface.src/llm/my-provider.ts implementing LLMProvider
(summarizeSlides, validateConfig, defaultModels).src/llm/factory.ts (allProviders() + ProviderId).SummarizerSettings (src/summarizer.ts) and the
settings tab (src/settings.ts).The PDF is processed locally. Slide text and rendered page images are sent only
to the provider you configure (or to your own Ollama server). API keys are stored in
the plugin's data.json inside your vault — use a restricted key.
GPL-3.0-or-later — see LICENSE; copyright notice in NOTICE.
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. If you distribute a modified version, you must make the source available under the same license.
Third-party components keep their own licenses: pdfjs-dist (Apache-2.0) is bundled
into main.js.