pxder Lemon
Use this command to install pxder:
winget install --id=zz1998022.pxder -e High-performance Pixiv illustration downloader written in Zig.
winget install --id=zz1998022.pxder -e High-performance Pixiv illustration downloader written in Zig.
Pixiv 插画批量下载器,由 Lemon 基于 pxder(原作者:Tsuk1ko)使用 Zig 重写。
单二进制分发,无运行时依赖,原生性能,支持交叉编译。
--debug 启用详细输出)pixiv:// 协议自动回调| 特性 | pxder (Node.js) | pxder-zig |
|---|---|---|
| 运行时依赖 | Node.js >= 16 | 无(单二进制) |
| 安装方式 | npm install -g | 下载对应平台的二进制文件 |
| 代理支持 | HTTP / SOCKS5 | 直连 + HTTP/HTTPS CONNECT |
| 直连模式 | 支持 | 支持 |
| Windows 协议回调 | 支持 | 支持 |
| 配置存储 | 用户目录 | 用户目录 |
| 交叉编译 | N/A | 支持 Windows/Linux/macOS |
需要 Zig 0.16.0。
# Debug 构建
zig build
# Release 构建(推荐)
zig build -Doptimize=ReleaseSafe
# 交叉编译
zig build -Dtarget=x86_64-windows-gnu -Doptimize=ReleaseSafe
zig build -Dtarget=x86_64-linux-musl -Doptimize=ReleaseSafe
zig build -Dtarget=aarch64-macos -Doptimize=ReleaseSafe
# 运行基准测试(推荐 ReleaseFast)
zig build bench -Doptimize=ReleaseFast
构建产物在 zig-out/bin/ 目录下。
.\zig-out\bin\pxder.exe./zig-out/bin/pxder也可以直接通过:
zig build run -- --help
zig build bench 用于运行本地 benchmark。
仓库内置了几条 GitHub Actions 工作流:
v* 标签后自动构建并发布 GitHub Release。发布前先修改 src/cli/args.zig 中的版本号,然后执行:
git tag vX.Y.Z
git push origin main --tags
WinGet 相关变量:
WINGET_PACKAGE_IDENTIFIERWINGET_CREATE_GITHUB_TOKEN# 打开浏览器进行 OAuth 登录(推荐)
pxder --login
# 使用已有的 refresh token 登录
pxder --login TOKEN
# 在不支持协议回调的系统上登录
pxder --login --no-protocol
登录步骤(默认模式):
登录步骤(--no-protocol 模式):
F12 打开开发者工具,切换到 "Network" 选项卡,勾选 "Preserve log"code 参数pxder --logout
仅删除当前计算机用户的 refresh token。
pxder --export-token
输出当前存储的 refresh token,可用于在其他设备上登录:
pxder --login
pxder --setting
进入交互式设置界面,可配置以下项目:
[1] Download path 下载目录(必须设置)
[2] Download thread 下载线程数(默认 5,范围 1-32)
[3] Download timeout 下载超时秒数(默认 30)
[4] Proxy 代理设置
[5] Auto rename 自动重命名画师文件夹(跟随画师改名)
代理格式:
<协议>://[用户名:密码@]:<端口>
示例:
http://127.0.0.1:7890http://user:pass@127.0.0.1:1080https://127.0.0.1:8443输入空行则从环境变量 all_proxy / https_proxy / http_proxy 中读取。输入 disable 完全禁用代理。
注意:当前下载链路实际支持并验证过的是 http:// 和 https:// CONNECT 代理;socks4/4a/5/5h 语法已预留解析,但尚未实现真实下载通路。
# (1) 按画师 UID 下载(逗号分隔多个)
pxder -u 5899479,724607,11597411
# (2) 下载公开关注的画师
pxder -f
# (3) 下载私密关注的画师
pxder -F
# (4) 增量更新已下载的画师
pxder -U
# (5) 下载公开收藏
pxder -b
# (6) 下载私密收藏
pxder -B
# (7) 按插画 PID 下载(逗号分隔多个)
pxder -p 70593670,70594912
-M, --no-ugoira-meta 下载动图时不请求帧延迟元数据
-O, --output-dir 覆盖下载目录
--force 预留兼容参数(当前版本暂未启用)
--debug 启用详细输出
--no-protocol 登录时不使用 Windows 协议处理器
--output-config-dir 输出配置文件目录路径
-v, --version 显示版本号
-h, --help 显示帮助信息
(UID)画师名 格式的子文件夹中(PID)作品名.ext,多图作品追加 _p0, _p1 后缀(PID)标题@30ms.zip@ 及其后内容会被自动去除(通常是摊位信息)src/
main.zig CLI 入口
auth.zig OAuth PKCE 流程,token 管理
pixiv_api.zig Pixiv API 客户端(认证头、重试、限流)
app/
context.zig 共享上下文(配置、HTTP、API 资源管理)
runner.zig 命令分发
cli/
args.zig CLI 参数类型定义
parser.zig 参数解析
help.zig 帮助信息
commands/
login.zig 登录 / 令牌登录
setting.zig 交互式设置
download_uid.zig 按画师 UID 下载
download_pid.zig 按插画 PID 下载
follow.zig 下载关注画师
bookmark.zig 下载收藏
update.zig 增量更新
export_token.zig 导出令牌
version.zig 版本信息
core/
illust.zig 插画数据模型(单图/多图/动图 URL 构造)
illustrator.zig 画师数据模型,分页逻辑
protocol.zig Windows pixiv:// 协议处理器
services/
download_service.zig 多线程下载引擎
infra/
http/
http_client.zig HTTP 客户端封装(代理 + TLS 隧道)
proxy.zig 代理解析(HTTP CONNECT / SOCKS5)
storage/
config.zig 配置文件读写,跨平台路径解析
fs.zig 文件系统操作(读写、移动、清理)
shared/
terminal.zig ANSI 颜色,终端交互
json_utils.zig JSON 安全解析辅助
tools.zig 文件下载,临时目录管理
crypto.zig SHA-256, MD5, base64url
update_checker.zig 版本检查
std.http.Client + std.crypto.tls,为代理 HTTPS 路径手动实现 CONNECT 隧道与 TLS 升级,并复用下载隧道HttpClient,减少共享状态竞争std.crypto.hash.Md5(API 签名)、std.crypto.hash.sha2.Sha256(PKCE)、base64urlstd.json.Value 动态树解析本项目基于 GNU General Public License v3.0 开源,与原项目保持一致。