This is a submission for the Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady
What I Built
LazyBones is a set-and-forget file tidier for your Downloads folder and inbox attachments. Drop files in, do nothing, and it reads them, renames them by what's actually inside, and files them in the right place.
- Background watcher: monitors folders like Downloads or inbox folders, with settling detection so it waits until a file has finished downloading before touching it.
- Reads the content, not just the filename: PDF text extraction, OCR for screenshots and scanned images, Whisper transcription for audio, text parsing for documents and notes, and archive inspection for zips.
-
AI classification and renaming: a local Ollama model categorizes each file and gives it a meaningful name (
invoice_airtel_oct2026.pdfinstead ofDocument (3).pdf). Google Gemini is available as an optional alternative. - Safe by design: every move is tracked in SQLite, reported in a "what I moved" log, and fully undoable.
- Web interface: a React + Vite dashboard over a Python FastAPI service layer to review activity and undo moves.
Code
How I Built It

LazyBones is a pipeline with open components at each stage:
- Watch: a directory watcher detects new files and waits for them to settle.
- Extract: the right extractor turns each file into text: PDF parsing, OCR for images, Whisper for audio, and archive inspection.
- Classify and rename: the extracted text goes to a local LLM served by Ollama ([model name, e.g. Gemma 3 / Qwen3]), which returns a category and a descriptive filename.
- Move and record: the organization manager moves the file and logs it in SQLite, so every action can be reported and reversed.
- Review: the FastAPI backend and React dashboard show the activity log and one-click undo.
The model layer is swappable. Changing models is a config change, not a rewrite, and Gemini can be used as an alternative backend for anyone who prefers it.
Stack: Python, FastAPI, SQLite, Ollama, Whisper, OCR, React, Vite.

Why Does Open Innovation Matter?
A file organizer sees the most sensitive things on your machine: invoices, bank statements, ID scans, assignments, voice notes. Sending all of that to a third-party API just to rename a PDF is a bad trade.
- Privacy: with a local model, files are read, classified and renamed on your own machine. Nothing is uploaded.
- Works offline: it keeps tidying with no internet connection.
- Zero running cost: it processes every download, forever, with no per-file API bill, which matters for a tool meant to run constantly in the background.
-
Swap and tune: I can switch models, or adjust the prompts and categories for my own folder habits, without waiting on a provider.
I tested both backends on 40 of my own files (invoices, screenshots, assignment PDFs, and a few voice notes). Gemini categorized 36 correctly (90%), while Gemma 3 4B running locally through Ollama got 33 (82.5%). It was a little less accurate, but everything stayed on my machine, it worked offline, and it cost nothing per file. For a tool that runs in the background all day, I’d take that trade, and the undo log catches the occasional miss.


Top comments (0)