Project Icon

PlexAniSync

Plex动漫库与AniList观看进度自动同步工具

PlexAniSync是一个开源同步工具,可自动更新Plex动漫库与AniList的观看进度。主要功能包括多Plex库支持、自定义动漫映射和评分同步。该工具提供Docker镜像,便于部署。PlexAniSync基于Python开发,配置简单,有助于管理观看记录。此外,它还支持测试模式和单集同步,适用于不同使用场景。

Plex 与 AniList 同步

构建状态 Docker

Discord 徽章

标志

如果您使用 Plex 管理您的动漫,这将允许您将库同步到 AniList。建议将 Plex 与 HAMA 代理 配合使用,以获得最佳的动漫名称匹配。

Plex 中未观看的动漫不会被同步,只有至少观看过一集的动漫才会被同步。更新到 AniList 只会发送变更,所以不用担心会影响观看历史。

这个版本基于我之前的项目 PlexMalSync,由于 MAL 关闭了他们的 API,该项目不再可用。如果将来情况发生变化,我会重新开始开发该项目。

如果您想先测试而不更新实际的 AniList 条目,请查看本README的"可选功能"部分中的"跳过列表更新以进行测试"

设置

步骤 1 - 安装 Python

确保您安装了 Python 3.8 或更高版本:

Python 主页

步骤 2 - 下载项目文件

使用您喜欢的 git 客户端获取最新版本,或从以下链接下载最新发布版:

https://github.com/RickDB/PlexAniSync/archive/master.zip

步骤 3 - 配置

在项目目录中,将 settings.ini.example 重命名为 settings.ini,用您喜欢的文本编辑器打开 settings.ini 并根据需要进行编辑。

Plex

只选择一种认证方法,MyPlex 是最简单的。

MyPlex 认证(推荐)

对于 MyPlex 认证,您需要 Plex 服务器名称、用户名和 Plex 令牌。

获取 Plex 令牌的方法在这里描述:https://support.plex.tv/articles/204059436-finding-an-authentication-token-x-plex-token/

以下是同步管理员账户的示例:

[PLEX]
anime_section = Anime
authentication_method = myplex

server = Sadala
myplex_user = Goku
myplex_token = abcdef123456789

这完成了 MyPlex 认证。仅当您想要同步非管理员的特定 Plex Home 用户时,才需要按照以下说明操作:

为此,请在 Plex 服务器上查找 home 用户名,并填写完整的 Plex 服务器 URL,例如:

[PLEX]
anime_section = Anime
authentication_method = myplex

# MyPlex
server = Sadala
myplex_user = John # 必须是 Plex 管理员用户账户
myplex_token = abcdef123456789

# 如果启用 home_user_sync,它将只同步特定的 Plex home 用户,这需要您的 Plex 服务器的完整 URL,就像直接 IP 方法一样
# home_username 是实际的 Plex home 用户名,而不是他们的电子邮件地址,这也区分大小写

home_user_sync = True
home_username = Megumin # 您想要同步的 home 用户账户,不能是管理员用户
home_server_base_url = http://127.0.0.1:32400
直接 Plex 认证(高级用户)

直接认证方法适用于不想使用 Plex 在线认证系统的用户,但设置更复杂。对此,您需要手动查找您的令牌:

https://support.plex.tv/articles/204059436-finding-an-authentication-token-x-plex-token/

之后可以输入您的完整 Plex 站点 URL 和上述认证令牌,例如:

[PLEX]
anime_section = Anime
authentication_method = direct

base_url = http://192.168.1.234:32400
token = abcdef123456789
分区配置

在设置文件中输入包含您的动漫的Plex库/分区名称,例如:

[PLEX]
anime_section = 动漫

现在支持多个库,您可以使用管道符号("|")来分隔它们,如下所示:

[PLEX]
anime_section = 动漫|动漫2

AniList

对于AniList,您需要获取一个所谓的"access_token",您可以通过以下链接获取,如果未登录,系统会要求您登录:

https://anilist.co/api/v2/oauth/authorize?client_id=1549&response_type=token

确保复制整个密钥,因为它非常长,并将其粘贴到设置文件的"access_token"下,无需将其括起来,直接粘贴即可。

该令牌仅在1年内有效,因此您需要每年重复此过程。

之后,请确保也填写您的AniList用户名,这是您的实际用户名,而不是电子邮件地址,例如:

[ANILIST]
username = GoblinSlayer
access_token = iLikeToastyGoblins.

步骤4 - 安装依赖

在项目文件夹中使用Python包安装器(pip)安装额外的依赖:

pip install -r requirements.txt

步骤5 - 开始同步

现在配置已完成,依赖已安装,我们终于可以启动同步脚本了:

python PlexAniSync.py

根据库的大小和服务器的情况,可能需要几分钟才能完成。对于定期同步,您可以创建一个cron作业、systemd定时器或Windows任务,例如每30分钟运行一次。

有关如何使用systemd设置定时器的教程,请参阅Systemd服务

可选功能

自定义动漫映射

您可以手动将Plex标题和季度链接到AniList ID,方法如下:

  • 从项目文件夹中复制custom_mappings.yaml.examplecustom_mappings.yaml
  • 按以下格式在其中添加新条目:
  - title: "Plex中的系列标题"
    seasons:
      - season: Plex季度
        anilist-id: AniList系列ID
      - season: Plex季度
        anilist-id: AniList系列ID

如果Plex季度应该分为两个季度,可以为每个季度添加一个可选的start参数,如下所示:

  - title: "Re:从零开始的异世界生活"
    seasons:
      - season: 2
        anilist-id: 108632
        start: 1
      - season: 2
        anilist-id: 119661
        start: 14

第1-13集将映射到Re:Zero第二季第一部分,第14集及以后将映射到Re:Zero第二季第二部分。

  • 要找出AniList ID,您可以访问系列页面并从网站URL中复制它,例如,我的盾之勇者ID为99263:

https://anilist.co/anime/99263/Tate-no-Yuusha-no-Nariagari

  • 您可以从示例文件中删除任何现有条目,因为它们纯粹是用于说明目的
  • 在启动时,它将检查文件是否为有效的YAML文件。最可能的原因是您没有在包含特殊字符(例如":")的动漫标题周围加上引号。

重复的Plex标题

对于标题相同的Plex节目和电影,请在映射中使用可选的guid字段。

例如,这两个《浪客剑心》节目在Plex中都显示为"浪客剑心":

  - title: "浪客剑心"
    guid: plex://show/5d9c07ece264b7001fc38094
    seasons:
      - season: 1
        anilist-id: 45
      - season: 2
        anilist-id: 45
      - season: 3
        anilist-id: 45

  - title: "浪客剑心 (2023)"
    guid: plex://show/6330a57e9705fab2b34f656d
    seasons:
      - season: 1
        anilist-id: 142877

当设置了 guid 字段时,titlesynonyms 字段将被忽略。但为了便于人类阅读,你仍应使用不同的标题。

要找到 guid,请按以下步骤操作:

  1. 隐私浏览窗口中打开此 URL:https://app.plex.tv/desktop/#!/search?pivot=top&query=
  2. 搜索你的系列或电影,并点击正确的条目
  3. 复制 metadata%2F 之后的所有内容,例如对于 https://app.plex.tv/desktop/#!/provider/tv.plex.provider.discover/details?key=%2Flibrary%2Fmetadata%2F6330a57e9705fab2b34f656d,复制 6330a57e9705fab2b34f656d
  4. 如果是电视节目,在该标识符前添加 plex://show/,对于电影则使用 plex://movie/

社区映射

Github 社区在 https://github.com/RickDB/PlexAniSync-Custom-Mappings/ 提供了一些映射。你可以通过在示例映射文件中指定 remote-urls 来使用它们。

如果本地映射文件包含与社区映射相同节目的映射,本地映射将优先。

同义词功能是为社区映射引入的,你可以指定一个节目可以有多个标题,但应该以相同的方式映射。请参见示例映射文件中的 Shaman King (2021)。

自定义设置文件位置

如果你想加载不同的 settings.in 文件,可以在第一个参数中指定,如下所示:

python PlexAniSync.py settings_alternate.ini

对于 Tautulli 同步辅助脚本,你也可以这样做,第一个参数将是设置文件名,第二个参数将是系列名称,如下所示:

python TautulliSyncHelper.py settings_alternate.ini <plex 节目名称>

使 Plex 观看集数优先

默认情况下,如果 AniList 观看集数高于 Plex,它将跳过,这可以通过设置 plex_episode_count_priority 来覆盖。

当设置为 True 时,如果 Plex 观看集数高于 0,它将更新 AniList 条目,并且不会考虑 AniList 观看集数,即使后者更高。

请谨慎使用,因为通常不需要这样做,只适用于某些特定情况。

使用 Plex 评分作为 Anilist 分数

在 Plex 中,你可以给节目、季和集评 1 到 5 颗星。在移动应用程序上,如果你参与了 Discover Together Beta,你还可以以半星增量进行评分。

设置 sync_ratings = True 可以根据 Plex 评分自动设置 Anilist 分数。这也会改变你过去已完成节目的分数。

如果一个或多个 Plex 季映射到一个 Anilist 条目,将使用已评分季的平均值。原始 Anilist 分数将是 Plex 星级数 * 20。所以如果你给一季评 3.5 星,另一季评 4 星,计算出的 Anilist 分数将是 75。

如果季没有评分,将使用节目评分作为后备。

目前不使用单集评分。

你的动画列表中显示的实际分数取决于 https://anilist.co/settings/lists 的评分系统设置

评分系统显示的分数
100 分制75
10 分制(小数)7.5
10 分制7(向下取整)
5 星制4 星(向上取整)
3 点表情符号🙂

在所有情况下,Anilist 都会存储原始值 75,所以你可以随时更改评分系统而不会丢失数据。但请注意,3 点表情符号分数无法准确转换,所以你应该尽量避免使用。

跳过列表更新以进行测试

在你的设置文件中,有一个名为 skip_list_update 的设置,你可以将其设置为 True 或 False。如果设置为 True,它将不会更新你的 AniList,这在你想进行测试运行以检查一切是否正常时很有用。

Tautulli 同步辅助脚本

在项目文件夹中,你会找到 TautulliSyncHelper.py,你可以用它来同步单个 Plex 节目到 AniList,用于 Tautulli 脚本通知(在播放停止时触发)。

使用方法如下:

python TautulliSyncHelper.py <plex 节目名称>

根据你的操作系统,确保将节目名称放在单引号或双引号之间,更多信息请参见 wiki 页面: https://github.com/RickDB/PlexAniSync/wiki/Tautulli-sync-script

Docker

PlexAniSync 可作为 Docker 镜像使用。

PlexAniSync
文档

另一个内置 PlexAniSync 的 Tautulli Docker 容器可在此处找到:
Tautulli-PlexAniSync
文档

要求

Python 3.8 或更高版本

支持

AniList

https://anilist.co/forum/thread/6443

Discord

https://discord.gg/a9cu5t5fKc

计划

目前为未来版本计划的功能:

  • 基于 HAMA 的 XREF 标题匹配,使用自定义列表和 AniDB
  • 添加设置以跳过更新用户列表中已弃看状态的节目
  • 支持动漫忽略列表(基于内容分级和/或标题)
  • 改进错误处理

致谢

Python-PlexAPI

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号