diff --git a/README.md b/README.md index bb5906d..0029f53 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,12 @@ # Pixhelf -Pixhelf 是一个轻量、自托管的本地照片画廊。它递归读取照片目录,在浏览器中提供相册导航、瀑布流浏览、自然语言文字搜图、本地以图搜图、随机探索、原图查看与下载,以及 EXIF 和直方图信息。 +Pixhelf 是一个轻量、自托管的本地图片画廊,支持 JPEG、PNG 和 WebP。提供相册与瀑布流浏览、文件名和中文自然语言搜索、相似图片、随机探索、原图查看下载,以及 EXIF 和直方图。 -- 支持 JPEG、PNG 和 WebP -- 自动发现目录变化,无需手工刷新索引 -- 图片、缩略图、搜索与相似度计算均在本机完成 -- 官方 Docker 镜像内置 Chinese-CLIP 模型,启动时无需访问 Hugging Face -- 支持 Linux amd64 和 arm64 +## Docker 部署(推荐) -## 快速开始 +镜像支持 Linux amd64 和 arm64,内置文字搜图模型,无需单独下载或挂载。 -推荐使用 Docker Compose。项目提供的 [`compose.yml`](compose.yml) 等价于以下配置: +安装 Docker 和 Compose 插件后,在部署目录使用以下 [`compose.yml`](compose.yml): ```yaml services: @@ -34,27 +30,14 @@ mkdir -p pic docker compose up -d ``` -把照片放进 `./pic`,然后访问 。Pixhelf 每 10 秒检查一次目录变化,新照片会自动出现。 +访问 ,将图片放入 `./pic` 即可,目录变化默认每 10 秒自动检测。 -Pixhelf 当前不提供内置身份认证。不要直接暴露到公网;需要远程访问时,请在可信网络中使用,或在前面配置带身份认证的反向代理。 +- `./pic:/data/pic:ro`:只读挂载图片目录,可将 `./pic` 改为实际路径,如 `/mnt/photos`。 +- `pixhelf-cache`:自动创建的缓存卷,保留缩略图和搜索索引,避免重建容器后重新处理。 -### 挂载说明 +首次启动会在后台建立索引;完成前支持文件名搜索,完成后启用自然语言搜索。图片处理和搜索均在本机进行。 -| 挂载 | 用途 | 是否必需 | -| --- | --- | --- | -| `./pic:/data/pic:ro` | 让容器只读访问宿主机照片 | 必需,可将 `./pic` 改为实际照片目录 | -| `pixhelf-cache:/data/.pixhelf-cache` | 保存缩略图、相似度特征和文字搜索索引 | 推荐,由 Compose 自动创建,无需准备宿主机目录 | -| 模型目录 | 无 | 不需要,模型已包含在镜像中 | - -如果不需要保留缓存,可以删除 `pixhelf-cache` 挂载和顶层 `volumes` 段;容器重建后会重新生成全部缓存。 - -使用其他照片目录时,只需修改第一项挂载,例如: - -```yaml -volumes: - - "/mnt/photos:/data/pic:ro" - - pixhelf-cache:/data/.pixhelf-cache -``` +应用没有内置登录认证,公网访问请使用带认证的反向代理。 ### 更新 @@ -63,9 +46,7 @@ docker compose pull docker compose up -d ``` -模型位于独立的压缩 OCI 层中。第一次拉取会下载模型;后续更新只要模型版本不变,Docker 就会复用本地模型层,只下载新的应用层。amd64 与 arm64 镜像共享同一模型层。 - -镜像只发布版本号与 `latest` 两类标签。使用 `latest` 自动跟随稳定版本;需要固定版本时使用 `eureka6688/pixhelf:0.2.5`。带 `v` 的标签仅用于 Git 和 Forgejo Release。 +`latest` 对应最新稳定版,固定版本可使用 `eureka6688/pixhelf:0.2.5`。模型未变更时,更新可复用已有模型层。 ### Docker Run @@ -82,28 +63,9 @@ docker run -d \ eureka6688/pixhelf:latest ``` -## 使用 +## 可选配置 -1. 左侧相册栏按照片目录组织内容,并显示缩略图和文字索引的处理进度。 -2. 右上角搜索支持文件名搜索;文字索引完成后会自动切换为中文自然语言搜索。 -3. 随机探索按钮会从当前图库中换一组照片。 -4. 打开照片后可以缩放、拖动、切换上一张或下一张、下载原图或进入全屏。 -5. 向下滚动查看文件信息、拍摄参数、RGB/亮度直方图和相似图片;以图搜图完全在本机运行,不依赖模型。 - -图片查看器支持以下键盘操作: - -| 按键 | 操作 | -| --- | --- | -| `←` / `→` | 上一张 / 下一张 | -| `+` / `-` | 放大 / 缩小 | -| `0` | 恢复适应窗口 | -| `↓` / `PageDown` | 前往图片详情 | -| `↑` / `PageUp` | 返回图片 | -| `Esc` | 关闭查看器;全屏时先退出全屏 | - -## 配置 - -Docker 用户可在 Compose 的 `environment` 中覆盖参数: +在 Compose 服务中添加 `environment`,修改后执行 `docker compose up -d` 生效: ```yaml services: @@ -113,45 +75,19 @@ services: PIXHELF_SCAN_INTERVAL: "30" ``` -命令行参数的优先级高于对应环境变量。 +| 环境变量 | 默认值 | 说明 | +| --- | --- | --- | +| `PIXHELF_WORKERS` | 自动选择 2–4 | 后台缩略图任务数,可设为 1–16 | +| `PIXHELF_SCAN_INTERVAL` | `10` | 目录检测间隔,单位秒,可设为 2–3600 | +| `PIXHELF_TEXT_SEARCH_MODEL` | 内置模型 | 设为 `"false"` 关闭自然语言搜索,保留文件名搜索和相似图片 | -| 环境变量 | 命令行参数 | 默认值 | 说明 | -| --- | --- | --- | --- | -| `PIXHELF_GALLERY_DIR` | `--gallery-dir PATH` | `./pic` | 图库根目录 | -| `PIXHELF_CACHE_DIR` | `--cache-dir PATH` | `./.pixhelf-cache/thumbnails` | 缩略图和搜索缓存目录,必须位于图库外部 | -| `PIXHELF_TEXT_SEARCH_MODEL` | `--text-search-model VALUE` | Docker 使用内置模型;独立二进制为 `true` | `true` 自动下载,`false` 关闭,也可指定模型目录或文件 | -| `PIXHELF_TEXT_SEARCH_VOCAB` | `--text-search-vocab PATH` | 模型同目录的 `vocab.txt` | 可选词表覆盖路径 | -| `PIXHELF_LISTEN` | `--listen HOST:PORT` | `0.0.0.0:3002` | 监听地址 | -| `PIXHELF_INITIAL_BATCH` | `--initial-batch N` | `60` | 优先生成的首批缩略图数量,范围 `1`–`500` | -| `PIXHELF_WORKERS` | `--workers N` | 根据 CPU 自动选择 `2`–`4` | 后台缩略图任务数,范围 `1`–`16` | -| `PIXHELF_SCAN_INTERVAL` | `--scan-interval SEC` | `10` | 图库检查间隔,范围 `2`–`3600` 秒 | +完整参数可通过 `docker compose exec pixhelf /pixhelf --help` 查看。 -查看完整命令行帮助: +## 其他运行方式 -```bash -pixhelf --help -``` +### 独立程序 -## 自然语言文字搜图 - -Chinese-CLIP ViT-B/16 支持直接输入中文描述,例如“海边日落”“草地上的狗”或“夜晚城市街道”。索引尚未完成时,搜索框仍按文件名工作;完成后自动切换到语义搜索,并优先保留文件名精确匹配。 - -官方 Docker 镜像已经包含经过校验的固定模型与词表,容器启动后不会访问 Hugging Face。模型权重按需加载,连续空闲 60 秒后自动释放。512 维图片向量按模型与词表指纹保存在缓存卷中,每张约 552 字节。 - -关闭文字搜图: - -```yaml -services: - pixhelf: - environment: - PIXHELF_TEXT_SEARCH_MODEL: "false" -``` - -离线环境也可以通过 `PIXHELF_TEXT_SEARCH_MODEL` 指定同时包含 `model.safetensors` 和 `vocab.txt` 的目录。仅当词表位于其他位置时,才需要设置 `PIXHELF_TEXT_SEARCH_VOCAB`。 - -## 独立二进制 - -[Forgejo Releases](https://git.pixhelf.com/adminroot/pixhelf/releases) 提供静态链接的 Linux amd64 与 arm64 二进制。下载匹配架构的文件后运行: +从 [Releases](https://git.pixhelf.com/adminroot/pixhelf/releases) 下载对应架构的程序,以 amd64 为例: ```bash chmod +x pixhelf-amd64-linux @@ -160,19 +96,17 @@ chmod +x pixhelf-amd64-linux --cache-dir /path/to/pixhelf-cache ``` -独立二进制默认在后台从 Hugging Face 的 OFA-Sys 官方仓库下载并校验模型,约 753 MB。Web 服务会立即启动并先提供文件名搜索;下载支持断点续传和后台重试,完成后自动启用语义搜索。后续启动会复用缓存。 +独立程序默认会在后台下载文字搜图模型(约 753 MB),可加 `--text-search-model false` 关闭。 -## 从源码运行 +### 源码运行 需要 Rust stable、Node.js 22 和 npm: ```bash -cd frontend -npm ci -cd .. +npm --prefix frontend ci cargo run --release -- \ --gallery-dir /path/to/photos \ --cache-dir /path/to/pixhelf-cache ``` -前端会在 Cargo 构建期间编译并嵌入可执行文件。 +前端会随 Cargo 构建并嵌入可执行文件。