release: v1.4.0 — 标签系统、操作日志扩展与文档截图更新
ci / ci (22, ubuntu-latest) (push) Canceled after 0s
GitHub Release / release (push) Canceled after 0s
Publish Docker image / build (linux/amd64, ubuntu-latest, amd64) (push) Canceled after 0s
Publish Docker image / build (linux/arm64, ubuntu-24.04-arm, arm64) (push) Canceled after 0s
Publish Docker image / merge (push) Canceled after 0s

- 每用户标签与彩色打标,图库 OR/AND 筛选与批量打标
- 操作日志记录登录、删除、设置与标签操作
- API 标签/打标接口;README 与文档站截图同步
This commit is contained in:
O96u committed 2026-09-09 14:46:52 +08:00
1 parent f17d79b236
commit 737235acff
110 files changed
+5881 -778

No files matched your search

+29 -1
View File
@@ -2,6 +2,8 @@
PicHost exposes REST endpoints and a Twikoo-compatible upload. After sign-in, open **API** in the nav: a sidebar lists endpoints and token controls, the center shows parameters and copyable cURL, and the right panel supports **live debugging**.
![API docs and debugger](/screenshots/api.png)
## Authentication
All REST calls use:
@@ -28,9 +30,12 @@ Upload one or more images via `image`; also accepts `file`, `files`. Stored unde
```bash
curl -X POST "https://admin.example.com/api/images/upload" \
-H "Auth-Token: YOUR_TOKEN" \
-F "image=@./demo.png"
-F "image=@./demo.png" \
-F 'tagIds=[1,2]'
```
Optional form field `tagIds`: JSON array string or repeated fields. Tags do **not** change storage paths under `images/`.
### 2. List images
`GET /api/images`
@@ -42,6 +47,8 @@ curl "https://admin.example.com/api/images?limit=20&page=1" \
-H "Auth-Token: YOUR_TOKEN"
```
Optional query: `tagIds` (comma-separated, OR by default), `tagMode=and`, `untagged=1`. Each item includes a `tags` array.
### 3. Search images
`GET /api/images/search`
@@ -77,6 +84,27 @@ curl -X POST "https://admin.example.com/api/images/batch-delete" \
-d '{"keys":["images/2026/08/a.webp","images/2026/08/b.webp"]}'
```
### 6. Tags
| Method | Path | Description |
| ------ | ---- | ----------- |
| `GET` | `/api/tags` | List current user’s tags |
| `POST` | `/api/tags` | Create `{ "name": "work", "color": "#22c55e" }` |
| `PATCH` | `/api/tags/:id` | Rename or recolor |
| `DELETE` | `/api/tags/:id` | Delete tag (images remain) |
| `POST` | `/api/tags/merge` | Merge tags into a target |
### 7. Image tags
| Method | Path | Description |
| ------ | ---- | ----------- |
| `POST` | `/api/images/tags` | Add tags to an image |
| `PATCH` | `/api/images/tags` | Replace tag set |
| `DELETE` | `/api/images/tags` | Remove one tag |
| `POST` | `/api/images/batch-tags` | Batch add/remove |
`GET /api/stats` accepts the same tag filter query params as the list API.
## Errors
REST responses are JSON with `code` and `message` (`UNAUTHORIZED`, `FORBIDDEN`, `INVALID_REQUEST`, etc.). Twikoo uses EasyImage-compatible JSON.
+18
View File
@@ -4,6 +4,24 @@ Version history and notable changes. The full log is also in the repo root [CHAN
---
## [1.4.0] — 2026-09-09
### Added
- **Tags**: per-user colored tags; Settings management; batch tagging on upload/gallery; OR / AND gallery filters
- **Activity log**: login, delete, settings, tag operations; date and user filters
- **API**: tag and tagging endpoints; upload `tagIds`; list/stats tag filters
### Docs
- Screenshots and README updated for v1.4 UI
## [1.3.0] — 2026-09-07
### Added
- **Site backup / restore / cross-backend sync** with job center; CLI `backup-export`, `backup-restore`, `storage-sync`
## [1.2.8] — 2026-09-04
### Improved
+3 -1
View File
@@ -1,6 +1,8 @@
# Environment variables
Configure PicHost via environment variables (Docker / `.env`) or the in-app **Settings** page. Admins use **Settings** (`/settings`) with sidebar sections **Basic**, **Domains & paths**, **Access control**, and **Activity log**. Most values prefer **SQLite** when saved; some env vars override or lock UI editing.
Configure PicHost via environment variables (Docker / `.env`) or the in-app **Settings** page. Admins use **Settings** (`/settings`) with sidebar sections **Basic**, **Domains & paths**, **Access control**, **Tag management**, and **Activity log**. Most values prefer **SQLite** when saved; some env vars override or lock UI editing.
![Settings](/screenshots/settings-en.png)
## Priority overview
+3 -1
View File
@@ -37,7 +37,9 @@ See `docker-compose.yml` in the repository.
- **Create admin** — username, password, optional registration and dual-domain options.
- **Restore backup** — upload a `.phost.tar.gz` full-site package (replaces current data; re-enter cloud storage secrets after restore).
3. (Optional) Configure site URL, image URL, Referer rules — see [Environment variables](./configuration.md) and [Dual-domain separation](./domain-separation.md).
4. Upload from the home page; use the top nav for **Gallery**, **Storage** (admin), **Settings**, and **API**.
4. Upload from the home page via **drag-and-drop, file picker, or Ctrl+V**; copy direct/Markdown/HTML/BBCode links from the results panel and use **batch tagging**. Top nav: **Gallery**, **Storage** (admin), **Settings**, **API**.
![Upload](/screenshots/upload.png)
| Create admin | Restore from backup |
| :----------: | :-----------------: |
+16 -4
View File
@@ -12,11 +12,23 @@ Welcome to the PicHost user guide. This site is the single source of truth; the
## Screenshots
**main** has no public demo. Below are current product screenshots (v1.3.0+).
**main** has no public demo. Below are current product screenshots (v1.4.0+).
| API | Gallery (detail) |
| :-: | :--------------: |
| ![API](/screenshots/api.png) | ![Gallery](/screenshots/gallery.png) |
| Upload | Batch tagging |
| :----: | :-----------: |
| ![Upload](/screenshots/upload.png) | ![Batch tagging](/screenshots/tags-batch.png) |
| Upload results (tagged) | API |
| :---------------------: | :-: |
| ![Upload results](/screenshots/upload-tags.jpg) | ![API](/screenshots/api.png) |
| Gallery (grid) | Gallery (list) |
| :------------: | :------------: |
| ![Gallery grid](/screenshots/gallery.png) | ![Gallery list](/screenshots/gallery-list.png) |
| Image detail | Tag management |
| :----------: | :------------: |
| ![Image detail](/screenshots/gallery-detail.png) | ![Tag management](/screenshots/tags.png) |
| Storage | Settings |
| :-----: | :-------: |
+1 -1
View File
@@ -52,4 +52,4 @@ npm run docs:build
npm run docs:preview
```
Sources live in `docs-site/`; screenshot sources are in `docs/screenshots/` (including `login.png`, `setup.png`, `setup-restore.png`, etc.), copied to `docs-site/public/screenshots/` before build. Live docs: <https://o96u.github.io/PicHost/>
Sources live in `docs-site/`; screenshot sources are in `docs/screenshots/` (including `upload.png`, `gallery.png`, `tags.png`, `api.png`, `storage.png`, `settings.png`, `logs.png`, `setup.png`, etc.), copied to `docs-site/public/screenshots/` before build. Live docs: <https://o96u.github.io/PicHost/>
+5 -1
View File
@@ -18,6 +18,8 @@ PicHost supports **local disk** and **S3-compatible object storage** (Cloudflare
All **keys** start with `images/`. The upload API does **not** accept a `folder` parameter.
**Classification** uses per-user **tags** in SQLite (`tags` / `image_tags`); disk paths are unchanged. See [API](./api.md#6-tags).
## Adding a backend
1. Sign in as admin → **Storage** → **Add backend**.
@@ -54,7 +56,9 @@ Copied links use **IMAGE_BASE_URL**. “Hide folder prefix” may shorten URLs;
## Usage & gallery filter
- Per-backend usage on the Storage page
- Gallery filters by **storage backend** and **upload source**; grid/list view toggle; click a thumbnail for the detail modal (dimensions, storage path, link formats)
- Gallery filters by **storage backend**, **upload source**, and **tags**; grid/list view toggle; click a thumbnail for the detail modal (dimensions, storage path, tags, link formats)
![Gallery grid](/screenshots/gallery.png) ![Gallery list](/screenshots/gallery-list.png) ![Image detail](/screenshots/gallery-detail.png)
## Backup & migration (v1.3.0+)
@@ -16,6 +16,7 @@ PicHost uses role-based access control (RBAC): **admin** and **user**. Enforceme
| Global API token | ✓ | — |
| Personal API token | ✓ | ✓ |
| Gallery stats overview (incl. user count) | ✓ | partial |
| Tag management (Settings → Tag management) | ✓ | — |
| Activity log (Settings → Activity log) | ✓ | — |
Regular users see **API**, **Gallery** in the nav; user menu: **Change password**, **Sign out**.
@@ -39,6 +40,20 @@ Regular users see **API**, **Gallery** in the nav; user menu: **Change password*
- If verification is misconfigured: `docker exec pichost slider` resets to the local slider
- Login rate limiting
## Tags
- Tags are **per-user**: regular users manage and filter only their own tags and images
- After upload on the home page, **tag one image** or use **batch tagging**; the gallery supports tag filters (OR / AND) and batch tagging
- Admins manage tags under **Settings → Tag management** (create, recolor, merge, delete). Tags classify images only and **do not change** `images/` storage paths
![Batch tagging](/screenshots/tags-batch.png) ![Tag management](/screenshots/tags.png)
## Activity log
Admins review uploads, deletes, logins, settings changes, tag operations, and more under **Settings → Activity log**, with filters for date, user, action type, and source.
![Activity log](/screenshots/logs.png)
## Upload preferences & auto-delete
- **Upload preferences**: admins configure client compression and auto-copy in **Settings → Basic**; regular users can flip the home upload card for personal preferences
+37 -1
View File
@@ -2,6 +2,8 @@
PicHost 提供 REST 接口与 Twikoo 兼容端点。登录后打开顶栏 **API** 页:左侧为接口目录与 Token 管理,中间为参数说明与 cURL 示例,右侧可 **在线调试** 发送请求。
![API 文档与在线调试](/screenshots/api.png)
## 鉴权
所有 REST 接口使用请求头:
@@ -28,9 +30,12 @@ Auth-Token: YOUR_TOKEN
```bash
curl -X POST "https://admin.example.com/api/images/upload" \
-H "Auth-Token: YOUR_TOKEN" \
-F "image=@./demo.png"
-F "image=@./demo.png" \
-F 'tagIds=[1,2]'
```
可选表单字段 `tagIds`:JSON 数组字符串(如 `[1,2]`)或重复字段,上传成功后自动打标。存储路径仍为 `images/年/月/id.webp`,**不会**因标签创建子目录。
### 2. 获取图片列表
`GET /api/images`
@@ -42,6 +47,16 @@ curl "https://admin.example.com/api/images?limit=20&page=1" \
-H "Auth-Token: YOUR_TOKEN"
```
可选查询参数:
| 参数 | 说明 |
| ---- | ---- |
| `tagIds` | 逗号分隔的标签 ID,默认 **OR**(含任一标签) |
| `tagMode` | `and` 时多标签取交集 |
| `untagged` | `1` 仅返回无标签图片 |
响应 `items[]` 含 `tags` 数组(`id`、`name`、`color`)。
### 3. 搜索图片
`GET /api/images/search`
@@ -77,6 +92,27 @@ curl -X POST "https://admin.example.com/api/images/batch-delete" \
-d '{"keys":["images/2026/08/a.webp","images/2026/08/b.webp"]}'
```
### 6. 标签管理
| 方法 | 路径 | 说明 |
| ---- | ---- | ---- |
| `GET` | `/api/tags` | 当前用户标签列表(含 `imageCount`) |
| `POST` | `/api/tags` | 创建 `{ "name": "工作", "color": "#22c55e" }` |
| `PATCH` | `/api/tags/:id` | 改名称/颜色 |
| `DELETE` | `/api/tags/:id` | 删除标签(不删图片) |
| `POST` | `/api/tags/merge` | `{ "sourceIds": [2,3], "targetId": 1 }` |
### 7. 图片打标
| 方法 | 路径 | 说明 |
| ---- | ---- | ---- |
| `POST` | `/api/images/tags` | `{ "key": "images/…", "tagIds": [1,2] }` 追加 |
| `PATCH` | `/api/images/tags` | 整体替换标签集合 |
| `DELETE` | `/api/images/tags` | `key` + `tagId` 移除单个 |
| `POST` | `/api/images/batch-tags` | `{ "keys": [], "tagIds": [], "action": "add" \| "remove" }` |
`GET /api/stats` 支持与列表相同的 `tagIds` / `tagMode` / `untagged` 筛选,统计与当前筛选一致。
## 错误格式
REST 接口返回 JSON,含 `code` 与 `message`(如 `UNAUTHORIZED`、`FORBIDDEN`、`INVALID_REQUEST`)。Twikoo 端点使用 EasyImage 兼容 JSON 格式。
+18
View File
@@ -4,6 +4,24 @@ PicHost 版本历史与重要变更说明。完整记录亦见仓库根目录 [C
---
## [1.4.0] — 2026-09-09
### 新增
- **标签**:每用户彩色标签;设置页管理;上传/图库批量打标;图库 OR / AND 筛选
- **操作日志**:登录、删除、设置、标签等操作;日期与用户筛选
- **API**:标签与打标接口;上传 `tagIds`;列表/统计标签筛选
### 文档
- 截图与 README 同步 v1.4 界面
## [1.3.0] — 2026-09-07
### 新增
- **站点备份 / 恢复 / 跨后端同步** 与任务中心;运维 CLI `backup-export`、`backup-restore`、`storage-sync`
## [1.2.8] — 2026-09-04
### 改进
+3 -1
View File
@@ -1,4 +1,6 @@
PicHost 支持通过环境变量(Docker / `.env`)与后台 **设置** 页配置。管理员在 **设置与偏好**(`/settings`)左侧切换 **基础设置**、**域名与路径**、**访问控制**、**操作日志**;多数项 **SQLite 优先**;部分项环境变量可覆盖或锁定后台编辑。
PicHost 支持通过环境变量(Docker / `.env`)与后台 **设置** 页配置。管理员在 **设置与偏好**(`/settings`)左侧切换 **基础设置**、**域名与路径**、**访问控制**、**标签管理**、**操作日志**;多数项 **SQLite 优先**;部分项环境变量可覆盖或锁定后台编辑。
![基础设置](/screenshots/settings.png)
## 优先级总览
+3 -1
View File
@@ -37,7 +37,9 @@ docker compose up -d
- **创建管理员**:填写用户名与密码,可选开放注册、双域名等。
- **从备份恢复**:上传 `.phost.tar.gz` 整站备份包(覆盖当前数据;云存储密钥需恢复后重新填写)。
3. (可选)配置网站域名、图片域名、防盗链等 — 详见 [环境变量](./configuration.md) 与 [双域名分离](./domain-separation.md)。
4. 登录后可在首页上传图片;顶栏可进入 **图库**、**存储**(管理员)、**设置**、**API**。
4. 登录后可在首页 **拖拽 / 点击 / Ctrl+V** 上传图片;上传结果区支持复制直链/Markdown/HTML/BBCode,并可 **批量打标签**。顶栏可进入 **图库**、**存储**(管理员)、**设置**、**API**。
![上传](/screenshots/upload.png)
| 创建管理员 | 从备份恢复 |
| :--------: | :--------: |
+18 -6
View File
@@ -12,15 +12,27 @@
## 截图预览
**main** 分支暂无公网演示,以下为当前产品界面(v1.3.0+)。
**main** 分支暂无公网演示,以下为当前产品界面(v1.4.0+)。
| API | 图库(详情) |
| 上传 | 批量打标 |
| :-: | :-: |
| ![API](/screenshots/api.png) | ![图库](/screenshots/gallery.png) |
| ![上传](/screenshots/upload.png) | ![批量打标](/screenshots/tags-batch.png) |
| 存储管理 | 设置与偏好 |
| :------: | :--------: |
| ![存储管理](/screenshots/storage.png) | ![设置与偏好](/screenshots/settings.png) |
| 上传结果(含标签) | API |
| :----------------: | :-: |
| ![上传结果](/screenshots/upload-tags.jpg) | ![API](/screenshots/api.png) |
| 图库(网格) | 图库(列表) |
| :----------: | :----------: |
| ![图库网格](/screenshots/gallery.png) | ![图库列表](/screenshots/gallery-list.png) |
| 图片详情 | 标签管理 |
| :------: | :------: |
| ![图片详情](/screenshots/gallery-detail.png) | ![标签管理](/screenshots/tags.png) |
| 存储管理 | 基础设置 |
| :------: | :------: |
| ![存储管理](/screenshots/storage.png) | ![基础设置](/screenshots/settings.png) |
| 首次设置 | 从备份恢复 |
| :------: | :--------: |
+1 -1
View File
@@ -52,4 +52,4 @@ npm run docs:build # 构建静态站点
npm run docs:preview # 预览构建结果
```
文档源码在 `docs-site/`;截图源文件在 `docs/screenshots/`(含 `login.png`、`setup.png`、`setup-restore.png` 等),构建前会复制到 `docs-site/public/screenshots/`。在线文档:<https://o96u.github.io/PicHost/>
文档源码在 `docs-site/`;截图源文件在 `docs/screenshots/`(含 `upload.png`、`gallery.png`、`tags.png`、`api.png`、`storage.png`、`settings.png`、`logs.png`、`setup.png` 等),构建前会复制到 `docs-site/public/screenshots/`。在线文档:<https://o96u.github.io/PicHost/>
+5 -1
View File
@@ -18,6 +18,8 @@ PicHost 支持 **本地磁盘** 与 **S3 兼容对象存储**(Cloudflare R2、
所有图片 **key** 以 `images/` 开头。上传 API **不再接受** `folder` 参数。
**图片分类**使用每用户 **标签**(`tags` / `image_tags` 表),不改变磁盘路径。图库页按标签筛选;详见 [API 文档](./api.md#6-标签管理)。
## 添加存储后端
1. 以管理员登录,打开 **存储** → **添加存储**。
@@ -56,7 +58,9 @@ PicHost 支持 **本地磁盘** 与 **S3 兼容对象存储**(Cloudflare R2、
## 用量与筛选
- 存储页展示各后端用量(本地扫描目录,对象存储查询 API)
- 图库可按 **存储后端**、**上传来源** 筛选,支持网格/列表视图切换;点击图片打开详情弹窗(尺寸、存储路径、多格式链接复制)
- 图库可按 **存储后端**、**上传来源**、**标签** 筛选,支持网格/列表视图切换;点击图片打开详情弹窗(尺寸、存储路径、标签、多格式链接复制)
![图库网格](/screenshots/gallery.png) ![图库列表](/screenshots/gallery-list.png) ![图片详情](/screenshots/gallery-detail.png)
## 备份与迁移(v1.3.0+)
+15
View File
@@ -16,6 +16,7 @@ PicHost 使用基于角色的访问控制(RBAC):**管理员(admin)**
| 全局 API Token 管理 | ✓ | — |
| 个人 API Token | ✓ | ✓ |
| 图库统计概览(含注册用户数) | ✓ | 部分 |
| 标签管理(设置 → 标签管理) | ✓ | — |
| 操作日志(设置 → 操作日志) | ✓ | — |
普通用户顶栏:**API**、**图库**;用户菜单:**修改密码**、**退出登录**。
@@ -39,6 +40,20 @@ PicHost 使用基于角色的访问控制(RBAC):**管理员(admin)**
- 验证配置错误无法登录时:`docker exec pichost slider` 重置为本地滑块
- 登录失败有速率限制
## 标签
- 标签按 **用户隔离**:普通用户仅管理、筛选自己的标签与图片
- 首页上传完成后可 **单张打标** 或 **批量打标签**;图库支持按标签筛选(多标签 OR / AND)与批量打标
- 管理员在 **设置 → 标签管理** 新建、改色、合并、删除标签;标签仅用于分类,**不改变** `images/` 存储路径
![批量打标](/screenshots/tags-batch.png) ![标签管理](/screenshots/tags.png)
## 操作日志
管理员在 **设置 → 操作日志** 查看上传、删除、登录、设置变更、标签操作等记录,支持按日期、用户、操作类型、来源筛选。
![操作日志](/screenshots/logs.png)
## 上传偏好与自动删除
- **上传偏好**:管理员在 **设置 → 基础设置** 配置客户端预压缩、自动复制链接等;普通用户可在首页上传卡片背面调整个人偏好