追番这件事,手动太累:别人分享的连载剧每周更新,我得时不时去夸克看一眼、转存、下载、改名、丢进媒体库。我想要的其实很简单——发个夸克分享链接,剩下的全自动:判断这剧完结没,没完结就把已有的下了、再挂个监控自动追更新到完结,全程按 Infuse 规范命名,下完推送提醒我。用的是飞牛 fnOS NAS,最终用 Infuse 看。
这篇记录从零搭起这套流水线的过程,包括一个把下载速度从「倒茶」干到「飞起」的排查,以及最后把它开源出来。
整体架构
飞牛有原生挂载夸克,但那是「在线挂载」、不落盘;我要的是真·下载到本地硬盘。于是拆成两段:quark-auto-save 负责把分享转存进我自己的夸克账号,我自己写的 quark-tracker 负责把它们下载到 NAS、去重、TMDB 改名、推送。
发个链接就自动下:让 NAS 上的 agent 来判断
我 NAS 上本来就跑着一个 agent(openclaw),它已经会用 TMDB 给媒体库改名、会发微信/QQ。于是我把它接进来,做成「发条链接它全自动」:
-
探测分享:看里面有几季、几个字幕组、各更新到第几集;多字幕组就自动选最优(简繁内封 > 简体 > 繁中、集数最多、mkv)。
-
查 TMDB:拿到
status(连载 / 完结)、每集播出日期、next_episode_to_air,确定性判断完结没——不靠猜。 -
分情况执行:
-
已完结 → 全下,下完不留监控;
-
连载中 → 把已有的下了 + 加监控任务,截止日期 = 完结日 + 14 天(到点自动停);
-
指定某一集 → 只下那一集。
-
完结日期这种事,TMDB 比 IMDB 靠谱:它有结构化的播出日期和完结状态字段,直接查、不用 GPT 猜(猜容易过期)。
下面是 quark-auto-save 的任务管理页,加 / 删 / 停一部剧都在这(也是日常增删追哪些番的地方):

踩坑一:飞牛原生挂载的缓存
最开始我想直接读飞牛原生挂载的夸克(/vol02/...)来复制文件。结果刚转存的文件挂载里看不到——飞牛是用 rclone + 一个 WebDAV 网关实现的,网关会缓存目录列表,而转存是走夸克官方 API 的,绕过了它。所以我干脆不碰挂载,直接用夸克的 download API 拿签名直链下载,永远是最新的。
踩坑二:下载慢成倒茶(这段最精彩)
链路打通后开始下,结果速度 0.10 MB/s ≈ 100 KB/s,10 秒才挪 1MB,一集 1.5GB 要下几个小时——夸克这直链优雅得像在倒茶,不像在下载。
排查:拿同一条直链,单线程 curl vs aria2c 多线程当场对比:
结论很干脆:不是代理问题,是夸克对单连接限速(直链 URL 里那个 x-oss-traffic-limit 也印证了)。换成 aria2c -x16 多线程分段,同一条链直接干到 ~40MB/s,约 420 倍。一集从「几个小时」变成「37 秒」。
排查途中还顺手揪出一个真 bug:夸克偶发 SSL 抖动时,底层库会把错误信息 print 到 stdout,污染了我用来传 JSON 的通道,导致解析偶发崩溃。修法是把那段的 stdout 重定向到 stderr,只让干净的 JSON 走 stdout。这种 bug 不修的话,定时任务会偶发失败,很难复现。
实战效果
拿《夏日重现》试了一把:25 集、29GB,约 15 分钟全下完,自动 TMDB 改名成 Infuse 规范(夏日重现 - S01E01 - 再见了夏日.mkv … S01E25 - 我回来了.mkv),下完微信 + QQ 推送。打开 Infuse 海报墙、集名、简介全有:


开源了
把它通用化(去掉对我那个 agent 的硬依赖、自带 TMDB 改名 + 可插拔通知、aria2c 内置、所有路径进配置、清掉个人信息)之后,开源到了 GitHub,中英双语 README,里头有以飞牛 fnOS 为例的完整教程:
👉 github.com/Fanxiaoyao66/quark-tracker
它是 Cp0204/quark-auto-save 的搭档:后者把分享转存进你的夸克,前者把它们全速下到 NAS、去重、改名、推送,还能让 agent 从一条链接全自动判断完结/连载并设好监控。
小结
-
飞牛原生挂载适合在线看,不适合落盘(WebDAV 缓存)→ 直接走夸克 API。
-
夸克对单连接限速,aria2c 多线程是关键,提速几百倍。
-
完结判断用 TMDB,连载自动挂监控、设完结日期。
-
日常只管在 WebUI 加/删剧(或发链接给 agent),每小时的 cron 自动把新集下好、改名、推送。
接下来想试试把追剧日历、字幕单独处理也接进去。先这样,去看番了 🍻