dsh-pixiv-scroll
Manifest validDSH plugin: browse Pixiv your way — search, filter, and read curated images, save them locally or send them straight to you. The network automatically routes between external sources, direct connections, and proxies.
dsh-pixiv-scroll
DSH 插件:按你的口味刷 Pixiv —— 搜、筛、看图精选,存到本地或发给你。
⚠️ 前提:你的机器得能上 pixiv。 插件不内置代理、不代你绕过网络限制 —— 详见 装之前必须知道的一件事。
设置页和插件面板里显示的名字是 dsh-pixi-scroll;包名仍是 dsh-pixiv-scroll。
两者不一样是故意的(显示名是另外指定的写法,包名跟站点名对齐更好认)。
和「刷B站」是同一套路子的姊妹插件。区别在于 Pixiv 是图片,所以多了一层 「真的把图看一眼再挑」。
零配置就能用(在你能上 pixiv 的前提下),不需要登录。 想更贴合口味可以选开登录(拿关注流和个性化推荐)。
它做什么
- 按关键词 / 排行榜找候选,按标签权重、画质、新鲜度打分排序
- 元数据先粗筛(分级、页数、分辨率、排除标签、判重),再读图精选
- 存成
<根>/<画师>/<标题>_<ID>/001.jpg …+metadata.json(含 sha256、来源、判定理由) - 发给你(走投递通道;没配通道就只落盘,默认永远能用)
- 可选定时刷(谷时自跑)
- 可选登录(多拿关注流 + 个性化推荐)
装之前必须知道的一件事:这个插件不能帮你翻墙
硬前提:你的机器得能上 pixiv
插件不内置代理、不内置节点、不代你绕过任何网络限制。它做的事是 「你已经能上 pixiv 了,我帮你把刷这件事做得更聪明」。
能不能上 pixiv 是你自己的事,插件只负责在你能上的前提下把活干好。
如果你上不了 pixiv,这个插件对你没用 —— 这不是我们没做好,是下面这条链子断在第一步:
| 环节 | 需要什么 | 上不了 pixiv 时 |
|---|---|---|
| 发现图片(搜索 / 排行 / 推荐) | pixiv 的元数据接口 | ❌ 只有官方有,镜像站一个都没有 |
| 取图片字节 | i.pximg.net | ⚠️ 镜像站能代替 |
| 但「取哪一张」 | 得先知道作品 ID | ❌ 而知道 ID 本身就意味着你已经能发现它了 |
所以「爬不了墙也能刷」这件事做不到。 镜像站(pixiv.re 这类)的定位是
「已知 ID 时帮你取图」,它假设你已经能上官方站——它替代的是图片域名,
不是元数据接口。发现图片这一步绕不过去。
实测(2026-11-05):
pixiv.re的 16 条路径穷举结果 —— 只有/<作品ID>.jpg返回图片,其余(/ajax/*、/ranking.php、/api/*、/search/*、/<id>.json) 全部 404。同批探测的pixiv.nl/pixiv.cat/pixiviz.xyz/pixiv.moe/pixivel.moe/pixivic没有一家提供搜索或排行。
那插件还能做什么
一旦你能上 pixiv(不管是自己挂了代理、还是本来就在墙外),插件会在四条路里自己挑:
| 路 | 什么时候用 |
|---|---|
| 外部源 | 你填了 externalApi —— 优先级最高,见下 |
| 直连 | 你的机器本来就能通(比如挂了 TUN 模式的代理) |
| 代理 | 你填了 proxyUrl(如 http://127.0.0.1:7897 这类本地代理) |
| 镜像 | 前三都拿不到元数据时,用 pixiv.re 取图(只有图) |
判定方式是实际探测(并行试外部源/直连/代理,看谁真能拿到数据),不是按 IP 猜。 实测数据:同一台机器十分钟内 TUN 时通时不通、裸直连整体超时、走代理 3/3 通 —— 所以「通不通」是探测出来的,不是写死的。
「外部源」——接你自己能上 pixiv 的东西
这是给"上不去 pixiv"准备的唯一出口。
如果你的机器上已经有任何能访问 pixiv 的东西 —— 自建反代、自己的服务器、
某个能上 pixiv 的客户端 —— 把它的地址填进 externalApi,插件就走它。
怎么填
设置页 → 网络 → 外部源,填一个地址:
http://127.0.0.1:8080 # 本机跑的
https://你的反代.example.com # 自己的反代
https://你的服务器.com/api/pixiv # 带子路径也行
约定:那个地址要兼容 pixiv 官方接口形态。 插件保持官方路径不变,只换 origin:
https://www.pixiv.net/ranking.php?mode=daily
↓ 换成你的地址
https://你的反代.example.com/ranking.php?mode=daily
也就是说,只要你的反代把 pixiv 的路径原样转发,插件就能用它 ——
搜索走 /ajax/search/artworks/*、排行走 /ranking.php、详情走 /ajax/illust/*。
插件不做什么
插件不内置代理、不做任何绕过网络限制的事。 那个能力得你自己提供:
- 插件只负责「按官方路径去调一个 HTTP 地址」
- 那个地址背后是什么(反代 / 服务器 / 客户端),插件不关心也不实现
为什么不做:那类技术(内置节点、伪造/加密 SNI)的唯一用途就是绕过网络封锁, 把它放进一个要开源的插件里不合适 —— 承担责任的是使用者,不是写代码的。
参考:
PixEz的「免代理直连」用的是硬编码 pixiv 真实 IP + DoH (lib/er/hoster.dart)或 ECH 加密 SNI(lib/network/network_mode.dart)。 那是它的实现、用户自己的选择;插件只是留个口子,谁来接都行。
优先级
外部源 > 直连 > 代理。 你填了外部源就是明确说了走它 —— 插件不会自作主张绕开它去直连(那等于无视你的配置)。
插件会在设置页和工具返回里如实告诉你现在处在哪一档,不会让你对着"搜到 0 条"猜:
官方直连 ✓ · 镜像 ✓ ← 全功能
官方经代理 ✓ · 镜像 ✗ ← 全功能
官方 ✗ · 镜像 ✓
→ 只能按作品 ID 取图,不能搜索/排行(镜像没有元数据接口)
官方 ✗ · 镜像 ✗
→ 完全打不通 pixiv。检查代理是否在跑(当前:…)
2. DSH 的聊天框不支持助手发图
这不是插件的限制,是宿主的:官方 dsh-attachment 只做用户 → 模型的单向传递,
assistant 侧的图片输出目前只是 forward-compatibility,生产适配器只声明 text-only。
所以「发给你」只能走投递通道:
| 通道 | 说明 |
|---|---|
local | 默认,永远可用。存到 saveRoot,并报告绝对路径 |
qq | 可选。需要你自己装 QQ 机器人(见下) |
设计上刻意做成通道接口:QQ 只是其中一个适配器。 别人没装 QQ 机器人也能用,默认那条「存到本地」不依赖任何外部配置。
3. QQ 通道的两条限制
- 插件不带任何凭证,
appId/appSecret全靠你自己配 - QQ 机器人默认没有主动消息权限:不带宽内
msg_id直接发会被拒(HTTP 400 / code40034105)。 只能在收到消息后约 5 分钟内的「被动窗口」里回。 窗口过了插件就只落盘,并如实说明原因 —— 不会假装发出去了。
安装
# 从 GitHub
dsh plugin --profile <你的profile> add github:<user>/dsh-pixiv-scroll
# 或者本地目录开发(改代码即时生效)
dsh plugin --profile <你的profile> add link:<插件目录>
装完必须重启一次 DSH(bundle 层要重启才组装,客户端 bundle 也只在启动时读)。
dsh plugin 会自动做三件事,不用手改 profile 的配置文件:
- 用 pnpm 把包装进
$DSH_HOME/profiles/<profile> - 因为本包声明了
dsh.bundle,把它加进 profile 的dsh.profile.bundles - 启动时应用包内自带的
cordis.patch.yml
桌面版注意
桌面版(Electron)里 dsh 不在 PATH 上。要手动跑命令的话用:
<安装目录>\resources\runtime\cli\bin\dsh.cmd
这个包装内部已经设好 ELECTRON_RUN_AS_NODE 并带上 --expose-internals。
定时刷也需要它 —— 在设置页把 dshBin 指到这个路径。
设置页
装好后进 设置 → dsh-pixi-scroll。里面分几组:
| 组 | 有什么 |
|---|---|
| 总开关 | 一键停用(定时轮也停) |
| 网络 | 代理地址、图片镜像,和一个 「测一下」 按钮 |
| 找什么 | 关键词(回车加入,点 ✕ 移除)、排行榜池塘 |
| 口味 | 排除标签、必须标签、收藏下限、时间窗 |
| 分级 | 收 R-18(默认关)、过滤 AI 生成 |
| 登录(可选) | 开关、刷哪些池子、贴 token、查看状态、退出 |
| 存放 | 保存根目录、目录模板 |
| 额度 | 每天最多存 / 每轮最多挑 / 单件最多几页 |
| 发到哪 | 存到本地 / 发到 QQ |
| 定时 | 间隔分钟数、谷时开关(中午 / 晚上) |
| 状态 | 家目录、配置文件路径、全面自检 |
「测一下」 会告诉你当前的实际情况,比如:
网络:官方经代理 ✓ · 镜像 ✗
登录:未使用登录(游客模式)
额度:今天已存 3/6,还能 3
通道:存到本地 ✓ 发到 QQ ✗(没窗口)
存到:D:\Pixiv
配置真值在 $DSH_HOME/pixiv-scroll/config.json,改动即时生效(不用重启)。
⚠️ 为什么不写 profile:profile 里 entry 的
config段不进插件 user 层, 宿主那边始终是 schema 默认值。所以改 profile 对运行期无效,改设置页才有效。
登录(可选,默认关)
不登录也能用(游客模式:排行榜 + 搜索)。登录后能多拿两样:
- 关注流 —— 你关注的人的新作
- 个性化推荐 —— 这个才是"更符合喜好"的正主
为什么走 App API 而不是网页登录
实测(2026-11-04)用网页 cookie 请求这些接口全是 404:
我的关注流 / 我的收藏 / 推荐 / 为你推荐 / 我的资料
所以登录走 app-api.pixiv.net + Bearer token,需要你提供一个 refresh_token。
三条安全线
| 项 | 做法 |
|---|---|
| 权限 | 只申请 readonly —— 从权限上就不可能点赞/收藏/关注/评论 |
| 存放 | token 只写 credential.json,不进配置、不进日志、不回显 |
| 轮换 | pixiv 每次刷新换发新 token(旧的立即失效)→ 刷新后立刻落盘 + 文件锁 |
代码里有两道闸门挡着凭证:HTTP 接口层删一次,saveConfig 里 SECRET_KEYS 再删一次。
自检里还有一条断言专门验「client.js 没往 localStorage 写东西」。
怎么拿 refresh_token
插件不做账号密码登录 —— 那要起浏览器过 reCAPTCHA,在国内网络下成功率不高,
而且会让你的密码经过插件。请自行获取 refresh_token 后贴进设置页。
⚠️ 如果你在别的地方也用了同一个 token,两边会互相踢掉(因为轮换)。 踢掉了就重新贴一个。
登录坏了会怎样
不影响刷图。 登录是可选的,它出问题只是少两个池子。
自检里有一条断言专门验这个:打桩让关注流和推荐双双失败,pixiv_search
仍然正常出结果,只是如实报告"这两个池子为什么没成"。
给 Agent 用的工具
| 工具 | 干什么 |
|---|---|
pixiv_status | 网络走哪条路、登录态、口味画像、今天存了几件、额度剩多少、通道哪些可用 |
pixiv_taste | 看 / 调口味画像(自动学出来的偏好)。默认关;开关它、改权重、清空重学都在这儿 |
pixiv_search | 找候选(含打分与为什么;画像开着时会按口味反搜) |
pixiv_pick | 下缩略图到本地,好让模型 read_image 真的看一眼再挑 |
pixiv_works | 取原图(只下载,不占额度) |
pixiv_save | 正式收进图库(唯一占额度的操作,过分级/判重/额度闸门) |
pixiv_send | 投递出去(落盘 / QQ) |
推荐的用法顺序:
pixiv_status → pixiv_search → pixiv_pick(读图精选)→ pixiv_save → pixiv_send
pixiv_pick需要有视觉能力的模型。纯文本模型读不了图,那就跳过这一步, 直接按pixiv_search的打分选,并在报告里说明这轮没读图。
定时刷
设置页把 intervalMin 设成大于 0(单位分钟)就会定时跑。
谷时规则:工作日 9–12 / 14–18 是高峰,其余(含周末)都算谷时,
由 peakValley / noon / night 三个开关控制。
一轮具体做什么写在 prompts/duty.md 里 —— 那份用户可以改,
升级插件不会覆盖你改过的内容(新版会落到 duty.md.new)。
它怎么工作
pixiv_search ──► taste.mjs(分级过滤 + 打分排序)
│ ↑ 登录时额外并入 关注流 / 个性化推荐
▼
pixiv_pick ────► 模型 read_image 看一眼,挑出真正好的
│
▼
pixiv_save ────► 闸门(判重 / 额度 / 分级 / 页数)──► save.mjs(落盘 + metadata)
│ seen.mjs(台账)
▼
pixiv_send ────► deliver.mjs(local 通道 / qq 通道)
| 文件 | 职责 |
|---|---|
index.js | 宿主入口:装配工具、定时器、设置页接口(双通道注册) |
client.js | 设置页 UI(非 ESM,自注册到 settings.section) |
lib/transport.mjs | 传输:直连 / 代理两模式,自拆 chunked、自跟 301、硬超时 |
lib/route.mjs | 三级探测:按实际连通性选路,不按 IP 猜 |
lib/pxclient.mjs | pixiv 读取(搜索 / 排行 / 详情 / 页 / 取图 / 关注流 / 推荐) |
lib/auth.mjs | 可选登录:token 刷新轮换、文件锁、凭证存放 |
lib/taste.mjs | 口味漏斗:分级过滤 + 打分排序(纯函数,好测) |
lib/save.mjs | 命名清洗、原子落盘、metadata |
lib/seen.mjs | JSONL 台账:判重与额度的唯一真相源 |
lib/deliver.mjs | 投递通道接口(local / qq) |
lib/config.mjs | 配置归一化 + 双层读写 + 凭证闸门 |
lib/toolset.mjs | 工具契约与策略闸门 |
lib/shrink.mjs | 缩图调度(shell 出去调 Python) |
lib/shrink.py | 图片缩放本体(Python + Pillow) |
prompts/duty.md | 一轮章程(用户可改) |
为什么传输层是手搓的
运行时里没有 undici 也没有 sharp(都只在 app.asar 里,require 和 fs 都进不去)。
所以:
- 传输层自己 CONNECT 隧道 + 自己 TLS 握手 + 自己拆 chunked
- 缩图 shell 出去走 Python/Pillow
顺手绕开的坑(都写了注释,别改回去):
socket.setTimeout()只在 socket 空闲时触发 —— 连接卡在建连阶段时永不触发, 会永久挂死。必须有独立硬超时。- TLS 握手期间就要
track()socket,否则每次失败漏 2 个连接。 _inflight存了已 reject 的 promise 会变成 unhandled rejection,默认直接杀进程。
自检
node selfcheck.mjs # 网络层 / 口味 / 传输(离线)
node selfcheck.mjs --net # 上面 + 真的打一次 pixiv
node selfcheck-io.mjs # 落盘 / 台账 / 投递
node selfcheck-tools.mjs # 配置分层 / 工具 / 闸门 / 登录隔离
node selfcheck-host.mjs # 宿主装配(假 ctx)
node selfcheck-auth.mjs # 登录 / 凭证 / 降级 / token 不泄漏
node selfcheck-client.mjs # 设置页注册与渲染(vm 桩跑)
node selfcheck-docs.mjs # README 里写的东西跟代码对得上
node selfcheck-external.mjs # **外部源**端到端(起个假源,看插件认不认)
node selfcheck-shell.mjs # 包外壳 / 凭证泄漏检查
node selfcheck-taste.mjs # 口味画像(默认关 / 学习 / 衰减 / 冷启动 / 脏数据)
全过才算好(当前 422 条断言)。其中两条对开源特别要紧:
selfcheck-shell.mjs的零凭证泄漏检查selfcheck-docs.mjs会核对 README 里每个可验证的承诺 —— 文档写了代码没做,比不写还糟
已知限制(如实写,不粉饰)
- 🔴 上不了 pixiv 就用不了。插件不翻墙、不内置节点、不代你绕过限制。 「发现图片」需要官方元数据接口,而全世界的镜像站都不提供这个 —— 这不是没做完,是这条路不存在。详见开头那节。
- 镜像只能按 ID 取图。
pixiv.re实测 16 条路径,只有/<作品ID>.jpg通,/ajax/*、/ranking.php、/api/*、/search/*全 404。所以镜像对 「先搜索再刷」这件事帮不上忙 —— 它只替代图片域名,不替代元数据接口。 - R-18 过滤是尽力而为。默认只做元数据层过滤(标签 + 内容标记),
不逐张读图复查。排行榜原始数据里本来就混着露骨封面的作品
(实测
daily前 50 条里有 5 条带性内容标记),所以会有漏网。 - QQ 发图受被动窗口限制。见上文。
- 登录需要自己搞
refresh_token。插件不代你登录,也不碰你的密码。 - 定时刷需要一个
dshBin路径。桌面版dsh不在 PATH,要在设置里指过去。 - 代理不在时会连不上。本机代理软件(Clash 之类)没在跑就通不了, 插件会报人话而不是静默失败。
- 探测结果受本机网络环境影响。同一台机器可能十分钟内三种结果 (TUN 通 / 直连超时 / 代理通)—— 插件按「实际能不能拿到数据」选路, 而不是按 IP 段猜。
依赖与致谢
- 零运行时依赖(纯 Node 内置模块)。
- Pillow —— 图片缩放(发 QQ 前压缩)
pixiv.re—— 图片镜像兜底(仅图片,无元数据)- 架构参考 dsh-bili-scroll(MIT)
安全问题
这个插件会处理 efresh_token(只在本地 credential.json,不进配置/日志/prompt)。 如果你发现凭证可能泄漏、或者任何绕过那条红线的路径, 请开 issue 或用 GitHub 的私密漏洞报告(Security → Report a vulnerability)。
许可证
MIT。下载内容的版权归原作者(画师)所有,本插件面向个人收藏设计, 请勿二次分发或商用。
插件只通过公开接口读取作品,不进行点赞、收藏、关注、评论等任何写操作。
Comments
Loading…
Similar plugins
by Practice019
DSH 插件:通过本地 Quicker 转发(doubao web2api) 提供 `doubao_ask` 动态搜索/图片生成/多模态识图工具, 并支持**粘贴图片 → 本地路径**(paste-to-path)。
★ 1
MIT
JavaScript
Aug 28, 2026
dsh plugin --profile web add doubao-dsh-pluginby kbpoyo
DSH 插件:让纯文本模型也能看图。Web 端直接粘贴图片即可发送,无需指定图片路径;模型自主调用视觉技能查看,多模态模型原生直通,零skill绑定。
★ 5
↓ 28/wk
MIT
JavaScript
Aug 14, 2026
dsh plugin --profile web add @kbpoyo/dsh-image-bridgeby meyaomiao
DSH 插件:接近原生质感的附件上传(拖入/粘贴/回形针,图片与文件混排)
★ 3
↓ 127/wk
MIT
TypeScript
Sep 14, 2026
dsh plugin --profile web add dsh-files-nativeby Better-Rain
DeepSeek Harness plugin: drive your local Adobe Photoshop from the agent — batch subject cutouts (Select Subject / Remove Background) to transparent PNGs, plus a raw ExtendScript escape hatch. · 让 AI 直接驱动本机 Photoshop 批量抠图。
★ 8
MIT
JavaScript
Sep 15, 2026
dsh plugin --profile web add dsh-plugin-photoshopby ChencLi819
让 agent 自己刷 B站/知乎/掘金/贴吧/HackerNews/少数派/IT之家/GitHub,把有意思的视频与贴文分享进群(封面图 + 一句自己的话 + 链接),还能定时自己刷一轮。DSH 插件。
★ 0
MIT
JavaScript
Nov 1, 2026
dsh plugin --profile web add dsh-feed-scrollby motongv
给 DeepSeek Harness(DSH)加视觉能力的插件:装完就能拖图识别——图片交给视觉模型识别、文字交给 DeepSeek 推理,聊天入口完全不变。DSH 专属插件。
★ 0
↓ 60/wk
MIT
JavaScript
Aug 18, 2026
dsh plugin --profile web add dsh-vision-adapter