Skip to content

Symedia 一条龙教程

文章信息

前期准备

激活码

  • 如果已经购买激活码,可以直接部署。
  • 如果未购买,点击右上角捐赠按钮,捐赠后会获得激活码一枚

CloudDrive2 挂载路径

注意事项

  • 挂载路径需要严格遵循以下格式,否则可能导致掉盘或无法使用 SA 刷新。

CloudDrive2 挂载路径 (注意需要跟我这样才行,否则后面掉盘没法用 sa 去刷新)

Symedia 配置指南

  • 需要留空两个 Cookie:
    • CloudDrive2:用于挂载路径。
    • Symedia:用于激活服务。

Docker Compose 配置文件

yaml
version: "3.8"
services:
  symedia:
    image: shenxianmq/symedia:latest # 拉取最新镜像
    container_name: symedia # 容器名称
    restart: always # 重启策略
    ports:
      - "8095:8095" # 映射端口:主机 8095 -> 容器 8095
    volumes:
      - /volume1/docker/CloudNAS:/CloudNAS:rslave # cd2映射的本地路径
      - /volume1/strm:/strm # 本地生成strm路径,自行选择
      - /volume1/docker/symedia/config:/app/config # sa配置文件夹
      - /var/run/docker.sock:/var/run/docker.sock:ro # Docker 宿主机通信
    environment:
      - TZ=Asia/Shanghai # 容器时区
      - LICENSE_KEY=eyj89j9fjrfkr9fpi #秘钥
  • 创建 symedia 配置文件夹
  • 本地生成 strm 的存放文件夹
  • 没问题直接创建启动
  • 启动服务
  • 浏览器访问 ip:8095 端口
  • 默认用户名:admin,默认密码:password

首次进入设置,全局设置内修改用户名密码,重启生效

115 设置

  • 填入名称与 115 cookie,建议抓取微信小程序 cookie,可风控检测(如果使用 FastEmby 后端,可以自动扫码切换 cookie)

链接同步

  • 1、新建同步,以"国产剧"为例:填写任务名称之后,选择同步方式:目录树同步(推荐)、星标同步(会使你同步的文件全部打星标,谨慎使用)、常规同步(不建议,速度慢容易风控)

  • 2、选择云盘文件夹名字,例如 115

  • 3、选择添加的 115 cookie 配置

  • 4、填写云盘根目录、源目录、链接目录等

  • 5、选择挂载类型,可选 cd2、alist、custom(自行配置,fastemby 用户可选)

  • 6、以 cd2 为例,填写云端地址,strm 模式(软链接或 strm),及其他。右侧实时更新 strm 预览结果,可对照使用

  • 7、填写本地需要生成的 strm、软链接及元数据后缀,区别于 autosumlink,sa 可以同时生成 strm 或软链接

  • 8、侧边栏手动同步,可以复制本地已有的配置,省去反复重新填写的麻烦

  • 9、strm 模式:cloud 模式文件内是 http 开头的链接,local 模式文件内是文件的路径

这里需要注意的是,指定删除前缀才能成功播放

例如我这里实际的解码路径为

http://192.168.6181:19798/static/http/192.168.6.181:19798/False//CloudNAS/115人影院/国产剧/test.mkv

则需要在 cd2 中查看我路径实际为http://192.168.6181:19798/static/http/192.168.6.181:19798/False//CloudNAS/115

/CloudNAS 为多余,删掉即可

点击保存运行试试可以看到生成速度很快作者很贴心,单独给同步的链接做了日志,新增删除都有记录,很细

Telegram 机器人通知

tg 寻找机器人 father @BotFather 创建属于自己的机器人,获取 bot tokon,填入自己的 tg ID 以接收 sa 通知或互动 webhook 监控 注:webhook 不起作用:检查是否是 cd2 会员,cd2 要是 host 模式

上传 webhook.toml 文件到 cd2 的 config 的 webhooks 目录,修改 base_url 为自己的 sa 实际 IP 地址

webhook.toml

不能直接下载 webhook.toml,则下载 zip 文件解压

最新版 CloudDrive2 可以直接在网页中添加 webhook 配置,新建 webhook 后,将下列代码粘贴进去,修改 base_url 为自己的 sa 实际 IP 地址

toml
# global variables: global variables are used to replace the placeholders in URL and body of the webhook
# {device_name} - The name of the device
# {user_name} - Current user name
# {version} - The version of the application
# {event_category} - The category of the event
# {event_name} - The name of the event
# {event_time} - The time of the event occurred, unix epoch time in seconds
# {send_time} - The time of the data sent, unix epoch time in seconds

# global parameters
[global_params]
# The base URL of the server to send the data to, the server must be able to receive POST requests
base_url = "http://localhost:8095"
# Whether the webhook is enabled
enabled = true

# The default http headers
[global_params.default_headers]
content-type = "application/json"
user-agent = "clouddrive2/{version}"
authorization = "basic usernamepassword"

# File system watcher webhook configuration
[file_system_watcher]
# The URL of the server to send the data to, the server must be able to receive POST requests
url = "{base_url}/api/v1/webhook/clouddrive2/file_notify?device_name={device_name}&user_name={user_name}&type={event_name}"
# http method, can be "GET" or "POST", if not specified, the default value is POST
method = "POST"
# Whether the file system watcher is enabled
enabled = true
# The body to be sent to the server can be a JSON string
# The following is a sample template for the data to be sent
# the json string should contains at least an array of file changes, each file change item shoud contain the following fields
# {event_category} - The category of the event is "file"
# {event_name} - The name of the event is "notify"
# {action} - The action of file change (create, delete, rename)
# {is_dir} - Whether the file is a directory (false: file, true: directory)
# {source_file} - The source file's path of the action
# {destination_file} - The destination file's path of the action, only valid for action rename(move)
body = '''
{
  "device_name": "{device_name}",
  "user_name": "{user_name}",
  "version": "{version}",
  "event_category": "{event_category}",
  "event_name": "{event_name}",
  "event_time": "{event_time}",
  "send_time": "{send_time}",
  "data": [
      {
        "action": "{action}",
        "is_dir": "{is_dir}",
        "source_file": "{source_file}",
        "destination_file": "{destination_file}"
      }
  ]
}
'''
# specify additional http headers for the file system watcher request if required, headers with same name will override in the default headers
[file_system_watcher.headers]
additional_header = "value"

# mount point watcher configuration
[mount_point_watcher]
# The URL of the server to send the data to, the server must be able to receive POST requests
url = "{base_url}/api/v1/webhook/clouddrive2/mount_notify?device_name={device_name}&user_name={user_name}&type={event_name}"
# http method
method = "POST"
# Whether the mount point watcher is enabled
enabled = true
# The body to be sent to the server can be a JSON string
# The following is a sample template for the data to be sent
# the mount_point_watcher should contains at least an array of mount point changes, each mount point change item shoud contain the following fields
# {event_category} - The category of the event is "mount_point"
# {event_name} - The name of the event is "mount" or "unmount"
# {action} - The action of mount point change (mount, unmount)
# {mount_point} - The mount point's path of the action
# {status} - The status of the action (true for success, false for failed)
# {reason} - The failed reason, empty string means success
body = '''
{
  "device_name": "{device_name}",
  "user_name": "{user_name}",
  "version": "{version}",
  "event_category": "{event_category}",
  "event_name": "{event_name}",
  "event_time": "{event_time}",
  "send_time": "{send_time}",
  "data": [
      {
        "action": "{action}",
        "mount_point": "{mount_point}",
        "status": "{status}",
        "reason": "{reason}"
      }
  ]
}
'''
# specify additional http headers for the file system watcher request if required, headers with same name will override in the default headers
[mount_point_watcher.headers]
user-agent = "clouddrive2/{version}/mount"

重启 cd2 生效

开启 webhook 监控,大媒体库(500T 以上)可以不开 cd2 永久缓存,可实时监控。

归档教程

新建一个刮削,这里以我为例,新建一个剧集刮削的规则

注意这里我们因为是配置剧集,所以电影待会配置,先配置剧集

剧集刮削配置

剧集文件夹命名设置

文件件的命名格式多元化,可以按自己需求来

举例

  • 片名+年份+tmdbid/季名

  • 三体 (2023) {tmdb-12345}/Season 1

  • 片名+年份/季名

  • 三体 (2023)/Season 1

  • 注意勾选启用剧集整理!!!!!自定义

命名格式大家可以选择第一栏标签,对应文件夹命名格式,预览可以看到配置结果

剧集文件命名设置

举例

  • 完整信息

  • 三体.2023.S01E01.第 1 集.1080p.x265-CMCT.mkv

  • 简洁信息

  • 三体 S01E01 - 1080p.mkv

自定义

同上方文件件命名一样,可自由搭配

电影刮削配置

电影文件夹命名设置

举例

  • 片名+年份+tmdbid

  • 流浪地球 (2019)

  • 片名+年份

  • 流浪地球 (2019)

  • 电影文件夹和文件也都支持自定义,以上剧集已经讲过了,这里就不再过多阐述

文件命名设置

举例

  • 完整信息

  • 流浪地球 (2019) - 2160p.WEB-DL.BluRay Remux.HDR 10-bit.x265.TrueHD.7.1-CMCT.mkv

  • 简洁信息

  • 流浪地球 (2019) - 2160p.mkv 总览(参考) 我自己是刮削分类和不分类单独配置好了,仅做参考

二级分类

根据自己是需求去选择分类类型

我自己用的是类型分类

二级分类规则

我这套二级分类是只有这几个文件夹(大家可以按作者默认那套来自己细分)

电影

  • 华语电影

  • 外语电影

  • 动画电影

剧集

  • 国产剧

  • 日韩剧

  • 欧美剧

  • 动漫

  • 综艺

  • 纪录片

yaml
####### 配置说明 #######
# 1. 该配置文件用于配置电影和电视剧的分类策略,配置后程序会按照配置的分类策略名称进行分类,配置文件采用yaml格式,需要严格附合语法规则
# 2. 配置文件中的一级分类名称:`movie`、`tv` 为固定名称不可修改,二级名称同时也是目录名称,会按先后顺序匹配,匹配后程序会按这个名称建立二级目录
# 3. 支持的分类条件:
#   `original_language` 语种,具体含义参考下方字典
#   `production_countries` 国家或地区(电影)、`origin_country` 国家或地区(电视剧),具体含义参考下方字典
#   `genre_ids` 内容类型,具体含义参考下方字典
#   themoviedb 详情API返回的其它一级字段
# 4. 配置多项条件时需要同时满足,一个条件需要匹配多个值是使用`,`分隔

# 配置电影的分类策略
movie:
  # 分类名同时也是目录名
  动画电影:
    # 匹配 genre_ids 内容类型,16是动漫
    genre_ids: "16"
  华语电影:
    # 匹配语种
    original_language: "zh,cn,bo,za"
  # 未匹配以上条件时,分类为外语电影
  外语电影:
# 配置电视剧的分类策略
tv:
  # 分类名同时也是目录名
  动漫:
    # 匹配 genre_ids 内容类型,16是动漫
    genre_ids: "16"
  纪录片:
    # 匹配 genre_ids 内容类型,99是纪录片
    genre_ids: "99"
  综艺:
    # 匹配 genre_ids 内容类型,10764 10767都是综艺
    genre_ids: "10764,10767"
  国产剧:
    # 匹配 origin_country 国家,CN是中国大陆,TW是中国台湾,HK是中国香港
    origin_country: "CN,TW,HK"
  欧美剧:
    # 匹配 origin_country 国家,主要欧美国家列表
    origin_country: "US,FR,GB,DE,ES,IT,NL,PT,RU,UK"
  日韩剧:
    # 匹配 origin_country 国家,主要亚洲国家列表
    origin_country: "JP,KP,KR,TH,IN,SG"
  # 未匹配以上分类,则命名为未分类
  未分类:
## genre_ids 内容类型 字典,注意部分中英文是不一样的
#	28	Action
#	12	Adventure
#	16	Animation
#	35	Comedy
#	80	Crime
#	99	Documentary
#	18	Drama
#	10751	Family
#	14	Fantasy
#	36	History
#	27	Horror
#	10402	Music
#	9648	Mystery
#	10749	Romance
#	878  Science Fiction
#	10770	TV Movie
#	53	Thriller
#	10752	War
#	37	Western
#	28	动作
#	12	冒险
#	16	动画
#	35	喜剧
#	80	犯罪
#	99	纪录
#	18	剧情
#	10751	家庭
#	14	奇幻
#	36	历史
#	27	恐怖
#	10402	音乐
#	9648	悬疑
#	10749	爱情
#	878	科幻
#	10770	电视电影
#	53	惊悚
#	10752	战争
#	37	西部

## original_language 语种 字典
#	af	南非语
#	ar	阿拉伯语
#	az	阿塞拜疆语
#	be	比利时语
#	bg	保加利亚语
#	ca	加泰隆语
#	cs	捷克语
#	cy	威尔士语
#	da	丹麦语
#	de	德语
#	dv	第维埃语
#	el	希腊语
#	en	英语
#	eo	世界语
#	es	西班牙语
#	et	爱沙尼亚语
#	eu	巴士克语
#	fa	法斯语
#	fi	芬兰语
#	fo	法罗语
#	fr	法语
#	gl	加里西亚语
#	gu	古吉拉特语
#	he	希伯来语
#	hi	印地语
#	hr	克罗地亚语
#	hu	匈牙利语
#	hy	亚美尼亚语
#	id	印度尼西亚语
#	is	冰岛语
#	it	意大利语
#	ja	日语
#	ka	格鲁吉亚语
#	kk	哈萨克语
#	kn	卡纳拉语
#	ko	朝鲜语
#	kok	孔卡尼语
#	ky	吉尔吉斯语
#	lt	立陶宛语
#	lv	拉脱维亚语
#	mi	毛利语
#	mk	马其顿语
#	mn	蒙古语
#	mr	马拉地语
#	ms	马来语
#	mt	马耳他语
#	nb	挪威语(伯克梅尔)
#	nl	荷兰语
#	ns	北梭托语
#	pa	旁遮普语
#	pl	波兰语
#	pt	葡萄牙语
#	qu	克丘亚语
#	ro	罗马尼亚语
#	ru	俄语
#	sa	梵文
#	se	北萨摩斯语
#	sk	斯洛伐克语
#	sl	斯洛文尼亚语
#	sq	阿尔巴尼亚语
#	sv	瑞典语
#	sw	斯瓦希里语
#	syr	叙利亚语
#	ta	泰米尔语
#	te	泰卢固语
#	th	泰语
#	tl	塔加路语
#	tn	茨瓦纳语
#	tr	土耳其语
#	ts	宗加语
#	tt	鞑靼语
#	uk	乌克兰语
#	ur	乌都语
#	uz	乌兹别克语
#	vi	越南语
#	xh	班图语
#	zh	中文
#	cn	中文
#	zu	祖鲁语

## origin_country/production_countries 国家地区 字典
#	AR	阿根廷
#	AU	澳大利亚
#	BE	比利时
#	BR	巴西
#	CA	加拿大
#	CH	瑞士
#	CL	智利
#	CO	哥伦比亚
#	CZ	捷克
#	DE	德国
#	DK	丹麦
#	EG	埃及
#	ES	西班牙
#	FR	法国
#	GR	希腊
#	HK	香港
#	IL	以色列
#	IN	印度
#	IQ	伊拉克
#	IR	伊朗
#	IT	意大利
#	JP	日本
#	MM	缅甸
#	MO	澳门
#	MX	墨西哥
#	MY	马来西亚
#	NL	荷兰
#	NO	挪威
#	PH	菲律宾
#	PK	巴基斯坦
#	PL	波兰
#	RU	俄罗斯
#	SE	瑞典
#	SG	新加坡
#	TH	泰国
#	TR	土耳其
#	US	美国
#	VN	越南
#	CN	中国 内地
#	GB	英国
#	TW	中国台湾
#	NZ	新西兰
#	SA	沙特阿拉伯
#	LA	老挝
#	KP	朝鲜 北朝鲜
#	KR	韩国 南朝鲜
#	PT	葡萄牙
#	MN	蒙古国 蒙古

个人使用逻辑 我的逻辑是,把 115 转存到需要刮削的目录,让 Symedia 去刮削到二级目录,emby 再去读取,一劳永逸

选择自己配置的 115 账号,填写文件夹 id

格式:文件夹名:cid,多个文件夹用;隔开 归档前提告知!! 如果你不需要分类,只是刮削,那你在规则中关闭分类即可 (开始配置归档任务)新建任务 归档目录选择我们需要用到刚刚创建的剧集 记得,CloudDrive2 需要转存文件夹缓存时间设为 20 秒 我是剧集和电影单独分类 这里先执行一个分类刮削

可以看到,我放了一个电视剧 我配置了 webhook,直接检测到了 不用一分钟,已经刮好了 生成 strm 也很快,我的 emby 已经扫好了 注意 如果大家不需要分类,只需要配置一个不分类的刮削规则即可,可以监控,也可以手动

TGBot 保姆级教程

1、打开 telegram,在顶部栏搜索 @BotFather

2、点击左下角菜单栏,点击最顶部 /newbot3、输入 Symedia 通知 的名称或自己取名4、给自己的机器人起一个独一无二的 ID,注意,以 bot 或_bot 结尾5、保存图中的 API,一会儿要用到

6、获取自己的 ID,telegram 搜索 @getidsbot

同理点击左下角菜单,或输入 /about ,等待机器人返回第一行 ID:XXXXXXX ,复制保存 7、配置 SA bot,开启 SA,左侧菜单栏打开设置 → 通知左侧第一行,填入刚刚从 @botfather 获取的 API,其他三个文本框,均输入@getidsbot 获取的 ID,将下面八个开关按需打开,再点击保存和测试,看看机器人是否给你发送通知,如下图

FastEmby 配置指南

前期准备

  • 注意需要留空一个 cookie 给 FastEmby 使用

  • 这里以我新建一个 emby 为例,路径需要注意把 strm 和网盘路径挂载上去

  • 需要注意的是

  • Symedia 中的媒体目录与你 emby 挂载的目录需要一致,否则不能播放

这里的路径我指的是/volume1/docker/CloudNAS

Docker Compose 部署

Docker Compose 配置文件

yaml
version: "3.8"
services:
  FastEmby:
    image: shenxianmq/fastemby:latest # 使用最新镜像
    container_name: FastEmby # 容器名称
    environment:
      - TZ=Asia/Shanghai # 环境变量:容器时区
      - LICENSE_KEY=xxxxxx # 填入Symedia的授权码即可
    volumes:
      - /volume1/docker/FastEmby/config:/app/config # 配置文件夹映射
      - /volume1/docker/FastEmby/log:/app/log # 日志文件夹映射
    network_mode: host # 使用主机网络模式
    restart: always # 自动重启策略(可选)

手动配置

  • 启动完容器,在配置文件中 config.yaml,需要手动配置一下

4 和 6 这两条要注意哈,比如我的是http://192.168.6.181:8096(端口后面没有/)

如果填的是你服务器 ip+emby 端口访问不,则需要修改成 docker 网关 ip

新版本大家 Emby 地址可填写内网 ip 和端口也能做到 302

FastEmby2.0-路径替换

前期准备

配置文件配置文件在 config 路径中

首次需要在配置文件把 emby 内网地址,和密钥填进去才能正常访问访问 Web-UI

浏览器地址输入 ip+15895 端口访问

  • 默认用户名:admin
  • 默认密码:password

日志

日志在我们的最上方

Emby 服务器配置

最开始已经在配置文件中添加了我们第一台 emby 的地址了

如需配置第二台,则需要在 2 地址中添加即可

路径配置

傻瓜式路径配置
115 版

由于我是 cloud 格式,所以会比较长一点,远离都是一样的由于我是 cloud 格式,所以会比较长一点,远离都是一样的

yaml
Emby路径http://192.168.6.181:19798/static/http/192.168.6.181:19798/False/%2F115%2F%E7%A7%81%E4%BA%BA%E5%BD%B1%E9%99%A2%2F%E5%8D%8E%E8%AF%AD%E7%94%B5%E5%BD%B1%2F%E6%80%92%E7%81%AB%E5%8D%81%E4%BA%8C%E5%B0%8F%E6%97%B6%20%282024%29%2F%E6%80%92%E7%81%AB%E5%8D%81%E4%BA%8C%E5%B0%8F%E6%97%B6%20%282024%29%20-%202160p%20-%20WEB-DL.mkv
后台3030路径
http://192.168.6.181:3030/%E7%A7%81%E4%BA%BA%E5%BD%B1%E9%99%A2/%E5%8D%8E%E8%AF%AD%E7%94%B5%E5%BD%B1/%E6%80%92%E7%81%AB%E5%8D%81%E4%BA%8C%E5%B0%8F%E6%97%B6%20(2024)/%E6%80%92%E7%81%AB%E5%8D%81%E4%BA%8C%E5%B0%8F%E6%97%B6%20(2024)%20-%202160p%20-%20WEB-DL.mkv?pickcode=bafv4th41a6s28wyx
123 版(其他 302 网盘同理)

yaml
Emby路径http://192.168.6.181:19798/static/http/192.168.6.181:19798/False/%2F123%2F%E5%AA%92%E4%BD%93%E5%BA%93%2F%E5%9B%BD%E4%BA%A7%E5%89%A7%2F%E7%88%B1%E6%83%85%E5%85%AC%E5%AF%93%20%282009%29%2FSeason%201%2F%E7%88%B1%E6%83%85%E5%85%AC%E5%AF%93%20-%20S01E01%20-%20%E5%A9%9A%E7%A4%BC%E5%A4%A7%E4%B9%B1%E6%96%97.mp4

Alist地址http://192.168.6.181:5244/d/123/%E5%AA%92%E4%BD%93%E5%BA%93/%E5%9B%BD%E4%BA%A7%E5%89%A7/%E7%88%B1%E6%83%85%E5%85%AC%E5%AF%93%20(2009)/Season%201/%E7%88%B1%E6%83%85%E5%85%AC%E5%AF%93%20-%20S01E01%20-%20%E5%A9%9A%E7%A4%BC%E5%A4%A7%E4%B9%B1%E6%96%97.mp4
专业路径映射

注意 strm 是什么格式

cloud 模式文件内是 http 开头的链接,local 模式文件内是文件的路径

前面是我 emby 的路径,后面则是跟我一样 其他配置 这里则可以修改我们的后台账号密码

以及 115 的 cookie 也可以在这里填写

注意最下面两个需要勾选

全部配置完,我们保存重启即可生效 另外,比方我们需要反代的第一个第二个 emby 端口,还是需要在配置文件中修改 测试播放 如看完不会部署,可添加我的微信,有偿部署