PDFMacroPDFMacro
Bring your own AI

Your AI, your key.
Not ours in between.

PDFMacro ships no AI that writes text. Chat with PDF, Summarize, Write with AI and Translate run on the AI you choose: your own API key with OpenAI, Anthropic or Google, or a model on your own computer. This page says where your text goes in each case, and where it never goes.

Where inference happens

Three places, and one that is never used.

Your provider, with your key

OpenAI, Anthropic (Claude), Google Gemini, OpenAI-compatible. Requests go from your browser straight to the provider's address and are billed to your account. The app asks before the first one and lists every one in Settings → AI.

A server you run yourself

Ollama or LM Studio. Document excerpts go to that endpoint — your machine — and the code refuses to send them anywhere else. Nothing reaches an AI company.

A PDFMacro server

Never. PDFMacro runs no AI and no server for it, so there is nothing of ours in between to see your key, your question or your document.

On-device helpers

Two small helpers that write nothing.

They match what you type to a tool and find names and sensitive details. Both run in this tab and send nothing anywhere. The repository id is kept for auditing; the capability leads. The larger of the two is ~110 MB.

Understanding what you type
~45 MB

Understanding what you type in the command bar, and Pre-discovery search

Xenova/all-MiniLM-L6-v2
Finding names and sensitive details
~110 MB

Finding names and other sensitive details in a document, and Privilege review

Xenova/bert-base-NER
One download, asked for once each

The two default models come to ~155 MB together, and consent is asked per model rather than once for all of them — agreeing to the smaller one for the command bar is not agreeing to the larger one for entity recognition. They are different sizes bought for different reasons.

Readiness also means “everything you can actually use is ready”: both features the second model powers are part of the licence, so a free account is never told to fetch it.

Then it works offline

Weights live in your browser's Cache Storage, on this device — not in your account. So they stay put, and they also stay subject to your browser: clearing site data, a private window, or the browser reclaiming space will remove them, and you will be asked once more rather than charged the bandwidth silently.

What you can check

Every request to your provider is listed on your device.

Asked once, per provider.

Before the first request to a provider, the app says what will be sent and to whom, and sends nothing until you agree.

Logged, without the text.

Settings → AI lists each request: the provider's address, the model, the sizes in and out, the status and the time. Never what was sent.

Your key stays in this browser.

It is sent only to your provider's own address, and any request outside that address is refused in code. Forget key removes it.

Your own server — Ollama or LM Studio

Point it at a bigger model you already run.

For anyone who wants nothing to reach an AI company: run the model on your own computer and connect it in Settings → AI.

Paste an endpoint — http://localhost:11434 for Ollama, http://localhost:1234 for LM Studio — and press Test connection. That click is the only thing that fetches. Nothing dials out on page load, on import or on a timer, and a saved endpoint is remembered as text that becomes a live connection only when you press the button again.

Once connected, Chat with PDF, Summarize, Write with AI and Translate send document excerpts to that endpoint and nowhere else. That is enforced rather than intended: every request URL is checked against the origin you configured, and one outside it throws instead of being sent.

PDFMacro never pulls models onto your server. It lists what is already installed; when a server has none, it prints the command for you to run yourself, sized for the machine it detected:

ollama pull qwen2.5:7b4.7 GB · your machine can run a 7B model comfortably
ollama pull llama3.2:3b2.0 GB · a good balance for this machine
ollama pull llama3.2:1b1.3 GB · small enough to run smoothly here
What the connection test can tell you
Connected
connected

The server answered and listed its models — exactly what `ollama list` shows, with no editorialising. Press “Use this server” and inference moves there for Chat with PDF and Summarize.

Running, but not accepting this app
origin-rejected

Something is listening and it refused this page's origin. For Ollama, set OLLAMA_ORIGINS to this app's origin and restart it. In LM Studio, enable CORS in the server settings.

Nothing answered
unreachable

The server is not running, the port is wrong, or the browser blocked the request before it left — a page served from a public address can be stopped by the browser's private-network rules before the server's own configuration is even consulted.

The middle case is the one worth knowing about in advance. A server that is running but has not been told to accept this app looks, to page JavaScript, exactly like a server that is not running — both surface as the same fetch failure. A second probe separates them, because a present-but-refusing server still returns an opaque response while an absent one throws. That is what lets the app name the actual problem instead of shrugging.

FAQ

Questions about your own AI.

Does PDFMacro include an AI model?
No. Since October 2026 PDFMacro ships no AI that writes text. Chat with PDF, Summarize, Write with AI and Translate run on YOUR AI: your own OpenAI, Anthropic (Claude) or Google Gemini API key, any OpenAI-compatible service, or Ollama / LM Studio running on your own computer. They are part of Pro. There is no AI subscription from us and no free AI allowance: what you pay for AI is what your provider charges you, or nothing with a local model.
Where does my document go when I use my API key?
From your browser straight to the provider you chose, using your key, billed to your account. PDFMacro never receives the key, the question or the document: there is no PDFMacro server in between. The first time you use a provider the app asks before sending anything, every request is listed in Settings → AI (address, model, sizes and time; never the text), and the provider's own terms apply to what you send.
Where is my API key stored?
In this browser's storage on this device, and nowhere else. It is sent only in the request headers to your provider's own address; the code refuses any request outside that address. Forget key in Settings → AI removes it.
Can I keep everything on my own machine?
Yes: use Ollama or LM Studio. Your document excerpts then go only to the server you connect, on your own computer, and nothing reaches an AI company at all.
Which AI models does PDFMacro still download?
Two small helpers that write nothing: understanding what you type (Xenova/all-MiniLM-L6-v2, about 45 MB) and finding names and sensitive details (Xenova/bert-base-NER, about 110 MB), roughly 155 MB together. Each is asked for separately when a feature first needs it, runs in this tab and sends nothing anywhere.
Why does my own server need OLLAMA_ORIGINS set?
Because a browser will not let one origin's page read another origin's server unless that server says it may. Ollama refuses unknown origins by default, and the refusal reaches page JavaScript looking identical to “nothing is listening”. PDFMacro separates the two with a second probe, so it can tell you which problem you actually have — then setting OLLAMA_ORIGINS to this app's origin and restarting Ollama fixes the first one. LM Studio has a CORS toggle in its server settings.
Will PDFMacro download models to my Ollama server?
No. It never calls a pull endpoint. If a connected server has no models installed it prints the command for you to run in your own terminal, sized for the machine it detected, and otherwise it simply lists what is already there.

Connect your AI in a minute.

Paste your key, or point it at Ollama. Then open the request log and see exactly where each request went.