介绍
# Media Downloader
智能地从 URL(YouTube、Bilibili、X 等)下载媒体(视频/音乐)到相应的本地文件夹。
- **视频:** 保存到 `~/Movies/` 或 `~/Videos/`。 - **音乐:** 保存到 `~/Music/`。 - **播放列表:** 将项目保存到子目录中(例如 `~/Music/<playlist_name>/`)。
旨在与本地媒体服务器(例如 Universal Media Server、Jellyfin)配合使用,以便在电视/设备上即时播放。
## Agent 流程
当用户提供 URL 或要求下载媒体时,**你必须严格遵循此顺序:**
1. **确认:** - 立即回复用户:"Downloading with dl skill..."
2. **执行:** - 运行脚本: ```bash uv run --script ${baseDir}/dl.py "<url>" ```
3. **捕获路径:** - 读取脚本输出,最后会向 stdout 打印一个路径,该路径指向单个文件或包含播放列表项的文件夹。
4. **上传(仅限 Telegram):** - 如果用户在 Telegram 上(检查上下文或会话)并且文件是音频(mp3/m4a): - 使用 `message` 工具将文件发送给用户: ```json { "action": "send", "filePath": "<filepath>", "caption": "Here is your music." } ```
## 用法
作为 uv 脚本运行 `dl.py`: ```bash # save into default dirs ~/Music or ~/Movies or ~/Videos uv run --script ${baseDir}/dl.py <url>
# specify your own output dir uv run --script ${baseDir}/dl.py <url> -o <out_dir> ``` 脚本将打印输出路径,可以是文件也可以是文件夹。
可以提供一个可选的 cookies 文件以使 yt-dlp 更可靠,脚本会优先使用以下检测到的第一个:
- `${baseDir}/.cookies.txt` - `$DL_COOKIES_FILE` - `$COOKIES_FILE` - `~/.cookies.txt`
## 设置(用户)
如果你在同一台机器上设置一个媒体服务器来共享下载的媒体,此技能将会更有用:
1. 安装 DLNA/UPnP 媒体服务器(Universal Media Server、miniDLNA、Jellyfin)。 2. 共享 `~/Music` 和 `~/Movies`(或 `~/Videos`)文件夹。 3. 下载的媒体将自动出现在你的电视上,前提是电视上的应用支持 DLNA/UPnP,例如 VLC。
参见 [示例脚本](https://github.com/guoqiao/skills/blob/main/dl/ums/ums_install.sh) 以在 Mac 上设置 Universal Media Server。