Skip to content

lansepyy/ordinex-work

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 

Repository files navigation

Ordinex (序界) - Docker 视频文件整理工具

一个基于Docker部署的智能视频文件整理系统,能够自动识别、分类和重命名视频文件与STRM播放列表文件。

部署命令请看文件 yml

下个版本计划

🐛 已知问题

暂无

版本更新日志

v2.7.0 (2026-04-21)

  • UI 焕新:首页「序界」标题全面升级——草书字体(Ma Shan Zheng)+ 蓝紫粉炫酷渐变色 + 呼吸光效动画,透明毛玻璃背景
  • UI 焕新:三大功能卡片(任务调度 / 多模态识别 / 文件管理)精简瘦身,高度从 180px 缩至 125px,图标从 110px 缩至 76px,紧凑不突兀
  • UI 焕新:最近任务面板升级为蓝紫渐变底纹 + 渐变描边,每项任务状态改为多色流光渐变(已完成=绿→青 / 运行中=青→蓝→紫→粉 / 暂停=紫→粉 / 待处理=琥珀金→红 / 失败=玫红),配合发光投影
  • UI 焕新:全局主文字色从纯黑 #0f172a 调整为深海军蓝 #1e3a5f,次级文字同步调整为蓝灰色调,视觉更舒适统一
  • 优化:TMDB 年份分值算法重构——完全匹配=4分,±1年=3.5分(几乎不影响识别结果),±2年=2分,≥3年渐进归零,配合乘法惩罚双重保障
  • 修复:「何以笙X默」误识别为「X」(2022) 的极端案例——单字符子串匹配得分从 4.0 压缩至按长度比例计算,年份差 7 年时置信度从 7.0 暴降至 0.1,彻底杜绝此类误识别
  • 修复:TMDB 结果短标题防御性检查——当 TMDB 返回标题 ≤ 2 字符且源文件名远长于标题时,自动降低置信度并记录 WARNING 日志(file_organizer.pytask_manager.py 双路覆盖)

v2.6.0 (2026-04-20)

  • 新增:文件管理识别重命名逻辑重构——文件夹和文件命名统一遵循系统设置中的电影/电视剧命名模板(文件夹取模板路径第一段,文件取最后一段),不再使用硬编码规则
  • 新增:Docker 镜像双标签构建——本地构建脚本(build.sh / build.bat)和 CI 流水线同时支持 latest + 版本号标签(含 major.minor 补充标签)
  • 新增:GitHub Actions 手动构建支持——可通过 workflow_dispatch 手动触发构建,支持自定义版本号、额外镜像标签、是否推送
  • 新增:Web UI 识别增强模块总开关——将 use_new_recognition_engine 主开关暴露到「识别增强」设置页面顶部,开启后子组件才生效,关闭时子面板视觉置灰
  • 新增:识别增强参数警告提示——在增强模块配置区顶部添加醒目警告,提示用户不了解参数作用时建议保持默认配置不要修改
  • 修复:CI 版本提取改为从 web_server.pyAPP_VERSION 常量读取,避免从 HTML 模板变量中获取到未渲染的占位符

v2.5.0 (2026-04-20)

  • 修复:文件管理识别确认后生成错误文件夹的问题——原逻辑复用任务的完整输出模板(含 Category/Title/Season/... 多层路径),导致文件夹名取到 category 段(如"电影")而非剧名;现新增 _fm_flat_rename() 专用扁平命名函数,文件管理独立于任务命名模板,直接生成 Title (Year) 格式
  • 新增:「结果展示」侧边栏——汇总所有任务的执行结果(原文件名→新名称映射),支持按任务筛选,可点击跳转到对应任务详情
  • 新增:任务卡片绿色「结果」按钮——点击弹出 Modal 查看该任务每个文件的识别结果、新名称、置信度、执行状态
  • 新增:Web UI「数据存储」设置面板——识别缓存、成本追踪开关及预算/告警阈值配置,无需手动编辑 config.json
  • 优化recognition_cachecost_tracking 默认从 "false" 改为 "true",容器首次运行即启用数据库功能
  • 优化:文件管理结果表字体增大(表头 0.95rem / 单元格 0.92rm),提升可读性

v2.4.0 (2026-04-19)

  • 重构:AI 识别引擎全面重构,新增 src/recognition/ 模块(engine, cache, batch_cluster, confidence_calibrator, cost_tracker, db, feedback_learner, policy, prompting, tmdb_validator, models, providers)
  • 新增RecognitionEngine 统一引擎,支持单文件 recognize() 和批量 recognize_batch() 两条互不干扰的识别路径
  • 新增BatchClusterer 聚类批量识别——同系列文件只识别锚点,结果自动传播到其余文件,大幅节省 API 调用
  • 新增:用户确认缓存机制——auto_cache=False 默认不自动缓存,用户在结果表手动确认后才写入缓存,避免错误结果污染缓存
  • 新增:缓存读取置信度门槛过滤——cache.get(key, min_confidence=threshold) 低于阈值的缓存结果当作未命中,重新识别
  • 新增/api/files/batch-preview-rename 批量识别 API(支持聚类优化)
  • 新增/api/recognition/cache/save 手动缓存 API(用户确认后调用)
  • 新增:前端结果表——显示 旧名称→新名称,支持重新识别、手动修改、逐条/全部写入缓存,仅已缓存项可批量重命名
  • 新增:用户反馈修正后自动更新缓存,保证下次识别获取正确结果
  • 新增:SQLite 统一数据库后端(ordinex.db),缓存/费用/反馈共享,自动从旧 JSON 迁移
  • 优化:基础识别逻辑完全不变,只增强 AI 模块,新旧流程并行

v2.3.5 (2026-04-14)

  • 修复:剧集文件季号为空(season=None)时,命名模板中 Season {{season}} 渲染为 "Season"(无数字)的问题;现均自动补为第 1 季,四个格式化路径(本地整理、云端整理、文件管理预览、识别测试)全部修复

v2.3.4 (2026-04-14)

  • 修复:STRM 文件去掉 .strm 后形如 天龙八部(97版).20 的文件名,原先被 re.sub(r'\.[^.]+$', '') 误把 .20 当扩展名剥掉,导致所有集随机识别成 S01E01;现改为优先匹配末尾 .数字 再落入已知视频扩展名剥离,两套兜底路径均修复(缓存命中路径 & 正常识别路径)
  • 新增:目录内存在 ≥2 个纯数字视频文件(如 1.strm2.strm…)时,自动用文件夹名去 TMDB 识别并建立剧集缓存,后续每个文件只需提取 stem 数字即可得到对应集号,与原有 SE 标记检测逻辑并行,互不影响

v2.3.3 (2026-04-14)

  • 修复:剧集文件名仅含纯数字集号(如 剧名 01.mkvShowName.02.mkv)时全部被识别为同一集的问题,六条代码路径全部覆盖(本地整理、云端整理、文件管理识别、识别测试)
  • 修复:云存储整理未调用二级分类功能,现在 _cloud_format_dest 已与本地模式对齐,支持 {{category}} 命名模板

v2.3.2 (2026-04-13)

  • 修复:云模式整理后报错 'NoneType' object is not iterable——Alist/Openlist 空目录返回 content: nulllist_files 现已正确返回空列表
  • 修复:云模式 move/删除后残留的空目录现在会自动清理
  • 修复:云模式加入文件夹名交叉验证,识别逻辑与本地模式对齐,有效减少不必要的 AI 识别调用

v2.3.1 (2026-04-13)

  • 修复:云存储模式整理报错 NamingFormatter is not defined,现已在 _cloud_format_dest 内正确导入
  • 修复:DV(杜比视界)、HDR 等画面效果标识现在会保留到 videoFormat 变量中(本地模式和云模式均修复)
  • 修复:图片文件(jpg/png/webp 等)整理时保留原始文件名,不再被重命名为与视频同名(本地模式和云模式均修复)
  • 优化:命名规则输入框旁加注说明:配合二级分类使用时模板须以 {{category}}/ 开头

v2.3.0 (2026-04-13)

  • 重构:彻底移除 STRM 生成功能,项目定位为文件整理工具,不再生成额外文件
  • 云模式重写:Alist/Openlist 云模式改为通过 API 执行移动/复制/重命名,与本地模式行为一致
  • 新增:图片/NFO 跟随开关(extras_enabled),开启后同名图片和 .nfo 文件随视频一起整理
  • 新增:云模式字幕跟随处理,与本地模式一致
  • 优化:云模式目录缓存写入,同目录多文件整理效率大幅提升
  • 修复:season=None 时格式化字符串崩溃

v2.2.2 (2026-04-13)

  • 修复:filter_keywords 中类似 [www.bdsee.cn] 的纯文本关键词不再被当作正则字符类,防止标题被破坏(如 Bad.Sistersaitr

v2.2.1 (2026-04-12)

  • 修复:文件管理目录缓存 key 对目录使用自身路径,避免同一父目录下不同剧缓存互相污染
  • 修复:filter_keywords 移到截断后应用,防止误删季集号导致标题提取为垃圾字符串
  • 修复:_extract_english 拒绝含技术标签的垃圾结果
  • 修复:季文件夹(S01 无集号)可命中父目录 TV 缓存
  • 修复:中文搜索→英文 TMDB 结果年份精确匹配时给予 7.0 置信度
  • CI:Docker 镜像标签新增版本号同步,支持手动触发构建

v2.2.0 (2026-04-11)

  • 定时任务:创建任务时可设置定时执行(单次定时 / 每天 / 每周周期),支持自定义时间
  • 定时调度器:后台 30 秒轮询调度,到期自动触发;运行中任务自动等待完成后再触发,避免冲突
  • 首页仪表盘:新增 Dashboard 首页,展示任务统计、快捷操作入口和最近任务列表,打开不再直接进任务管理
  • 首页背景透明:仪表盘所有模块在有背景图时自动毛玻璃透明化
  • Telegram 智能交互:支持中文自然语言控制任务,如"看看任务""暂停当前任务""帮我重试上一个失败的",无需记命令
  • TG 新增命令/pause/resume/cancel 通过 Telegram 直接暂停、恢复、取消任务
  • AI 意图解析增强:丰富提示词示例,新增 task_name 字段支持,所有意图(暂停/恢复/取消/帮助)完整映射
  • 删除任务自动停止:删除正在运行的任务时自动取消执行线程,不再后台空跑

v2.1.0 (2026-04-11)

  • Web UI 优化:所有帮助说明面板默认折叠,点击「帮助」按钮展开查看,界面更简洁
  • 运行日志:暂停和刷新按钮加大,操作更便捷
  • 登录页面重构:项目 Logo + 名称浮动显示在背景上方,登录卡片改为毛玻璃透明效果
  • 侧边栏版本号:底部显示当前版本号,方便确认版本
  • 暂停恢复修复:任务暂停后点击继续现在能正确恢复执行,不再需要重建任务

v2.0.0

  • 初始发布:任务管理、TMDB/AI 识别、Alist/Openlist 云存储、Telegram 通知、Web UI 管理面板

功能特性

核心功能

  • 📂 支持从A文件夹整理到B文件夹
  • 🎬 自动识别电影和电视剧
  • 🔍 通过TMDB API对比识别
  • 🤖 AI辅助识别(OpenAI API)
  • 📝 按自定义规则重新命名文件
  • 🔗 支持生成STRM播放列表文件
  • 📊 支持创建符号链接或复制文件

🎯 识别支持

  • 视频格式:MKV, MP4, AVI, MOV, FLV, WMV, M4V, MPG, MPEG, TS, M2TS, MTS等
  • STRM播放列表文件识别和处理
  • 电影识别(支持年份、多部分识别)
  • 电视剧识别(支持季数、集数识别)

🔧 配置灵活

  • 自定义命名规则(Jinja2模板)
  • 环境变量配置
  • JSON配置文件支持
  • 可调节的识别置信度阈值
  • 支持自定义日志级别

🐳 Docker支持

  • 完整的Docker化部署
  • Docker Compose编排
  • 开发环境Dockerfile
  • 卷挂载方便的文件访问

快速开始

1. 获取API密钥

TMDB API密钥

  1. 访问 https://www.themoviedb.org/settings/api
  2. 创建账户并申请API密钥
  3. 记录你的API密钥

OpenAI API密钥

  1. 访问 https://platform.openai.com/api-keys
  2. 创建新的APIKEY
  3. 记录你的密钥

3. 配置应用

📌 推荐方式(新):通过 Web UI 配置

# 直接启动容器
bash scripts/run.sh

# 打开 Web UI:http://localhost:5000
# 默认登录账号:ord
# 默认密码若未手动设置,会在首次启动时随机生成并写入 web_server.log
# 在 Web 界面中填入 API 密钥和配置
# 点击「保存配置」→ 自动保存到 /config/config.json

首次启动如果没有额外配置,Web UI 会启用账号登录。建议尽快通过环境变量设置自己的账号密码与 ADMIN_KEY:

WEB_AUTH_ENABLED=true
WEB_USERNAME=ord
WEB_PASSWORD=
ADMIN_KEY=replace_with_your_own_admin_key
WEB_SECRET_KEY=replace_with_a_long_random_secret
TG_ENABLED=false
TG_BOT_TOKEN=
TG_CHAT_ID=
TG_NOTIFY_ON_START=false
TG_NOTIFY_ON_COMPLETE=true
TG_NOTIFY_ON_FAILED=true
TG_NOTIFY_ON_CANCELLED=false

如果 WEB_PASSWORD 留空,系统会自动生成随机初始密码并写入日志。若配置目录暂时不可写,日志里也会明确提示该密码仅在当前进程内有效。ADMIN_KEY 用于登录页“忘记密码”入口强制重置账号密码。生产环境建议显式设置 WEB_PASSWORD、ADMIN_KEY 和稳定的 WEB_SECRET_KEY。

如需 TG 通知,可在 Web UI 的「系统配置」→「TG 通知」中填写 Bot Token 和 Chat ID,并为任务开始、完成、失败、取消分别设置是否通知。即使关闭 TG_ENABLED,只要保留 Bot Token 和 Chat ID,已授权 Chat 仍可发送 TG 命令。

配置完成后,已授权的 Chat ID 还可以直接给机器人发送命令:

/tasks              查看当前任务和最近可重试任务
/task 任务ID         查看指定任务详情
/retry 任务ID        重试失败/取消/已完成的任务

⚠️ 备选方式(旧):通过 .env 文件配置

如果你更喜欢使用环境变量:

# 复制示例文件并编辑
cp .env.example .env
nano .env

编辑以下重要字段:

TMDB_API_KEY=your_api_key_here
OPENAI_API_KEY=your_api_key_here
OPENAI_MODEL=gpt-4o-mini

命名规则

默认命名规则:

{{title}}{% if year %} ({{year}}){% endif %}/{{title}}{% if year %} ({{year}}){% endif %}{% if part %}-{{part}}{% endif %}{% if edition%} - {{edition}}{% endif %}{% if videoFormat %} - {{videoFormat}}{% endif %}{% if tmdbid %} [tmdbid={{tmdbid}}]{% endif %}{{fileExt}}

规则说明

变量 说明 示例
{{title}} 影视作品标题 The Matrix
{{year}} 发行年份 1999
{{part}} 多部分电影的部分号 1, 2
{{edition}} 版本信息 Extended Cut, Director's Cut
{{videoFormat}} 视频编码格式 H.264, H.265, 10-bit
{{tmdbid}} TMDB数据库ID 603
{{fileExt}} 文件扩展名 .mkv, .mp4
{{season}} 电视剧季数 1, 2
{{episode}} 电视剧集数 01, 05

示例输出

电影:

The Matrix (1999)/The Matrix (1999) - H.264 [tmdbid=603].mkv

电视剧:

Breaking Bad (2008)/Breaking Bad (2008)-S01-E01 - H.264 [tmdbid=1396].mkv

Docker Compose 配置详解

卷挂载

volumes:
  - ./input:/input        # 源文件夹
  - ./output:/output      # 目标文件夹
  - ./config:/config      # 配置文件夹
  - ./logs:/logs          # 日志文件夹

环境变量

environment:
  SOURCE_DIR: /input
  DEST_DIR: /output
  TMDB_API_KEY: ${TMDB_API_KEY}
  OPENAI_API_KEY: ${OPENAI_API_KEY}
  LOG_LEVEL: INFO
  MIN_CONFIDENCE: "0.6"

工作流程

1. 扫描源文件夹 (SOURCE_DIR)
   ↓
2. 逐个处理文件
   ├── 识别文件名和文件夹名
   ├── 查询TMDB API
   └── 如果置信度低 → 调用AI辅助识别
   ↓
3. 格式化新文件名
   ├── 应用命名规则
   └── 生成目标路径
   ↓
4. 组织文件
   ├── 移动/复制文件到目标位置
   └── 生成STRM播放列表(可选)
   ↓
5. 输出统计信息

AI识别工作流程

当TMDB识别置信度低于 MIN_CONFIDENCE 时:

  1. 提取文件名中的关键信息(标题、年份、季数、集数等)
  2. 调用OpenAI AI进行内容识别
  3. AI返回识别结果(影视类型、官方标题、发行年份等)
  4. 如果AI识别置信度足够,使用AI结果
  5. 否则记录为失败并跳过该文件

配置文件详解

config.json 配置示例

{
  "source_dir": "/input",
  "dest_dir": "/output",
  "tmdb_api_key": "your_key",
  "openai_api_key": "your_key",
  "openai_model": "gpt-4o-mini",
  "naming_pattern": "{{title}}...",
  "strm_enabled": true,
  "ai_enabled": true,
  "log_level": "INFO",
  "min_confidence": 0.6
}

环境变量和配置优先级

配置加载顺序(优先级从高到低):

  1. Web UI 配置 (最高) - /config/config.json 中的配置

    • 通过 Web 界面保存的配置
    • 自动写入文件,容器重启后保留
  2. 环境变量 - docker-compose.yml 或系统环境中设置

    • 如果没有 config.json,从环境变量读取
  3. 默认值 (最低) - 代码中的硬编码默认值

这意味着: Web UI 的配置会覆盖所有环境变量,确保你在 Web 界面保存的设置持久生效。

Web UI 配置界面

访问 Web 界面

# 启动容器后,打开浏览器访问
http://localhost:5000

配置特性

实时配置修改 - 无需重启容器 ✅ 自动持久化 - 配置自动保存到 /config/config.json容器重启保留 - 配置在容器重启后仍然存在 ✅ 直观界面 - 清晰的 Web UI 配置面板

配置流程

  1. 打开 Web UI:http://localhost:5000
  2. 导航到「系统配置」或「基础配置」
  3. 填入 TMDB API 密钥、OpenAI API 密钥等
  4. 调整其他参数(日志级别、置信度阈值等)
  5. 点击「保存配置」
  6. 看到「配置已保存到文件」消息 ✅

配置持久化说明

📌 新特性:配置自动保存

当你在 Web UI 中保存配置时:

Web UI 表单
  ↓
点击「保存配置」按钮
  ↓
/api/config POST 请求
  ↓
ConfigLoader.update() 自动保存
  ↓
/config/config.json 文件更新
  ↓
容器重启自动加载此配置

详细信息参看:CONFIG_PERSISTENCE.md

日志系统

日志文件位置:./logs/organizer.log

日志级别

  • DEBUG - 详细调试信息
  • INFO - 一般信息
  • WARNING - 警告信息
  • ERROR - 错误信息

查看日志

# 实时查看日志
tail -f logs/organizer.log

# 查看最后100行
tail -n 100 logs/organizer.log

# 搜索特定内容
grep "ERROR" logs/organizer.log

使用示例

示例1:整理电影集合

准备源文件:

./input/
├── The.Matrix.1999.1080p.mkv
├── The.Matrix.Reloaded.2003.mkv
└── Inception.2010.x265.mkv

运行整理后:

./output/
├── The Matrix (1999)/
│   └── The Matrix (1999) - H.264 [tmdbid=603].mkv
├── The Matrix Reloaded (2003)/
│   └── The Matrix Reloaded (2003) - H.264 [tmdbid=234215].mkv
└── Inception (2010)/
    └── Inception (2010) - H.265 [tmdbid=27205].mkv

示例2:整理电视剧

准备源文件:

./input/
├── Breaking.Bad.S01E01.Pilot.mkv
├── Breaking.Bad.S01E02.Cat's.in.the.Bag.mkv
└── Breaking.Bad.S02E01.Seven.Thirty-Seven.mkv

运行整理后:

./output/
└── Breaking Bad (2008)/
    ├── Breaking Bad (2008)-S01-E01 [tmdbid=1396].mkv
    ├── Breaking Bad (2008)-S01-E02 [tmdbid=1396].mkv
    └── Breaking Bad (2008)-S02-E01 [tmdbid=1396].mkv

故障排除

1. "TMDB API密钥无效"

错误信息: Error searching TMDB for movie 'xxx': ...

✅ 解决方案:

2. "OpenAI API错误"

错误信息: Error in AI recognition: ...

✅ 解决方案:

  • 检查OpenAI API密钥
  • 确认账户余额充足
  • 检查网络连接

3. "文件权限错误"

错误信息: Permission denied: ...

✅ 解决方案:

# 修改目录权限
chmod 755 ./input
chmod 755 ./output



### 5. "识别失败率高"

✅ 解决方案:
- 调整 `MIN_CONFIDENCE` 值(更低则更多使用AI识别)
- 确保文件名清晰
- 检查TMDB中是否存在改标题的作品

### 6. "Web UI 配置界面显示空白"

问题描述: 打开Web界面后,配置选项卡显示为空白


✅ 快速解决:
- **方案A: 使用 API 测试工具**(推荐)
  ```bash
  # 有两种方式测试API
  
  # 1. 打开浏览器访问 HTML 测试工具(需要正确指向服务器地址)
  # 将 api_tester.html 文件放在可访问的位置,然后在浏览器中打开
  
  # 2. 使用 Python 脚本测试
  python debug_api.py http://your-server:5000

高级使用

自定义命名规则

编辑 config/config.json 中的 naming_pattern 字段:

{
  "naming_pattern": "{{title}} ({{year}}) - {{edition}}/{{title}} ({{year}}) - {{edition}} [S{{season|string}}E{{episode|string}}]{{fileExt}}"
}

多源标签支持

可以在命名规则中添加更多字段:

{
  "naming_pattern": "[{{tmdbid}}] {{title}} ({{year}})/{{title}}{{fileExt}}"
}

跳过特定文件格式

编辑 supported_video_formats

{
  "supported_video_formats": [".mkv", ".mp4"]
}

禁用STRM文件生成

编辑 config 或环境变量:

# 在 .env 中(需要重新编译)
STRM_ENABLED=false

性能优化

1. 大文件处理

对于大量文件(>1000个),建议:

  • 增加容器内存限制
  • 分批处理文件
  • 使用异步处理

2. API速率限制

  • TMDB API:每秒40个请求
  • OpenAI API:根据账户等级限制

3. 网络优化

  • 启用本地DNS缓存
  • 使用更快的网络连接

常见问题

Q: 支持哪些视频格式? A: MKV, MP4, AVI, MOV, FLV, WMV, M4V, MPEG, TS, M2TS, MTS, WebM, 3GP, OGV 等常见格式。

Q: 是否支持Windows? A: 支持。使用 scripts/run.ps1 (PowerShell)或直接 docker-compose up

Q: 可以同时处理多个源文件夹吗? A: 可以。修改docker-compose.yml配置多个卷挂载。

Q: 如何备份原始文件? A: 默认behavior是移动文件。如果需要备份,在docker-compose.yml中修改脚本使用copy操作。

Q: 支持云存储整合吗? A: 目前仅支持本地文件系统。可以通过挂载网络存储来实现。

贡献指南

欢迎提交Issue和Pull Request!

许可证

MIT License

联系方式

如有问题或建议,请提交Issue。


最后更新: 2026-04-21 项目版本: 2.7.0

About

更新说明

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors