[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-73490":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":23,"hasPages":23,"topics":25,"createdAt":10,"pushedAt":10,"updatedAt":26,"readmeContent":27,"aiSummary":28,"trendingCount":16,"starSnapshotCount":16,"syncStatus":29,"lastSyncTime":30,"discoverSource":31},73490,"LunaTV","MoonTechLab\u002FLunaTV","MoonTechLab","本项目采用 CC BY-NC-SA 协议，禁止任何商业化行为，任何衍生项目必须保留本项目地址并以相同协议开源","",null,"TypeScript",8815,8609,37,1,0,40,80,260,120,41,"Other",false,"main",[],"2026-06-12 02:03:14","# MoonTV\n\n\u003Cdiv align=\"center\">\n  \u003Cimg src=\"public\u002Flogo.png\" alt=\"MoonTV Logo\" width=\"120\">\n\u003C\u002Fdiv>\n\n> 🎬 **MoonTV** 是一个开箱即用的、跨平台的影视聚合播放器。它基于 **Next.js 14** + **Tailwind&nbsp;CSS** + **TypeScript** 构建，支持多资源搜索、在线播放、收藏同步、播放记录、云端存储，让你可以随时随地畅享海量免费影视内容。\n\n\u003Cdiv align=\"center\">\n\n![Next.js](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FNext.js-14-000?logo=nextdotjs)\n![TailwindCSS](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FTailwindCSS-3-38bdf8?logo=tailwindcss)\n![TypeScript](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FTypeScript-4.x-3178c6?logo=typescript)\n![License](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-MIT-green)\n![Docker Ready](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FDocker-ready-blue?logo=docker)\n\n\u003C\u002Fdiv>\n\n---\n\n## ✨ 功能特性\n\n- 🔍 **多源聚合搜索**：一次搜索立刻返回全源结果。\n- 📄 **丰富详情页**：支持剧集列表、演员、年份、简介等完整信息展示。\n- ▶️ **流畅在线播放**：集成 HLS.js & ArtPlayer。\n- ❤️ **收藏 + 继续观看**：支持 Kvrocks\u002FRedis\u002FUpstash 存储，多端同步进度。\n- 📱 **PWA**：离线缓存、安装到桌面\u002F主屏，移动端原生体验。\n- 🌗 **响应式布局**：桌面侧边栏 + 移动底部导航，自适应各种屏幕尺寸。\n- 👿 **智能去广告**：自动跳过视频中的切片广告（实验性）。\n\n### 注意：部署后项目为空壳项目，无内置播放源和直播源，需要自行收集\n\n\u003Cdetails>\n  \u003Csummary>点击查看项目截图\u003C\u002Fsummary>\n  \u003Cimg src=\"public\u002Fscreenshot1.png\" alt=\"项目截图\" style=\"max-width:600px\">\n  \u003Cimg src=\"public\u002Fscreenshot2.png\" alt=\"项目截图\" style=\"max-width:600px\">\n  \u003Cimg src=\"public\u002Fscreenshot3.png\" alt=\"项目截图\" style=\"max-width:600px\">\n\u003C\u002Fdetails>\n\n### 请不要在 B站、小红书、微信公众号、抖音、今日头条或其他中国大陆社交平台发布视频或文章宣传本项目，不授权任何“科技周刊\u002F月刊”类项目或站点收录本项目。\n\n## 🗺 目录\n\n- [技术栈](#技术栈)\n- [部署](#部署)\n  - [一键部署](#zeabur-一键部署)\n  - [Docker 部署](#Kvrocks-存储推荐)\n- [配置文件](#配置文件)\n- [订阅](#订阅)\n- [自动更新](#自动更新)\n- [环境变量](#环境变量)\n- [客户端](#客户端)\n- [AndroidTV 使用](#AndroidTV-使用)\n- [Roadmap](#roadmap)\n- [安全与隐私提醒](#安全与隐私提醒)\n- [License](#license)\n- [致谢](#致谢)\n\n## 技术栈\n\n| 分类      | 主要依赖                                                                                              |\n| --------- | ----------------------------------------------------------------------------------------------------- |\n| 前端框架  | [Next.js 14](https:\u002F\u002Fnextjs.org\u002F) · App Router                                                        |\n| UI & 样式 | [Tailwind&nbsp;CSS 3](https:\u002F\u002Ftailwindcss.com\u002F)                                                       |\n| 语言      | TypeScript 4                                                                                          |\n| 播放器    | [ArtPlayer](https:\u002F\u002Fgithub.com\u002Fzhw2590582\u002FArtPlayer) · [HLS.js](https:\u002F\u002Fgithub.com\u002Fvideo-dev\u002Fhls.js\u002F) |\n| 代码质量  | ESLint · Prettier · Jest                                                                              |\n| 部署      | Docker                                                                    |\n\n## 部署\n\n本项目**仅支持 Docker 或其他基于 Docker 的平台** 部署。\n\n### zeabur 一键部署\n\n点击下方按钮即可一键部署，自动配置 LunaTV + Kvrocks 数据库：\n\n[![Deploy on Zeabur](https:\u002F\u002Fzeabur.com\u002Fbutton.svg)](https:\u002F\u002Fzeabur.com\u002Ftemplates\u002F8MPTQU\u002Fdeploy)\n\n**优势**：\n- ✅ 无需配置，一键启动（自动部署完整环境）\n- ✅ 自动 HTTPS 和全球 CDN 加速\n- ✅ 持久化存储，数据永不丢失\n- ✅ 免费额度足够个人使用\n\n**⚠️ 重要提示**：部署完成后，需要在 Zeabur 中为 LunaTV 服务设置访问域名（Domain）才能在浏览器中访问。详见下方 [设置访问域名](#5-设置访问域名必须) 步骤。\n\n### Kvrocks 存储（推荐）\n\n```yml\nservices:\n  moontv-core:\n    image: ghcr.io\u002Fmoontechlab\u002Flunatv:latest\n    container_name: moontv-core\n    restart: on-failure\n    ports:\n      - '3000:3000'\n    environment:\n      - USERNAME=admin\n      - PASSWORD=admin_password\n      - NEXT_PUBLIC_STORAGE_TYPE=kvrocks\n      - KVROCKS_URL=redis:\u002F\u002Fmoontv-kvrocks:6666\n    networks:\n      - moontv-network\n    depends_on:\n      - moontv-kvrocks\n  moontv-kvrocks:\n    image: apache\u002Fkvrocks\n    container_name: moontv-kvrocks\n    restart: unless-stopped\n    volumes:\n      - kvrocks-data:\u002Fvar\u002Flib\u002Fkvrocks\n    networks:\n      - moontv-network\nnetworks:\n  moontv-network:\n    driver: bridge\nvolumes:\n  kvrocks-data:\n```\n\n### Redis 存储（有一定的丢数据风险）\n\n```yml\nservices:\n  moontv-core:\n    image: ghcr.io\u002Fmoontechlab\u002Flunatv:latest\n    container_name: moontv-core\n    restart: on-failure\n    ports:\n      - '3000:3000'\n    environment:\n      - USERNAME=admin\n      - PASSWORD=admin_password\n      - NEXT_PUBLIC_STORAGE_TYPE=redis\n      - REDIS_URL=redis:\u002F\u002Fmoontv-redis:6379\n    networks:\n      - moontv-network\n    depends_on:\n      - moontv-redis\n  moontv-redis:\n    image: redis:alpine\n    container_name: moontv-redis\n    restart: unless-stopped\n    networks:\n      - moontv-network\n    # 请开启持久化，否则升级\u002F重启后数据丢失\n    volumes:\n      - .\u002Fdata:\u002Fdata\nnetworks:\n  moontv-network:\n    driver: bridge\n```\n\n### Upstash 存储\n\n1. 在 [upstash](https:\u002F\u002Fupstash.com\u002F) 注册账号并新建一个 Redis 实例，名称任意。\n2. 复制新数据库的 **HTTPS ENDPOINT 和 TOKEN**\n3. 使用如下 docker compose\n```yml\nservices:\n  moontv-core:\n    image: ghcr.io\u002Fmoontechlab\u002Flunatv:latest\n    container_name: moontv-core\n    restart: on-failure\n    ports:\n      - '3000:3000'\n    environment:\n      - USERNAME=admin\n      - PASSWORD=admin_password\n      - NEXT_PUBLIC_STORAGE_TYPE=upstash\n      - UPSTASH_URL=上面 https 开头的 HTTPS ENDPOINT\n      - UPSTASH_TOKEN=上面的 TOKEN\n```\n\n### ☁️ Zeabur 部署（推荐）\n\nThanks to @SzeMeng76\n\nZeabur 是一站式云端部署平台，使用预构建的 Docker 镜像可以快速部署，无需等待构建。\n\n**部署步骤：**\n\n1. **添加 KVRocks 服务**（先添加数据库）\n   - 点击 \"Add Service\" > \"Docker Images\"\n   - 输入镜像名称：`apache\u002Fkvrocks`\n   - 配置端口：`6666` (TCP)\n   - **记住服务名称**（通常是 `apachekvrocks`）\n   - **配置持久化卷（重要）**：\n     * 在服务设置中找到 \"Volumes\" 部分\n     * 点击 \"Add Volume\" 添加新卷\n     * Volume ID: `kvrocks-data`（可自定义，仅支持字母、数字、连字符）\n     * Path: `\u002Fvar\u002Flib\u002Fkvrocks\u002Fdb`\n     * 保存配置\n\n   > 💡 **重要提示**：持久化卷路径必须设置为 `\u002Fvar\u002Flib\u002Fkvrocks\u002Fdb`（KVRocks 数据目录），这样配置文件保留在容器内，数据库文件持久化，重启后数据不会丢失！\n\n2. **添加 LunaTV 服务**\n   - 点击 \"Add Service\" > \"Docker Images\"\n   - 输入镜像名称：`ghcr.io\u002Fmoontechlab\u002Flunatv:latest`\n   - 配置端口：`3000` (HTTP)\n\n3. **配置环境变量**\n\n   在 LunaTV 服务的环境变量中添加：\n\n   ```env\n   # 必填：管理员账号\n   USERNAME=admin\n   PASSWORD=your_secure_password\n\n   # 必填：存储配置\n   NEXT_PUBLIC_STORAGE_TYPE=kvrocks\n   KVROCKS_URL=redis:\u002F\u002Fapachekvrocks:6666\n\n   # 可选：站点配置\n   SITE_BASE=https:\u002F\u002Fyour-domain.zeabur.app\n   NEXT_PUBLIC_SITE_NAME=LunaTV Enhanced\n   ANNOUNCEMENT=欢迎使用 LunaTV Enhanced Edition\n\n   # 可选：豆瓣代理配置（推荐）\n   NEXT_PUBLIC_DOUBAN_PROXY_TYPE=cmliussss-cdn-tencent\n   NEXT_PUBLIC_DOUBAN_IMAGE_PROXY_TYPE=cmliussss-cdn-tencent\n   ```\n\n   **注意**：\n   - 使用服务名称作为主机名：`redis:\u002F\u002Fapachekvrocks:6666`\n   - 如果服务名称不同，请替换为实际名称\n   - 两个服务必须在同一个 Project 中\n\n4. **部署完成**\n   - Zeabur 会自动拉取镜像并启动服务\n   - 等待服务就绪后，需要手动设置访问域名（见下一步）\n\n#### 5. 设置访问域名（必须）\n\n   - 在 LunaTV 服务页面，点击 \"Networking\" 或 \"网络\" 标签\n   - 点击 \"Generate Domain\" 生成 Zeabur 提供的免费域名（如 `xxx.zeabur.app`）\n   - 或者绑定自定义域名：\n     * 点击 \"Add Domain\" 添加你的域名\n     * 按照提示配置 DNS CNAME 记录指向 Zeabur 提供的目标地址\n   - 设置完域名后即可通过域名访问 LunaTV\n\n6. **绑定自定义域名（可选）**\n   - 在服务设置中点击 \"Domains\"\n   - 添加你的自定义域名\n   - 配置 DNS CNAME 记录指向 Zeabur 提供的域名\n\n#### 🔄 更新 Docker 镜像\n\n当 Docker 镜像有新版本发布时，Zeabur 不会自动更新。需要手动触发更新。\n\n**更新步骤：**\n\n1. **进入服务页面**\n   - 点击需要更新的服务（LunaTV 或 KVRocks）\n\n2. **重启服务**\n   - 点击 **\"服务状态\"** 页面，再点击 **\"重启当前版本\"** 按钮\n   - Zeabur 会自动拉取最新的 `latest` 镜像并重新部署\n\n> 💡 **提示**：\n> - 使用 `latest` 标签时，Restart 会自动拉取最新镜像\n> - 生产环境推荐使用固定版本标签（如 `v5.5.6`）避免意外更新\n\n## 配置文件\n\n完成部署后为空壳应用，无播放源，需要站长在管理后台的配置文件设置中填写配置文件（后续会支持订阅）\n\n配置文件示例如下：\n\n```json\n{\n  \"cache_time\": 7200,\n  \"api_site\": {\n    \"dyttzy\": {\n      \"api\": \"http:\u002F\u002Fxxx.com\u002Fapi.php\u002Fprovide\u002Fvod\",\n      \"name\": \"示例资源\",\n      \"detail\": \"http:\u002F\u002Fxxx.com\"\n    }\n    \u002F\u002F ...更多站点\n  },\n  \"custom_category\": [\n    {\n      \"name\": \"华语\",\n      \"type\": \"movie\",\n      \"query\": \"华语\"\n    }\n  ]\n}\n```\n\n- `cache_time`：接口缓存时间（秒）。\n- `api_site`：你可以增删或替换任何资源站，字段说明：\n  - `key`：唯一标识，保持小写字母\u002F数字。\n  - `api`：资源站提供的 `vod` JSON API 根地址。\n  - `name`：在人机界面中展示的名称。\n  - `detail`：（可选）部分无法通过 API 获取剧集详情的站点，需要提供网页详情根 URL，用于爬取。\n- `custom_category`：自定义分类配置，用于在导航中添加个性化的影视分类。以 type + query 作为唯一标识。支持以下字段：\n  - `name`：分类显示名称（可选，如不提供则使用 query 作为显示名）\n  - `type`：分类类型，支持 `movie`（电影）或 `tv`（电视剧）\n  - `query`：搜索关键词，用于在豆瓣 API 中搜索相关内容\n\ncustom_category 支持的自定义分类已知如下：\n\n- movie：热门、最新、经典、豆瓣高分、冷门佳片、华语、欧美、韩国、日本、动作、喜剧、爱情、科幻、悬疑、恐怖、治愈\n- tv：热门、美剧、英剧、韩剧、日剧、国产剧、港剧、日本动画、综艺、纪录片\n\n也可输入如 \"哈利波特\" 效果等同于豆瓣搜索\n\nMoonTV 支持标准的苹果 CMS V10 API 格式。\n\n## 订阅\n\n将完整的配置文件 base58 编码后提供 http 服务即为订阅链接，可在 MoonTV 后台\u002FHelios 中使用。\n\n## 自动更新\n\n可借助 [watchtower](https:\u002F\u002Fgithub.com\u002Fcontainrrr\u002Fwatchtower) 自动更新镜像容器\n\ndockge\u002Fkomodo 等 docker compose UI 也有自动更新功能\n\n## 环境变量\n\n| 变量                                | 说明                                         | 可选值                           | 默认值                                                                                                                     |\n| ----------------------------------- | -------------------------------------------- | -------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |\n| USERNAME                            | 站长账号           | 任意字符串                       | 无默认，必填字段                                                                                                                     |\n| PASSWORD                            | 站长密码           | 任意字符串                       | 无默认，必填字段                                                                                                                     |\n| SITE_BASE                           | 站点 url              |       形如 https:\u002F\u002Fexample.com                  | 空                                                                                                                     |\n| NEXT_PUBLIC_SITE_NAME               | 站点名称                                     | 任意字符串                       | MoonTV                                                                                                                     |\n| ANNOUNCEMENT                        | 站点公告                                     | 任意字符串                       | 本网站仅提供影视信息搜索服务，所有内容均来自第三方网站。本站不存储任何视频资源，不对任何内容的准确性、合法性、完整性负责。 |\n| NEXT_PUBLIC_STORAGE_TYPE            | 播放记录\u002F收藏的存储方式                      | redis、kvrocks、upstash | 无默认，必填字段                                                                                                               |\n| KVROCKS_URL                           | kvrocks 连接 url                               | 连接 url                         | 空                                                                                                                         |\n| REDIS_URL                           | redis 连接 url                               | 连接 url                         | 空                                                                                                                         |\n| UPSTASH_URL                         | upstash redis 连接 url                       | 连接 url                         | 空                                                                                                                         |\n| UPSTASH_TOKEN                       | upstash redis 连接 token                     | 连接 token                       | 空                                                                                                                         |\n| NEXT_PUBLIC_SEARCH_MAX_PAGE         | 搜索接口可拉取的最大页数                     | 1-50                             | 5                                                                                                                          |\n| NEXT_PUBLIC_DOUBAN_PROXY_TYPE       | 豆瓣数据源请求方式                           | 见下方                           | direct                                                                                                                     |\n| NEXT_PUBLIC_DOUBAN_PROXY            | 自定义豆瓣数据代理 URL                       | url prefix                       | (空)                                                                                                                       |\n| NEXT_PUBLIC_DOUBAN_IMAGE_PROXY_TYPE | 豆瓣图片代理类型                             | 见下方                           | direct                                                                                                                     |\n| NEXT_PUBLIC_DOUBAN_IMAGE_PROXY      | 自定义豆瓣图片代理 URL                       | url prefix                       | (空)                                                                                                                       |\n| NEXT_PUBLIC_DISABLE_YELLOW_FILTER   | 关闭色情内容过滤                             | true\u002Ffalse                       | false                                                                                                                      |\n| NEXT_PUBLIC_FLUID_SEARCH | 是否开启搜索接口流式输出 | true\u002F false | true |\n\nNEXT_PUBLIC_DOUBAN_PROXY_TYPE 选项解释：\n\n- direct: 由服务器直接请求豆瓣源站\n- cors-proxy-zwei: 浏览器向 cors proxy 请求豆瓣数据，该 cors proxy 由 [Zwei](https:\u002F\u002Fgithub.com\u002Fbestzwei) 搭建\n- cmliussss-cdn-tencent: 浏览器向豆瓣 CDN 请求数据，该 CDN 由 [CMLiussss](https:\u002F\u002Fgithub.com\u002Fcmliu) 搭建，并由腾讯云 cdn 提供加速\n- cmliussss-cdn-ali: 浏览器向豆瓣 CDN 请求数据，该 CDN 由 [CMLiussss](https:\u002F\u002Fgithub.com\u002Fcmliu) 搭建，并由阿里云 cdn 提供加速\n- custom: 用户自定义 proxy，由 NEXT_PUBLIC_DOUBAN_PROXY 定义\n\nNEXT_PUBLIC_DOUBAN_IMAGE_PROXY_TYPE 选项解释：\n\n- direct：由浏览器直接请求豆瓣分配的默认图片域名\n- server：由服务器代理请求豆瓣分配的默认图片域名\n- img3：由浏览器请求豆瓣官方的精品 cdn（阿里云）\n- cmliussss-cdn-tencent：由浏览器请求豆瓣 CDN，该 CDN 由 [CMLiussss](https:\u002F\u002Fgithub.com\u002Fcmliu) 搭建，并由腾讯云 cdn 提供加速\n- cmliussss-cdn-ali：由浏览器请求豆瓣 CDN，该 CDN 由 [CMLiussss](https:\u002F\u002Fgithub.com\u002Fcmliu) 搭建，并由阿里云 cdn 提供加速\n- custom: 用户自定义 proxy，由 NEXT_PUBLIC_DOUBAN_IMAGE_PROXY 定义\n\n## 客户端\n\nv100.0.0 以上版本可配合 [Selene](https:\u002F\u002Fgithub.com\u002FMoonTechLab\u002FSelene) 使用，移动端体验更加友好，数据完全同步\n\n## AndroidTV 使用\n\n目前该项目可以配合 [OrionTV](https:\u002F\u002Fgithub.com\u002Fzimplexing\u002FOrionTV) 在 Android TV 上使用，可以直接作为 OrionTV 后端\n\n已实现播放记录和网页端同步\n\n## 安全与隐私提醒\n\n### 请设置密码保护并关闭公网注册\n\n为了您的安全和避免潜在的法律风险，我们要求在部署时**强烈建议关闭公网注册**：\n\n### 部署要求\n\n1. **设置环境变量 `PASSWORD`**：为您的实例设置一个强密码\n2. **仅供个人使用**：请勿将您的实例链接公开分享或传播\n3. **遵守当地法律**：请确保您的使用行为符合当地法律法规\n\n### 重要声明\n\n- 本项目仅供学习和个人使用\n- 请勿将部署的实例用于商业用途或公开服务\n- 如因公开分享导致的任何法律问题，用户需自行承担责任\n- 项目开发者不对用户的使用行为承担任何法律责任\n- 本项目不在中国大陆地区提供服务。如有该项目在向中国大陆地区提供服务，属个人行为。在该地区使用所产生的法律风险及责任，属于用户个人行为，与本项目无关，须自行承担全部责任。特此声明\n\n## License\n\n[MIT](LICENSE) © 2025 MoonTV & Contributors\n\n## 致谢\n\n- [ts-nextjs-tailwind-starter](https:\u002F\u002Fgithub.com\u002Ftheodorusclarence\u002Fts-nextjs-tailwind-starter) — 项目最初基于该脚手架。\n- [LibreTV](https:\u002F\u002Fgithub.com\u002FLibreSpark\u002FLibreTV) — 由此启发，站在巨人的肩膀上。\n- [ArtPlayer](https:\u002F\u002Fgithub.com\u002Fzhw2590582\u002FArtPlayer) — 提供强大的网页视频播放器。\n- [HLS.js](https:\u002F\u002Fgithub.com\u002Fvideo-dev\u002Fhls.js) — 实现 HLS 流媒体在浏览器中的播放支持。\n- [Zwei](https:\u002F\u002Fgithub.com\u002Fbestzwei) — 提供获取豆瓣数据的 cors proxy\n- [CMLiussss](https:\u002F\u002Fgithub.com\u002Fcmliu) — 提供豆瓣 CDN 服务\n- 感谢所有提供免费影视接口的站点。\n\n## Star History\n\n[![Star History Chart](https:\u002F\u002Fapi.star-history.com\u002Fsvg?repos=MoonTechLab\u002FLunaTV&type=Date)](https:\u002F\u002Fwww.star-history.com\u002F#MoonTechLab\u002FLunaTV&Date)\n","MoonTV 是一个开箱即用的跨平台影视聚合播放器，基于 Next.js 14、Tailwind CSS 和 TypeScript 构建。其核心功能包括多源聚合搜索、流畅在线播放、收藏同步和播放记录等功能，并且支持 PWA 技术以提供移动端原生体验。此外，它还具有响应式布局设计，能够自适应各种屏幕尺寸，并具备实验性的智能去广告功能。此项目适合那些希望随时随地享受海量免费影视内容的用户使用，特别适用于个人娱乐和非商业用途。需要注意的是，部署后需自行添加播放源，且不支持任何形式的商业化行为。",2,"2026-06-11 03:45:47","high_star"]