원클릭으로
lazycat-music-download
当用户明确调用“懒猫音乐下载”,或要求搜索并下载音乐专辑、歌词到本地目录或懒猫网盘 Music 目录时使用。本技能内部使用经过验证的 JOOX 专辑下载工作流,但对外技能名统一叫“懒猫音乐下载”。
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
当用户明确调用“懒猫音乐下载”,或要求搜索并下载音乐专辑、歌词到本地目录或懒猫网盘 Music 目录时使用。本技能内部使用经过验证的 JOOX 专辑下载工作流,但对外技能名统一叫“懒猫音乐下载”。
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
| name | lazycat-music-download |
| description | 当用户明确调用“懒猫音乐下载”,或要求搜索并下载音乐专辑、歌词到本地目录或懒猫网盘 Music 目录时使用。本技能内部使用经过验证的 JOOX 专辑下载工作流,但对外技能名统一叫“懒猫音乐下载”。 |
| version | 1.3.0 |
| author | Hermes Agent |
| license | MIT |
| metadata | {"hermes":{"tags":["lazycat","music","download","joox","bash","curl","jq","lyrics","album"]}} |
当前 Skill 版本:1.3.0
变更记录:
1.3.0:改为“懒猫音乐下载”对外命名,并支持作为懒猫微服 LPK 应用导出 Skill 资源。1.2.0:完善 JOOX 专辑音频与歌词下载工作流。适用场景:
重要原则:
如果这是在当前这台带懒猫网盘的机器上使用,应额外遵循下面约定:
/config/Desktop/文稿数据/config/Desktop/文稿数据/Music/config/Desktop/文稿数据/Music/<歌手名>/<专辑名>/<歌曲名>.<ext>
/config/Desktop/文稿数据/Music/<歌手名>/<专辑名>/<歌曲名>.lrc
示例:
/config/Desktop/文稿数据/Music/G.E.M. 鄧紫棋/喜歡你/喜歡你.mp3
/config/Desktop/文稿数据/Music/G.E.M. 鄧紫棋/喜歡你/喜歡你.lrc
如果当前环境不是这台机器,或者用户没有说明自己的懒猫网盘目录在哪里:
这个工作流已经通过多个单曲专辑做过端到端验证。
已观测到的成功结果:
.lrc,耗时约 37 秒.lrc 到 /tmp/joox-dengziqi-test/G.E.M. 鄧紫棋/喜歡你/喜歡你.mp3 非空(观测值 9562876 bytes)喜歡你.lrc 非空(观测值 1404 bytes),且带有效时间轴歌词头joox_album_download.sh 与搜索辅助脚本 joox_album_search.sh 已完成实测lazycat_joox_album_download.sh 现作为兼容入口,内部转发到新脚本示例验证输出路径:
/tmp/joox-test/周杰倫/Mojito/Mojito.mp3/tmp/joox-test/周杰倫/Mojito/Mojito.lrc/tmp/joox-dengziqi-test/G.E.M. 鄧紫棋/喜歡你/喜歡你.mp3/tmp/joox-dengziqi-test/G.E.M. 鄧紫棋/喜歡你/喜歡你.lrc这个 skill 自带以下脚本,打包时应与 SKILL.md 一起放在同一个 skill 目录中:
scripts/joox_album_download.sh
scripts/joox_album_search.sh
如果在 Hermes skill 目录中查看,它们的实际路径是:
/config/.hermes/skills/media/lazycat-music-download/scripts/joox_album_download.sh
/config/.hermes/skills/media/lazycat-music-download/scripts/joox_album_search.sh
如果把这个 skill 单独下载/打包出去,保持 SKILL.md 与 scripts/ 目录同级即可,命令示例里的相对路径可以直接使用。
SKILL.md 与 scripts/ 一起分发/config/.hermes/scripts 再让 skill 文档去引用外部绝对路径;那样不利于下载、打包和跨机器复用bash scripts/joox_album_search.sh ...、bash scripts/joox_album_download.sh .../config/Desktop/文稿数据/Music)应作为“本机约定 / 可选默认值”写入,而不是写成所有环境都成立的硬编码前提脚本默认应写入临时本地目录,而不是用户网盘:
ROOT_DIR="${2:-${JOOX_ROOT_DIR:-/tmp/joox-downloads}}"
脚本默认内置一组当前用户要求保留的 JOOX 请求头,同时仍允许用环境变量覆盖:
JOOX_ROOT_DIR # 省略第 2 个参数时的默认输出目录
JOOX_UA # HTTP User-Agent,默认 Mozilla/5.0
JOOX_COOKIE # 可覆盖默认内置 JOOX cookie
JOOX_XFF # 可覆盖默认内置 x-forwarded-for IP
JOOX_LANG # 默认 zh_TW
JOOX_COUNTRY # 默认 hk
重要澄清:
如果用户希望写到别的目录,显式传第 2 个参数即可。
如果用户明确同意写入当前机器的懒猫网盘音乐目录,可直接传:
/config/Desktop/文稿数据/Music
按 JOOX album ID 下载专辑:
bash scripts/joox_album_download.sh <ALBUM_ID> [ROOT_DIR]
示例:
export JOOX_COOKIE='your_cookie_here'
export JOOX_XFF='your_ip_here'
bash scripts/joox_album_download.sh 'gVeZBi8ielgZmW9ORUwO5Q==' /tmp/joox-dengziqi-test
写入当前机器懒猫网盘 Music 目录的示例:
export JOOX_COOKIE='your_cookie_here'
export JOOX_XFF='your_ip_here'
bash scripts/joox_album_download.sh 'gVeZBi8ielgZmW9ORUwO5Q==' '/config/Desktop/文稿数据/Music'
如果用户给的是歌手名或专辑名,而不是精确 album ID,应先搜索再下载:
export JOOX_COOKIE='your_cookie_here'
export JOOX_XFF='your_ip_here'
export JOOX_LANG='zh_TW'
export JOOX_COUNTRY='hk'
bash scripts/joox_album_search.sh '邓紫棋' 10
把候选结果列给用户选择。不要静默下载第一个结果。
如果用户要求“全部下载专辑”,应先做一层去重与筛选:
EP、Remix、单曲、Soundtrack、Interlude 类条目Explicit 标记的版本Expanded Edition (Explicit),优先保留后者文件写入结构:
ROOT_DIR/<artist>/<album>/<song>.<ext>
ROOT_DIR/<artist>/<album>/<song>.lrc
在当前机器的懒猫网盘场景下,推荐固定理解为:
/config/Desktop/文稿数据/Music/<歌手名>/<专辑名>/<歌曲名>.<ext>
/config/Desktop/文稿数据/Music/<歌手名>/<专辑名>/<歌曲名>.lrc
下载脚本 joox_album_download.sh 的流程:
https://www.joox.com/hk/album/<ALBUM_ID> 获取专辑页 HTML__NEXT_DATA__ JSONjq 读取专辑元数据与曲目列表web_get_songinfojq 解析 JSONweb_lyric.lrc搜索脚本 joox_album_search.sh 的流程:
search_type 接口type=1)专辑名<TAB>发行日期<TAB>album_idJOOX 的 web_get_songinfo 可能返回多行 JSONP,不能用天真的单行剥壳方式处理。
应使用这个已经实测的解析方式:
info="$(printf '%s' "$raw" | perl -0777 -pe 's/^\s*MusicInfoCallback\((.*)\)\s*$/\1/s')"
歌词接口也应使用对应写法:
lyric_json="$(printf '%s' "$lyric_raw" | perl -0777 -pe 's/^\s*MusicJsonCallback\((.*)\)\s*$/\1/s')"
除非重新用真实返回值验证通过,否则不要改回按行处理的 sed 剥壳方式。
脚本里推荐使用 quiet/fail/follow:
curl -fsSL
下载音频时建议保留重试与超时控制:
curl -fsSL --retry 4 --retry-delay 2 --connect-timeout 15 --max-time 240 -o "$out" "$url"
需要这些命令:
bashcurljqperlbase64真实环境里通常还需要这些运行时输入:
JOOX_COOKIEJOOX_XFFJOOX_LANG 与 JOOX_COUNTRY下载完成后,至少检查:
DONE_ALBUM快速验证示例:
find /tmp/joox-test -type f | sort
/config/Desktop/文稿数据/config/Desktop/文稿数据/Music歌手/专辑/歌曲 层级保存/config/Desktop/文稿数据Remix、EP、单曲、Soundtrack 等非目标条目,不能简单按“全部结果”原样下载COOKIE= / XFF=;不要把这种历史残留误判为 JOOX 可匿名下载musicdl 的 JooxMusicClient 源码;已现场验证过,某些 musicdl 版本的 modules/sources/joox.py 会在 default_search_headers / default_parse_headers 中直接内置示例性的 cookie 与 x-forwarded-for。如果你发现旧脚本里的值与这些默认头一致,应优先判断为“从上游包抄过来的历史常量”,而不是当前环境自动登录所得web_get_songinfo 往往会报 code=-20050 / msg=invaid cookie,拿不到 mp3Url / m4aUrl 等关键字段,因此当前下载链路不能默认宣传为“免 Cookie 可用”/intl、__NEXT_DATA__ 里拿不到曲目时,先退回歌曲级搜索(例如用元数据搜索接口先定位 song_id、歌手、专辑),不要误以为该曲库里完全没有这首歌Music/歌手/专辑/歌曲 结构中samplelib-music-download/config/Desktop/文稿数据 下