Skip to content

Commit ab6d37e

Browse files
committed
更新readme
1 parent ec9d373 commit ab6d37e

File tree

1 file changed

+164
-94
lines changed

1 file changed

+164
-94
lines changed

README.md

Lines changed: 164 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -1,113 +1,147 @@
11
# Random Mage (new-pixiv-api)
22

3-
一个自托管的随机图片 API:把 Pixiv 原图链接导入到本地数据库后,即可通过 `/random`**标签 / 热度 / 分辨率 / R18 / AI / 作品类型** 等条件组合筛选并随机出图;同时提供管理后台(Web UI)+ 后台 Worker,用于导入、补全元数据、代理探测等任务。
4-
5-
官方 Demo(公开站点):
3+
自托管的 Pixiv 随机图片服务:将原图链接导入本地数据库后,通过 `GET /random` 按标签、热度、分辨率、R18、AI、作品类型等条件组合筛选并随机出图。项目同时提供管理后台(Web UI)与后台 Worker(导入/补全/代理探测等任务)。
64

5+
官方演示站:
76
- `https://i.mukyu.ru/random`
87
- `https://i.mukyu.ru/docs`
98
- `https://i.mukyu.ru/api/docs`
109

11-
> 免责声明:本项目为非官方实现;请遵守 Pixiv ToS/版权与当地法律法规,自行承担使用风险。不要将任何 refresh_token / 密钥 / 代理密码提交到仓库。
12-
13-
## 功能概览
14-
15-
- 公共 API
16-
- `GET /random`:默认直接返回图片流;也可 `format=json|simple_json` 返回 JSON;支持大量筛选参数
17-
- `GET /images` / `GET /images/{id}`:按条件分页查看已入库图片
18-
- `GET /i/{image_id}.{ext}`:本地代理/缓存路径(`/random?redirect=1` 会跳转到这里)
19-
- `GET /tags``GET /authors``GET /healthz``GET /version``GET /docs`(人类可读文档页)
20-
- Swagger / OpenAPI:`GET /api/docs``GET /openapi.json`
21-
- 管理后台(`/admin`
22-
- 登录后可管理:Pixiv refresh_token、代理池、导入、任务队列、运行时开关、审计/统计等
23-
- Worker(后台任务)
24-
- 导入图片 URL、补全元数据(tags/宽高/浏览收藏等)、修复失效 URL、代理探测等
25-
- 可选能力
26-
- 公网访问保护:启用 Public API Key + 限流
27-
- `imgproxy`:对外提供签名处理 URL(可隐藏 origin URL)
28-
- 代理路由:为上游图片/接口选择代理
29-
30-
## 快速体验(使用官方 Demo)
31-
32-
```bash
33-
curl -L "https://i.mukyu.ru/random?redirect=1"
34-
curl "https://i.mukyu.ru/random?format=simple_json"
35-
```
36-
37-
## 一键部署(Docker Compose,推荐)
38-
39-
前置:安装 Docker + Docker Compose。
40-
41-
1) 准备环境变量
10+
> 免责声明:本项目为非官方实现。请遵守 Pixiv ToS、版权与当地法律法规;不要将 `refresh_token`、密钥、代理密码提交到仓库。
11+
12+
## 近期功能更新(基于最近提交)
13+
14+
- `ec9d373`:增强 `/wtf` 顶部筛选布局,支持标签排除筛选、`proxy` 参数自定义反代、选中反馈与单击放大。
15+
- `ef66583`:支持导入 PixivBatchDownloader 导出的 `.json`,并默认关闭该格式的导入后补全。
16+
- `9e437d8` + `80cd41f` + `5159d82` + `53e0890`:持续优化瀑布流页,新增标准/小格子两种展示模式。
17+
- `6a843ce`:新增公开状态页 `/status` 与 JSON 版本 `/status.json`,并持久化随机请求总量。
18+
- `638a285` + `ee0549b`:增强 pximg 反代能力(含 pixiv.cat / 镜像),改进 docs/status 页面与并发场景稳定性。
19+
- `810b2da`:修复大量导入下的数据库冲突问题。
20+
21+
## 项目能力总览
22+
23+
### 1) 公开 API
24+
25+
| 接口 | 说明 |
26+
| --- | --- |
27+
| `GET /random` | 随机取图(默认图片流),支持 `format=json/simple_json` 与复杂过滤条件 |
28+
| `GET /images` | 分页查询入库图片,支持标签、尺寸、时间等筛选 |
29+
| `GET /images/{image_id}` | 查询单张图片及标签 |
30+
| `GET /i/{image_id}.{ext}` | 本地代理/缓存路径(`/random?redirect=1` 跳转到这里) |
31+
| `GET /{illust_id}.{ext}` / `GET /{illust_id}-{page}.{ext}` | 兼容旧式直链路径 |
32+
| `GET /tags` / `GET /authors` | 标签与作者检索 |
33+
| `GET /healthz` | 健康检查(DB、Worker 心跳、队列状态) |
34+
| `GET /version` | 版本、构建时间、commit |
35+
| `GET /docs` | 人类可读文档页 |
36+
| `GET /status` / `GET /status.json` | 公开运行状态(图库统计 + 随机请求统计) |
37+
| `GET /wtf` | 瀑布流浏览页(标准/小格子视图) |
38+
| `GET /api/docs` / `GET /openapi.json` | Swagger/OpenAPI |
39+
40+
`/random` 的常用能力:
41+
- 输出模式:`format=image|json|simple_json``redirect=1`
42+
- 策略:`strategy=quality|random``quality_samples`,可配置 recommendation 权重与倍率。
43+
- 过滤:`r18``r18_strict``ai_type``illust_type``orientation/layout`
44+
- 阈值:`min_width``min_height``min_pixels``min_bookmarks``min_views``min_comments`
45+
- 标签:`included_tags``excluded_tags`(支持 `|` 表示组内 OR)。
46+
- 其他:`user_id``illust_id``created_from``created_to``seed``attempts``adaptive=1`
47+
48+
标签语义说明:
49+
- 组间是 AND:`included_tags=a&included_tags=b`
50+
- 组内是 OR:`included_tags=a|b`
51+
52+
### 2) 管理后台(`/admin` + `/admin/api/*`
53+
54+
核心模块:
55+
- 登录鉴权:JWT 登录/登出。
56+
- 导入中心:支持文本粘贴、`.txt` 上传、PixivBatchDownloader `.json` 上传、预检查(dry-run)、回滚。
57+
- 图片管理:分页筛选、删除、批量删除、清库。
58+
- 补全管理:创建/手动触发补全任务、暂停/恢复/取消。
59+
- 任务队列:查看任务、重试、取消、转入 DLQ。
60+
- 令牌管理:Pixiv refresh_token 增删改查、测试刷新、失败重置。
61+
- 代理体系:代理节点导入/编辑/清理/探测,代理池维护。
62+
- 绑定关系:Token 与代理池绑定重算、覆盖、清除覆盖。
63+
- 系统设置:随机默认策略、代理路由模式、图片反代行为、安全开关等。
64+
- 审计日志、汇总统计、公共 API Key 管理、请求日志清理。
65+
66+
### 3) Worker(后台任务执行)
67+
68+
内置任务类型包括:
69+
- `import_images`
70+
- `hydrate_metadata`
71+
- `heal_url`
72+
- `proxy_probe`
73+
- `easy_proxies_import`
74+
75+
关键特性:
76+
-`enabled token` 数自动调整并发(可关闭)。
77+
- 写入 `worker.last_seen_at` 心跳到运行时设置。
78+
- SQLite busy 重试与并发参数调优,降低高并发导入冲突概率。
79+
80+
## 快速部署(Docker Compose,推荐)
81+
82+
前置:`Docker` + `Docker Compose`
83+
84+
1. 准备环境变量
4285

4386
```bash
4487
cp deploy/.env.example deploy/.env
4588
```
4689

47-
然后编辑 `deploy/.env`,至少建议修改:
48-
49-
- `SECRET_KEY`:JWT/API Key 哈希用(生产环境必须修改)
50-
- `ADMIN_PASSWORD`:后台密码(生产环境必须修改)
51-
- `FIELD_ENCRYPTION_KEY`:用于加密保存 refresh_token(生产环境必须提供;建议用 secret 挂载或文件方式)
90+
2. 编辑 `deploy/.env`(至少修改以下项)
91+
- `SECRET_KEY`
92+
- `ADMIN_PASSWORD`
93+
- `FIELD_ENCRYPTION_KEY`(生产环境必须提供)
5294

53-
2) 启动
95+
3. 启动
5496

5597
```bash
5698
docker compose -f deploy/docker-compose.yml up -d --build
5799
```
58100

59-
3) 访问
60-
61-
- API 基址:`http://localhost:23222`
62-
- 健康检查:`GET http://localhost:23222/healthz`
63-
- 文档页:`GET http://localhost:23222/docs`
64-
- 后台 UI:`http://localhost:23222/admin`
101+
4. 访问
102+
- API:`http://localhost:23222`
103+
- 文档页:`http://localhost:23222/docs`
104+
- 状态页:`http://localhost:23222/status`
65105
- Swagger:`http://localhost:23222/api/docs`
66-
67-
## 首次使用(导入数据 + 补全元数据)
68-
69-
这个项目不会“自动替你抓全站图片”,你需要先把图片记录导入数据库。
70-
71-
1) 登录后台
72-
73-
- 打开 `http://localhost:23222/admin`
74-
- 使用 `deploy/.env` 中的 `ADMIN_USERNAME` / `ADMIN_PASSWORD` 登录
75-
76-
2) 导入图片原图 URL
77-
78-
后台提供“导入”入口,支持:
79-
80-
- 直接粘贴多行文本(每行一个 URL)
81-
- 上传 `.txt` 文件(同样每行一个 URL)
82-
83-
导入内容应为 Pixiv 原图链接(例如 `i.pximg.net/.../img-original/...` 这类)。导入时会自动去重(按 illust_id + page)。
84-
85-
3) 配置 Pixiv refresh_token(可选,但强烈建议)
86-
87-
若你希望 Worker 自动补全/刷新元数据(tags、宽高、浏览/收藏/评论、R18 标记、AI 类型等),需要:
88-
89-
- 在后台添加一个或多个 refresh_token
90-
- 配置 `PIXIV_OAUTH_CLIENT_ID` / `PIXIV_OAUTH_CLIENT_SECRET`(以及可选的 `PIXIV_OAUTH_HASH_SECRET`
91-
92-
> 安全提示:refresh_token 属于敏感凭据;请只放在运行环境里(`deploy/.env` / secret 管理),不要写进代码/仓库。
93-
94-
4) 确认 Worker 正常
95-
96-
`/healthz` 会同时检查 DB、队列、以及 Worker 心跳;如果 `worker_ok=false`,通常意味着 Worker 没启动或无法连接数据库卷。
97-
98-
## 配置说明(节选)
99-
100-
所有配置均通过环境变量注入(见 `deploy/.env.example`):
101-
102-
- `APP_ENV``dev` / `prod``prod` 会启用更严格的必填校验)
103-
- `DATABASE_URL`:默认 SQLite(容器内 `/app/data/app.db`,通过 `../data:/app/data` 挂载)
104-
- `PUBLIC_API_KEY_REQUIRED` / `PUBLIC_API_KEY_RPM` / `PUBLIC_API_KEY_BURST`:公网访问保护(可选)
105-
- `WORKER_*``IMPORT_*``SQLITE_BUSY_TIMEOUT_MS`:Worker/导入/SQLite 运行参数
106-
- `IMGPROXY_*`:imgproxy 集成(可选)
107-
108-
## 本地开发(可选)
109-
110-
后端(Python 3.11):
106+
- 管理后台:`http://localhost:23222/admin`
107+
108+
## 首次使用建议流程
109+
110+
1. 登录管理后台:使用 `ADMIN_USERNAME` / `ADMIN_PASSWORD`
111+
2. 导入图片链接(导入页):
112+
- 方式 A:粘贴多行原图 URL。
113+
- 方式 B:上传 `.txt`(每行一个 URL)。
114+
- 方式 C:上传 PixivBatchDownloader `.json`(会尽量提取并写入元数据/标签,默认不再额外补全)。
115+
3. (可选但建议)配置 Pixiv refresh_token:用于后续补全/刷新元数据。
116+
4. 观察状态:
117+
- `GET /healthz`:看 `worker_ok` 与队列状态。
118+
- 管理后台任务页:看导入与补全进度。
119+
120+
## 关键配置项(节选)
121+
122+
`deploy/.env.example` 为准,常用项如下:
123+
124+
| 变量 | 作用 |
125+
| --- | --- |
126+
| `APP_ENV` | 运行环境(`dev` / `prod`|
127+
| `DATABASE_URL` | 数据库连接(默认 SQLite) |
128+
| `SECRET_KEY` | JWT / API Key 哈希密钥 |
129+
| `FIELD_ENCRYPTION_KEY` / `FIELD_ENCRYPTION_KEY_FILE` | 敏感字段加密密钥 |
130+
| `ADMIN_USERNAME` / `ADMIN_PASSWORD` | 后台账号密码 |
131+
| `PIXIV_OAUTH_CLIENT_ID` / `PIXIV_OAUTH_CLIENT_SECRET` / `PIXIV_OAUTH_HASH_SECRET` | Pixiv OAuth 参数 |
132+
| `WORKER_AUTO_CONCURRENCY` / `WORKER_MAX_CONCURRENCY` | Worker 并发策略 |
133+
| `IMGPROXY_*` | imgproxy 签名 URL 能力 |
134+
| `PUBLIC_API_KEY_REQUIRED` / `PUBLIC_API_KEY_RPM` / `PUBLIC_API_KEY_BURST` | 公开接口 API Key 与限流 |
135+
136+
高级运行参数(按需):
137+
- `SQLITE_BUSY_TIMEOUT_MS``SQLITE_POOL_SIZE``SQLITE_MAX_OVERFLOW``SQLITE_POOL_TIMEOUT_S`
138+
- `IMPORT_MAX_BYTES``IMPORT_INLINE_MAX_ACCEPTED`
139+
- `RANDOM_TOTALS_PERSIST_INTERVAL_SECONDS`
140+
- `WORKER_HEARTBEAT_INTERVAL_SECONDS``WORKER_HEARTBEAT_STALE_SECONDS`
141+
142+
## 本地开发
143+
144+
### 后端(Python 3.11)
111145

112146
```bash
113147
cd backend
@@ -118,17 +152,53 @@ alembic upgrade head
118152
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
119153
```
120154

121-
前端管理台(Node 20):
155+
另开一个终端运行 Worker:
156+
157+
```bash
158+
cd backend
159+
.\.venv\Scripts\activate
160+
python -m app.worker
161+
```
162+
163+
### 前端(Node 20)
122164

123165
```bash
124166
cd frontend
125167
npm ci
126168
npm run dev
127169
```
128170

129-
如需让前端直连本地后端,设置 `VITE_API_BASE_URL`(例如 `http://localhost:8000`
171+
如需前端直连本地后端,可设置 `VITE_API_BASE_URL=http://localhost:8000`
130172

131-
## 运行测试
173+
## 测试与检查
132174

133175
- 后端:`python -m pytest -q backend/tests`
134176
- 前端:`cd frontend && npm test`
177+
- 一键脚本:
178+
- `scripts/test_backend.ps1`
179+
- `scripts/test_frontend.ps1`
180+
- `scripts/test_all.ps1`
181+
182+
## 目录结构(简版)
183+
184+
```text
185+
.
186+
├─ backend/
187+
│ ├─ app/
188+
│ │ ├─ api/ # public + admin 路由
189+
│ │ ├─ core/ # 配置、安全、代理路由、指标
190+
│ │ ├─ db/ # 模型与查询
191+
│ │ ├─ jobs/ # 队列、调度、任务处理器
192+
│ │ └─ worker.py
193+
│ └─ tests/
194+
├─ frontend/ # React + Vite 管理后台
195+
├─ deploy/ # compose 与环境变量示例
196+
└─ scripts/ # 测试与辅助脚本
197+
```
198+
199+
## 合规与安全建议
200+
201+
- 切勿将任何真实令牌或密钥提交到仓库。
202+
- 公网部署建议开启 `PUBLIC_API_KEY_REQUIRED` 并配置限流。
203+
- 生产环境务必设置强密码与独立密钥。
204+

0 commit comments

Comments
 (0)