受ptool
启发,用Python实现的一款全自动无感刷流工具,专注刷流功能。目的是做到QBittorrent下载器中能够24小时不间断的全速上传。目前仅支持M-Team
,因为我就这一个PT站的账号...
使用前提:
- 你需要懂一点命令行,会使用
docker
命令,当然也可以不用命令行来配置(但我手头没有群晖、极空间啥的...不好写教程) - 下载器需要为QBittorrent,目前测试通过的是最新版5.0.1,其他版本暂未测试,不保证可用。
- 暂时只支持
M-Team
,其他PT站暂不支持.
本工具提供docker-compose
方式一行命令部署。
-
第一步先找个空文件夹,新建一个
docker-compose.yml
文件,将一下内容复制进去:version: '3.3' services: ptbrush: restart: always volumes: - './data:/app/data' environment: - PUID=1000 - PGID=1000 - UMASK=022 - TZ=Asia/Shanghai container_name: ptbrush image: 'huihuidehui/ptbrush:latest'
其中的PUID和PGID需要根据你的系统用户ID和组ID进行修改,否则可能无法正常读写文件。
2. 在docker-compose.yml
文件所在目录下,创建一个新的data
文件夹,用于存储配置文件,以及日志、数据等。
-
在
data
文件夹下,创建一个新的config.toml
。将以下内容按照实际内容修改后,填写到
config.toml
文件中,一般情况下,只需要修改[downloader]
和[[sites]]
部分即可。其他配置项可以看注释来进行修改。# 刷流配置 [brush] # 保留最小剩余磁盘空间,单位 B,默认1024GiB即1024 * 1024 * 1024 * 1024,剩余空间小于此值不会再添加新的任务 min_disk_space = 1099511627776 # 位于下载状态的种子数上限,当qb中下载状态种子数大于此值时不会添加新的任务 max_downloading_torrents = 6 # 平均速度计算用的时间周期,默认即可,不推荐修改 upload_cycle = 600 # 平均上传速度计算周期,单位秒,默认600秒即10分钟 download_cycle = 600 # 平均下载速度计算周期,单位秒,默认600秒即10分钟 # 期望达到的整体上传速度,单位 B/s, 推荐设置为上传速率的50%,比如:30M上行速率,推荐设置为 (15/8) * 1024 * 1024 = 1966080 # 一个时间周期内的平均上传速度大于此值的情况下,不会添加新的任务 expect_upload_speed = 1966080 # 刷流:上传速度上限,单位 B/s,默认3932160B/s即30M上传带宽对应值(30 / 8 * 1024 * 1024)。当qb中上传速度大于此值时不会添加新的任务 # 期望达到的整体下载速度,单位 B/s,默认值: 13,107,200 B/s 即 100M下行速率对应的值 # 一个时间周期内的最大下载速度大于此值的情况下,不会添加新的任务 # 为什么要有这个逻辑, 因为我发现QB中如果有正在下载的任务且下载速度较快达到了10MiB/s,那么其他正在上传的种子会受到影响上传速度会降低很多。 # 当但下载任务完成时或下载速度放慢时,其他正在上传的种子会恢复正常上传速度。 # 因此,当下载速度达到一定值时,不再添加新的任务,避免下载任务过多导致上传速度降低。直到下载速度降低后一段时间,上传速度还没有达标再进行添加新的任务。 expect_download_speed = 13107200 # 允许种子最大的无活跃(无下载也无上传)时间,超过此时间将会被删除,单位为:小时,默认24 # 建议不要修改 max_no_activate_time = 24 # 下载器设置,仅支持qb [downloader] url = "http://127.0.0.1:8080" username = "" password = "" # M-Team配置示例,请自行替换x-api-key参数 [[sites]] name = "M-Team" [[sites.headers]] key = "x-api-key" value = "xxxxx"
-
最后使用
docker-compose up -d
命令启动即可。
本工具中涉及到了对大包的拆包操作,因此盒子用户不建议使用M-Team
对盒子用户拆包规则不友好。建议家宽用户使用.
如果你想了解具体的实现,可以查看这一部分。
为配合刷流模块,有一个辅助模块包含了定时PT站free种子抓取以及定时记录QBittorrent信息。
-
PT站种子抓取
定时从PT站获取Free的种子,并进行保存。等待之后的刷流使用。
-
qbittorrent信息记录
定时记录qbittorrent中所有由本工具提交的种子的信息,包括瞬时下载速度、瞬时上传速度、以及累计的下载总量,上传总量。
定时记录qbittorrent本身的状态,包括下载速度、上传速度、正在下载的种子数量、正在做种的种子数量、正在做种的种子列表、正在下载的种子列表。
涉及到三个对种子的操作:新增、删除、拆分。
-
新增种子逻辑
在决定往下载器中添加种子时要求同时满足多个条件:
序号 条件 解释 1 下载器中的未完成的种子个数小于 max_downloading_torrents
同时进行下载的刷流种子数过多,会导致上传速度一直提不上来。因此最好是限制一下同时下载的种子数 2 下载器在一个时间周期内( download_cycle
)的最大下载速度小于expect_download_speed
经过我测试qb在高速下载时原本有上传速度的种子会受到影响,上传速度会降低。因此需要等下载器中无高速下载任务时,在进行其他条件判定是否需要新增刷流任务 3 下载器在一个时间周期内( upload_cycle
)的平均上传速度小于expect_upload_speed
在一个段时间内,下载器中的正在做种的种子,持续没有上传速度,才新增刷流任务。如果下载器在一段时间内平均上传速度是达标的,此时新增下载任务,可能会影响正在做种的任务,降低其上传速度 4 当前下载器默认路径下剩余空间大于阈值 min_disk_space
避免刷流任务把磁盘空间用尽 -
删除种子逻辑
满足以下任意一种规则,种子就会被删除。
- 下载器中正在下载的种子临近Free结束时间,默认为1小时,暂不支持修改。
- 下载器中的已完成的种子,且长时间(
max_no_upload_time
)没有上传流量。
-
种子拆分规则
PT站中Free的种子,有可能会出现某个种子文件特别大的情况,俗称大包,这类种子,在刷流时可以只下载种子中的部分文件快速下载 完进入做种状态,如果全部文件都下载的情况下,QB在高速下载时上传速度会变慢。
ptbrush
在新增了种子之后,会定时检查下载器中种子文件大小超过阈值的种子,并对种子进行瘦身操作,将种子中的部分文件设置为不下载,直到种子文件大小在一个合理的范围内。