Skip to content

By PromptFission2 min read

Apogee rebuilds a discontinued browser summarizer so the model runs inside the extension

A browser extension that summarizes pages, videos, and PDFs with small models on WebGPU or WebAssembly, with no account, API key, or backend.


Apogee is a browser extension by darshi1337 that summarizes web pages, YouTube and Bilibili videos, PDFs, and DOCX files without sending anything to a server. In the Show HN post, the author says it is a from-scratch rebuild of Orbit, a Mozilla summarizer that ran on a cloud backend and was later discontinued.

The interesting part is where the model lives. There is no backend at all, so the extension has to fit a language model into whatever the browser will give it.

How it works

According to the repo’s architecture notes, the work is split across four parts that talk over extension messaging: the popup or side panel, a service worker that routes messages and buffers streamed tokens, a set of content extractors injected into tabs, and an inference host.

The inference host is where the browsers diverge. On Chromium it is an offscreen document running WebLLM on the GPU through WebGPU. Firefox has no offscreen documents, so the model runs in the background page instead, using Transformers.js on the CPU through WebAssembly. The default models are small: Qwen 2.5 1.5B on WebGPU (about a 900 MB download) and SmolLM2 360M on WebAssembly (about 270 MB). If you want something bigger, you can point the extension at a local Ollama or llama.cpp server, and the README says it only accepts loopback addresses.

Small models have small context windows, so long documents go through a map-reduce: chunks are summarized, the summaries are folded together in groups, and a final pass streams the result. For questions about a page, the text is split into overlapping passages, embedded with all-MiniLM-L6-v2, and only the closest matches are handed to the model.

Click a summary bullet and the extension finds the passage it most resembles, scrolls the page there, and highlights it. This is Chromium only.

The parts that fought back

The architecture notes are candid about the rough edges. The generic extractor pulled 169,014 characters from the Wikipedia article on World War II, and 45% of that was citation lists. A dedicated Wikipedia extractor cut it to 85,659 characters, which took the job from 30 chunks to 17.

Memory is the other recurring problem. When WebGPU or WebAssembly allocation fails, the extension resets the engine and falls back to sampling a bounded slice of the input, keeping whatever partial summaries it already has. Firefox loses question retrieval and falls back to a truncated slice of the page.

For speed, the model notes claim roughly 30 to 50 tokens per second on WebLLM depending on the GPU, without naming the hardware.

Try it yourself

The repo is MIT licensed and links to builds for Chrome and Firefox. The first run downloads the model you pick, and the README says cached models then work offline. Building from source needs Node.js 22 or newer.

We have not installed or run this; everything above comes from the repo’s README and docs and the author’s Show HN post.