{"id":35809662,"url":"https://github.com/einaeffchen/omoide","last_synced_at":"2026-04-11T14:07:38.638Z","repository":{"id":44405008,"uuid":"395539186","full_name":"EinAeffchen/Omoide","owner":"EinAeffchen","description":"Free and Open-Source media manager","archived":false,"fork":false,"pushed_at":"2026-02-02T09:44:01.000Z","size":68457,"stargazers_count":242,"open_issues_count":2,"forks_count":13,"subscribers_count":5,"default_branch":"master","last_synced_at":"2026-02-02T11:48:31.080Z","etag":null,"topics":["face-detection","library","media"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/EinAeffchen.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","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":"2021-08-13T06:09:40.000Z","updated_at":"2026-02-02T09:39:23.000Z","dependencies_parsed_at":"2025-12-04T07:08:24.620Z","dependency_job_id":null,"html_url":"https://github.com/EinAeffchen/Omoide","commit_stats":null,"previous_names":["einaeffchen/fapflix2.0","einaeffchen/omoide"],"tags_count":28,"template":false,"template_full_name":null,"purl":"pkg:github/EinAeffchen/Omoide","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EinAeffchen%2FOmoide","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EinAeffchen%2FOmoide/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EinAeffchen%2FOmoide/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EinAeffchen%2FOmoide/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/EinAeffchen","download_url":"https://codeload.github.com/EinAeffchen/Omoide/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EinAeffchen%2FOmoide/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29012203,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-02T10:37:29.253Z","status":"ssl_error","status_checked_at":"2026-02-02T10:37:28.644Z","response_time":58,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["face-detection","library","media"],"created_at":"2026-01-07T14:14:55.531Z","updated_at":"2026-04-11T14:07:38.629Z","avatar_url":"https://github.com/EinAeffchen.png","language":"TypeScript","funding_links":["https://buymeacoffee.com/einaeffchen"],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"frontend/public/brand/omoide_header_dark.png\" alt=\"logo\" width=\"200\"/\u003e\n\u003c/div\u003e\n\n[![Buy Me a Coffee](https://img.shields.io/badge/buy%20me%20a%20coffee-donate-yellow?logo=buymeacoffee\u0026style=flat-square)](https://buymeacoffee.com/einaeffchen)\n\n# Omoide\n**Offline-first Memory Organization \u0026 Intelligent Discovery Engine**\n\nOmoide is a self-hosted, offline-capable photo and video library designed for privacy and longevity. It uses local AI to organize your media, making it searchable and discoverable without sending a single byte to the cloud.\n\n---\n\n## 📥 Download - Now also available on macOS!\n\n**[Download the latest binary release](https://github.com/EinAeffchen/Omoide/releases/latest)**\n\n\u003e #### First launch on macOS\n\u003e\n\u003e The app is ad-hoc signed but not notarized, so Gatekeeper will block it on the first open.\n\u003e \n\u003e 1. Unzip the downloaded `.app.zip` — you'll get `omoide-....app`\n\u003e 2. Move it to your **Applications** folder (optional but recommended)\n\u003e 3. **Double-click** the app → macOS shows *\"cannot be opened because the developer cannot be verified\"*\n\u003e 4. Open **System Settings → Privacy \u0026 Security**, scroll down, and click **Open Anyway**\n\u003e 5. Confirm in the dialog — the app opens normally from now on\n\u003e \n\u003e Alternatively, right-click (or Control-click) the `.app` → **Open** → **Open** skips the warning in one step.\n\n\n*Also available as a [Docker container](#-quick-start-docker).*\n\n\n---\n\n## ✨ Key Features\n\n### 🔒 Private \u0026 Offline\n- **100% Local**: No cloud services, no subscriptions. Your data stays on your drive.\n- **Offline-First**: Works fully offline after the initial model download.\n- **Portable**: Run it as a desktop app on Windows/Linux/MacOS or host it via Docker.\n\n### 🧠 Intelligent Organization\n- **Face Recognition**: Automatically detects and clusters faces. Name them once, and Omoide finds them everywhere.\n- **Semantic Search**: Search for \"dog in the snow\" or \"birthday party\" using natural language. Powered by OpenCLIP (Available since 0.6.0 search for known people with free text e.g. \"Sam playing Baseball\" and Omoide will automatically filter for images of the detected Person named Sam playing Baseball).\n- **Auto-Tagging**: Optional AI categorization of your images, default tags exist, new tags can be added manually via config.\n- **Co-appearance Graph**: Visualize how people in your library are connected and detecte friendship and family circles based on co-appearance counts.\n\n### ⚡ Powerful Tools\n- **Duplicate Detection**: Find and clean up exact or near-duplicates using perceptual hashing.\n- **Map View**: Explore your photos on a world map. Edit or add GPS data directly.\n- **Video Support**: Scans and plays videos, automatically detecting and extracting scenes for easy preview and free-text search.\n- **Orphan Face Management**: Review and merge fragmented face clusters.\n\n### 🛠️ Flexible Management\n- **Multiple Profiles**: Switch between different libraries easily.\n- **Read-Only Mode**: safely serve your archive to others.\n- **Background Tasks**: Robust task management for scanning and processing large libraries.\n\n---\n\n## 📸 Screenshots\n\n| Library Grid | Media Detail |\n|:---:|:---:|\n| ![Library grid](docs/screenshots/library-grid.png) | ![Media detail](docs/screenshots/media-detail.png) |\n\n| Semantic Search | People Overview |\n|:---:|:---:|\n| ![Text search](docs/screenshots/search-text.png) | ![People overview](docs/screenshots/people-list.png) |\n\n| Map View | Co-appearance Graph |\n|:---:|:---:|\n| ![Map](docs/screenshots/map.png) | ![Co-Appearance Graph](docs/screenshots/coappearance-graph.png) |\n\n---\n\n## 🚀 Quick Start (Docker)\n\nPerfect for NAS or always-on servers.\n\n1.  **Copy the template**:\n    ```bash\n    cp .env.template .env\n    cp omoide.env.example omoide.env\n    ```\n\n2.  **Configure `.env`**:\n    Set your media directories and ports.\n    Ensure the folders you set in your .env actually exist in your system, to prevent permission issues on automatic creation.\n\n\n3.  **Run**:\n    ```bash\n    docker compose up -d\n    ```\n\n4.  **Open**: `http://localhost:8123`\n\n\u003e **Note for arm64**: Ensure `sqlite-vec` matches your platform (e.g. 0.1.7a2) and build with `docker buildx` or `make build-image-arm64`. Alternatively use the Docker Hub image as set in the docker-compose.yml\n\n---\n\n## 🖥️ Quick Start (Desktop Development)\n\nRequirements: Python 3.12+, FFmpeg, Node 18+.\nFor Windows: .NET Framework [Download .NET](https://dotnet.microsoft.com/en-us/download/dotnet-framework)\n\n```bash\n# 1. Build Frontend\ncd frontend \u0026\u0026 npm ci \u0026\u0026 npm run build \u0026\u0026 cd ..\n\n# 2. Run Backend\nuvicorn app.main:app --host 127.0.0.1 --port 8123\n```\n\nTo build a standalone binary:\n```bash\npyinstaller main.spec\n```\n\n---\n\n## 🧩 How It Works\n\n- **Backend**: [FastAPI](https://fastapi.tiangolo.com/) + [SQLModel](https://sqlmodel.tiangolo.com/) (SQLite).\n- **Vector Search**: [sqlite-vec](https://github.com/asg017/sqlite-vec) for high-performance similarity search.\n- **AI Models**:\n    - **Vision**: [OpenCLIP](https://huggingface.co/docs/hub/open_clip) for embeddings and search.\n    - **Faces**: [InsightFace](https://github.com/deepinsight/insightface) (ONNX) for detection and recognition.\n    - **Clustering**: [HDBSCAN](https://scikit-learn.org/stable/modules/generated/sklearn.cluster.HDBSCAN.html)/[Chinese Whispers](https://chinese-whispers.readthedocs.io/latest/tutorial/) for grouping faces.\n    - **Scene detection**: [scenedetect](https://www.scenedetect.com/)\n- **Frontend**: [React](https://react.dev/) + [MUI](https://mui.com/).\n\n---\n\n## 📄 License\n\n**PolyForm Noncommercial License 1.0.0**\nFree for personal, non-commercial use. See `LICENSE.md` for details.\n\n---\n\n## ❤️ Support\n\nOmoide is a passion project maintained in my free time. If it helps you rediscover your memories, consider supporting its development!\n\n[**☕ Buy Me a Coffee**](https://buymeacoffee.com/einaeffchen)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feinaeffchen%2Fomoide","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feinaeffchen%2Fomoide","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feinaeffchen%2Fomoide/lists"}