Skip to content

inliver233/Random-image-api

Repository files navigation

Random Mage (new-pixiv-api)

自托管的 Pixiv 随机图片服务:将原图链接导入本地数据库后,通过 GET /random 按标签、热度、分辨率、R18、AI、作品类型等条件组合筛选并随机出图。项目同时提供管理后台(Web UI)与后台 Worker(导入/补全/代理探测等任务)。

官方演示站:

  • https://i.mukyu.ru/random
  • https://i.mukyu.ru/docs
  • https://i.mukyu.ru/api/docs

免责声明:本项目为非官方实现。请遵守 Pixiv ToS、版权与当地法律法规;不要将 refresh_token、密钥、代理密码提交到仓库。

近期功能更新(基于最近提交)

  • ec9d373:增强 /wtf 顶部筛选布局,支持标签排除筛选、proxy 参数自定义反代、选中反馈与单击放大。
  • ef66583:支持导入 PixivBatchDownloader 导出的 .json,并默认关闭该格式的导入后补全。
  • 9e437d8 + 80cd41f + 5159d82 + 53e0890:持续优化瀑布流页,新增标准/小格子两种展示模式。
  • 6a843ce:新增公开状态页 /status 与 JSON 版本 /status.json,并持久化随机请求总量。
  • 638a285 + ee0549b:增强 pximg 反代能力(含 pixiv.cat / 镜像),改进 docs/status 页面与并发场景稳定性。
  • 810b2da:修复大量导入下的数据库冲突问题。

项目能力总览

1) 公开 API

接口 说明
GET /random 随机取图(默认图片流),支持 format=json/simple_json 与复杂过滤条件
GET /images 分页查询入库图片,支持标签、尺寸、时间等筛选
GET /images/{image_id} 查询单张图片及标签
GET /i/{image_id}.{ext} 本地代理/缓存路径(/random?redirect=1 跳转到这里)
GET /{illust_id}.{ext} / GET /{illust_id}-{page}.{ext} 兼容旧式直链路径
GET /tags / GET /authors 标签与作者检索
GET /healthz 健康检查(DB、Worker 心跳、队列状态)
GET /version 版本、构建时间、commit
GET /docs 人类可读文档页
GET /status / GET /status.json 公开运行状态(图库统计 + 随机请求统计)
GET /wtf 瀑布流浏览页(标准/小格子视图)
GET /api/docs / GET /openapi.json Swagger/OpenAPI

/random 的常用能力:

  • 输出模式:format=image|json|simple_jsonredirect=1
  • 策略:strategy=quality|randomquality_samples,可配置 recommendation 权重与倍率。
  • 过滤:r18r18_strictai_typeillust_typeorientation/layout
  • 阈值:min_widthmin_heightmin_pixelsmin_bookmarksmin_viewsmin_comments
  • 标签:included_tagsexcluded_tags(支持 | 表示组内 OR)。
  • 其他:user_idillust_idcreated_fromcreated_toseedattemptsadaptive=1

标签语义说明:

  • 组间是 AND:included_tags=a&included_tags=b
  • 组内是 OR:included_tags=a|b

2) 管理后台(/admin + /admin/api/*

核心模块:

  • 登录鉴权:JWT 登录/登出。
  • 导入中心:支持文本粘贴、.txt 上传、PixivBatchDownloader .json 上传、预检查(dry-run)、回滚。
  • 图片管理:分页筛选、删除、批量删除、清库。
  • 补全管理:创建/手动触发补全任务、暂停/恢复/取消。
  • 任务队列:查看任务、重试、取消、转入 DLQ。
  • 令牌管理:Pixiv refresh_token 增删改查、测试刷新、失败重置。
  • 代理体系:代理节点导入/编辑/清理/探测,代理池维护。
  • 绑定关系:Token 与代理池绑定重算、覆盖、清除覆盖。
  • 系统设置:随机默认策略、代理路由模式、图片反代行为、安全开关等。
  • 审计日志、汇总统计、公共 API Key 管理、请求日志清理。

3) Worker(后台任务执行)

内置任务类型包括:

  • import_images
  • hydrate_metadata
  • heal_url
  • proxy_probe
  • easy_proxies_import

关键特性:

  • enabled token 数自动调整并发(可关闭)。
  • 写入 worker.last_seen_at 心跳到运行时设置。
  • SQLite busy 重试与并发参数调优,降低高并发导入冲突概率。

快速部署(Docker Compose,推荐)

前置:Docker + Docker Compose

  1. 准备环境变量
cp deploy/.env.example deploy/.env
  1. 编辑 deploy/.env(至少修改以下项)
  • SECRET_KEY
  • ADMIN_PASSWORD
  • FIELD_ENCRYPTION_KEY(生产环境必须提供)
  1. 启动
docker compose -f deploy/docker-compose.yml up -d --build
  1. 访问
  • API:http://localhost:23222
  • 文档页:http://localhost:23222/docs
  • 状态页:http://localhost:23222/status
  • Swagger:http://localhost:23222/api/docs
  • 管理后台:http://localhost:23222/admin

首次使用建议流程

  1. 登录管理后台:使用 ADMIN_USERNAME / ADMIN_PASSWORD
  2. 导入图片链接(导入页):
    • 方式 A:粘贴多行原图 URL。
    • 方式 B:上传 .txt(每行一个 URL)。
    • 方式 C:上传 PixivBatchDownloader .json(会尽量提取并写入元数据/标签,默认不再额外补全)。
  3. (可选但建议)配置 Pixiv refresh_token:用于后续补全/刷新元数据。
  4. 观察状态:
    • GET /healthz:看 worker_ok 与队列状态。
    • 管理后台任务页:看导入与补全进度。

关键配置项(节选)

deploy/.env.example 为准,常用项如下:

变量 作用
APP_ENV 运行环境(dev / prod
DATABASE_URL 数据库连接(默认 SQLite)
SECRET_KEY JWT / API Key 哈希密钥
FIELD_ENCRYPTION_KEY / FIELD_ENCRYPTION_KEY_FILE 敏感字段加密密钥
ADMIN_USERNAME / ADMIN_PASSWORD 后台账号密码
PIXIV_OAUTH_CLIENT_ID / PIXIV_OAUTH_CLIENT_SECRET / PIXIV_OAUTH_HASH_SECRET Pixiv OAuth 参数
WORKER_AUTO_CONCURRENCY / WORKER_MAX_CONCURRENCY Worker 并发策略
IMGPROXY_* imgproxy 签名 URL 能力
PUBLIC_API_KEY_REQUIRED / PUBLIC_API_KEY_RPM / PUBLIC_API_KEY_BURST 公开接口 API Key 与限流

高级运行参数(按需):

  • SQLITE_BUSY_TIMEOUT_MSSQLITE_POOL_SIZESQLITE_MAX_OVERFLOWSQLITE_POOL_TIMEOUT_S
  • IMPORT_MAX_BYTESIMPORT_INLINE_MAX_ACCEPTED
  • RANDOM_TOTALS_PERSIST_INTERVAL_SECONDS
  • WORKER_HEARTBEAT_INTERVAL_SECONDSWORKER_HEARTBEAT_STALE_SECONDS

本地开发

后端(Python 3.11)

cd backend
python -m venv .venv
.\.venv\Scripts\activate
python -m pip install -r ..\requirements-dev.txt
alembic upgrade head
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000

另开一个终端运行 Worker:

cd backend
.\.venv\Scripts\activate
python -m app.worker

前端(Node 20)

cd frontend
npm ci
npm run dev

如需前端直连本地后端,可设置 VITE_API_BASE_URL=http://localhost:8000

测试与检查

  • 后端:python -m pytest -q backend/tests
  • 前端:cd frontend && npm test
  • 一键脚本:
    • scripts/test_backend.ps1
    • scripts/test_frontend.ps1
    • scripts/test_all.ps1

目录结构(简版)

.
├─ backend/
│  ├─ app/
│  │  ├─ api/          # public + admin 路由
│  │  ├─ core/         # 配置、安全、代理路由、指标
│  │  ├─ db/           # 模型与查询
│  │  ├─ jobs/         # 队列、调度、任务处理器
│  │  └─ worker.py
│  └─ tests/
├─ frontend/           # React + Vite 管理后台
├─ deploy/             # compose 与环境变量示例
└─ scripts/            # 测试与辅助脚本

合规与安全建议

  • 切勿将任何真实令牌或密钥提交到仓库。
  • 公网部署建议开启 PUBLIC_API_KEY_REQUIRED 并配置限流。
  • 生产环境务必设置强密码与独立密钥。

About

基于pixiv的随机图片api系统

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors