{"id":47008545,"url":"https://github.com/davidhoo/relive","last_synced_at":"2026-04-24T06:05:55.867Z","repository":{"id":341147741,"uuid":"1169088432","full_name":"davidhoo/relive","owner":"davidhoo","description":"Relive - 智能照片记忆相框：通过 AI 分析 NAS 照片，在墨水屏相框上展示往年今日或最值得回忆的时刻","archived":false,"fork":false,"pushed_at":"2026-04-02T16:19:37.000Z","size":108528,"stargazers_count":26,"open_issues_count":0,"forks_count":5,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-02T19:54:20.216Z","etag":null,"topics":["dithering","diy","e-ink","e-paper","esp32","image-processing","iot","memories","open-source","photo-frame","photography","self-hosted","smart-home"],"latest_commit_sha":null,"homepage":"","language":"Go","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/davidhoo.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-02-28T06:46:04.000Z","updated_at":"2026-04-02T16:19:46.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/davidhoo/relive","commit_stats":null,"previous_names":["davidhoo/relive"],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/davidhoo/relive","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davidhoo%2Frelive","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davidhoo%2Frelive/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davidhoo%2Frelive/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davidhoo%2Frelive/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/davidhoo","download_url":"https://codeload.github.com/davidhoo/relive/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davidhoo%2Frelive/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31479006,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-06T14:34:32.243Z","status":"ssl_error","status_checked_at":"2026-04-06T14:34:31.723Z","response_time":112,"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":["dithering","diy","e-ink","e-paper","esp32","image-processing","iot","memories","open-source","photo-frame","photography","self-hosted","smart-home"],"created_at":"2026-03-11T20:37:28.078Z","updated_at":"2026-04-24T06:05:55.860Z","avatar_url":"https://github.com/davidhoo.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Relive - 让照片重新活过来\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Status](https://img.shields.io/badge/Status-Usable-brightgreen)]()\n[![Go](https://img.shields.io/badge/Go-1.25+-00ADD8?logo=go)]()\n[![Vue](https://img.shields.io/badge/Vue-3.5+-4FC08D?logo=vue.js)]()\n[![Python](https://img.shields.io/badge/Python-3.12-3776AB?logo=python\u0026logoColor=white)]()\n[![InsightFace](https://img.shields.io/badge/InsightFace-Face_AI-FF6F61)]()\n[![Version](https://img.shields.io/badge/Version-1.6.4-blue)]()\n[![OSHW](https://img.shields.io/badge/OSHW-oshwhub-blue?logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiIgZmlsbD0id2hpdGUiLz48L3N2Zz4=)](https://oshwhub.com/davidhoo/relive)\n\n\u003e 你的 NAS 里存了多少照片？它们上一次被翻看是什么时候？\n\u003e Relive 通过 AI 理解每张照片，以”往年今日”为线索，每天把值得重温的记忆送到你的相框上。\n\n\u003cimg src=\"docs/images/photo-frame.png\" width=\"400\" alt=\"ESP32 E-Ink Photo Frame\"\u003e\n\nRelive 是一个自部署的照片回忆系统 —— 扫描你 NAS 中的照片，用 AI 理解内容，然后每天在相框或屏幕上呈现值得重温的瞬间。\n\n它由六部分组成：\n- **Web 管理后台**：扫描照片、配置 AI、管理设备和展示策略\n- **后端服务**：处理照片分析、地理编码、缩略图生成等后台任务\n- **ml-service**：人脸检测微服务（基于 InsightFace），自动识别照片中的人物并聚类\n- **relive-analyzer**：独立的批量分析工具，适合在另一台 AI 主机上运行\n- **relive-people-worker**：人脸检测 Worker，在 Mac M4 等高性能设备上运行，加速人脸检测\n- **展示终端**：目前已支持 ESP32 墨水屏相框，未来可扩展到电脑屏保、移动端 App、微信小程序等\n  - 🔧 硬件已开源：原理图、PCB、BOM 等均发布在 [立创开源硬件平台](https://oshwhub.com/davidhoo/relive)\n\n---\n\n## 为什么用 Relive\n\n- **让照片不再只是”存着”**：围绕”往年今日”自动选图，每天重温不同年份的这一天\n- **AI 真正理解照片内容**：不只是看 EXIF，而是理解场景、人物、氛围，给出评分和描述\n- **支持多种 AI 部署方式**：本地模型、远程 GPU、云端 API，按需选择\n- **NAS 与 AI 主机可以分开部署**：通过 `relive-analyzer` 在另一台机器上批量分析，通过 `relive-people-worker` 在 Mac M4 上加速人脸检测\n- **认识照片里的人**：自动检测人脸、聚类归组，认出家人和朋友，让策展更有温度\n- **完整的可视化管理**：扫描路径、AI 配置、设备管理、展示策略，全部在 Web 后台完成\n\n## 适合谁\n\n- 有大量家庭照片，想在日常生活中重新看到它们的人\n- 用 NAS / Docker 自部署管理照片的人\n- 想把照片分析和相框展示串起来的人\n\n\u003e Relive 需要 Docker 自部署环境，目前不提供云端托管服务。\n\n## 当前状态\n\n- ✅ Web 管理后台可用\n- ✅ 后端 API 与任务系统可用\n- ✅ `relive-analyzer` API 模式可用\n- ✅ `relive-people-worker` 人脸检测 Worker（Mac M4 加速）\n- ✅ 事件驱动型智能策展引擎（6 通道提名）\n- ✅ 人物识别与管理（人脸检测、自动聚类、手动纠正）\n- ✅ 照片级排除与手动旋转\n- ✅ ESP32 墨水屏相框固件（AP 配网、定时睡眠、双配置源）\n\n如果你只关心”现在能不能用”，答案是：**可以先从 Web + Docker 跑起来，再按需要接入 analyzer 或设备端。**\n\n## 系统截图\n\n\u003cdetails\u003e\n\u003csummary\u003e点击展开截图\u003c/summary\u003e\n\n### 仪表盘\n![Dashboard](docs/images/dashboard.png)\n\n### 展示策略 - 往年今日选图\n![Display Strategy](docs/images/display-strategy.png)\n\n### 照片管理\n![Photos](docs/images/photos.png)\n\n### AI 分析\n![AI Analysis](docs/images/ai-analysis.png)\n\n### 设备管理\n![Devices](docs/images/devices.png)\n\n### 缩略图生成\n![Thumbnails](docs/images/thumbnails.png)\n\n### GPS 位置解析\n![Geocoding](docs/images/geocoding.png)\n\n### 事件浏览\n![Events](docs/images/events.png)\n\n### 配置管理\n![Config](docs/images/config.png)\n\n### 系统管理\n![System](docs/images/system.png)\n\n\u003c/details\u003e\n\n---\n\n## 快速开始\n\n最短路径如下：\n\n### 1. 克隆仓库\n\n```bash\ngit clone https://github.com/davidhoo/relive.git\ncd relive\n```\n\n### 2. 准备已发布镜像部署文件\n\n```bash\ncp docker-compose.prod.yml.example docker-compose.prod.yml\ncp .env.example .env\ncp backend/config.prod.yaml.example backend/config.prod.yaml\n```\n\n建议至少修改：\n\n```env\nJWT_SECRET=replace-with-a-random-secret\n```\n\n### 3. 配置照片目录挂载\n\n编辑 `docker-compose.prod.yml`，把宿主机照片目录挂到容器内：\n\n```yaml\nservices:\n  relive:\n    volumes:\n      - /your/photo/library:/app/photos:ro\n```\n\n### 4. 启动服务\n\n```bash\nmake deploy-image\n```\n\n普通用户默认推荐这条路径：`make deploy-image` 会使用已发布镜像部署。\n\n如果你是在本地修改代码、需要从源码构建镜像，请先执行 `cp docker-compose.yml.example docker-compose.yml`，再改用 `make deploy` 做源码部署。\n\n### 5. 首次初始化\n\n访问 `http://localhost:8080`，然后按这个顺序操作：\n1. 使用默认账号 `admin / admin` 登录并修改密码\n2. 到“配置管理”添加扫描路径，例如 `/app/photos`\n3. 到“照片管理”执行扫描或重建\n4. 如需 AI 分析，在“配置管理”中设置 AI Provider\n5. 到“AI 分析”页面启动在线分析，或使用下方的 analyzer API 模式\n\n更详细的部署说明：\n- `QUICKSTART.md`：快速启动与部署\n- `docs/CONFIGURATION.md`（配置职责与优先级）\n\n---\n\n## 使用方式\n\n### 方式 1：直接在 Web 中扫描 + 在线分析\n\n**适合：**\n- 照片量不大\n- AI 服务与 Relive 服务在同一网络内\n- 你想直接在后台里完成全部操作\n\n**基本流程：**\n1. 添加扫描路径\n2. 扫描照片\n3. 配置 AI Provider\n4. 在“AI 分析”页面启动分析\n5. 在“照片管理”与“展示策略”中查看和使用结果\n\n### 方式 2：使用 `relive-analyzer` API 模式批量分析\n\n**适合：**\n- 照片量大\n- AI 主机与 NAS / 主服务分离\n- 想把分析任务放到另一台更强的机器上执行\n\n**基本流程：**\n1. 在“设备管理”里创建 `offline` 或 `service` 类型设备\n2. 复制生成的 `api_key`\n3. `cp analyzer.yaml.example analyzer.yaml`\n4. 填写 `server.endpoint` 与 `server.api_key`\n5. 构建并运行 analyzer：\n\n```bash\nmake build-analyzer\n./backend/bin/relive-analyzer check -config analyzer.yaml\n./backend/bin/relive-analyzer analyze -config analyzer.yaml\n```\n\n详细说明：`docs/ANALYZER_API_MODE.md`\n\n---\n\n## 核心能力\n\n### AI 照片分析\n- 理解照片内容、人物、场景和氛围\n- 生成描述、短句、分类、标签与评分\n- 支持 Ollama / vLLM / Qwen / OpenAI / Hybrid\n\n### 人物识别与管理\n- 基于 InsightFace 的人脸检测，自动从照片中提取人脸特征\n- 向量相似度聚类，自动将同一人的照片归组\n- 支持迭代式反馈驱动的重聚类，越用越准\n- 人物管理界面：命名、合并、拆分、设置头像\n- 照片详情页展示识别到的人物\n- 人物亲密度自动融入策展引擎选图\n\n### 往年今日 \u0026 事件策展\n- 每天自动挑选历史上同一天或相近日期的照片\n- 事件驱动型智能策展：基于时空聚类的事件引擎，6 个提名通道（时光隧道 / 巅峰回忆 / 地理漂移 / 角落遗珠 / 人物专题 / 季节专题）\n- 没有往年今日时，智能回溯到最近的历史记忆，确保每天都有内容\n- 支持评分过滤，只展示值得回忆的照片\n\n### 设备展示\n- 支持 ESP32 墨水屏相框、Web 浏览器等多种展示终端\n- 后台统一管理设备，自动推送当日展示内容\n- 墨水屏相框支持 AP 配网、定时睡眠等低功耗特性\n\n### ESP32 墨水屏相框\n\n基于 ESP32-S3 + 7.3 寸 E Ink Spectra 6 彩色墨水屏的实体相框，每天定时从服务器获取\"往年今日\"照片并显示。\n\n- **硬件**：ESP32-S3 + Good Display GDEP073E01 (800x480, 6 色)\n- **配网**：首次使用自动进入 AP 配网（SSID: `relive`），Web 页面配置 WiFi、服务器、刷新时间\n- **重新配置**：15 秒内连续按两次 Reset 键（或快速断电两次）重新进入配置页面，已有设置自动回显\n- **低功耗**：定时深度睡眠，睡眠电流约 10μA，每天按设定时间点唤醒刷新\n- **双模式**：Office 模式（编译时配置）与 NVS 模式（AP 配网配置）自动切换\n\n详细说明见 [`devices/photo-frame/esp32/README.md`](devices/photo-frame/esp32/README.md)\n\n### Web 管理后台\n- 浏览照片和分析结果\n- 人物管理：查看识别到的人物、命名、合并、设置头像\n- 管理扫描路径、提示词、AI Provider、设备和展示策略\n- 查看缩略图、地理编码、分析等后台任务状态\n\n### 图片预处理与成本优化\n- 分析前自动压缩图片\n- 减少带宽与 API 成本\n- 适合大规模照片库的批量处理场景\n\n---\n\n## 文档导航\n\n### 当前使用\n- `QUICKSTART.md`：快速启动与部署入口\n- `docs/BACKEND_API.md`：当前已实现 API\n- `docs/ANALYZER_API_MODE.md`：当前 analyzer API 模式\n- `docs/PROJECT_STATUS.md`：当前项目状态\n\n### 当前开发\n- `docs/QUICK_REFERENCE.md`：开发速查卡\n- `docs/CONFIGURATION.md`：配置职责与优先级\n- `docs/DEVICE_PROTOCOL.md`：设备协议设计\n- `docs/plans/event-driven-curation.md`：事件策展方案\n\n### 历史文档\n- `docs/INDEX.md`：完整文档导航\n- `docs/ANALYZER.md`：旧版文件模式说明（历史）\n- `docs/OFFLINE_WORKFLOW.md`：早期离线工作流设计（历史）\n- `docs/API_DESIGN.md`：设计阶段 API 方案\n- `docs/archive/ARCHITECTURE.md`：系统架构（设计阶段）\n- `docs/archive/DEVELOPMENT.md`：开发说明（设计阶段）\n- `docs/archive/DEPLOYMENT.md`：部署指南（设计阶段）\n- `docs/archive/AI_PROVIDERS.md`：AI Provider 架构（设计阶段）\n- `docs/archive/ANALYZER_PHASE1_DONE.md`：Analyzer Phase 1 完成总结\n- `docs/archive/ANALYZER_TEST_REPORT.md`：Analyzer 测试报告\n\n---\n\n## Roadmap\n\n- 支持更多展示终端（Android、iOS）\n- 支持更多 AI Provider（Google Gemini 等）\n\n## 致谢\n\n- [InkTime](https://github.com/dai-hongtao/InkTime) - 墨水屏相框的灵感来源，我们学习和参照了他的想法\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdavidhoo%2Frelive","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdavidhoo%2Frelive","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdavidhoo%2Frelive/lists"}