Coder Social home page Coder Social logo

wz1st / moviepilot Goto Github PK

View Code? Open in Web Editor NEW

This project forked from jxxghp/moviepilot

0.0 0.0 0.0 45.06 MB

NAS媒体库自动化管理工具

Home Page: https://t.me/moviepilot_channel

License: GNU General Public License v3.0

Shell 0.45% Python 99.30% Mako 0.04% Dockerfile 0.22%

moviepilot's Introduction

MoviePilot

基于 NAStool 部分代码重新设计,聚焦自动化核心需求,减少问题同时更易于扩展和维护。

仅用于学习交流使用,请勿在任何国内平台宣传该项目!

发布频道:https://t.me/moviepilot_channel

主要特性

  • 前后端分离,基于FastApi + Vue3,前端项目地址:MoviePilot-Frontend,API:http://localhost:3001/docs
  • 聚焦核心需求,简化功能和设置,部分设置项可直接使用默认值。
  • 重新设计了用户界面,更加美观易用。

安装

注意:管理员用户不要使用弱密码!如非必要不要暴露到公网。如被盗取管理账号权限,将会导致站点Cookie等敏感数据泄露!

1. 安装CookieCloud插件

站点信息需要通过CookieCloud同步获取,因此需要安装CookieCloud插件,将浏览器中的站点Cookie数据同步到云端后再同步到MoviePilot使用。 插件下载地址请点击 这里

2. 安装CookieCloud服务端(可选)

MoviePilot内置了公共CookieCloud服务器,如果需要自建服务,可参考 CookieCloud 项目进行搭建,docker镜像请点击 这里

声明: 本项目不会收集用户敏感数据,Cookie同步也是基于CookieCloud项目实现,非本项目提供的能力。技术角度上CookieCloud采用端到端加密,在个人不泄露用户KEY端对端加密密码的情况下第三方无法窃取任何用户信息(包括服务器持有者)。如果你不放心,可以不使用公共服务或者不使用本项目,但如果使用后发生了任何信息泄露与本项目无关!

3. 安装配套管理软件

MoviePilot需要配套下载器和媒体服务器配合使用。

  • 下载器支持:qBittorrent、Transmission,QB版本号要求>= 4.3.9,TR版本号要求>= 3.0,推荐使用QB。
  • 媒体服务器支持:Jellyfin、Emby、Plex,推荐使用Emby。

4. 安装MoviePilot

  • Docker镜像

    点击 这里 或执行命令:

    docker pull jxxghp/moviepilot:latest
  • Windows

    下载 MoviePilot.exe,双击运行后自动生成配置文件目录,访问:http://localhost:3000

  • 群晖套件

    添加套件源:https://spk7.imnks.com/

  • 本地运行

    1. 将工程 MoviePilot-Plugins plugins目录下的所有文件复制到app/plugins目录
    2. 将工程 MoviePilot-Resources resources目录下的所有文件复制到app/helper目录
    3. 执行命令:pip install -r requirements.txt 安装依赖
    4. 执行命令:python app/main.py 启动服务
    5. 根据前端项目 MoviePilot-Frontend 说明,启动前端服务

配置

配置文件映射路径:/config,配置项生效优先级:环境变量 > env文件 > 默认值,部分参数如路径映射、站点认证、权限端口、时区等必须通过环境变量进行配置

❗号标识的为必填项,其它为可选项,可选项可删除配置变量从而使用默认值。

1. 环境变量

  • ❗NGINX_PORT: WEB服务端口,默认3000,可自行修改,不能与API服务端口冲突

  • ❗PORT: API服务端口,默认3001,可自行修改,不能与WEB服务端口冲突

  • PUID:运行程序用户的uid,默认0

  • PGID:运行程序用户的gid,默认0

  • UMASK:掩码权限,默认000,可以考虑设置为022

  • PROXY_HOST: 网络代理,访问themoviedb或者重启更新需要使用代理访问,格式为http(s)://ip:portsocks5://user:pass@host:port

  • MOVIEPILOT_AUTO_UPDATE: 重启时自动更新,true/release/dev/false,默认release,需要能正常连接Github 注意:如果出现网络问题可以配置PROXY_HOST

  • AUTO_UPDATE_RESOURCE:启动时自动检测和更新资源包(站点索引及认证等),true/false,默认true,需要能正常连接Github,仅支持Docker

  • ❗AUTH_SITE: 认证站点(认证通过后才能使用站点相关功能),支持配置多个认证站点,使用,分隔,如:iyuu,hhclub,会依次执行认证操作,直到有一个站点认证成功。

    配置AUTH_SITE后,需要根据下表配置对应站点的认证参数,认证资源v1.1.1支持iyuu/hhclub/audiences/hddolby/zmpt/freefarm/hdfans/wintersakura/leaves/ptba:1ptba /icc2022/ptlsp/xingtan/ptvicomo/agsvpt

    站点 参数
    iyuu IYUU_SIGN:IYUU登录令牌
    hhclub HHCLUB_USERNAME:用户名
    HHCLUB_PASSKEY:密钥
    audiences AUDIENCES_UID:用户ID
    AUDIENCES_PASSKEY:密钥
    hddolby HDDOLBY_ID:用户ID
    HDDOLBY_PASSKEY:密钥
    zmpt ZMPT_UID:用户ID
    ZMPT_PASSKEY:密钥
    freefarm FREEFARM_UID:用户ID
    FREEFARM_PASSKEY:密钥
    hdfans HDFANS_UID:用户ID
    HDFANS_PASSKEY:密钥
    wintersakura WINTERSAKURA_UID:用户ID
    WINTERSAKURA_PASSKEY:密钥
    leaves LEAVES_UID:用户ID
    LEAVES_PASSKEY:密钥
    ptba PTBA_UID:用户ID
    PTBA_PASSKEY:密钥
    icc2022 ICC2022_UID:用户ID
    ICC2022_PASSKEY:密钥
    ptlsp PTLSP_UID:用户ID
    PTLSP_PASSKEY:密钥
    xingtan XINGTAN_UID:用户ID
    XINGTAN_PASSKEY:密钥
    ptvicomo PTVICOMO_UID:用户ID
    PTVICOMO_PASSKEY:密钥
    agsvpt AGSVPT_UID:用户ID
    AGSVPT_PASSKEY:密钥

2. app.env配置文件

下载 app.env 模板,修改后放配置文件目录下,app.env 的所有配置项也可以通过环境变量进行配置。

  • ❗SUPERUSER: 超级管理员用户名,默认admin,安装后使用该用户登录后台管理界面。注意:1、初始密码为自动生成,需要在首次运行时的后台日志中查看,成功登录后可以设定中修改;2、启动一次后再次修改该值不会生效,除非删除数据库文件!
  • ❗API_TOKEN: API密钥,默认moviepilot,在媒体服务器Webhook、微信回调等地址配置中需要加上?token=该值,建议修改为复杂字符串
  • BIG_MEMORY_MODE: 大内存模式,默认为false,开启后会增加缓存数量,占用更多的内存,但响应速度会更快
  • GITHUB_TOKEN: Github token,提高自动更新、插件安装等请求Github Api的限流阈值,格式:ghp_****

  • TMDB_API_DOMAIN: TMDB API地址,默认api.themoviedb.org,也可配置为api.tmdb.orgtmdb.movie-pilot.org 或其它中转代理服务地址,能连通即可
  • TMDB_IMAGE_DOMAIN: TMDB图片地址,默认image.tmdb.org,可配置为其它中转代理以加速TMDB图片显示,如:static-mdb.v.geilijiasu.com
  • WALLPAPER: 登录首页电影海报,tmdb/bing,默认tmdb
  • RECOGNIZE_SOURCE: 媒体信息识别来源,themoviedb/douban,默认themoviedb,使用douban时不支持二级分类
  • FANART_ENABLE: Fanart开关,true/false,默认true,关闭后刮削的图片类型会大幅减少

  • SCRAP_METADATA: 刮削入库的媒体文件,true/false,默认true
  • SCRAP_SOURCE: 刮削元数据及图片使用的数据源,themoviedb/douban,默认themoviedb
  • SCRAP_FOLLOW_TMDB: 新增已入库媒体是否跟随TMDB信息变化,true/false,默认true,为false时即使TMDB信息变化了也会仍然按历史记录中已入库的信息进行刮削

  • ❗LIBRARY_PATH: 媒体库目录,多个目录使用,分隔
  • LIBRARY_MOVIE_NAME: 电影媒体库目录名称(不是完整路径),默认电影
  • LIBRARY_TV_NAME: 电视剧媒体库目录称(不是完整路径),默认电视剧
  • LIBRARY_ANIME_NAME: 动漫媒体库目录称(不是完整路径),默认电视剧/动漫
  • LIBRARY_CATEGORY: 媒体库二级分类开关,true/false,默认false,开启后会根据配置 category.yaml 自动在媒体库目录下建立二级目录分类
  • ❗TRANSFER_TYPE: 整理转移方式,支持link/copy/move/softlink/rclone_copy/rclone_move 注意:在linksoftlink转移方式下,转移后的文件会继承源文件的权限掩码,不受UMASK影响;rclone需要自行映射rclone配置目录到容器中或在容器内完成rclone配置,节点名称必须为:MP
  • OVERWRITE_MODE: 转移覆盖模式,默认为size,支持nerver/size/always/latest,分别表示不覆盖同名文件/同名文件根据文件大小覆盖(大覆盖小)/总是覆盖同名文件/仅保留最新版本,删除旧版本文件(包括非同名文件)

  • ❗COOKIECLOUD_HOST: CookieCloud服务器地址,格式:http(s)://ip:port,不配置默认使用内建服务器https://movie-pilot.org/cookiecloud
  • ❗COOKIECLOUD_KEY: CookieCloud用户KEY
  • ❗COOKIECLOUD_PASSWORD: CookieCloud端对端加密密码
  • ❗COOKIECLOUD_INTERVAL: CookieCloud同步间隔(分钟)
  • ❗USER_AGENT: CookieCloud保存Cookie对应的浏览器UA,建议配置,设置后可增加连接站点的成功率,同步站点后可以在管理界面中修改

  • SUBSCRIBE_MODE: 订阅模式,rss/spider,默认spiderrss模式通过定时刷新RSS来匹配订阅(RSS地址会自动获取,也可手动维护),对站点压力小,同时可设置订阅刷新周期,24小时运行,但订阅和下载通知不能过滤和显示免费,推荐使用rss模式。
  • SUBSCRIBE_RSS_INTERVAL: RSS订阅模式刷新时间间隔(分钟),默认30分钟,不能小于5分钟。
  • SUBSCRIBE_SEARCH: 订阅搜索,true/false,默认false,开启后会每隔24小时对所有订阅进行全量搜索,以补齐缺失剧集(一般情况下正常订阅即可,订阅搜索只做为兜底,会增加站点压力,不建议开启)。
  • AUTO_DOWNLOAD_USER: 远程交互搜索时自动择优下载的用户ID(消息通知渠道的用户ID),多个用户使用,分割,未设置需要选择资源或者回复0

  • OCR_HOST: OCR识别服务器地址,格式:http(s)://ip:port,用于识别站点验证码实现自动登录获取Cookie等,不配置默认使用内建服务器https://movie-pilot.org,可使用 这个镜像 自行搭建。

  • ❗MESSAGER: 消息通知渠道,支持 telegram/wechat/slack/synologychat,开启多个渠道时使用,分隔。同时还需要配置对应渠道的环境变量,非对应渠道的变量可删除,推荐使用telegram

    • wechat设置项:

      • WECHAT_CORPID: WeChat企业ID
      • WECHAT_APP_SECRET: WeChat应用Secret
      • WECHAT_APP_ID: WeChat应用ID
      • WECHAT_TOKEN: WeChat消息回调的Token
      • WECHAT_ENCODING_AESKEY: WeChat消息回调的EncodingAESKey
      • WECHAT_ADMINS: WeChat管理员列表,多个管理员用英文逗号分隔(可选)
      • WECHAT_PROXY: WeChat代理服务器(后面不要加/)
    • telegram设置项:

      • TELEGRAM_TOKEN: Telegram Bot Token
      • TELEGRAM_CHAT_ID: Telegram Chat ID
      • TELEGRAM_USERS: Telegram 用户ID,多个使用,分隔,只有用户ID在列表中才可以使用Bot,如未设置则均可以使用Bot
      • TELEGRAM_ADMINS: Telegram 管理员ID,多个使用,分隔,只有管理员才可以操作Bot菜单,如未设置则均可以操作菜单(可选)
    • slack设置项:

      • SLACK_OAUTH_TOKEN: Slack Bot User OAuth Token
      • SLACK_APP_TOKEN: Slack App-Level Token
      • SLACK_CHANNEL: Slack 频道名称,默认全体(可选)
    • synologychat设置项:

      • SYNOLOGYCHAT_WEBHOOK: 在Synology Chat中创建机器人,获取机器人传入URL
      • SYNOLOGYCHAT_TOKEN: SynologyChat机器人令牌

  • ❗DOWNLOAD_PATH: 下载保存目录,注意:需要将moviepilot下载器的映射路径保持一致,否则会导致下载文件无法转移
  • DOWNLOAD_MOVIE_PATH: 电影下载保存目录路径,不设置则下载到DOWNLOAD_PATH
  • DOWNLOAD_TV_PATH: 电视剧下载保存目录路径,不设置则下载到DOWNLOAD_PATH
  • DOWNLOAD_ANIME_PATH: 动漫下载保存目录路径,不设置则下载到DOWNLOAD_PATH
  • DOWNLOAD_CATEGORY: 下载二级分类开关,true/false,默认false,开启后会根据配置 category.yaml 自动在下载目录下建立二级目录分类
  • DOWNLOAD_SUBTITLE: 下载站点字幕,true/false,默认true

  • ❗DOWNLOADER: 下载器,支持qbittorrent/transmission,QB版本号要求>= 4.3.9,TR版本号要求>= 3.0,同时还需要配置对应渠道的环境变量,非对应渠道的变量可删除,推荐使用qbittorrent

    • qbittorrent设置项:

      • QB_HOST: qbittorrent地址,格式:ip:port,https需要添加https://前缀
      • QB_USER: qbittorrent用户名
      • QB_PASSWORD: qbittorrent密码
      • QB_CATEGORY: qbittorrent分类自动管理,true/false,默认false,开启后会将下载二级分类传递到下载器,由下载器管理下载目录,需要同步开启DOWNLOAD_CATEGORY
      • QB_SEQUENTIAL: qbittorrent按顺序下载,true/false,默认true
      • QB_FORCE_RESUME: qbittorrent忽略队列限制,强制继续,true/false,默认 false
    • transmission设置项:

      • TR_HOST: transmission地址,格式:ip:port,https需要添加https://前缀
      • TR_USER: transmission用户名
      • TR_PASSWORD: transmission密码
  • DOWNLOADER_MONITOR: 下载器监控,true/false,默认为true,开启后下载完成时才会自动整理入库

  • TORRENT_TAG: 下载器种子标签,默认为MOVIEPILOT,设置后只有MoviePilot添加的下载才会处理,留空所有下载器中的任务均会处理


  • ❗MEDIASERVER: 媒体服务器,支持emby/jellyfin/plex,同时开启多个使用,分隔。还需要配置对应媒体服务器的环境变量,非对应媒体服务器的变量可删除,推荐使用emby

    • emby设置项:

      • EMBY_HOST: Emby服务器地址,格式:ip:port,https需要添加https://前缀
      • EMBY_PLAY_HOST: EMBY外网地址,格式:http(s)://DOMAIN:PORT,未设置时使用EMBY_HOST
      • EMBY_API_KEY: Emby Api Key,在设置->高级->API密钥处生成
    • jellyfin设置项:

      • JELLYFIN_HOST: Jellyfin服务器地址,格式:ip:port,https需要添加https://前缀
      • JELLYFIN_PLAY_HOST: Jellyfin外网地址,格式:http(s)://DOMAIN:PORT,未设置时使用JELLYFIN_HOST
      • JELLYFIN_API_KEY: Jellyfin Api Key,在设置->高级->API密钥处生成
    • plex设置项:

      • PLEX_HOST: Plex服务器地址,格式:ip:port,https需要添加https://前缀
      • PLEX_PLAY_HOST: Plex外网地址,格式:http(s)://DOMAIN:PORT,未设置时使用PLEX_HOST
      • PLEX_TOKEN: Plex网页Url中的X-Plex-Token,通过浏览器F12->网络从请求URL中获取
  • MEDIASERVER_SYNC_INTERVAL: 媒体服务器同步间隔(小时),默认6,留空则不同步

  • MEDIASERVER_SYNC_BLACKLIST: 媒体服务器同步黑名单,多个媒体库名称使用,分割


  • MOVIE_RENAME_FORMAT: 电影重命名格式,基于jinjia2语法

    MOVIE_RENAME_FORMAT支持的配置项:

    title: TMDB/豆瓣中的标题
    original_title: TMDB/豆瓣中的原语种标题
    name: 从文件名中识别的名称(同时存在中英文时,优先使用中文) en_name:从文件名中识别的英文名称(可能为空) original_name: 原文件名(包括文件外缀)
    year: 年份
    resourceType:资源类型
    effect:特效
    edition: 版本(资源类型+特效)
    videoFormat: 分辨率
    releaseGroup: 制作组/字幕组
    customization: 自定义占位符
    videoCodec: 视频编码
    audioCodec: 音频编码
    tmdbid: TMDB ID(非TMDB识别源时为空)
    imdbid: IMDB ID(可能为空)
    doubanid:豆瓣ID(非豆瓣识别源时为空)
    part:段/节
    fileExt:文件扩展名 customization:自定义占位符

    MOVIE_RENAME_FORMAT默认配置格式:

    {{title}}{% if year %} ({{year}}){% endif %}/{{title}}{% if year %} ({{year}}){% endif %}{% if part %}-{{part}}{% endif %}{% if videoFormat %} - {{videoFormat}}{% endif %}{{fileExt}}
    
  • TV_RENAME_FORMAT: 电视剧重命名格式,基于jinjia2语法

    TV_RENAME_FORMAT额外支持的配置项:

    season: 季号
    episode: 集号
    season_episode: 季集 SxxExx
    episode_title: 集标题

    TV_RENAME_FORMAT默认配置格式:

    {{title}}{% if year %} ({{year}}){% endif %}/Season {{season}}/{{title}} - {{season_episode}}{% if part %}-{{part}}{% endif %}{% if episode %} - 第 {{episode}} 集{% endif %}{{fileExt}}
    

3. 优先级规则

  • 仅支持使用内置规则进行排列组合,内置规则有:蓝光原盘4K1080P中文字幕特效字幕H265H264杜比HDRREMUXWEB-DL免费国语配音
  • 符合任一层级规则的资源将被标识选中,匹配成功的层级做为该资源的优先级,排越前面优先级超高
  • 不符合过滤规则所有层级规则的资源将不会被选中

4. 插件扩展

  • PLUGIN_MARKET: 插件市场仓库地址,仅支持Github仓库main分支,多个地址使用,分隔,默认为官方插件仓库:https://github.com/jxxghp/MoviePilot-Plugins ,通过查看MoviePilot-Plugins项目的fork,或者查看频道置顶了解更多第三方插件仓库。

使用

  • 通过CookieCloud同步快速同步站点,不需要使用的站点可在WEB管理界面中禁用,无法同步的站点可手动新增。
  • 通过WEB进行管理,将WEB添加到手机桌面获得类App使用效果,管理界面端口:3000,后台API端口:3001
  • 通过下载器监控或使用目录监控插件实现自动整理入库刮削(二选一)。
  • 通过微信/Telegram/Slack/SynologyChat远程管理,其中微信/Telegram将会自动添加操作菜单(微信菜单条数有限制,部分菜单不显示);微信需要在官方页面设置回调地址,SynologyChat需要设置机器人传入地址,地址相对路径为:/api/v1/message/
  • 设置媒体服务器Webhook,通过MoviePilot发送播放通知等。Webhook回调相对路径为/api/v1/webhook?token=moviepilot3001端口),其中moviepilot为设置的API_TOKEN
  • 将MoviePilot做为Radarr或Sonarr服务器添加到Overseerr或Jellyseerr(API服务端口),可使用Overseerr/Jellyseerr浏览订阅。
  • 映射宿主机docker.sock文件到容器/var/run/docker.sock,以支持内建重启操作。实例:-v /var/run/docker.sock:/var/run/docker.sock:ro

注意

  • 容器首次启动需要下载浏览器内核,根据网络情况可能需要较长时间,此时无法登录。可映射/moviepilot目录避免容器重置后重新触发浏览器内核下载。
  • 使用反向代理时,需要添加以下配置,否则可能会导致部分功能无法访问(ip:port修改为实际值):
location / {
    proxy_pass http://ip:port;
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
}
  • 新建的企业微信应用需要固定公网IP的代理才能收到消息,代理添加以下代码:
location /cgi-bin/gettoken {
    proxy_pass https://qyapi.weixin.qq.com;
}
location /cgi-bin/message/send {
    proxy_pass https://qyapi.weixin.qq.com;
}
location  /cgi-bin/menu/create {
    proxy_pass https://qyapi.weixin.qq.com;
}

image

image

image

image

moviepilot's People

Contributors

jxxghp avatar thsrite avatar ddsrem avatar ddsderek avatar developer-wlj avatar honue avatar yubanmeiqin9048 avatar withdewhua avatar shurelol avatar chen3167 avatar lightolly avatar amtoaer avatar wpf0414 avatar sowevo avatar ekkog avatar eltociear avatar khalid586 avatar lwllr avatar cikezhu avatar hussion avatar vincwnt avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.