自动整理
自动整理可以根据本地元数据,按照你设定的「自动重命名模板」规整媒体库里的目录和文件名。影视库从 v0.11.0 开始支持(读取 NFO),小说与漫画从 v0.12.0 开始支持(分别读取 OPF 和 ComicInfo)。
开启方式
- 在 设置 → 系统设置 → 媒体库管理 中新增或编辑媒体库
- 填好「自动重命名模板」并保存(留空则关闭自动整理)
- 确保媒体自带对应类型的元数据,或绑定一个能生成元数据的「资源入库」工作流
- 之后每当有新媒体入库、元数据被发现或更新、手动刮削并保存后,系统就会尝试整理对应条目
注意:光修改并保存模板,不会立刻把库里所有的老文件重命名一遍。想让旧条目也按新模板整理,可以对它们重新刮削,或更新一下对应的 NFO/OPF/ComicInfo 后等后台处理;普通扫描只处理新发现或修改过的文件,不会强行重处理没变过的元数据。反过来,以后就算清空模板,已经整理好的文件也不会退回旧名称。
模板规则
模板填写的是相对于媒体库根目录的路径,以 / 分隔目录,最后一段是不含扩展名的正文文件名(或独立图片漫画的阅读单元目录名)。系统会保留原正文扩展名;对于散图存放的漫画,里面的页面文件名保持不变。
| 媒体库类型 | 支持的结构 |
|---|---|
| 电影 | 文件名 或 电影目录/文件名 |
| 电视剧 | 剧集目录/文件名 或 剧集目录/季目录/文件名 |
| 小说、漫画 | 作品目录/阅读单元名,必须正好两段 |
模板里只能写下表列出的 {{字段名}} 占位符和普通文本,不支持工作流里的 Jinja2 过滤器、条件判断或表达式——例如 {{season}} 可以用,写成 {{season | default(1)}} 就不行。
另外,模板不能使用绝对路径、空目录段、.、.. 或反斜杠,总长不能超过 1024 个字符。元数据里的路径分隔符和非法文件名字符会自动替换成下划线;渲染出来的单个目录名或文件名主体也不能超过 240 个 UTF-8 字节。
可用字段
| 字段 | 含义与使用范围 |
|---|---|
{{title}} | 电影标题或单集标题;电视剧中只能用于文件名 |
{{originaltitle}} | 电影或单集的原始标题;电视剧中只能用于文件名 |
{{year}} | 当前 NFO 的年份;单集缺失时可继承父级年份 |
{{parent.title}} | 父级剧集或季度的标题 |
{{parent.originaltitle}} | 父级 NFO 的原始标题,缺失时不会自动用普通标题替代 |
{{parent.year}} | 父级剧集的年份 |
{{season}} | 季数,仅电视剧可用,自动补齐至少两位,如 01 |
{{episode}} | 集数,仅电视剧文件名可用,自动补齐至少两位,如 03 |
{{code}} | 季集编号,如 S01E03,仅电视剧文件名可用 |
{{id}} | 当前 NFO 中默认的媒体标识;电视剧目录部分使用父级标识,文件名部分使用单集标识 |
{{site}} | 默认媒体标识的来源,如 tmdb;单集缺失时可继承父级来源 |
写模板时,请只引用元数据里实际有的字段。特别提醒:电视剧的目录部分不要使用单集自己的标题、原始标题、集数或季集编号,免得同一季被拆进不同的单集文件夹里。
为了兼容旧模板,早期的 show_title、show_originaltitle、show_year、episode_code、unique_id 和 nfo_source 依然可用,分别对应现在的 parent.title、parent.originaltitle、parent.year、code、id 和 site。
小说与漫画字段
| 字段 | 含义与使用范围 |
|---|---|
{{title}}、{{originaltitle}} | 当前阅读单元的标题、原始标题,只能用于第二段 |
{{parent.title}}、{{parent.originaltitle}}、{{parent.year}} | 合集或独立作品的标题、原始标题、年份 |
{{year}} | 出版年份 |
{{authors}}、{{illustrators}} | 作者、绘者,多人使用逗号连接 |
{{publisher}}、{{series}} | 出版社、系列 |
{{volume}}、{{number}} | 卷号、话号,不自动补零 |
第一段目录用的是合集或独立作品的元数据,不能写章节自身的 title 或 originaltitle;第二段才对应当前阅读单元,这时的 parent.* 依然指向整部合集或独立作品。阅读模板不支持影视专用的季集编号和 NFO 标识字段。
电影示例
{{title}} ({{year}})/{{title}} ({{year}})如果 NFO 标题为「示例电影」、年份为 2024,视频扩展名为 .mkv,整理出来就是这样:
Movies/
└── 示例电影 (2024)/
├── 示例电影 (2024).mkv
├── 示例电影 (2024).nfo
└── 示例电影 (2024).zh-CN.srt电视剧示例
{{parent.title}}/S{{season}}/{{code}}如果剧集标题为「示例剧集」、季数为 1、集数为 3,整理结果是:
Shows/
└── 示例剧集/
└── S01/
├── S01.nfo
├── S01E03.mkv
├── S01E03.nfo
└── S01E03.zh-CN.srt目录模板里包含季数时,原本混在一个目录里的不同季会自动按季拆开。不过这需要有可用的父级 NFO;如果某一集自己的 NFO 还没就绪或缺少文件名需要的字段,系统会先把它搬进目标目录并暂时保留原文件名,等单集元数据补齐了再重命名。
小说与漫画示例
小说可以使用:
{{parent.title}}/{{title}}如果 OPF 里的标题为「示例小说」,原正文叫 正文.epub,整理后就会变成 示例小说/示例小说.epub。
连载漫画也可以套用同一套模板:第一段取合集标题,第二段取各话标题。例如 旧合集/01/正文.cbz 会整理成 示例漫画/第 01 话/第 01 话.cbz;如果是散图存放的一话,则只重命名话目录,里面的页面文件名原封不动。
想在第二段加上卷号或话号时,记得先保证元数据里填了对应字段。对于独立图片漫画,整理时只改作品目录名;连载合集则要求各阅读单元可识别、已入库且归属清楚,才会触发整理。
相关文件与下载转移
整理视频时,配对的 NFO、同名外挂字幕、弹幕缓存以及可以安全迁移的本地图片会一起挪过去,相关路径和 NFO 引用也会同步更新,原有的播放进度照样保留;不过如果某张图片同时还被别的条目引用着,系统就不会贸然把它移走。
小说与漫画也是同样的处理方式:外置 OPF、ComicInfo 和封面会跟着迁移,索引与缓存引用同步更新,条目标识和阅读进度都会留着。另外,入库时记下的原始文件信息也会继续保留,不会因为后续整理改了名而被覆盖。
把下载完成后转移和媒体库整理配合使用时,两步会先后执行:先按下载任务的转移方式和文件名替换规则把文件放进媒体库,等拿到 NFO 后再按媒体库的重命名模板整理。只要同一批下载文件还有没转移完的,自动整理就会先等一等,避免边转移边挪动目标目录。
使用硬链接或复制入库时,库内怎么整理都不会改名或删掉原下载文件;使用软链接时,整理的只是库内的软链接本身,所以原始下载文件必须一直留在原位。只要检测到某个整理操作可能会破坏下载源或别的引用,系统就会直接跳过。
未按模板整理时
发现文件没按预期改名时,先去 系统监控 → 系统日志 搜一下对应的媒体路径看看原因,也可以对照下表排查:
| 情况 | 处理方式 |
|---|---|
| 保存模板后旧文件没有变化 | 对目标条目重新刮削,或更新其 NFO 后等待监控处理 |
| 缺少 NFO 或模板字段 | 补齐元数据,或者把无法提供的字段从模板里去掉 |
| 目标文件已存在 | 检查目标位置是不是已有同名视频;系统不会覆盖已有文件 |
| 目标目录已被占用 | 非空目录需要有匹配的 NFO 媒体标识才能合并,光标题相同不会贸然合并 |
| 多分段电影 | 目前没有分段命名规则,会跳过自动整理,不影响原有入库和播放 |
| 下载尚未全部转移 | 等相关转移全部完成后,系统会自动继续处理 |
| 目录或链接存在冲突 | 检查有没有目录级软链接、被别处引用的文件,以及媒体库与下载源路径 |
| 无写入权限或跨文件系统 | 确认源目录和目标目录都有写入权限;自动整理不能跨文件系统移动文件 |
每步待完成的整理操作都会持久化记录,服务重启后会优先尝试恢复。如果恢复被文件冲突或权限问题拦住了,先按日志提示把环境修好,再重试相关操作即可。