{"id":35066627,"url":"https://github.com/imkrishsub/filefolio","last_synced_at":"2026-04-15T14:04:40.253Z","repository":{"id":330131479,"uuid":"1121673510","full_name":"imkrishsub/filefolio","owner":"imkrishsub","description":"A privacy-first document organization tool that uses local AI to automatically categorize, tag, and rename your PDF files. All processing happens on your machine with Ollama, keeping your documents completely private.","archived":false,"fork":false,"pushed_at":"2025-12-23T11:46:57.000Z","size":270,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-12-25T01:32:22.431Z","etag":null,"topics":["ai","document-management","fastapi","local-first","ocr","ollama","pdf","privacy","python","sqlite"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/imkrishsub.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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-23T11:12:50.000Z","updated_at":"2025-12-23T11:47:02.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/imkrishsub/filefolio","commit_stats":null,"previous_names":["imkrishsub/filefolio"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/imkrishsub/filefolio","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imkrishsub%2Ffilefolio","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imkrishsub%2Ffilefolio/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imkrishsub%2Ffilefolio/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imkrishsub%2Ffilefolio/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/imkrishsub","download_url":"https://codeload.github.com/imkrishsub/filefolio/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imkrishsub%2Ffilefolio/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28078026,"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","status":"online","status_checked_at":"2025-12-27T02:00:05.897Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["ai","document-management","fastapi","local-first","ocr","ollama","pdf","privacy","python","sqlite"],"created_at":"2025-12-27T11:31:14.069Z","updated_at":"2026-04-15T14:04:40.246Z","avatar_url":"https://github.com/imkrishsub.png","language":"JavaScript","funding_links":["https://ko-fi.com/krishsub"],"categories":[],"sub_categories":[],"readme":"# FileFolio\n\nFileFolio helps privacy-conscious professionals keep large PDF collections searchable and organized using local AI. No cloud, no telemetry, all on your machine.\n\n[![Support me on Ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/krishsub)\n\n![FileFolio Preview](preview.png)\n\n**Status:** Actively maintained, used on my own 1,000+ PDF collection. Expect breaking changes before v1.0, but I'm responsive to issues and feedback.\n\n## Why FileFolio?\n\n- You have hundreds of PDF bills, reports, or research papers scattered in folders.\n- You care about privacy and do not want to upload them to cloud AI services.\n- You still want smart search, auto-tagging, and reasonable file names.\n\nFileFolio watches a folder, uses a local LLM via Ollama to analyze each PDF, and keeps everything searchable in one interface.\n\n## Features\n\n- **Automatic organization** – watches a folder and imports new PDFs, extracting text (with OCR), then generating categories and tags\n- **Privacy-first** – all processing happens locally with Ollama, no cloud services, no telemetry or analytics\n- **Fast retrieval** – full-text search across content and metadata, plus thumbnail previews\n- **Disaster-proof** – backup and restore your entire library via ZIP\n- **Multi-language support** – UI available in multiple languages\n- **Dark mode** – toggle between light and dark themes\n\n## Prerequisites\n\n- Python 3.10+\n- [Ollama](https://ollama.ai) installed locally\n- Poppler (for PDF processing)\n  - macOS: `brew install poppler`\n  - Ubuntu/Debian: `apt-get install poppler-utils`\n  - Windows: Download from [poppler releases](https://github.com/oschwartz10612/poppler-windows/releases/)\n- Tesseract (for OCR on scanned documents)\n  - macOS: `brew install tesseract`\n  - Ubuntu/Debian: `apt-get install tesseract-ocr`\n  - Windows: Download from [Tesseract releases](https://github.com/UB-Mannheim/tesseract/wiki)\n\n## Quick start\n\n1. **Clone the repository**\n```bash\ngit clone https://github.com/imkrishsub/filefolio.git\ncd filefolio\n```\n\n2. **Create and activate virtual environment**\n```bash\npython3 -m venv venv\nsource venv/bin/activate  # On Windows: venv\\Scripts\\activate\n```\n\n3. **Install dependencies**\n```bash\npip install -r requirements.txt\n```\n\n4. **Start Ollama** (in a separate terminal)\n```bash\nollama serve\n```\n\n5. **Run the application**\n```bash\npython backend/main.py\n```\n\n6. **Open your browser**\nNavigate to: http://127.0.0.1:8000\n\n## Configuration\n\n### Custom port\n\nSet a custom port using the `PORT` environment variable:\n\n```bash\nPORT=8080 python backend/main.py\n```\n\n## Testing\n\n```bash\npytest\n```\n\nFull API and functionality coverage including unit tests, integration tests, and frontend tests.\n\n## Project structure\n\n```\nfilefolio/\n├── backend/\n│   ├── main.py          # FastAPI server\n│   └── sync_service.py  # Folder sync service\n├── frontend/\n│   ├── static/\n│   │   ├── app.js       # Frontend JavaScript\n│   │   ├── style.css    # Styles\n│   │   └── i18n.json    # Translations\n│   └── templates/\n│       └── index.html   # Main interface\n├── tests/               # Test suite\n├── uploads/             # PDF storage (created on first run)\n├── thumbnails/          # Document thumbnails (created on first run)\n├── data/                # Database (created on first run)\n├── setup.cfg            # Linting and tool configuration\n├── pytest.ini           # Test configuration\n└── requirements.txt\n```\n\n## How it works\n\n1. **Upload** - Drag and drop a PDF file into the web interface, or sync a local folder to automatically import new files\n2. **Extract** - Text is extracted from the PDF (with OCR fallback for scanned documents)\n3. **Analyze** - A local LLM analyzes the content to determine category, tags, and suggest a filename\n4. **Organize** - The document is saved with metadata in a local SQLite database\n5. **Search** - Find documents by content, category, tags, or filename\n\n## Tech stack\n\n- **Backend**: FastAPI (Python)\n- **Frontend**: Vanilla JavaScript\n- **Database**: SQLite\n- **AI/LLM**: Ollama\n- **PDF Processing**: PyPDF, pdf2image, pytesseract\n- **Styling**: Custom CSS\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a pull request or open an issue.\n\n## License\n\nMIT License - see [LICENSE](LICENSE) file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fimkrishsub%2Ffilefolio","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fimkrishsub%2Ffilefolio","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fimkrishsub%2Ffilefolio/lists"}