KitsuneKode/kunai
GitHub: KitsuneKode/kunai
基于 Bun/TypeScript 的终端流媒体侦察工具,通过 Playwright 自动逆向流媒体 API 并提取 .m3u8 播放清单。
Stars: 1 | Forks: 0
# Kunai Beta 🥷
一个面向终端的 Bun CLI 工具,用于查找可播放的流媒体,通过 Playwright 捕获 `.m3u8` URL,并在 `mpv` 中启动播放。
通过统一的 Ink shell 支持电影、剧集和动漫流程。无需 API 密钥。
Kunai 目前处于 beta 阶段:已可正常使用,但在 UI 交互流程、服务提供商支持、字幕和诊断等方面仍在积极进行强化。
Kunai 不在其自己的服务器上托管、存储、上传、镜像或分发任何视频文件。所有可播放的媒体、清单文件、字幕、海报和相关资产均由非附属的第三方服务和基础设施提供。
## ✨ 功能
- **Ink shell UI** — 具备命令感知的终端应用交互流程,而非堆叠的提示符
- **观看历史** — 记住您的观看进度,并提供恢复播放或跳至下一集的选项
- **后台预抓取** — 在您观看当前剧集时抓取下一集;此时 `[n]` 可实现瞬时切换
- **海报预览** — 在终端内显示 TMDB 海报(仅限 Kitty / Ghostty,无需额外工具)
- **结构化选择器** — 搜索结果、服务提供商、字幕、季、集和设置均保留在 shell 内
- **字幕支持** — wyzie 字幕 API,支持在 shell 内选取字幕轨道
- **广告拦截** — 通过 Playwright `route()` 在网络层面拦截 20 多个广告/追踪器域名
- **默认无头模式** — 在后台不可见地运行浏览器;如果服务提供商阻止了无头模式,请使用 `--no-headless`
- **自动回退提供商** — 如果主提供商失败,会静默尝试其他提供商
- **1小时流缓存** — 重新观看或恢复播放时可完全跳过爬虫抓取步骤
- **npm/package 准备就绪** — 提供用于本地和发布工作流的构建、打包和全局链接脚本
## 🚀 前置条件
| 工具 | 必需 | 备注 |
| ------------------------------------------ | -------- | --------------------------- |
| [Bun](https://bun.sh/) | ✅ | 运行时和包管理器 |
| [mpv](https://mpv.io/) | ✅ | 媒体播放器 |
| [yt-dlp](https://github.com/yt-dlp/yt-dlp) | ✅ | 提取嵌入 URL |
| Kitty / Ghostty 终端 | 可选 | 海报图片预览 |
安装 mpv 和 yt-dlp:
```
# Arch
sudo pacman -S mpv yt-dlp
# Debian/Ubuntu
sudo apt install mpv yt-dlp
# macOS
brew install mpv yt-dlp
```
## 📦 安装
```
git clone https://github.com/kitsunekode/kunai.git
cd kunai
bun install
bunx playwright install chromium
bun run link:global
```
## 💻 使用说明
### 全交互模式(推荐)
```
bun run dev
kunai
```
您将按以下步骤进行引导:
1. 在 Ink shell 中按标题搜索
2. 从 shell 内的列表中选择确切的结果
3. 在 shell 选择器中选择提供商、设置、字幕、季和集
4. 在 `mpv` 中开始播放
5. 返回同一 shell 进行重播、更改提供商、调整设置以及执行下一步操作
有关更完整的产品和范围概述,请参阅 [.docs/experience-overview.md](.docs/experience-overview.md)。
### 使用标志跳过提示
所有标志均为可选——可混合搭配使用以预填充任意步骤:
```
bun run dev -- -S "Breaking Bad" # pre-fill search query
bun run dev -- -i 1396 -t series # jump by TMDB ID in the new runtime
bun run dev -- -i 438631 -t movie # direct movie bootstrap
bun run dev -- -a # start in anime mode
bun run dev -- --debug # debug logging
```
### 所有标志
| 短选项 | 长选项 | 描述 |
| ----- | ---------- | -------------------------------------------- |
| `-S` | `--search` | 预填充搜索查询 |
| `-i` | `--id` | 在新的运行时中引导已知的 TMDB ID |
| `-t` | `--type` | `movie` 或 `series`(与 `--id` 一起使用) |
| `-a` | `--anime` | 以动漫模式启动 |
| | `--debug` | 启用调试日志 |
## 🧭 Shell 控制
主流程始终保持在同一 shell 内:
- `/` 打开命令模式
- `c` 打开设置
- `a` 切换动漫/剧集模式
- `o` 从播放界面打开提供商选择
- `n` / `p` / `s` 控制剧集的导航(下一集/上一集/跳转)
- `q` 取消当前 shell 或在适当情况下退出
## 📼 观看历史
历史记录以 `kunai-data.sqlite` 的形式存储在 OS 应用数据目录中。
- **未看完的剧集** → 提示您从确切的时间戳恢复播放或重新开始
- **已看完的剧集**(观看进度 >85%) → 提示您跳至下一集
- **无历史记录** → 从 S1E1 开始
## 🗂️ 项目结构
```
apps/cli/src/main.ts canonical runtime entrypoint
apps/cli/index.ts temporary compatibility wrapper into apps/cli/src/main.ts
apps/cli/src/app-shell/* Ink shell, command UI, settings/history/picker workflows
apps/cli/src/search.ts db.videasy/TMDB-backed search
apps/cli/src/scraper.ts Playwright stream + subtitle interception
apps/cli/src/mpv.ts mpv launcher with Lua position IPC
apps/cli/src/history.ts watch history persistence
apps/cli/src/image.ts Kitty/Ghostty poster preview
apps/cli/src/subtitle.ts wyzie subtitle API
apps/cli/src/tmdb.ts season/episode metadata
apps/cli/src/session-flow.ts start-episode and provider/session helpers
apps/experiments/* private provider research lab
apps/experiments/scratchpads/* raw provider probes and reverse-engineering notes
kunai-cache.sqlite local stream cache in the OS cache directory
logs.txt scrape log
```
## 📦 发布工作流
```
bun run check
bun run build
bun run pkg:check
```
实用的本地脚本:
```
bun run link:global
bun run unlink:global
bun run relink:global
```
## 🌐 提供商 URL 模式
| 提供商 | 类型 | 模式 |
| -------- | ------ | ----------------------------------------------------------------------------------------------------- |
| VidKing | Movie | `https://www.vidking.net/embed/movie/{id}?autoPlay=true` |
| VidKing | Series | `https://www.vidking.net/embed/tv/{id}/{s}/{e}?autoPlay=true&episodeSelector=false&nextEpisode=false` |
| Cineby | Movie | `https://www.cineby.sc/movie/{id}?play=true` |
| Cineby | Series | `https://www.cineby.sc/tv/{id}/{s}/{e}?play=true` |
## ⚠️ 免责声明
Kunai 是一个用于研究、自动化和播放交接的客户端工具。
- 本应用不在其服务器上存储任何视频文件。
- 本项目本身不托管、存储、上传、镜像或分发视频内容。
- 所有可播放的内容、流媒体、清单文件、字幕、海报、元数据及相关资产均由非附属的第三方网站和基础设施提供。
- 提供商名称、媒体标题、海报、元数据和播放端点的所有权和责任均属于其各自的所有者和提供商。
- 如果您认为特定内容侵犯了版权,应向实际的托管或服务提供商(而非本仓库)发出版权或 DMCA 类型的通知。
- 项目维护者不是内容托管者,也不控制上游提供商暴露的第三方媒体服务器。
请在遵守您所在司法管辖区适用的法律和条款的前提下负责任地使用本项目。
标签:Bun, Ink, m3u8解析, mpv, Playwright, TMDB, TypeScript, Waymore结果处理, wyzie字幕, 二进制发布, 动漫资源, 反向工程, 媒体刮削, 媒体播放器, 安全插件, 广告拦截, 开源工具, 影视搜索, 无头浏览器, 流媒体API, 流媒体抓取, 特征检测, 终端用户界面, 网络信息收集, 网络抓包, 网络路由拦截, 自动化爬虫, 自定义脚本, 视频逆向