这个项目能做什么

M3U 播放列表编辑器是一个自托管的 IPTV 播放列表管理器,基于 Vue 3、Express 和 PostgreSQL(Node.js 22+,PostgreSQL 13+,Docker 和 CI 中的 PostgreSQL 16)构建,并根据 MIT 许可证发布。它通过响应式 Web 界面导入、编辑、组织、导出和共享 M3U 和 Xtream 播放列表,具有多用户隔离和生产级 Docker 堆栈。 核心功能:Xtream Codes 导入用于直播、VOD 和系列;本地或远程 M3U 导入和转义的 M3U 导出;XMLTV 指南源,具有源范围的频道匹配和时区感知的指南视图;类别和频道排序、批量操作、徽标上传、搜索和元数据编辑;一个三窗格的频道编辑器(流类型侧栏、类别列表、频道表格、每个频道的编辑面板);一个多天的 EPG 编辑器网格,具有基于 tvg-id 的自动匹配;拖放排序,其顺序会立即持久化;土耳其语和英语界面、浅色/深色/系统主题、键盘导航和移动布局。 账户和安全:短寿命的访问令牌,具有旋转的 HttpOnly 刷新会话。注册可以通过 ALLOW_REGISTRATION=false 关闭,但第一个用户仍然可以在用户表为空时注册,因此新安装不会锁死自己。npm 脚本可以为已注册的电子邮件授予或撤销管理员权限,并重置用户的密码(撤销所有活动会话)。JWT_SECRET 和 CREDENTIAL_ENCRYPTION_KEY 必须是两个独立生成的、至少 32 个字符的值;生产启动会拒绝预设的占位符、短或低熵的值,以及重复使用一个值用于两者。 部署:Compose 堆栈仅提供纯 HTTP——它没有 TLS 监听器、证书或 HTTP 到 HTTPS 的重定向——因此 TLS 必须在前面终止(Caddy、Traefik、nginx 或云负载均衡器),同时将发布的端口保持私密或绑定到回环;刷新 cookie 在生产中被标记为安全。API 容器在启动前应用待处理的迁移,PostgreSQL 不会暴露给主机,上传的徽标和数据库文件使用命名卷,API 以非 root 用户运行,具有只读的根文件系统,前端由 nginx 提供服务,并带有安全和缓存头。默认情况下,私有网络远程 URL 被阻止,作为 SSRF 保护,而 ALLOW_PRIVATE_NETWORK_URLS 是用于信任本地服务的文档化选择加入。Xtream 导入默认值(字节上限、类别和类型并发、Node 堆大小)是为大约 150,000 个直播/VOD/系列条目的播放列表而设定的。 Xtream Codes 输出:可以通过 POST /api/playlists/:id/xtream-output 暴露一个播放列表,返回一个服务器地址以及一个随机的用户名和密码;密码使用 AES-256-GCM 加密存储,始终以明文显示给其所有者,可再生,并可移除以关闭播放器访问。支持的根路径是 /player_api.php、/xmltv.php、/get.php 和 /m3u.php。一个更短的 /m3u.php?id=...&secret=... 地址带有自己的凭证对,因此可以在不暴露 Xtream 用户名和密码的情况下分发,并在输出被重新生成时旋转。服务器永远不是流地址:get.php 发布提供商自己的频道 URL,而 player_api.php 填充 direct_source,因此播放永远不会触及应用程序,而早期的代理模式已经被移除,包括其列。README 警告,这些发布的 URL 可能嵌入上游提供商的凭证,因此共享输出凭证实际上是共享提供商账户;使用尊重 direct_source 的客户端。 徽标库:频道面板有一个“查找徽标”按钮,它搜索来自 tv-logo/tv-logos 的 10,700+ 个徽标的内存索引,涵盖 48 个国家和 16 个其他组。索引每天从 GitHub 的树端点拉取一次并缓存,图像由 jsDelivr 提供服务,匹配会去除质量和国家标签,并折叠土耳其字符(TRT 1 FHD 找到 trt-1-tr.png)。助手可以调用相同的功能,并将徽标应用到没有徽标的频道。 AI 助手:一个可选的聊天启动器,在每个经过身份验证的页面上运行,通过 175 个服务器端工具操作应用程序,涵盖播放列表、类别、频道、EPG、导入和同步、导出和共享、附件和输出文件、计划任务,以及账户/系统信息。它适用于任何 OpenAI 兼容的提供商(基础 URL、加密的 API 密钥、模型列表获取),通过服务器发送事件流式传输答案,并具有一个回退到普通端点的机制,支持在执行破坏性操作之前的批准门,接受文件附件,并将语音指令转换为可执行的服务器端任务(最小间隔 15 分钟),其运行会被记录、在执行前备份,并可以通过一键操作恢复。 网络搜索在没有用户配置的情况下提供:一个内部的 SearXNG 实例(仅可作为 searxng:8080 访问,未公开暴露)支持 web_search 和 open_web_page,在捆绑的设置中启用了 JSON 输出;当 SEARXNG_URL 为空时,这两个工具都不会注册。 附件:.m3u、.m3u8、.txt、.xml、.xmltv、.json 和 .csv,每个文件最多 20 MB,每个账户最多 200 MB,根据内容而不是扩展名进行检测,存储在磁盘上,并由助手进行分页或搜索,而不是将整个文件传递给模型。超过 12,000 个字符的消息会自动转换为附件。 死频道修复:repair_dead_channels 通过对 Xtream 目录进行容忍的名称缩减匹配来匹配损坏的频道,并仅重写流 URL,在写入前测试每个候选,排除从未检查过的频道,并支持干运行;与计划任务配对,它可以无人值守地运行。 仓库:https://github.com/fyildirim-debug/M3uEditor