前言
我们知道,Jellyfin原生并不支持TMDB的剧集组刮削,遇到部分动漫或电视剧在TMDB多季度合并的情况往往会获取不到正确的数据,而 TinyMediaManager 可以解决这一痛点。本文介绍了利用 Ani-RSS + qBittorent + TinyMediaManager + Jellyfin 实现新番自动下载和重命名、定时匹配刮削和增量扫库的方案,夸克网盘利用 Openlist + Rclone 挂载。
本方案中,除Rclone外所有配置均在Docker Compose下运行,环境为AMD64的Openmediavault(基于Debian 12)。
环境部署
首先确认设备具备Docker环境,注意本节中贴出Compose文件中的/configall
目录为个人自定义的所有配置文件持久化存放位置,请自行修改。
Ani-RSS以及qBittorent的Compose文件可以从这里获取,记得自行挂载持久化配置文件目录和媒体目录。
Jellyfin这里采用的是nyanmisaka大佬发布的国内优化版本,从这里获取,贴出Compose文件:
services:
jellyfin:
image: nyanmisaka/jellyfin:latest
container_name: jellyfin
restart: unless-stopped
environment:
- PUID=0
- PGID=0
- TZ=Asia/Shanghai
volumes:
- /configall/jellyfin/config:/config
- /configall/jellyfin/cache:/cache
- </path/to/movies>:/media/movies
devices:
- /dev/dri:/dev/dri
network_mode: host
TinyMediaManager的Compose文件可以从这里获取,同样记得挂载配置目录及媒体目录,要注意的是,要想利用Crontab定时运行curl命令实现及时匹配刮削,还需要额外开放一个端口(或采用host模式),这里以7878为例,如下标红,若有文件权限问题,可以在environment中添加- PGID=0和- PUID=0。
version: "2.1"
services:
tinymediamanager:
image: tinymediamanager/tinymediamanager:latest
container_name: tinymediamanager
environment:
- USER_ID=1000
- GROUP_ID=100
- ALLOW_DIRECT_VNC=true
- LC_ALL=en_US.UTF-8 # force UTF8
- LANG=en_US.UTF-8 # force UTF8
- PASSWORD=<password>
volumes:
- /configall/tmm/data:/data
- </path/to/movies>:/media/movies
- </path/to/addons/>:/media/tv_shows
ports:
- 5900:5900 # VNC port
- 4000:4000 # Webinterface
- 7878:7878 # http api port
restart: unless-stopped
Openlist的Compose文件可以从这里获取。
Rclone的安装脚本从这里获取,这里贴出:
sudo -v ; curl https://rclone.org/install.sh | sudo bash
刮削及API配置
关于Ani-RSS以及其配套qBittorent的设置和使用可以参考官方文档,或官方文档首页下方“相关文章”栏目中提供的详细教程,这里主要介绍禁用Jellyfin自带刮削器以及TMM的使用方法。
Jellyfin配置
部署完成后访问 <IP>:8096 进入Jellyfin页面,配置完成后添加媒体库,勾选启用媒体库和启用实时监控,若完全依赖curl定时任务,可取消勾选启用实时监控:

随后下滑,将元数据存储方式中的Nfo勾选,元数据下载器(节目、季、剧集)以及图片获取器(同上)全部取消勾选,保存。
此外,在Jellyfin控制台选择高级 - API 密钥,点击加号添加密钥,记录下Key,如图:

TinyMediaManager配置
访问 <IP>:4000 进入TMM页面,首次进入会弹出设置,按照步骤设置即可,最终配置类似如下:
电影-NFO设置:

电影-元数据刮削设置:

电视节目的设置与之类似,注意在元数据刮削和艺术图刮削中均要填入TMDB Api,TMDB Api的获取方式见官方文档,即访问API 设置,选择仅个人使用并填写申请理由直接通过。设置完成后可自行测试是否能正常刮削,若有网络连接问题,可以在TMM设置中设置Http代理或修改系统host使用,这里不展开。
重点是设置TMM的Api,在下方页面(设置 - 通用选项 - 系统 - HTTP API)中勾选启用,设置端口为7878,记录下Key。

这里注意TMM Docker的VNC系统的复制粘贴需要选中,在左侧剪贴板中才能复制到VNC外部,如下图:

API调用及自动化
根据TMM的官方API指导文档,可以看到
所有配置到TMM的movie调用目录为:http://
<IP>
:7878/api/movie
所有配置到TMM的series调用目录为:http://<IP>:7878/api/tvshow
基于本文目的,需要利用参数 {"action":"update", "scope":{"name":"all"}}
对所有作用域进行 update,并利用参数 {"action":"scrape", "scope":{"name":"unscraped"}}
对所有未刮削的视频文件进行刮削。
另外,还需要在TMM刮削后,对Jellyfin的库进行增量扫描(即扫描新的和修改过的文件),最终产生如下命令,注意替换<tmm api key>以及<jellyfin api key>,若脚本不在localhost运行,还需将localhost修改为容器宿主机IP:
#!/bin/bash
# --- 更新所有数据源 ---
# 更新电视剧数据源
curl -d '{"action":"update", "scope":{"name":"all"}}' -H "Content-Type: application/json" -H "api-key: 35242720-8782-41a9-be45-c9cb9147abae" -X POST http://localhost:7878/api/tvshows
# 更新电影数据源
curl -d '{"action":"update", "scope":{"name":"all"}}' -H "Content-Type: application/json" -H "api-key: 35242720-8782-41a9-be45-c9cb9147abae" -X POST http://localhost:7878/api/movies
sleep 30
# --- 刮削所有未刮削项目 ---
# 刮削未刮削的电视剧
curl -d '{"action":"scrape", "scope":{"name":"unscraped"}}' -H "Content-Type: application/json" -H "api-key: <tmm api key>" -X POST http://localhost:7878/api/tvshows
# 刮削未刮削的电影
curl -d '{"action":"scrape", "scope":{"name":"unscraped"}}' -H "Content-Type: application/json" -H "api-key: <tmm api key>" -X POST http://localhost:7878/api/movies
sleep 30
# Jellyfin增量扫库
curl -X POST "http://localhost:8096/Library/Refresh" \
-H "Authorization: MediaBrowser Token=\"<jellyfin api key>\""
可以对上述任意单条Curl在SSH客户端进行测试,TMM的运行状态将在VNC界面的右下角显示。测试通过后,在任意文件夹内新建名为tmm.sh的文件,这里举例/configall/tmm/tmm.sh
,将以上内容写入并保存。
SSH控制台输入crontab -e打开定时任务配置文件,在下方添加
0 * * * * /configall/tmm/tmm.sh >/dev/null 2>&1
意为每小时的0分自动运行tmm.sh脚本,实现 TMM扫描新资源 → 等待30s → TMM刮削新资源 → 等待30s → Jellyfin入库新资源 的自动化流程。
Comments NOTHING