📈 GH Trending Explorer 🎲 Surprise me

← all repos

LibreSpark / LibreTV

git clone https://github.com/LibreSpark/LibreTV.git 🔥 on GitHub Trending today

一分钟搭建影视站,支持Docker等部署方式

—
stars, 24h
+5.4k
stars, 7 days · #16
—
stars, 30 days
20k
★ total · +36% this week
29k
forks · 6 open issues

Star history starts 2026-10-20; the chart appears after the second daily snapshot.

LanguageTypeScript
LicenseAGPL-3.0
Created2025-04-06 (1y ago)
Last pushtoday
Watchers15
OwnerOrganization

Seen on GitHub Trending

  • 2026-10-20 — #10 weekly in typescript · +5,421 ★

GitHub topics

Links

README excerpt
# LibreTV
LibreTV Next.js 迁移版:免费在线视频聚合搜索与观看平台。基于 Next.js 15(App Router)+ TypeScript + Tailwind CSS,播放内核为 ArtPlayer + hls.js,支持亮暗双主题。
> 🏠 **官网**:LibreTV 官网
>
> 🌐 **演示站**:tv.bagiinlink.eu.org(访问密码:`libretv`)
>
> 📖 **完整文档**:文档首页 · 架构 · 部署 · 配置 · 数据源 · 直播 / IPTV · 首页推荐 · 播放器 · 代理与安全 · FAQ
>
## 核心特性
- **聚合搜索**:多采集站服务端并行搜索
- **跨源同名聚合**:同名影片合并为一张卡片,展开即可比较和选择各来源
- **HLS 播放**:ArtPlayer + hls.js,广告分片过滤、自动连播、倍速、快捷键、移动端长按 3 倍速
- **直播 / IPTV**:M3U 订阅解析,`/live` 页面按分组浏览、搜索频道并站内播放(HLS + HTTP-FLV),支持 XMLTV 节目单(EPG)与频道收藏;直播流经专用长连接代理(`/api/live/stream`)转发
- **进度同步**:播放进度与观看历史存于本机 IndexedDB,精确到秒的续播
- **换源测速**:跨源搜索同名资源并测速排序,一键切换保留集数位置
- **源测试与订阅**:一键探活点播源与直播源(支持批量测活);搜索时自动记录各源健康度,连续失败的源按阶梯时长自动停用(30 分钟 → 24 小时 → 长期),可一键恢复;订阅远程源列表(一份 LibreTV-SourceList JSON 可同时下发点播源与直播源,也可直接填 TVBOX 配置地址,自动导入其中可直接使用的接口),可导出分享
- **首页推荐**:豆瓣(电影/剧集分类浏览)、Bangumi 新番放送表或影视榜单(豆瓣周榜 + 百度热播,经 60s API),设置中切换;均服务端直连 + 缓存,Bangumi/榜单免 key 免配置(`60S_API_BASE` 可指向自部署 60s 实例)
- **PWA**:可安装到桌面 / 主屏幕,亮暗双主题无首屏闪烁
## 部署
### Docker(推荐)
 [code] 
### Docker Compose
 [code] 
> 其余可选变量见下方环境变量表;仓库内的 `docker-compose.yml` 含完整注释版本(含 `build: .` 源码构建分支)。
 [code] 
> ⚠️ **生产部署必须通过 HTTPS 访问**(localhost 除外):生产模式下会话 cookie 带 `Secure` 标记,浏览器只在 HTTPS(或 localhost)下保存它。因此用 `http://服务器IP:端口` 访问时,会出现"密码正确却无法登录"的现象——登录请求实际成功,但 cookie 被浏览器丢弃。请通过反向代理(Nginx / Caddy / Traefik)或 Cloudflare 等为站点套上 TLS 后再对外提供服务;本地开发用 `localhost` 不受影响。
镜像发布在 GHCR 与 Docker Hub:`ghcr.io/librespark/libretv` 与 `docker.io/bestzwei/libretv`
(`latest` / `主.次` / 完整版本号三个 tag,`linux/amd64` 与 `linux/arm64` 双架构,
两个 registry 的镜像 digest 一致)。需要固定版本时在 `.env` 中设置
`LIBRETV_IMAGE=ghcr.io/librespark/libretv:2.0.1`。
> 版本号以 `package.json` 为单一来源,部署后可用 `/api/status` 返回的 `version` 字段核对。详见部署文档。
### 手动运行
 [code] 
### 环境变量
| 变量 | 必填 | 说明 |
| --- | --- | --- |
| `PASSWORD` | 是 | 访问密码;未设置时站点会提示管理员配置 |
| `PROXY_SECRET` | 否 | 会话/代理签名密钥;不设置时从 PASSWORD 派生(多实例部署建议显式设置) |
| `DEFAULT_SOURCES` | 否 | 预置采集站(JSON 数组),用户端自动出现且默认勾选,详见配置文档 |
| `REQUEST_TIMEOUT` | 否 | 代理上游请求超时(毫秒),默认 8000 |
| `MAX_RETRIES` | 否 | 代理请求重试次数,默认 1 |
| `SEARCH_MAX_PAGES` | 否 | 每个搜索源最多抓取的页数(1-50,默认 5)。第一页会读取源站 `pagecount`,实际页数 = min(源站总页数,该值);页间并行请求,单页失败只丢该页 |
| `SEARCH_SOURCE_TIMEOUT_MS` | 否 | 单个搜索源的总死线(毫秒,3s-60s,默认 10000):该源所有分页请求须在时限内完成,到点中断并将其标记为「超时」;健康度自动停用也以此为超时判定依据 |
| `USER_AGENT` | 否 | 代理请求使用的 UA(豆瓣封面防盗链等场景),默认 Chrome UA |
| `FALLBACK_CORS_PROXY` | 否 | 豆瓣推荐数据直连被拒时降级使用的 CORS 代理地址 |
| `COOKIE_SECURE` | 否 | 显式覆盖会话 cookie 的 `Secure` 标记(`true` / `false`);默认按请求协议自动推导。反向代理未正确传递 `x-forwarded-proto` 导致 HTTPS 下登录失效时,设为 `true` 可解 |
| `60S_API_BASE` | 否 | 影视榜单推荐源(60s API)实例地址,默认 `https://60s.crystelf.top`;有限流,高频使用可自部署 |
| `DEFAULT_LIVE_SOURCES` | 否 | 预置直播源(M3U 订阅),JSON 数组:`[{"name":"源名","url":"https://.../list.m3u","epg":"https://.../epg.xml.gz"}]`,`epg` 为可选的 XMLTV 节目单地址 |
| `DEFAULT_SUBSCRIPTIONS` | 否 | 预置数据源订阅(LibreTV-SourceList JSON 链接,也接受 TVBOX 配置地址),JSON 数组:`["https://.../sources.json", {"url":"https://.../list.json","name":"名称"}]`。首次访问自动导入点播源与直播源,之后每 24h 静默刷新;用户删除后不再自动加回 |
| `DEFAULT_RECOMMEND_SOURCE` | 否 | 首页推荐数据源的默认值(`d