
如果你折腾过 No-Intro、Redump、1G1R(One Game One ROM,一款游戏留一份最佳版本) 或大型 ROM 合集或Anna’s Archive 的 Torrents,大概率遇到过一个非常现实的问题:
一个 Torrent 可能有 几千个文件、总容量数 TB,但真正需要的,也许只有其中几百 GB。
传统做法通常是:下载整个 Torrent → 用 DAT 校验 → Retool/Igir/RomVault 过滤 → 删除不需要的文件
这套流程最大的问题不仅复杂,而且浪费。
比如一个 3.5TB 的合集,你按照自己的地区、语言和 1G1R 规则筛选以后,最终可能只需要 800GB。
但为了得到这 800GB,传统流程却要求你:
- 准备至少 3.5TB 的临时下载空间;
- 下载完整的 3.5TB 数据;
- 消耗对应的网络流量;
- 等待全部下载完成;
- 最后再删除其中大部分内容。
BitTorrent 客户端基本上都支持”只选中部分文件下载”,但当文件数量上到四位数、且你的下载盘只有 2TB 时,qBittorrent 客户端里文件列表长到没法手勾。
最近开源的 SpoolDatTorrent 就是为此类具体场景开发的使用工具。
SpoolDatTorrent 的核心思路很直接:不是“下载完成后再根据 DAT 删除”,而是“先读取 DAT,然后只下载 DAT 中需要的文件”。
SpoolDatTorrent:https://github.com/stigzler/spool-dat-torrent
SpoolDatTorrent 核心机制:读取种子文件对应的 .dat 文件,动态调整种子里”哪些文件应该被下载”,并且引入一个叫 Spool Cap(下载帽)的分批机制,如果筛选后的目标集合仍然超过你的下载盘容量,则会按批次下载、下载完就搬到目标目录腾出空间,再继续下一批,直到全部完成。
也即 SpoolDatTorrent 的核心工作流程分为三步:
对照 DAT 过滤:根据用户提供的种子文件(文件路径 / 磁力链接 / infohash)和 DAT 文件,计算出种子里哪些文件属于“需要”的集合。
按 Spool Cap 分批:如果目标集合超出你设定的容量上限,SpoolDatTorrent 只会激活当前批次的文件用于下载,其余保持未选中状态。
完成后搬运并继续:当前批次下载完成、经过一段”settling time”(等客户端把文件写完整)后,SpoolDatTorrent 把文件移动到 staging-dir 或 library-dir,然后切换到下一批,循环直至目标集合全部下载完成。
SpoolDatTorrent 提供提供 Web UI 和 CLI 两种前端。
- Web UI:Docker 部署,浏览器管服务器和 stream
- CLI:SpoolDatTorrent,适合脚本和无头环境
CLI 侧的核心命令是 add(绑定种子 + DAT 开始调度)和 spool(启动调度守护进程),另外有 pause / resume / retry / cancel 这类生命周期管理命令。
Web UI 则把CLI的操作逻辑包装成表单和状态卡片,同时支持文件名过滤(*USA* 这类通配符)、优先/降权关键词等功能。
SpoolDatTorrent 目前只支持 qBittorrent(5.0+),主要原因是qBittorrent唯一被广泛使用且 Web API 足够完善、能支撑这种”运行时增删下载文件列表”操作的主流客户端。
DAT文件的获取
DAT 文件本质上是 ROM 界的“标准身份数据库”,包含了文件的文件名、大小、CRC32、MD5 和 SHA-1 校验码。
为什么 SpoolDatTorrent 依赖 DAT?
- SpoolDatTorrent (SDT) 的设计初衷是为了实现 哈希级(Hash-level)的精准校验与匹配。
- Torrent 里的文件名往往是随意的(比如 Super Mario World (USA).sfc 甚至被打包者重命名过)。
- DAT 文件里记录的是官方标准的 CRC32 / SHA-1 哈希值。
- SDT 的主要工作逻辑是:读取 Torrent 的 Metadata -> 计算或获取 Torrent 内各文件的哈希 -> 对比 DAT 中的哈希 -> 将匹配上的文件推送到下载客户端。
因此,SDT 的核心是依赖 DAT 文件(Hash 对比),而不是单纯看文件名字符串。
DAT 文件可以通过以下几个权威来源免费获取:
1. No-Intro(主打卡带机/掌机)
适用系统: NES, SNES, GBA, NDS, Megadrive, Game Gear 等卡带类平台。
获取地址: https://datomatic.no-intro.org/
特点: 官方提供 1G1R (Parent-Clone) 导出选项。你可以直接选定你的目标语言/区域(如仅限 USA/EUR/JPN),网站会直接生成一份筛选好的 1G1R DAT 文件给你。
2. Redump(主打光盘类机种)
适用系统: PS1, PS2, PSP, GameCube, Saturn, Dreamcast 等光盘平台。
获取地址: redump.org 首页的 Datfiles 菜单即可下载全套或单机种 DAT。
3. TOSEC (The Official Secam Enterprises Collection)
适用系统: 极其冷门的老式电脑平台(如 Commodore 64, Amiga, ZX Spectrum)。
获取地址: https://www.tosecdev.org/
4. 自己提取生成(如果只有“想留下的本地文件列表”)
如果你手上有一份自己以前整理好的游戏 ROM,可以使用 Clrmamepro 或 RomCenter 扫描本地文件夹,反向生成一份专属于你个人偏好的 .dat 文件。
如果持有Torrent 文件或磁力链接,找不到现成可用的DAT文件,但又想用 SpoolDatTorrent 的分批下载(Spool Cap)能力,可以自己拼一个符合 LogiqX/No-Intro XML 格式、把想要的文件名列进去,自建“假 DAT”配合 SpoolDatTorrent 使用。
1. 提取 Torrent 的 Metadata(可用 torrentool 等 Python 库)。
2. 用 Python 提取其中的文件名,过滤出你想要的文件。
3. 伪造/生成一个包含这些文件名的简易 DAT 文件丢给 SpoolDatTorrent CLI或Web UI。