给飞牛 NAS 造了一套夸克自动追番流水线(顺手开源,下载提速 420 倍)


追番这件事,手动太累:别人分享的连载剧每周更新,我得时不时去夸克看一眼、转存、下载、改名、丢进媒体库。我想要的其实很简单——发个夸克分享链接,剩下的全自动:判断这剧完结没,没完结就把已有的下了、再挂个监控自动追更新到完结,全程按 Infuse 规范命名,下完推送提醒我。用的是飞牛 fnOS NAS,最终用 Infuse 看。

这篇记录从零搭起这套流水线的过程,包括一个把下载速度从「倒茶」干到「飞起」的排查,以及最后把它开源出来。

整体架构

飞牛有原生挂载夸克,但那是「在线挂载」、不落盘;我要的是真·下载到本地硬盘。于是拆成两段:quark-auto-save 负责把分享转存进我自己的夸克账号,我自己写的 quark-tracker 负责把它们下载到 NAS、去重、TMDB 改名、推送。

夸克追番自动化 · 数据流 夸克分享链接 别人分享的连载剧 · 持续更新 ① 转存(云端 · 秒级,不占本地) quark-auto-save(Docker) 监控分享 → 把新集转存进你自己的夸克账号 ② 夸克 API 直链 + aria2c 多线程下载 quark-tracker(每小时 cron) 按 SxxExx 去重 → 只下新集 → TMDB 改名 → 微信 / QQ 推送提醒 ③ Infuse 规范命名,自动刮削 NAS 本地库 → Infuse / Plex / Jellyfin 剧名/Season NN/剧名 - SxxExx - 集名.mkv 下载绕开 fnOS 原生挂载(WebDAV 缓存),直接走夸克 API · 全速
图 1 · 整体数据流

发个链接就自动下:让 NAS 上的 agent 来判断

我 NAS 上本来就跑着一个 agent(openclaw),它已经会用 TMDB 给媒体库改名、会发微信/QQ。于是我把它接进来,做成「发条链接它全自动」:

  1. 探测分享:看里面有几季、几个字幕组、各更新到第几集;多字幕组就自动选最优(简繁内封 > 简体 > 繁中、集数最多、mkv)。

  2. 查 TMDB:拿到 status(连载 / 完结)、每集播出日期、next_episode_to_air确定性判断完结没——不靠猜。

  3. 分情况执行

    • 已完结 → 全下,下完不留监控;

    • 连载中 → 把已有的下了 + 加监控任务,截止日期 = 完结日 + 14 天(到点自动停);

    • 指定某一集 → 只下那一集。

完结日期这种事,TMDB 比 IMDB 靠谱:它有结构化的播出日期和完结状态字段,直接查、不用 GPT 猜(猜容易过期)。

下面是 quark-auto-save 的任务管理页,加 / 删 / 停一部剧都在这(也是日常增删追哪些番的地方):

image.png

踩坑一:飞牛原生挂载的缓存

最开始我想直接读飞牛原生挂载的夸克(/vol02/...)来复制文件。结果刚转存的文件挂载里看不到——飞牛是用 rclone + 一个 WebDAV 网关实现的,网关会缓存目录列表,而转存是走夸克官方 API 的,绕过了它。所以我干脆不碰挂载,直接用夸克的 download API 拿签名直链下载,永远是最新的。

踩坑二:下载慢成倒茶(这段最精彩)

链路打通后开始下,结果速度 0.10 MB/s ≈ 100 KB/s,10 秒才挪 1MB,一集 1.5GB 要下几个小时——夸克这直链优雅得像在倒茶,不像在下载。

排查:拿同一条直链,单线程 curl vs aria2c 多线程当场对比:

下载速度对比 · 同一条夸克直链 夸克对「单连接」限速 ~100KB/s,多线程分段直接绕过 单线程 curl 96 KB/s ≈ 420× aria2c -x16 ≈ 40 MB/s ( 40,960 KB/s ) 实测一集 1.5 GB:单线程 4+ 小时 → aria2c 37 秒 · 25 集 29GB ≈ 15 分钟 条形为示意,非线性等比
图 2 · 单线程 vs 多线程

结论很干脆:不是代理问题,是夸克对单连接限速(直链 URL 里那个 x-oss-traffic-limit 也印证了)。换成 aria2c -x16 多线程分段,同一条链直接干到 ~40MB/s,约 420 倍。一集从「几个小时」变成「37 秒」。

排查途中还顺手揪出一个真 bug:夸克偶发 SSL 抖动时,底层库会把错误信息 printstdout,污染了我用来传 JSON 的通道,导致解析偶发崩溃。修法是把那段的 stdout 重定向到 stderr,只让干净的 JSON 走 stdout。这种 bug 不修的话,定时任务会偶发失败,很难复现。

实战效果

拿《夏日重现》试了一把:25 集、29GB,约 15 分钟全下完,自动 TMDB 改名成 Infuse 规范(夏日重现 - S01E01 - 再见了夏日.mkvS01E25 - 我回来了.mkv),下完微信 + QQ 推送。打开 Infuse 海报墙、集名、简介全有:

image.png


image.png


开源了

把它通用化(去掉对我那个 agent 的硬依赖、自带 TMDB 改名 + 可插拔通知、aria2c 内置、所有路径进配置、清掉个人信息)之后,开源到了 GitHub,中英双语 README,里头有以飞牛 fnOS 为例的完整教程:

👉 github.com/Fanxiaoyao66/quark-tracker

它是 Cp0204/quark-auto-save 的搭档:后者把分享转存进你的夸克,前者把它们全速下到 NAS、去重、改名、推送,还能让 agent 从一条链接全自动判断完结/连载并设好监控。

小结

  • 飞牛原生挂载适合在线看,不适合落盘(WebDAV 缓存)→ 直接走夸克 API。

  • 夸克对单连接限速,aria2c 多线程是关键,提速几百倍。

  • 完结判断用 TMDB,连载自动挂监控、设完结日期。

  • 日常只管在 WebUI 加/删剧(或发链接给 agent),每小时的 cron 自动把新集下好、改名、推送。

接下来想试试把追剧日历、字幕单独处理也接进去。先这样,去看番了 🍻