Skip to content

huihuidehui/ptbrush

Repository files navigation

PT全自动刷流工具

ptool启发,用Python实现的一款全自动无感刷流工具,专注刷流功能。目的是做到QBittorrent下载器中能够24小时不间断的全速上传。目前仅支持M-Team,因为我就这一个PT站的账号...

使用方法

使用前提:

  1. 你需要懂一点命令行,会使用docker命令,当然也可以不用命令行来配置(但我手头没有群晖、极空间啥的...不好写教程)
  2. 下载器需要为QBittorrent,目前测试通过的是最新版5.0.1,其他版本暂未测试,不保证可用。
  3. 暂时只支持M-Team,其他PT站暂不支持.

本工具提供docker-compose方式一行命令部署。

  1. 第一步先找个空文件夹,新建一个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文件夹,用于存储配置文件,以及日志、数据等。

  1. 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"
    
  2. 最后使用docker-compose up -d命令启动即可。

注意事项

本工具中涉及到了对大包的拆包操作,因此盒子用户不建议使用M-Team对盒子用户拆包规则不友好。建议家宽用户使用.

刷流规则

如果你想了解具体的实现,可以查看这一部分。

为配合刷流模块,有一个辅助模块包含了定时PT站free种子抓取以及定时记录QBittorrent信息。

一、辅助模块

  1. PT站种子抓取

    定时从PT站获取Free的种子,并进行保存。等待之后的刷流使用。

  2. qbittorrent信息记录

    定时记录qbittorrent中所有由本工具提交的种子的信息,包括瞬时下载速度、瞬时上传速度、以及累计的下载总量,上传总量。

    定时记录qbittorrent本身的状态,包括下载速度、上传速度、正在下载的种子数量、正在做种的种子数量、正在做种的种子列表、正在下载的种子列表。

二、刷流模块

涉及到三个对种子的操作:新增、删除、拆分。

  1. 新增种子逻辑

    在决定往下载器中添加种子时要求同时满足多个条件:

    序号 条件 解释
    1 下载器中的未完成的种子个数小于max_downloading_torrents 同时进行下载的刷流种子数过多,会导致上传速度一直提不上来。因此最好是限制一下同时下载的种子数
    2 下载器在一个时间周期内(download_cycle)的最大下载速度小于expect_download_speed 经过我测试qb在高速下载时原本有上传速度的种子会受到影响,上传速度会降低。因此需要等下载器中无高速下载任务时,在进行其他条件判定是否需要新增刷流任务
    3 下载器在一个时间周期内(upload_cycle)的平均上传速度小于expect_upload_speed 在一个段时间内,下载器中的正在做种的种子,持续没有上传速度,才新增刷流任务。如果下载器在一段时间内平均上传速度是达标的,此时新增下载任务,可能会影响正在做种的任务,降低其上传速度
    4 当前下载器默认路径下剩余空间大于阈值min_disk_space 避免刷流任务把磁盘空间用尽
  2. 删除种子逻辑

    满足以下任意一种规则,种子就会被删除。

    • 下载器中正在下载的种子临近Free结束时间,默认为1小时,暂不支持修改。
    • 下载器中的已完成的种子,且长时间(max_no_upload_time)没有上传流量。
  3. 种子拆分规则

    PT站中Free的种子,有可能会出现某个种子文件特别大的情况,俗称大包,这类种子,在刷流时可以只下载种子中的部分文件快速下载 完进入做种状态,如果全部文件都下载的情况下,QB在高速下载时上传速度会变慢。

    ptbrush在新增了种子之后,会定时检查下载器中种子文件大小超过阈值的种子,并对种子进行瘦身操作,将种子中的部分文件设置为不下载,直到种子文件大小在一个合理的范围内。

About

PT站刷流

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published