Baike.dev
All toolsAI codingTrendingOpen sourceNewsSubmit
Log in
< Back to tools
D

DecoTV

> 编程语言
Open source

基于最新版LunaTV二次开发的一个开箱即用的、跨平台的影视聚合播放站。【原KatelyaTV】

2.2K stars0 likes0 views
WebsiteGitHub

About

基于最新版LunaTV二次开发的一个开箱即用的、跨平台的影视聚合播放站。【原KatelyaTV】


DecoTV

> **DecoTV** 是一个开箱即用的、跨平台的影视聚合播放器。它基于 **Next.js 16** + **Tailwind CSS 4** + **TypeScript 5** 构建,支持多资源搜索、在线播放、收藏同步、播放记录、云端存储,让你可以随时随地畅享海量免费影视内容。**支持本地无数据库模式、CMS 全量代理、隐私纵深防御等企业级特性。** --- ## 项目展示 --- ### ⚠️ 重要提醒 > **注意**:部署后项目为空壳项目,无内置播放源和直播源,需要自行收集配置。 > **免责声明**:请不要在 B 站、小红书、微信公众号、抖音、今日头条或其他中国大陆社交平台发布视频或文章宣传本项目,不授权任何"科技周刊/月刊"类项目或站点收录本项目。 ## ✨ 功能特性 - **多源聚合搜索**:一次搜索立刻返回全源结果。 - **丰富详情页**:支持剧集列表、演员、年份、简介等完整信息展示。 - ▶️ **流畅在线播放**:集成 HLS.js & ArtPlayer。 - **多音轨切换**:当视频存在 2 条及以上音轨时,播放器控制栏会显示“音轨”按钮,可在中文配音 / English 等音轨间切换;单音轨会自动隐藏按钮,界面保持简洁。 - ️ **网页投屏(Google Cast)**:支持在网页端直接发起投屏,并提供 iOS 设备兼容提示。 - ❤️ **收藏 + 继续观看**:支持 Kvrocks/Redis/Upstash 存储,多端同步进度。 - **用户注册系统**:支持用户自助注册(可选),带图形验证码防机器人。 - **PWA**:离线缓存、安装到桌面/主屏,移动端原生体验。 - **响应式布局**:桌面侧边栏 + 移动底部导航,自适应各种屏幕尺寸。 - **弹幕功能**:集成弹弹play开放平台,Vercel 部署默认可通过公共中继加载官方弹幕,并支持 TMDB 精确匹配、手动匹配与第三方自定义节点。 - ☁️ **PanSou 网盘搜索**:支持对接远程 PanSou 节点,提供聚合网盘搜索能力,并可在后台灵活配置节点与鉴权。 - ⬇️ **视频资源下载能力**:支持浏览器分片下载与服务端 FFmpeg 转存下载,增强任务管理、重试与超时处理。 - **灵活直播体验**:支持多直播源配置、分页切换优化与 m3u8/flv/mp4 自动识别处理。 - **豆瓣信息增强**:支持标题反查豆瓣 ID、并行抓取与图片代理,详情页信息更完整。 - ️ **TMDB 元数据增强**:支持与豆瓣互补的 TMDB 元数据查询,中文优先、英文回退,可为详情页和私人影库补充更稳定的海报、背景图与简介。 - ️ **私人影库**:支持接入 OpenList / 小雅 Alist / Emby / Jellyfin,在“我的影库”中浏览和播放自有媒体资源,并通过服务端代理保护流地址与鉴权信息。 - **智能去广告**:自动跳过视频中的切片广告(实验性)。 - **本地无数据库模式**:无需 Redis,自动降级为浏览器 localStorage 存储。 - **CMS 全量代理**:根绝 Mixed Content 和 CORS 问题,支持任意第三方源。 - ️ **隐私纵深防御**:双重熔断机制,从配置到代理层隔离成人内容。 ### 注意:部署后项目为空壳项目,无内置播放源和直播源,需要自行收集 点击查看项目截图 ### 请不要在 B 站、小红书、微信公众号、抖音、今日头条或其他中国大陆社交平台发布视频或文章宣传本项目,不授权任何“科技周刊/月刊”类项目或站点收录本项目。 ## 目录 - [ 项目展示](#-项目展示) - [✨ 功能特性](#-功能特性) - [ 技术栈](#-技术栈) - [ 部署](#-部署) - [⚙️ 配置文件](#️-配置文件) - [ 自动更新](#-自动更新) - [ 环境变量](#-环境变量) - [⬇️ 下载功能使用指南](#️-下载功能使用指南) - [Roadmap](#roadmap) - [ AndroidTV 使用](#-androidtv-使用) - [ 安全与隐私提醒](#-安全与隐私提醒) - [ License](#-license) - [ 致谢](#-致谢) - [ Star History](#-star-history) - [ 赞赏支持](#-赞赏支持) ## 技术栈 | 分类 | 主要依赖 | | --------- | ----------------------------------------------------------------------------------------------------- | | 前端框架 | [Next.js 16](https://nextjs.org/) · App Router · Turbopack | | UI & 样式 | [Tailwind CSS 4](https://tailwindcss.com/) | | 语言 | TypeScript 5 | | 播放器 | [ArtPlayer](https://github.com/zhw2590582/ArtPlayer) · [HLS.js](https://github.com/video-dev/hls.js/) | | 代码质量 | ESLint 9 · Prettier 3 · Jest 29 | | 部署 | Docker | ## 部署 本项目**仅支持 Docker 或其他基于 Docker 的平台** 部署。 ### OpenWrt 部署 如果你计划运行在 OpenWrt(软路由 / ARM 盒子 / 树莓派等)设备上,参阅完整指南: [OpenWrt 部署指南](./docs/OpenWrt部署指南.md) 快速拉取预构建镜像: ```bash docker pull ghcr.io/decohererk/decotv:latest ``` 若需在外部主机自行构建后再导入至 OpenWrt,请参考指南中的 “获取或构建镜像” 与 “导出并传输” 步骤。 ### Docker 镜像标签 DecoTV 提供以下 Docker 镜像标签: | 标签 | 说明 | 使用场景 | | -------- | ------------ | -------------------------------- | | `latest` | 最新构建版本 | 总是使用最新代码,包含所有小更新 | | `v1.0.0` | 特定版本号 | 固定版本部署,便于版本管理和回滚 | **推荐使用方式**: ```bash # 方式1:使用 latest 标签(自动获取最新更新) docker pull ghcr.io/decohererk/decotv:latest # 方式2:使用特定版本号(生产环境推荐) docker pull ghcr.io/decohererk/decotv:v1.0.0 # 方式3:回滚到旧版本 docker pull ghcr.io/decohererk/decotv:v0.9.0 ``` **版本号标签优势**: - ✅ 清楚知道运行的版本,方便对比 GitHub 最新版 - ✅ 可以固定版本号,避免意外更新影响生产环境 - ✅ 支持版本回滚,遇到问题可快速恢复到旧版本 - ✅ 便于团队协作时统一环境版本 > **注意**:使用 `latest` 标签时,重启容器不会自动拉取新镜像,需要手动执行 `docker pull` 才能获取更新。使用版本号标签可以明确控制何时更新。 ### 访问协议与反向代理 DecoTV 支持直接通过 Docker 端口映射在局域网 HTTP 地址访问,例如 `http://192.168.1.10:3000`。这种场景下登录 Cookie 不会设置 `Secure` 属性,浏览器可以正常保存认证状态。 公网部署强烈建议使用 HTTPS。若前面有 Nginx/OpenResty 等反向代理,请确保把外部访问协议传给 DecoTV: ```nginx proxy_set_header Host $http_host; proxy_set_header X-Forwarded-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; ``` DecoTV 会根据请求 URL、`X-Forwarded-Proto`、`X-Forwarded-Host` 或标准 `Forwarded` 头判断实际协议和外部访问域名。使用 `https://域名:非443端口` 反代时,务必传递带端口的 `$http_host`,否则浏览器后续请求 m3u8 代理地址时会丢端口。HTTPS 访问会设置 `Secure` Cookie;HTTP 局域网直连和 HTTP 反代不会设置 `Secure` Cookie。不要仅依赖容器内的 `NODE_ENV=production` 判断访问协议。 ### Kvrocks 存储(推荐) ``` … ``` ### Redis 存储(有一定的丢数据风险) ``` … ``` ### Upstash 存储 1. 在 [upstash](https://upstash.com/) 注册账号并新建一个 Redis 实例,名称任意。 2. 复制新数据库的 **HTTPS ENDPOINT 和 TOKEN** 3. 使用如下 docker compose ```yml services: decotv-core: image: ghcr.io/decohererk/decotv:latest # 或使用 :v1.0.0 固定版本 container_name: decotv-core restart: on-failure ports: - '3000:3000' environment: - USERNAME=admin - PASSWORD=admin_password - NEXT_PUBLIC_STORAGE_TYPE=upstash - UPSTASH_URL=上面 https 开头的 HTTPS ENDPOINT - UPSTASH_TOKEN=上面的 TOKEN ``` ### 本地无数据库模式(最简部署) 如果你只是想**快速体验**或**单机使用**,不需要多端同步功能,可以使用本地存储模式。此模式下数据保存在浏览器的 localStorage 中,无需任何外部数据库。 #### Docker Run(最简单) ```bash docker run -d \ --name decotv \ -p 3000:3000 \ -v decotv-downloads:/app/.cache/ffmpeg-downloads \ -e PASSWORD=你的管理密码 \ ghcr.io/decohererk/decotv:latest ``` #### Docker Compose ```yml services: decotv: image: ghcr.io/decohererk/decotv:latest container_name: decotv restart: unless-stopped ports: - '3000:3000' environment: - PASSWORD=你的管理密码 volumes: - decotv-downloads:/app/.cache/ffmpeg-downloads volumes: decotv-downloads: ``` #### 重要说明 | 项目 | 说明 | | ----------- | --------------------------------------------------------------------- | | ✅ 必需配置 | `PASSWORD` - 管理员登录密码 | | ❌ 不需要 | `USERNAME`、`NEXT_PUBLIC_STORAGE_TYPE`、任何数据库连接变量 | | ❌ 不需要 | `AUTH_SECRET`、`AUTH_URL`(这些是其他认证框架的配置,DecoTV 不使用) | | ⚠️ 数据存储 | 所有配置保存在浏览器 localStorage,清除浏览器数据会丢失配置 | | ⚠️ 多端同步 | 不支持,每个浏览器独立存储 | | ⬇️ 下载缓存 | 建议挂载 `/app/.cache/ffmpeg-downloads`,避免容器重建时丢失已转存文件 | ### 免登录家庭模式 默认仍为 `NEXT_PUBLIC_AUTH_MODE=password`,需要登录后使用。家庭局域网、NAS、电视盒子、OpenWrt、飞牛 OS 等完全可信内网场景,可以显式开启免登录: ```bash docker run -d \ --name decotv \ -p 3000:3000 \ -e NEXT_PUBLIC_AUTH_MODE=public \ -v decotv-downloads:/app/.cache/ffmpeg-downloads \ ghcr.io/decohererk/decotv:latest ``` Docker Compose 示例: ```yml services: decotv: image: ghcr.io/decohererk/decotv:latest container_name: decotv restart: unless-stopped ports: - '3000:3000' environment: - NEXT_PUBLIC_AUTH_MODE=public volumes: - decotv-downloads:/app/.cache/ffmpeg-downloads volumes: decotv-downloads: ``` > ⚠️ `NEXT_PUBLIC_AUTH_MODE=public` 仅建议局域网、NAS、家庭内网、VPN、自用环境开启,不建议公网暴露。`/admin` 和 `/api/admin/*` 默认仍需要登录保护;只有同时设置 `PUBLIC_ALLOW_ADMIN=true` 才会免登录开放后台和后台 API,该开关风险极高,仅适合完全可信内网。 #### 常见问题 **Q: 登录成功后操作仍提示 401 Unauthorized?** 这可能是以下原因: 1. **浏览器 Cookie 问题**:尝试清除浏览器 Cookie 后重新登录 2. **残留数据库配置**:确保没有设置 `REDIS_URL`、`KV_REST_API_URL` 等数据库变量 3. **反向代理协议头缺失**:如果你通过 Nginx/OpenResty 等反向代理使用 HTTPS,确保正确配置 `X-Forwarded-Proto $scheme`,否则应用可能无法按外部访问协议设置 Cookie 4. **镜像未更新**:`latest` 镜像重启不会自动拉取新版本,升级前需要先执行 `docker pull ghcr.io/decohererk/decotv:latest` **Q: 如何从本地模式迁移到数据库模式?** 由于本地模式数据存储在浏览器中,无法直接迁移。建议: 1. 手动导出配置(复制配置文件内容) 2. 部署新的数据库模式实例 3. 在新实例中导入配置 ## ⚙️ 配置文件 完成部署后为空壳应用,无播放源,需要站长在管理后台的配置文件设置中填写配置文件(后续会支持订阅) 配置文件示例如下: ```json { "cache_time": 7200, "api_site": { "dyttzy": { "api": "http://xxx.com/api.php/provide/vod", "name": "示例资源", "detail": "http://xxx.com" } // ...更多站点 }, "custom_category": [ { "name": "华语", "type": "movie", "query": "华语" } ] } ``` - `cache_time`:接口缓存时间(秒)。 - `api_site`:你可以增删或替换任何资源站,字段说明: - `key`:唯一标识,保持小写字母/数字。 - `api`:资源站提供的 `vod` JSON API 根地址。 - `name`:在人机界面中展示的名称。 - `detail`:(可选)部分无法通过 API 获取剧集详情的站点,需要提供网页详情根 URL,用于爬取。 - `custom_category`:自定义分类配置,用于在导航中添加个性化的影视分类。以 type + query 作为唯一标识。支持以下字段: - `name`:分类显示名称(可选,如不提供则使用 query 作为显示名) - `type`:分类类型,支持 `movie`(电影)或 `tv`(电视剧) - `query`:搜索关键词,用于在豆瓣 API 中搜索相关内容 custom_category 支持的自定义分类已知如下: - movie:热门、最新、经典、豆瓣高分、冷门佳片、华语、欧美、韩国、日本、动作、喜剧、爱情、科幻、悬疑、恐怖、治愈 - tv:热门、美剧、英剧、韩剧、日剧、国产剧、港剧、日本动画、综艺、纪录片 也可输入如 "哈利波特" 效果等同于豆瓣搜索 DecoTV 支持标准的苹果 CMS V10 API 格式。 ## 自动更新 可借助 [watchtower](https://github.com/containrrr/watchtower) 自动更新镜像容器 dockge/komodo 等 docker compose UI 也有自动更新功能 ## 环境变量 ### 基础配置 | 变量 | 说明 | 可选值 | 默认值 | | --------------------- | ------------------------- | ------------------------ | -------------------------------------------------------------------------------------------------------------------------- | | USERNAME | 管理员账号 | 任意字符串 | 无默认,数据库模式**必填**,本地模式可省略 | | PASSWORD | 管理员密码 | 任意字符串 | 无默认,**必填** | | NEXT_PUBLIC_AUTH_MODE | 访问模式 | password、public | password | | PUBLIC_ALLOW_ADMIN | public 模式下是否开放后台 | true/false | false | | SITE_BASE | 站点 URL | 形如 https://example.com | 空 | | NEXT_PUBLIC_SITE_NAME | 站点名称 | 任意字符串 | DecoTV | | ANNOUNCEMENT | 站点公告 | 任意字符串 | 本网站仅提供影视信息搜索服务,所有内容均来自第三方网站。本站不存储任何视频资源,不对任何内容的准确性、合法性、完整性负责。 | ### 存储配置 | 变量 | 说明 | 可选值 | 默认值 | 备注 | | ------------------------ | ----------------------- | ------------------------------------- | ------------ | ---------------------------------- | | NEXT_PUBLIC_STORAGE_TYPE | 存储类型 | localstorage、redis、kvrocks、upstash | localstorage | 不填则默认本地模式,数据存浏览器中 | | KVROCKS_URL | Kvrocks 数据库连接地址 | redis://host:port | 空 | 当 STORAGE_TYPE=kvrocks 时必填 | | REDIS_URL | Redis 数据库连接地址 | redis://host:port | 空 | 当 STORAGE_TYPE=redis 时必填 | | UPSTASH_URL | Upstash Redis REST URL | https://xxx.upstash.io | 空 | 当 STORAGE_TYPE=upstash 时必填 | | UPSTASH_TOKEN | Upstash Redis REST 令牌 | AUxxxx... | 空 | 当 STORAGE_TYPE=upstash 时必填 | > **注意**:Upstash 使用 REST API 连接,需要填写 `UPSTASH_URL`(HTTPS ENDPOINT)和 `UPSTASH_TOKEN`,不是传统的 Redis 连接字符串。 ### 用户注册配置 注册需要先配置 `redis`、`upstash` 或 `kvrocks` 存储。部署后由站长在 `/admin` -> `用户配置` -> `公开注册` 中直接控制开关和新用户默认用户组,无需为日常启停重新部署。 | 变量 | 说明 | 可选值 | 默认值 | 备注 | | ------------------------------- | ---------------------------- | ---------- | ------ | -------------------------------- | | NEXT_PUBLIC_ENABLE_R

GitHub Issues· 0 open

View all on GitHub

No open issues yet, or sync has not completed.

Highlights

  • •多源聚合搜索:一次搜索立刻返回全源结果。
  • •丰富详情页:支持剧集列表、演员、年份、简介等完整信息展示。
  • •▶️ 流畅在线播放:集成 HLS.js & ArtPlayer。
  • •多音轨切换:当视频存在 2 条及以上音轨时,播放器控制栏会显示“音轨”按钮,可在中文配音 / English 等音轨间切换;单音轨会自动隐藏按钮,界面保持简洁。
  • •️ 网页投屏(Google Cast):支持在网页端直接发起投屏,并提供 iOS 设备兼容提示。
  • •❤️ 收藏 + 继续观看:支持 Kvrocks/Redis/Upstash 存储,多端同步进度。
  • •用户注册系统:支持用户自助注册(可选),带图形验证码防机器人。
  • •PWA:离线缓存、安装到桌面/主屏,移动端原生体验。
  • •响应式布局:桌面侧边栏 + 移动底部导航,自适应各种屏幕尺寸。
  • •弹幕功能:集成弹弹play开放平台,Vercel 部署默认可通过公共中继加载官方弹幕,并支持 TMDB 精确匹配、手动匹配与第三方自定义节点。

> Tags

TypeScript

No comments yet. Be the first to share.

> Details

PublishedAug 1, 2026
UpdatedSep 17, 2026
Category编程语言
PricingOpen source

> Related tools

T
TypeScript
JavaScript 的超集,为前端与全栈提供静态类型
P
Python
通用编程语言,广泛用于 Web、数据与 AI
G
Go
Google 推出的简洁高效系统语言