A desktop app for non-destructive file tagging. Point it at a folder, and it reads each file's content, generates keyword tags, and stores them alongside the file — the original is never modified.
- Scans a folder (optionally including subfolders) for supported files
- Extracts text from each file's content — plain text and Markdown,
PDFs, and source code (
.py,.js,.ts) - Generates tags — 5–10 keyword tags per file, each with a confidence score, based on the extracted text
- Saves tags as a sidecar file (
filename.ext.meta.json) next to the original — nothing about the source file itself ever changes - Indexes everything in a local database so you can browse and search files by tag from the app
- Skips files that already have a sidecar, so re-running a scan only processes what's new
The app is two pieces talking over a local HTTP connection:
- Frontend — a Tauri desktop app (React). Three screens: pick a folder, watch scan progress, then browse the results by tag.
- Backend — a local Python/FastAPI server the app starts in the background. It does the actual file scanning, text extraction, tag generation, and storage.
Per file, the backend:
- Scans the target folder and collects supported files, skipping anything already tagged
- Extracts text using the extractor for that file type (plain text, PDF, or source code)
- Runs keyword extraction (RAKE) on the text to produce ranked tags with confidence scores
- Writes those tags to a
.meta.jsonsidecar next to the file, via an atomic write (write to a temp file, then rename) so a crash mid-write can't corrupt or leave a partial sidecar - Records the file and its tags in a local SQLite database, keyed by a SHA-256 hash of the file's contents, so the app can answer "show me every file tagged X" without rescanning the filesystem
Because tagging only ever writes a new .meta.json file next to the
original, deleting FileTagr or its database doesn't lose or alter anything
about the source files — the sidecars are just plain JSON and stay
human-readable on their own.