{"id":28539971,"url":"https://github.com/jltk/briefgeist","last_synced_at":"2025-06-27T11:41:26.277Z","repository":{"id":296201761,"uuid":"992296012","full_name":"jltk/briefgeist","owner":"jltk","description":"Privacy-first desktop app for scanning, understanding and replying to letters.","archived":false,"fork":false,"pushed_at":"2025-05-30T20:04:35.000Z","size":35,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-06-09T19:07:37.799Z","etag":null,"topics":["automation","document-analysis","local-llm","ocr","python","tesseract"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jltk.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-05-28T23:41:52.000Z","updated_at":"2025-05-30T20:04:38.000Z","dependencies_parsed_at":"2025-05-29T13:40:10.930Z","dependency_job_id":"908f133e-51ce-4e68-a7ed-ac3e754717d9","html_url":"https://github.com/jltk/briefgeist","commit_stats":null,"previous_names":["jltk/briefgeist"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/jltk/briefgeist","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jltk%2Fbriefgeist","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jltk%2Fbriefgeist/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jltk%2Fbriefgeist/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jltk%2Fbriefgeist/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jltk","download_url":"https://codeload.github.com/jltk/briefgeist/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jltk%2Fbriefgeist/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262249503,"owners_count":23281980,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["automation","document-analysis","local-llm","ocr","python","tesseract"],"created_at":"2025-06-09T19:07:32.249Z","updated_at":"2025-06-27T11:41:26.266Z","avatar_url":"https://github.com/jltk.png","language":"Python","readme":"# Briefgeist\n\n[![license: GPL](https://img.shields.io/badge/license-GPLv3-blue.svg)](LICENSE)  \n[![python: 3.9+](https://img.shields.io/badge/python-3.9%2B-important.svg)](https://www.python.org/)  \n\n*v0.1.0-preview*\n\n**Briefgeist** is a privacy-first, local desktop assistant for automating the reading, analysis, and response of scanned physical letters.\n\n1. **Watcher service** (Watchdog) for real-time monitoring of incoming scans\n2. **OCR module** (Tesseract) for text extraction from PDF scans\n3. **Analysis Engine** (local LLM via Ollama “gemma:7b”)\n\n## 📦 Installation\n\n```bash\ngit clone https://github.com/jltk/briefgeist.git\ncd briefgeist\npython -m venv venv\nsource venv/bin/activate  # bzw. venv\\Scripts\\activate on Windows\npip install -r requirements.txt\n```\n---\n\n## ✅ Features\n\n- 🖨️ Scan letters (via NAPS2)\n- 🧠 Analyze content with a local LLM (Gemma 7B via Ollama)\n- 🗣 Text-to-speech playback (Coqui TTS)\n- 📄 Suggest replies or fill forms\n- 🖥️ Simple GUI (NiceGUI)\n- 💻 100% offline, no cloud or telemetry\n\n| Feature            | Status |\n|--------------------|--------|\n| OCR (ocrmypdf)     | ✅     |\n| Text extraction    | ✅     |\n| Local LLM (Ollama) | ✅     |\n| TTS voice output   | ✅     |\n| GUI (NiceGUI)      | ✅     |\n| Multi-page scan    | ✅     |\n\n---\n\n## 🛠 Setup (Windows 10+)\n\n### 1. Install System Dependencies\n\n- [Python 3.11](https://www.python.org/downloads/release/python-3119/)\n- [Visual Studio Build Tools](https://visualstudio.microsoft.com/visual-cpp-build-tools/)  \n  → Select: \"Desktop development with C++\"\n- [Tesseract OCR (UB Mannheim)](https://github.com/UB-Mannheim/tesseract/wiki)\n- [SumatraPDF](https://www.sumatrapdfreader.org/download-free-pdf-viewer.html)\n- [NAPS2 (scanner frontend)](https://www.naps2.com)\n- [Ollama (LLM runtime)](https://ollama.com)\n\n### 2. Clone This Repo\n\n```bash\ngit clone https://github.com/yourname/briefgeist.git\ncd briefgeist\npython -m venv .venv\n.venv\\Scripts\\activate\npip install -r requirements.txt\n```\n\n### 3. Start Ollama\n\n```bash\nollama run gemma:7b\n```\n\n---\n\n## 🚀 Usage\n\n### 1. Scan\n\nUse NAPS2 to scan a letter as PDF into the `input/` folder.\n\n### 2. Process with Watcher\n\n```bash\npython watcher/watcher.py\n```\n\nThis will:\n\n* OCR the scanned PDF\n* Extract text\n* Save `.txt` in `output/`\n* Archive the original in `processed/`\n\n### 3. Open GUI\n\n```bash\npython ui/app.py\n```\n\n* Upload the `.txt`\n* Click \"Analyze\"\n* Click \"Read Aloud\"\n\n---\n\n## 🧪 Testing\n\n| Test Step            | Expected Result                     |\n| -------------------- | ----------------------------------- |\n| Drop PDF in `input/` | Processed + `.txt` created          |\n| Run GUI              | Interface appears with input fields |\n| Analyze              | LLM provides meaningful summary     |\n| Read Aloud           | Voice plays locally                 |\n| Print PDF (optional) | Sent to default printer             |\n\n---\n\n## 🗂 Project Structure\n\n```\nbriefgeist/\n├── core/\n├── ui/\n├── watcher/\n├── input/         ← Drop PDFs here\n├── output/        ← Get your results here\n├── processed/     ← Archived input\n```\n\n---\n\n## 🔐 Security \u0026 Privacy\n\nBriefgeist runs fully offline. No cloud calls. No telemetry. No account required.\n\n---\n\n## 📦 Next Milestones\n\n* [ ] Improve UI/UX\n* [ ] Form field detection (insurance, invoices, etc.)\n* [ ] Auto-response generation as PDF\n* [ ] One-click print \u0026 archive\n* [ ] Portable GUI build (PyInstaller)\n\n---\n\n## 💬 License\n\nGPLv3\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjltk%2Fbriefgeist","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjltk%2Fbriefgeist","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjltk%2Fbriefgeist/lists"}