本程序修改自开源项目 TaoSync V0.4.0。
在原有的项目基础上主要改动,新增通过 MoviePilot 入库通知自动同步下载的影视文件到 OpenList;并刷新,利用 OpenList 的 Strm 驱动自动更新 Strm 文件自动入库。
如果好用,请 Star!非常感谢! GitHub DockerHub
由于更新频繁,截图仅供参考,以实际为准
聚合消息通知 用来发消息给 OpenlistSync外部消息转发 用来通知 OpenlistSync 的消息至 MoviePilot 可选Openlist 的驱动配置我建议吧所有网盘用别名聚合到一起,只要支持302的网盘均可以,然后 Strm 驱动配置到别名路径即可,保存Strm本地路径 记得开启选择本地媒体strm路径内
HTTP请求POST 请求URL http://ip:8023/webhook{
"Content-Type": "application/json"
}
{
"title": "${title}",
"text": "${text}",
"apikey": "如果配置了WEBHOOK_APIKEY则需要此字段"
}
整理入库
其他
自定义http://moviepilot_ip:port/api/v1/plugin/MsgNotify/send_json?apikey=api_tokenPOSTapplication/jsontitle需要text


重要 使用本工具前你必须了解并且会使用 OpenList;本工具没有集成 OpenList,你需要额外启动 OpenList
警告!不要在外网暴露本系统,否则后果自负! 本系统已经做了一定的安全方面的工作,但仍不能保证绝对安全。如确实需要,请务必使用强密码,并使用
SSL
把本地文件备份到多个网盘或FTP之类的存储,或者在多个网盘之间同步文件等;
可以定时扫描指定目录下文件差异,让目标目录与源目录相同(全同步模式);或仅新增存在于源目录,却不存在于目标目录的文件(仅新增模式)
可以设置一次性任务(cron方式设置年月日时分秒,将在指定时间执行一次),可在闲时自动从特定网盘下载文件到本地
OpenList/AListcron、手动调用媒体名字刮削 菜单用于对 OpenList 中的电影或电视剧目录进行命名整理。它不会新建 OpenList 引擎,而是复用 引擎管理 中已经配置好的 OpenList;刮削相关参数统一在 引擎管理 -> 刮削配置 中维护。
刮削配置包含:
使用流程:
预览命名 查看原路径、命名后路径、目录重命名和目标冲突。应用命名,任务会在后台执行;可在 重命名任务 中查看进度、进入详情、终止任务或手动执行历史任务。执行逻辑:
S00、S01 与 Season 0、Season 1 等目录会识别为季目录;同父级季目录调整会优先重命名目录,并在文件移动后清理空的季目录。TMDb API 服务器默认为 https://api.themoviedb.org,可选择备用的 https://api.tmdb.org,也可输入自定义 HTTP/HTTPS 地址。如果所在网络需要代理,可在 系统设置 -> 代理服务器 中填写 http://host:port 或 socks://host:port;也支持 user:password 认证以及 :password 形式的仅密码认证。SOCKS5 仅密码认证使用零长度用户名兼容形式,需要代理服务器支持。代理地址保存后默认隐藏认证信息,点击输入框右侧的显示按钮可按需查看完整连接串。代理设置页可使用固定地址 http://www.google.com/generate_204 测试延迟;未填写代理地址时会直接连接,当前代理用于后端 TMDb API 请求。
前往Release下载对应平台的可执行程序,直接执行
提示 开机自启、守护进程等可以参考OpenList的方式,把其中的
openlist改为openlistsync;注意,本程序不需要server参数
docker-compose.yaml 示例:
version: "3.8"
services:
openlistsync:
image: syscc/openlistsync:latest
container_name: openlistsync
restart: always
network_mode: bridge
ports:
- "8023:8023"
user: "1000:1001"
environment:
- WEBHOOK_DELAY=60 # Webhook延迟触发秒数 取决是否需要等MoviePilot刮削完成后同步,如果不需要可以设置为3
# - WEBHOOK_APIKEY= # Webhook API Key;若设置,则请求必须包含 apikey 字段且值匹配;若留空则不校验
# - WEBHOOK_OPENLIST_NAME=OpenList # Webhook 自动创建任务时使用的 OpenList 引擎备注名;若未配置或留空,默认使用第一个引擎
- TVsource=/media/电视剧 # 电视剧源根目录
- MOVsource=/media/电影 # 电影源根目录
# DST开头变量适用于临时存放(如追新电视剧),整季完结后可删除并同步至SYNC路径,非必要不需要启用!
# - DST_TV_TARGETS=/shanct/电视剧 # 优先同步电视剧到此集合;支持 ,;: 分隔
# - DST_MOV_TARGETS=/shanct/电影 # 优先同步电影到此集合;支持 ,;: 分隔
# - DST_REFRESH_TV=/media/电视剧,/videos/电视剧 # DST 同步时的刷新集合;支持 ,;: 分隔
# - DST_REFRESH_MOV=/media/电影,/videos/电影 # DST 同步时的刷新集合;支持 ,;: 分隔
- SYNC_TV_TARGETS=/115/videos/电视剧,/ODC/tv{max}/电视剧 # 回退电视剧同步集合;{max} → 自动匹配最大数字后缀目录
- SYNC_MOV_TARGETS=/115/videos/电影,/ODC/mov{max}/电影 # 回退电影同步集合;{max} → 自动匹配最大数字后缀目录
- SYNC_REFRESH_TV=/115/videos/电视剧,/ODC/tv{max}/电视剧,/videos/电视剧 # SYNC 同步时的刷新集合
- SYNC_REFRESH_MOV=/115/videos/电影,/ODC/mov{max}/电影,/videos/电影 # SYNC 同步时的刷新集合
- SECOND=true # 启用二级目录(从 webhook 文本“类别:xxx”解析为二级路径,电视剧与电影均支持)
volumes:
- ./data:/app/data
访问 http://ip:8023
如果你没有修改,默认账号为admin,密码请到日志中查看输出,登录后请立即前往系统设置修改密码
注意 如果没有显示这个日志,可以到同级目录的
data/log/sys_xxx.log文件查看,通常在第一行
进入系统后先到引擎管理菜单创建引擎,然后前往作业管理创建同步作业
配置优先级:data/config.ini>环境变量>默认值;前一个存在,则后边都将被忽略。修改配置需重启程序或Docker。
data/config.ini文件示例(如该文件存在,则优先级最高)
[OpenlistSync]
# 初始管理员密码,仅首次创建数据库时生效;RANDOM 或空值表示随机生成
password=RANDOM
# 运行端口号
port=8023
# 登录有效期,单位天
expires=2
# 日志等级:0-DEBUG,1-INFO,2-WARNING,3-ERROR,4-CRITICAL;数值越大,产生的日志越少,推荐1或2
log_level=1
# 控制台日志等级:适用于v0.3.0及之后版本,与上同
console_level=2
# 系统日志保留天数,该天数之前的日志会自动清理,单位天,0表示不自动清理
log_save=7
# 任务记录保留天数,该天数之前的记录会自动清理,单位天,0表示不自动清理
task_save=0
# 任务执行超时时间,单位小时。一定要设置长一点,以免要备份的东西太多
task_timeout=72
上边的文件默认不存在,如需要,您可以手动在程序同级目录的data目录下创建config.ini,并填入上边的内容。注意,文件应使用UTF-8编码
| config.ini | Docker环境变量 | 描述 | 默认值 |
|---|---|---|---|
| password | OPENLISTSYNC_PASSWORD | 初始管理员密码,仅首次创建数据库时生效;RANDOM 或空值表示随机生成;兼容 TAO_PASSWORD、TAO_PASSWD | RANDOM |
| port | OPENLISTSYNC_PORT | 运行端口号 | 8023 |
| expires | OPENLISTSYNC_EXPIRES | 登录有效期,单位天 | 2 |
| log_level | OPENLISTSYNC_LOG_LEVEL | 日志等级:0-DEBUG,1-INFO,2-WARNING,3-ERROR,4-CRITICAL;数值越大,产生的日志越少,推荐1或2 | 1 |
| console_level | OPENLISTSYNC_CONSOLE_LEVEL | 控制台日志等级:适用于v0.3.0及之后版本;与上同 | 2 |
| log_save | OPENLISTSYNC_LOG_SAVE | 系统日志保留天数,该天数之前的日志会自动清理,单位天,0表示不自动清理 | 7 |
| task_save | OPENLISTSYNC_TASK_SAVE | 任务记录保留天数,该天数之前的记录会自动清理,单位天,0表示不自动清理 | 0 |
| task_timeout | OPENLISTSYNC_TASK_TIMEOUT | 任务执行超时时间,单位小时。一定要设置长一点,以免要备份的东西太多 | 72 |
| - | TZ | 时区 | Asia/Shanghai |
POST /webhookSxx/Exx/Exx-Exx → 电视剧)WEBHOOK_DELAY 或请求参数 delay 覆盖;上方 Compose 示例显式设置为 60 秒)WEBHOOK_OPENLIST_NAME 指定的 OpenList 引擎,未配置时使用第一个引擎| 变量 | 说明 | 示例 |
|---|---|---|
WEBHOOK_DELAY | Webhook 延迟触发时间(秒) | 60 |
WEBHOOK_APIKEY | Webhook API Key,可选。设置后,Webhook 请求必须包含 apikey 字段且值匹配 | 123456 |
WEBHOOK_OPENLIST_NAME | Webhook 自动创建任务时使用的 OpenList 引擎备注名;若未配置或留空,默认使用第一个引擎 | OpenList |
TVsource | 电视剧源根 | /media/电视剧 |
MOVsource | 电影源根 | /media/电影 |
DST_TV_TARGETS DST_MOV_TARGETS | 优先同步根集合(原样使用),存在同名目录时仅同步到这里;仅在末尾追加“名称(年份)”;支持 ,;: 分隔 | 例如 /shanct/电视剧 或 /shanct/电影 |
SYNC_TV_TARGETS | 电视剧同步目标根集合,用 ,;: 分隔,支持 {max};仅在末尾追加“名称(年份)” | 例如 /115/videos/电视剧,/ODC/tv{max}/电视剧 或 /115/videos/tv,tv{max}/tv |
SYNC_MOV_TARGETS | 电影同步目标根集合,支持 {max};仅在末尾追加“名称(年份)” | 例如 /115/videos/电影,/ODC/mov{max}/电影 或 /115/videos/mov,mov{max}/mov |
DST_REFRESH_TV DST_REFRESH_MOV | 当命中 DST_* 同步集合时使用的刷新集合;仅在末尾追加“名称(年份)”;支持 ,;: 分隔 | 例如 /media/电视剧,/videos/电视剧 或 /media/电影,/videos/电影 |
SYNC_REFRESH_TV | 当走 SYNC_* 同步集合时使用的刷新集合(仅在末尾追加“名称(年份)”) | 例如 /115/videos/电视剧,/ODC/tv{max}/电视剧,/videos/电视剧 |
SYNC_REFRESH_MOV | 当走 SYNC_* 同步集合时使用的刷新集合(仅在末尾追加“名称(年份)”) | 例如 /115/videos/电影,/ODC/mov{max}/电影,/videos/电影 |
SECOND | 启用二级目录(从 webhook 文本“类别:xxx”解析为二级路径);开启后源与目标都将拼接该二级目录;电视剧与电影均支持 | true |
{max} 占位符(支持任意层级)。语法:前缀{max}(如 tv{max}、disk{max})。系统会自动扫描父目录下(如果未指定父目录则默认为根目录 /)以该前缀开头的所有子目录,并选择数字后缀最大的那个。例如:/ODC/tv{max}/电视剧 会扫描 /ODC 下的 tv*,若有 tv1~tv9,则替换为 /ODC/tv9/电视剧。TVsource 或 MOVsource 下存在 名称(年份) 目录才会创建作业。OpenlistSync/
├── main.py # Tornado 后端入口,注册 Web/API/静态资源路由
├── main_android.py # Android WebView 主进程入口
├── buildozer.spec # Android arm64-v8a/armeabi-v7a 构建配置
├── openlistsync.spec # PyInstaller 与 StaticX 共用打包配置
├── logo*.png # Android 普通与自适应图标资源
├── requirements.txt # Python 运行依赖
├── Dockerfile # 默认 Docker 镜像构建入口
├── docker-compose.yaml # Docker Compose 示例
├── dockerfiles/ # 多平台/不同构建方式的 Dockerfile
├── common/ # 通用配置、数据库连接、日志、语言与工具方法
│ ├── config.py # 读取 data/config.ini、环境变量与默认配置
│ ├── httpApp.py # 桌面、容器与 Android 共用的 Tornado 路由工厂
│ ├── locales.py # YAML 语言包加载、语言识别与回退
│ ├── sqlBase.py # SQLite 基础访问封装
│ └── sqlInit.py # 数据库初始化与版本迁移
├── locales/ # 后端简体中文与 English 语言包
├── controller/ # Tornado API 控制器
│ ├── baseController.py # 登录态校验与统一响应封装
│ ├── jobController.py # 作业、任务与引擎接口
│ ├── mediaScrapingController.py # 媒体名字刮削配置、浏览、预览、执行与任务接口
│ ├── notifyController.py # 通知配置接口
│ ├── systemController.py # 用户、语言、系统配置接口
│ └── webhookController.py # Webhook 入口
├── mapper/ # SQLite 数据访问层
│ ├── jobMapper.py # 作业与任务数据
│ ├── mediaScrapingMapper.py # 媒体名字刮削任务、执行日志与明细数据
│ ├── notifyMapper.py # 通知配置数据
│ ├── openlistMapper.py # OpenList 引擎数据
│ ├── systemConfigMapper.py # 系统配置数据,如全局排除项和代理服务器
│ └── userMapper.py # 用户数据
├── media_tools/ # 媒体整理核心工具
│ └── openlist_media_renamer.py # OpenList 媒体识别、TMDb 查询、命名预览与重命名执行
├── service/ # 业务逻辑层
│ ├── main.py # Android 后台服务与本机日志页入口
│ ├── mediaScraping/ # 媒体名字刮削配置、预览、后台任务、日志与中止逻辑
│ ├── openlist/ # OpenList API 客户端与引擎管理
│ ├── syncJob/ # 作业调度、同步执行、任务统计
│ ├── notify/ # 通知发送
│ ├── system/ # 启动初始化、日志清理、用户与系统配置
│ └── webhook/ # Webhook 解析、自动建作业与刷新
├── web/ # 当前 Vue 3 + Vite 前端源码
│ ├── public/ # 前端公共静态资源
│ ├── src/
│ │ ├── api/ # 前端 API 封装
│ │ ├── router/ # 前端路由
│ │ ├── store/ # Pinia 状态
│ │ ├── utils/ # 前端工具与枚举
│ │ └── views/ # 页面与组件,含作业管理、媒体名字刮削和集中式系统设置等
│ ├── package.json # 前端依赖与脚本
│ └── vite.config.js # Vite 开发服务与代理配置
├── tests/ # 后端迁移、配置、同步过滤与通知测试
├── README/ # README 引用的截图资源
├── doc/ # 文档与历史 changelog
└── data/ # 源码启动脚本与本地运行数据
├── start.py # 源码模式安装依赖、启动、停止与重启脚本
├── openlistsync.db # SQLite 数据库(本地生成,不提交)
├── config.ini # 可选运行配置
├── secret.key # Cookie 签名密钥
└── log/ # 运行日志
GET/POST/PUT/DELETE /svr/openlist 引擎管理(列表、子目录、增删改)GET/POST/PUT/DELETE /svr/job 作业管理(列表、详情、手动执行、启用/禁用、中止、删除)GET/POST/PUT/DELETE /svr/notify 通知配置(列表、增删改、测试)GET/POST /svr/language 后端默认语言读取与修改GET/POST /svr/system/config 系统配置、全局排除项与通用代理服务器GET /svr/system/proxy/reveal 按需读取已保存的完整代理连接串(需要登录,禁止缓存)POST /svr/system/proxy/test 使用固定 Google 204 地址测试代理延Content type
Image
Digest
sha256:b0e4ab3d8…
Size
18.2 MB
Last updated
about 2 months ago
docker pull syscc/openlistsync