Find missing PDFs.
Clean up your library.
Keep control of your papers.

Fill the gaps in the Zotero library you already keep. Open access first, campus when you have it. A folder copy stays on this machine — yours to back up or take elsewhere.

The application

See what’s missing, grow the collection, tidy the records, then ask the PDFs you already have.

Wanted: missing PDFs selected for Preview, Grab, and Attach
Wanted — missing PDFs, selected to fetch
Discover: topic filled, ready to search or follow people
Discover — grow the library from a topic or people
Repair: tidy identifiers and review duplicates
Repair — tidy identifiers and duplicates
Ask: a cited answer from papers already on disk
Ask — cited answers from papers already on your disk

What can I do with it?

  • Fill missing PDFs — free copies first, campus access when you have it (Preview shows what a fetch can reach)
  • Grow the library from a topic search or from people you follow
  • Tidy duplicates, identifiers, and broken attachments
  • Keep a folder copy you can back up or hand to another tool
  • Ask the papers you already have — optional local AI, off until you turn it on

Walk through a real job · See how it compares

On your machine

Downloads, notes, and the folder copy stay on this computer. Zotero remains the catalogue. Optional AI uses Ollama locally and stays off until you turn it on. You copy the folder yourself; Zotero stays the catalogue on this computer.

From a collection to PDFs you trust

  1. Open the workbench and pick a collection.
  2. On Wanted, preview what’s missing, then fetch copies onto your computer.
  3. Open the files yourself and attach the ones you trust, or set Grab to attach them on Zotero 10 or newer.
  4. Grow the library on Discover. Tidy records on Repair after you turn on Advanced.

Full walkthrough with screenshots · All walkthroughs

Install

Build on your machine — there is no app store package and no published image. Keep Zotero on the host with the local API enabled, then open the workbench at http://127.0.0.1:8765.

git clone --branch v1.0 https://github.com/glen-w/Paperful.git
cd Paperful
cp .env.example .env
mkdir -p ../paperful-data
cp config.minimal.toml ../paperful-data/config.toml   # set email
docker compose build
docker compose run --rm paperful doctor
docker compose up

Compose reads config.toml from PAPERFUL_DATA (the .env default is ../paperful-data), not from the git root. Set a real email in that file (Unpaywall). To keep data in the checkout, set PAPERFUL_DATA=. and copy config.toml next to compose.yaml.

Omit --branch v1.0 to track latest main. Docker · Zotero · First fill · README