# PaperlessBrain configuration # Copy to .env and fill in. Keys marked (required) have no default. # # Keys marked [UI: ...] can also be configured inside the app on the Settings # page; a value set in the app takes precedence and the env value is only the # fallback. You can leave all [UI] keys commented out and configure them in-app. # Absolute path to the repo root, WITH trailing slash. In Docker: /app/ (required) APP_PATH=/opt/paperless-brain/ # --- Paperless-ngx --- # Base URL of your Paperless-ngx instance (required) PAPERLESS_URL=http://paperless.example.lan:8000 # API token of a Paperless-ngx superuser (Settings > API Tokens) (required) PAPERLESS_SUPERUSER_TOKEN=changeme # [UI: Settings > Processing] Documents carrying this tag are skipped during sync #IGNORE_INBOX_TAG_AT_SYNC=Inbox # --- Vault / Markdown memory --- # Root directory containing one subfolder per user. The app maintains its own # memory files here; you can edit your notes with any Markdown editor. # # DOCKER: this is the path INSIDE the container — leave it at /mnt/vaults. # To choose where the files live on your host, edit the left-hand side of the # volume mapping in docker-compose.yml instead: # - /your/host/path:/mnt/vaults # Setting VAULT_ROOT to a host path makes the app look at a directory that does # not exist in the container, and vault/memory features silently do nothing. # # BARE METAL: set it to the actual directory on disk. VAULT_ROOT=/mnt/vaults # Subfolder inside each user vault reserved for agent-curated memory. # Names a real folder on disk — only change it on a fresh install, or move the # existing folder to match. #BRAIN_SUBFOLDER=PaperlessBrain Memory #VAULT_SYNC_COOLDOWN_S=3 # --- Embeddings / ChromaDB (required) --- EMBEDDING_MODEL=intfloat/multilingual-e5-large-instruct CHROMA_PATH=data/chroma_db/ CHROMA_COLLECTION=paperless_documents EXTRACTION_SIDECAR_PATH=data/extractions/ THUMB_PATH=data/thumbnails/ # [UI: Settings > Search & Memory] result count and brain-hint tuning #CHROMA_MAX_RESULTS=20 #BRAIN_HINT_SIMILARITY_THRESHOLD=0.70 #BRAIN_HINT_WINDOW_FACTOR=1.5 # --- Ollama (vision ingestion) --- # [UI: Settings > Processing] fallback Ollama server + vision model for # ingestion. Both optional, and only a fallback: the ingestion model is normally # picked in the UI from the same registry the chat uses, so it can be a local # Ollama model or a cloud one (Claude, GPT, MiniMax …). Chat and the Werkbank # never read these — they use the per-user models with their own base_url. # OLLAMA_SERVER has a second job: it names the machine the Wake-on-LAN and # shutdown buttons control. Without it that host is inferred from the first # local-lane model in the registry, and the shutdown button refuses to act if # several local models point at different hosts. Set it if you run more than one. #OLLAMA_SERVER=http://ollama.example.lan:11434 #OLLAMA_INGEST_MODEL= # [UI: Settings > Processing] Extraction-rule profile: "en" (common # international types) or "de" (German legal/administrative domain, ~46 types). # Keyed on your Paperless document-type NAMES, not the language of the # documents — an English invoice filed as "Rechnung" still matches the de rules. #EXTRACTION_PROFILE=en # [UI: Settings > Processing] Language of AI-generated summaries (archive-level, # shared by all users; e.g. en, de). Extracted page text always keeps its # original language, so a foreign-language document stays readable verbatim. #ARCHIVE_LANGUAGE=en # IANA timezone for timestamps on generated documents (standard TZ variable). # Empty = system local time. #TZ=Europe/Berlin # --- Chat LLM --- # Chat models are managed per user in the app (Settings > AI Models). # [UI: Settings > AI Models] optional global Anthropic API key, used as # fallback for users who have not stored their own key. #ANTHROPIC_API_KEY= # --- Optional: Wake-on-LAN / auto-shutdown for the Ollama GPU server --- # None of this is configurable in the UI. Leave the MAC and the SSH user empty # to disable the feature (power buttons hidden, no idle watchdog). # WoL requires the app to be on the same L2 network (Docker: network_mode host). #OLLAMA_HOST_LAN_MAC_ADDRESS_WOL= # SSH user on the Ollama host for remote shutdown. That user needs passwordless # sudo for /usr/bin/shutdown, and the app needs a usable SSH key — in Docker that # means mounting one into the container (see docker-compose.yml). #OLLAMA_SSH_USER= #OLLAMA_IDLE_SHUTDOWN_MINUTES=30 # Confirmation prompt before the shutdown button acts. EMPTY MEANS NO PROMPT — # one click powers the machine off. Set a value to require it. #SHUTDOWN_PASSWORD= # Which machine these buttons control: OLLAMA_SERVER above. Without it the host # is inferred from your first local-lane model in Settings > AI Models, and the # shutdown button refuses when several local models point at different hosts. # --- AI-generated documents (names created in Paperless-ngx on first use) --- # [UI: Settings > Processing] tag / correspondent / document type for AI output #AI_GENERATED_TAG_NAME=AI-generated #AI_GENERATED_CORRESPONDENT=PaperlessBrain AI #AI_GENERATED_DOC_TYPE=Information # --- Web search (self-hosted SearXNG, optional) --- #SEARXNG_HOST=http://localhost:8888 # --- NiceGUI --- # Random string used to encrypt server-side session storage. Generate with: # python -c "import secrets; print(secrets.token_hex(32))" STORAGE_SECRET=changeme # Bind address and port of the web server #HOST=0.0.0.0 #PORT=8080