JableTVDownload

该项目 fork 自 hcjohn463JableTVDownloader,在原项目基础上增加了下载代理配置、下载队列、WebUI、浏览器 UA 配置、Webhook、防机器人认证检测等功能。

另外基于Webhook功能,可以结合iOS系统的快捷指令,实现手机触发下载任务的功能。


🚀 快速开始(推荐)

使用 Docker Compose 一键启动完整的 Web UI + 下载器服务,适合家庭 NAS 或服务器部署。

前置要求

启动方式

# 1. 克隆仓库
git clone https://github.com/Road-tech/JableTVDownload.git

# 2. 进入项目目录
cd JableTVDownload

# 3. 复制完整配置文件
cp docker-compose.full.yml docker-compose.yml

# 4. 编辑配置文件(可选,根据需要修改端口、下载目录等,具体说明见下文)
vi docker-compose.yml

# 5. 启动所有服务
docker compose up -d

🐳 docker-compose配置说明(docker-compose.full.yml)

services:
webui:
ports:
- "8080:8080" # Web UI 端口,可修改前面的数字
environment:
- DOWNLOADER_API=http://downloader:5000 # 下载器 API 地址
volumes:
- ./logs:/logs # 日志目录(任务记录 tasks.json)

downloader:
ports:
- "5000:5000" # API 端口,可修改前面的数字
environment:
- SERVER=true # 启用 Webhook 服务器
- HOST=0.0.0.0 # 监听地址
- PORT=5000 # 服务端口
- LOG_DIR=/logs # 日志目录
volumes:
- ./downloads:/downloads # 下载目录
- ./downloader/config.json:/app/config.json # 下载器配置文件,具体配置说明见下文
- ./logs:/logs # 日志目录

networks:
jable-network:
driver: bridge

📋 下载器配置文件 (config.json)

可以看到上面的docker-compose.full.yml挂载了config.json,这个JSON配置文件管理下载器的常用设置,无需每次输入参数。当然你可以不用修改config.json,直接通过WebUI进行配置。

{
"proxy": {
"enabled": false, // 是否启用代理,默认 false
"url": "" // 代理服务器地址,如: "http://proxy:8080"
},
"browser": {
"user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36", // 浏览器 User Agent
"headless": true, // 是否使用无头模式(不显示浏览器窗口),默认 true
"disable_images": false, // 是否禁用图片加载(加快速度),默认 false
"page_load_timeout": 30, // 页面加载超时时间(秒),默认 30
"implicit_wait": 10 // 隐式等待时间(秒),默认 10
},
"download": {
"cover": true, // 是否下载视频封面,默认 true
"encode": true, // 是否使用 FFmpeg 转码优化,默认 true
"quality": 1 // 转码质量 (1=最快, 2=适中, 3=最佳),默认 1
}
}

🌐 浏览器访问WebUI

启动成功后,通过浏览器访问WebUI:


📂 项目结构

JableTVDownload/
├── docker-compose.full.yml # Docker Compose 完整配置模板
├── README.md # 项目说明文档
├── start.sh # Linux/Mac 启动脚本
├── start.bat # Windows 启动脚本
├── downloader/ # 下载器核心代码
│ ├── Dockerfile # Downloader 镜像构建文件
│ ├── config.json # 下载器配置文件
│ ├── main.py # 主入口
│ ├── crawler.py # 网页爬虫
│ ├── download.py # 下载模块
│ ├── merge.py # 视频合并
│ ├── encode.py # 转码模块
│ ├── cover.py # 封面下载
│ ├── webhook_server.py # Webhook API 服务
│ └── requirements.txt # Python 依赖
├── webui/ # Web UI 前端代码
│ ├── Dockerfile.webui # Web UI 镜像构建文件
│ ├── web_ui.py # Web UI 主程序
│ ├── templates/ # HTML 模板
│ └── requirements_webui.txt
└── img/ # 文档图片资源

项目功能

🎨 WebUI

提供直观的网页界面(预览界面),无需编写代码或使用终端即可使用所有功能,功能特性如下:

1. 添加下载任务

  • 支持完整 URL(如:https://jable.tv/videos/snxx-XXX/
  • 支持仅输入番号(如:snxx-XXX),系统自动补全
  • 支持批量添加(每行输入一个)
  • 任务自动加入下载队列

2. 下载队列管理

  • 任务按添加顺序排队
  • 默认同时下载 1 个任务
  • 可配置同时下载数量(1-8)

3. 实时监控

  • 下载任务列表
  • 实时日志输出
  • 下载进度条显示

4. 配置管理

  • 代理设置(启用/停用、代理地址)
  • 浏览器设置(无头模式、禁用图片加载、自定义 UA)
  • 下载设置(封面下载、转码、转码质量)

🌐 Webhook API 服务

支持通过 HTTP API 调用下载任务,方便与其他系统集成。

API 端点

端点 方法 说明
/health GET 健康检查
/api/download POST 添加下载任务
/api/download/batch POST 批量添加下载任务
/api/config GET 获取当前配置
/api/config PUT/POST 更新配置
/api/tasks GET 获取下载任务列表
/api/tasks/<task_id> DELETE 删除指定任务
/api/tasks/<task_id>/stop POST 停止正在下载的任务
/api/tasks DELETE 清除已完成的任务
/api/progress GET 获取当前下载进度
/api/queue/status GET 获取队列状态

API 使用示例

1. 添加下载任务
curl -X POST http://localhost:5000/api/download \
-H "Content-Type: application/json" \
-d '{"url": "https://jable.tv/videos/xxx/"}'

可选参数:

{
"url": "https://jable.tv/videos/xxx/",
"cover": true,
"encode": true,
"quality": 1,
"proxy": "http://proxy.example.com:8080"
}
2. 获取当前配置
curl http://localhost:5000/api/config
3. 更新配置
curl -X PUT http://localhost:5000/api/config \
-H "Content-Type: application/json" \
-d '{
"proxy": {
"enabled": true,
"url": "http://proxy.example.com:8080"
},
"download": {
"cover": false,
"quality": 2
}
}'
4. 查看下载任务
# 查看所有任务
curl http://localhost:5000/api/tasks

# 筛选任务 (all/pending/downloading/completed/error)
curl http://localhost:5000/api/tasks?status=downloading
5. 停止下载任务
curl -X POST http://localhost:5000/api/tasks/1/stop
6. 删除指定任务
curl -X DELETE http://localhost:5000/api/tasks/1
7. 清除已完成的任务
# 清除已完成和错误的任务
curl -X DELETE http://localhost:5000/api/tasks?filter=completed

# 清除所有任务
curl -X DELETE http://localhost:5000/api/tasks?filter=all
8. 获取下载进度
# 获取所有任务进度
curl http://localhost:5000/api/progress

# 获取指定任务进度
curl http://localhost:5000/api/progress?task_id=1

🐳 通过Docker的容器直接下载

如果不喜欢WebUI的方式,也可以直接创建容器,把视频下载到指定目录。

交互模式

# 1. 构建镜像
docker build -t jable-downloader .

# 2. 运行(交互模式,下载视频存至本地 downloads 文件夹)
docker run -it -v D:\downloads:/downloads jable-downloader

基于配置文件直接下载视频

将本地的 config.json 挂载到容器内:

docker run -it \
-v ./downloads:/downloads \
-v ./config.json:/app/config.json \
-e URL="https://jable.tv/videos/xxx/" \
jable-downloader

基于环境变量配置下载视频

docker run -it \
-v ./downloads:/downloads \
-v ./config.json:/app/config.json \
-e URL="https://jable.tv/videos/xxx/" \
-e PROXY="http://proxy.example.com:8080" \
-e ENABLE_PROXY="true" \
-e COVER="False" \
-e QUALITY="2" \
jable-downloader
环境变量列表
环境变量 说明
SERVER 启动 Webhook 服务器 (true)
HOST 服务器监听地址 (默认: 0.0.0.0)
PORT 服务器端口 (默认: 5000)
URL 视频网址
RANDOM 下载随机热门视频 (true/false)
ALL_URLS 演员页网址,下载所有视频
CONFIG 自定义配置文件路径(容器内)
PROXY 代理地址
ENABLE_PROXY 启用代理 (true)
DISABLE_PROXY 停用代理 (true)
COVER 是否下载封面 (true/false)
ENCODE 是否转码 (true/false)
QUALITY 转码质量 (1/2/3)

直接运行

直接运行程序、不启动docker容器

⌨️ 命令行参数

python main.py -h

# Webhook 服务器模式
python main.py --server # 启动 Webhook 服务器
python main.py --server --host 0.0.0.0 --port 5000 # 自定义监听地址和端口

# 下载模式
python main.py --random True # 下载随机热门视频
python main.py --url <网址> # 直接指定 URL
python main.py --all-urls <演员页> # 下载演员所有视频

# 配置文件相关
python main.py --config my_config.json # 使用自定义配置文件

# 代理相关
python main.py --enable-proxy # 启用代理
python main.py --disable-proxy # 停用代理
python main.py --proxy "http://proxy.example.com:8080" # 设置代理地址

# 下载选项
python main.py --cover False # 不下载封面
python main.py --encode False # 不进行转码
python main.py --quality 2 # 设置转码质量 (1/2/3)

参数优先级

命令行参数优先级高于配置文件,例如:

# 使用配置文件的代理设置,但关闭封面下载
python main.py --url <网址> --cover False

🛠️ 维护命令

# 停止所有服务
docker compose down

# 重新构建镜像
docker compose build --no-cache

# 重启服务
docker compose restart

# 查看实时日志
docker compose logs -f webui
docker compose logs -f downloader

# 清理未使用的镜像
docker image prune -f

📜 更新日志

版本 日期 内容
v3.0 2026/06/01 🌟 新增完整 Web UI 图形化界面
🎨 支持直接输入番号自动补全 URL
📊 实时显示任务进度和日志
⚙️ Web UI 配置管理功能
v2.3 2026/05/30 🛡️ 新增浏览器配置项(UA、超时等)
🚫 新增机器人验证检测与提示功能
v2.2 2026/05/30 🌐 新增 Webhook API 服务
📡 支持 HTTP API 新建下载任务、更新设置
v2.1 2026/05/30 ⚙️ 新增 config.json 配置文件系统
🚀 支持通过配置文件管理代理、封面下载、转码等选项
v2.0 2026/03/15 🐳 支持 Docker 容器化部署
☸️ K8s(Job/PVC/ConfigMap)支持
📊 下载与合成加入 tqdm 实时进度条
🚀 优化合成与转码速度
v1.11 2023/04/19 🦕 新增 ffmpeg 自动转码
v1.10 2023/04/19 🏹 兼容 Ubuntu Server
v1.9 2023/04/15 🦅 下载演员所有相关视频
v1.8 2022/01/25 🚗 下载结束后自动抓取封面
v1.7 2021/06/04 🐶 更改 m3u8 获取方法(正则表达式)
v1.6 2021/05/28 🌏 支持 Unix 系统(Mac、Linux 等)
v1.5 2021/05/27 🍎 更新爬虫网页方法
v1.4 2021/05/20 🌳 修改编码问题
v1.3 2021/05/06 🌈 增加下载进度提示、修改 Crypto 问题
v1.2 2021/05/05 ⭐ 更新稳定版本