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.
Not paperful.io — Paperful is a free, open-source helper for your own Zotero library.
The application
See what’s missing, grow the collection, tidy the records, then ask the PDFs you already have.
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
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
- Open the workbench and pick a collection.
- On Wanted, preview what’s missing, then fetch copies onto your computer.
- Open the files yourself and attach the ones you trust. On Zotero 10 or newer you can attach from the workbench; Grab leaves copies in a folder until you do.
- Grow the library on Discover. Tidy records on Repair after you turn on Advanced.
Install
Build on your machine — there is no app store package and no
published Docker image. Keep Zotero on the host with the local API
enabled, then open the workbench at
http://127.0.0.1:8765.
Host CLI without Docker:
pip install paperful
(PyPI).
git clone --branch v1.3.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.3.0 to track latest main.
Docker
·
Zotero
·
First fill
·
README