feat: watch a FileBrowser Quantum folder as the consume folder - #9
Merged
Merged
Conversation
Paperless watches a consume folder that nothing on StartOS could reach, so documents could only arrive through the web UI (#8). A new Set Consume Folder action points the consumption dir at a subfolder of FileBrowser Quantum's data volume, mounted read-write at /mnt/filebrowser; the dependency is declared (`exists`) only while that source is selected, matching qbittorrent and metube. Read-write, not read-only as the issue proposed: consumption unlinks the source file inside the same database transaction that stores the document, so a read-only mount rolls back every import. Paperless already runs as uid 1000, the uid FileBrowser Quantum serves its volume as, so no idmap is needed. The install bootstrap built its daemon chain through the same `.const()` reads as main, which made it a reactive init handler: any change to a watched value re-ran runUntilSuccess against the live service, and the new action would have triggered exactly that (observed as a redis port fight on the dev box). The chain now takes its config as an argument; main reads with `.const()`, the bootstrap with `.once()`. Verified on the dev box: a file written from FileBrowser's container is picked up by inotify, imported, and removed; switching back to the private folder restarts without the mount; updating from 2.20.15:4 keeps the private folder. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This was referenced Sep 15, 2026
MattDHill
approved these changes
Sep 15, 2026
2 tasks done
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #8.
Summary
paperless). The volume is mounted read-write at/mnt/filebrowserandPAPERLESS_CONSUMPTION_DIRpoints at the subfolder; the image's own entrypoint creates it. Thefilebrowserdependency is declared (exists) only while that source is selected — the qbittorrent/metube pattern.consumer.pyunlinks the source file inside the sametransaction.atomic()that stores the document, so a read-only mount rolls back every import (and leaves the already-written media files behind). Paperless runs as uid 1000, the uid FileBrowser Quantum serves its volume as, so no idmap.bootstrapDatabasebuilt its daemon chain through the same.const()reads asmain, so any change to a watched value re-ran the install bootstrap against the live service — the new action would have triggered it on every use (observed on the dev box as a redis port fight). The chain now takes its config as an argument;mainreads.const(), the bootstrap.once().2.20.15:5; README and instructions updated; i18n for all five locales.Nextcloud users get the same drop-to-ingest for free through nextcloud-startos's existing FileBrowser Quantum external-storage mount — see the comment on #3.
Verified on the dev box
package startlaunches a single chain (no__RUN_UNTIL_SUCCESSre-run)./mnt/filebrowser/paperlesscreated and chowned topaperless, consumer watches it via inotify./mnt/filebrowsergone, watching/usr/src/paperless/consume.2.20.15:4: store gains the new fields with defaults, private folder still watched.🤖 Generated with Claude Code