Skip to content
Zettelrobbe mascot – a friendly seal holding a checked-off paper note

Zettelrobbe

Automatically tag, sort, and search your Paperless-ngx documents – using local or hosted AI.

Automatic tagging

New documents are analyzed and tagged the moment they land in Paperless-ngx: title, tags, document type, and correspondent. You define the rules; the AI does the work.

OCR rescue queue

Blurry scan? Photographed receipt? Documents with poor OCR quality are sent through a dedicated OCR queue (Mistral or a local/custom provider) before tagging – so nothing gets lost.

History & one-click rollback

Every AI change is recorded. Review what happened, rescan a document on demand, or restore the original metadata with a single click.

Your AI, your choice

From hosted models to fully local with Ollama – Zettelrobbe works with the provider you trust, including any OpenAI-compatible endpoint.

The dashboard keeps your whole archive in view — how much is processed, what is waiting in the OCR and failed queues, live processing activity, and token usage:

The Zettelrobbe dashboard in dark mode with KPI tiles, task runner, document type chart, entities and token usage widgets

The name is German wordplay – pronounced [ˈtsɛtl̩ˌʁɔbə], or for English speakers: "TSET-tel-ROB-buh" (start the "Z" like the zz in pizza; "Zettel" rhymes with kettle, "Robbe" is like robber without the final r).

  • Zettel – a slip of paper, a note. The stuff your shoebox is full of. You may know the word from the Zettelkasten note-taking method.
  • Robbe – a seal, the friendly marine mammal in the logo.

Put together: a seal that dives through your paper chaos and hauls every lost document back to the surface, neatly tagged. And because Robbe conveniently ends in "be", the seal swims at zettelrob.be.

Zettelrobbe is a fork of the original Paperless-AI project, created to build on its foundation with many new features and ongoing maintenance. The goal is to continue development in an open and community-driven way, with regular updates, cool features, and a strong focus on user feedback.

It connects to your Paperless-ngx instance and uses an AI of your choice to automatically read, understand, and classify your documents.

Every time a new document lands in Paperless-ngx, Zettelrobbe picks it up, figures out what it is, and assigns the right tags, title, document type, and correspondent – so you don't have to. And if OCR quality is poor, it can send the document through a dedicated OCR queue (Mistral or local/custom provider) before tagging.

Built for big archives

Server-side history pagination, tag caching, and fewer API calls – the dashboard stays snappy even when your archive grows into the thousands.

Security on board

MFA login, global API + SSE rate limiting, and security-focused dependency maintenance – sensible defaults for something that touches all your documents.

Transparent settings

Settings tabs with runtime ENV hints show exactly which value comes from where – no guessing between UI, environment, and defaults.

Actively maintained

Developed in the open with regular updates and a strong focus on community feedback – ideas and bug reports genuinely shape the roadmap.

Works with OpenAI, Ollama (local), Azure OpenAI, DeepSeek, OpenRouter, Perplexity, Google Gemini (via compatibility layer), LiteLLM, and any OpenAI-compatible endpoint. Full local operation is supported via Ollama.

Zettelrobbe is distributed as a single unified Docker image (latest).

Legacy image tags like :latest-lite and :latest-full are kept as aliases pointing to this same unified image for backward compatibility.

services:
zettelrobbe:
image: admonstrator/zettelrobbe:latest
container_name: zettelrobbe
restart: unless-stopped
ports:
- "3000:3000"
volumes:
- data:/app/data
volumes:
data:

Open http://localhost:3000 and complete the 7-step initial installer (account, optional MFA, Paperless test, metadata rules, AI test, optional OCR, review/finish).

If Zettelrobbe saves you time, consider supporting development:

If you want to support the original project that laid the foundation for this fork, consider supporting clusterzx via Patreon: