📈 GH Trending Explorer 🎲 Surprise me

← all repos

dlushu / MediaBridge

git clone https://github.com/dlushu/MediaBridge.git v1.9.8 · 4d ago

把多个数据源聚合为一份 Emby 兼容媒体源:源托管、多站聚合搜索、版本合并。零第三方运行时依赖,前端零构建。

+1
stars, 24h · #9,333
+~7
stars, 7 days · #9,981
+88
stars, 30 days · #6,156
89
★ total · +7% this week
20
forks · 2 open issues

Star history (as recorded here)

2026-10-20 · 87 ★ 2026-10-23 · 89 ★
LanguageJavaScript
LicenseAGPL-3.0
Created2026-09-22 (1mo ago)
Last push1d ago
Watchers2
OwnerUser

GitHub topics

Links

README excerpt
# 媒体桥面板
把多个数据源聚合成一份可以直接交给播放客户端的媒体源:
来源与站点由插件提供,面板负责跨来源搜索、合并线路,对外提供 Emby 兼容接口。
- **来源由插件提供** —— 面板不点名任何插件,也不假设插件内部怎么工作:来源、站点、播放地址
 都由插件按约定申报,面板只按动作名取用,不关心插件背后的地址与端口。
- **聚合搜索** —— 一个关键字并发查询多个来源的多个站点,对片名做规范化清洗后按权重打分匹配,
 命中与未命中都可查看(含分数与原因)。
- **版本合并** —— 同一部作品在多处的线路,在客户端里表现为多个可选的「版本」,点哪条播哪条。
- **Emby 兼容** —— 客户端把面板当作一台 Emby 服务器使用(握手、登录、媒体库、搜索、详情、图片、播放、字幕均已实现)。
- **零依赖** —— 只使用 Node 内置模块(含内置 `node:sqlite`),没有第三方包,没有构建步骤。
> 本项目不内置、不分发任何来源或内容。各项来源由用户自行配置,其可用性与合法性由用户判断。
## 目录
- 安装 · 快速上手 · 界面导览
- 常见问题 · 参与开发 · 许可
## 安装
### 方式一:Docker(推荐)
镜像发布在 Docker Hub:`dlushu/mediabridge`,同时提供 `linux/amd64` 与 `linux/arm64`。
 [code] 
等价的 compose 文件:
 [code] 
启动后打开 `http:// :8088`。
> **镜像里没有应用代码**:容器首次启动时会从 GitHub Release 取一份装到数据卷的 `/data/app/ /`
> 下再运行。默认先经内置的公共 gh 代理取(`APP_MIRRORS`,见下),取不到再退到官方直连。
> 之后**升级不需要重建容器**:在「面板设置 → 关于 → 版本与更新」里手动更新,应用进程会自己重启到新版本。
> 运行数据与已安装的应用代码都在具名卷 `media_bridge-data` 里(来源、站点勾选、Emby 账号、面板密码、
> 配置、应用代码)。备份该卷即可完整迁移。不要执行 `docker compose down -v`:`-v` 会一并删除数据卷。
### 方式二:运行源码
 [code] 
默认监听 `0.0.0.0:8088`,运行数据写入项目内的 `data/`。
### 环境变量
| 变量 | 默认 | 说明 |
|---|---|---|
| `WEB_PORT` | `8088` | 面板端口(页面与面板接口)。Emby 客户端**不**连它,连的是各 Emby 实例的端口 |
| `WEB_HOST` | `0.0.0.0` | 监听地址 |
| `DATA_DIR` | 项目内 `data/`(镜像内为 `/data`) | 运行数据目录;应用代码装在它下面的 `app/` |
| `TZ` | 跟随系统 | 日志时间(建议 `Asia/Shanghai`) |
| `APP_REPO` | `dlushu/MediaBridge` | 从哪个仓库取应用代码(换成分支/私有镜像源时用) |
| `APP_VERSION` | 未设置 | 固定运行的版本;留空 = 用已装版本,磁盘上没有则取最新 Release |
| `APP_SOURCE_URL` | 未设置 | 版本包地址模板,占位符 `{repo}` `{version}` `{tag}` `{name}`;支持 `http(s)://` 与本地路径 |
| `APP_CHECKSUM_URL` | 未设置 | `.sha256` 校验文件地址模板(占位符同上);留空 = 在版本包地址后加 `.sha256` |
| `APP_MIRRORS` | `https://gh-proxy.com,https://ghfast.top` | 取源镜像前缀(逗号分隔、**有序**):**面板更新与插件库共用**,先逐个试这些公共 gh 代理,再退到官方直连。留空 = 用内置默认;置 `off` / `none` / `-` 只走官方直连。显式设了 `APP_SOURCE_URL` / `PLUGIN_INDEX_URL` / `PLUGIN_SOURCE_URL` 时,对应那条不套镜像前缀 |
| `PLUGIN_REPO` | `dlushu/media-bridge-plugins` | **插件库**仓库(`owner/repo`)—— 插件从它取清单与包(面板本身不带插件,见 ADR-0035) |
| `PLUGIN_INDEX_URL` | 未设置 | 插件清单地址;留空 = 走 `APP_MIRRORS` 候选(含镜像),最后兜到上面那个仓库 `main` 分支根目录的 `index.json`;设了就是**唯一**地址、不再套镜像 |
| `PLUGIN_SOURCE_URL` | 未设置 | 插件包地址模板,占位符 `{repo}` `{path}` `{type}` `{id}` `{version}`;留空 = 走 `APP_MIRRORS` 候选(含镜像);设了就是**唯一**地址、不再套镜像;支持 `http(s)://` 与本地路径 |
| `PANEL_NOTICE_URL` | 未设置 | 「关于」页内嵌**公告**的取回地址(见 ADR-0068);留空 = 取本仓库 `main` 分支根目录的 `notice.html`(走 `APP_MIRRORS` 候选)。设了就是**唯一**地址、不再套镜像;置 `off` / `none` / `-` 关闭这张卡 |
例:想自己指定 gh 代理(或换掉内置的),按**先后顺序**填 `APP_MIRRORS`;只走官方直连就关掉它:
 [code] 
> **关于校验**:走第三方代理时,包体与其校验值(应用代码的 `.sha256`、插件的 md5)都经代理之手,
> 校验只能挡住传输损坏,挡不住代理替换(详见 ADR-0067)。
## 快速上手
1. **登录面板** —— 默认密码 `123456`;进入后先到「面板设置 → 安全」修改密码。
2. **装插件**(必做,面板本身不带插件)—— 在侧栏「插件 → 插件库」装所需的插件;装时可勾
 「装完就启用」,网络不通时也能在「插件 → 管理」页上传本地 `.tar.gz` 手装。
 插件分五类,详见插件分类。
3. **配置插件** —— 侧栏按类型分栏,点开某个插件就是它自带的设置页;它要什么就在那儿填 ——
 取数凭据、账号、站点地址等,各插件各不相同,一律存在插件自己那儿。
4. **配一套模板** —— 在「聚合设置 → 模板」新建(或选中)一套模板,按来源页签勾选参与聚合的站点,
 保存后再到「聚合设置 → 域 → 模板」把哪个元数据域用哪套模板指过去;没指的域,其内容搜不到。
 匹配策略与线路过滤详见匹配与线路过滤。
5. **接入客户端** —— 在「Emby → 实例」页新增实例,在「Emby