mcpField
Q
qiaomu-suno-master

qiaomu-suno-master

github.com/joeseesun创意与媒体7259 次安装21 周前更新
代码仓库

关于 qiaomu-suno-master

Qiaomu Suno Master 是用于 Suno 创作与导出的技能,适合需要歌词、风格标签或成品音乐的用户。它结合本地曲风查找器、Suno CLI 与网页界面流程,并支持已有片段的音频和歌词导出。

主要功能

  1. 01生成结构化 Suno 歌词
  2. 02本地曲风数据库检索风格标签
  3. 03通过 CLI 或网页界面生成音乐
  4. 04下载音频并获取 LRC 字幕
  5. 05导出已有片段的多种格式

适用场景

  1. 01将主题或故事整理成歌曲歌词
  2. 02为 Suno 选择曲风与制作标签
  3. 03生成并下载 Suno 音乐
  4. 04为已有歌曲导出音频或定时歌词

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/joeseesun/qiaomu-suno-master --skill qiaomu-suno-master

安装后在 Claude Code 中输入/qiaomu-suno-master确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

README.md
LICENSE
manifest.json
agents/
interface.yaml
evals/
trigger_cases.yaml
references/
browser-fallback.md
computer-use-workflow.md
chrome-cdp-auth.md
references/genre-finder/
_meta.json
_index.json
references/genre-finder/detailed/
acoustic-blues.json
african-folk-music.json
afro-house.json
aboio.json
acholi-music.json
ainu-music.json
afrobeats.json
akan-music.json
alpine-folk-music.json
alternative-dance.json
african-music.json
alternative-rock.json
alt-country.json
alternative-metal.json
amazigh-music.json
amapiano.json
ancient-music.json
animal-sounds.json
arabic-bellydance-music.json
american-folk-music.json

详细介绍

Qiaomu Suno Master

创作商业级 Suno 歌词,然后使用选定的 Suno 执行路径生成音乐,并可选择下载。 它还包含本地音乐流派查找器,可将模糊的情绪转化为精准的 Suno 风格标签。

Suno 登录状态的有效期较短。请将 Chrome 中已登录的 Suno 网页会话视为真实状态来源,仅将 CLI 作为快速路径。如果 CLI 报告 auth_expired、JWT expired、401、403、验证码失败,或找不到浏览器会话,请立即改用 Suno 网页 UI 作为备用方案,不要重试相同的 CLI 请求。

风格标签选择规范

当用户询问 Suno 风格标签、流派组合、流派探索或风格细化时,必须将本地流派查找器的结果作为依据,而不是将其当作可选辅助工具。

  1. 回答前先阅读 references/genre-selection.md。
  2. 在技能目录中运行 python3 scripts/find_music_genres.py。对于仅询问风格的请求或宽泛的需求描述,至少运行三条有针对性的查询,分别涵盖需求的不同维度:用户原始表述、一种或多种相邻流派,以及一种或多种制作/质感/节奏方向。只有当用户要求的风格非常具体且要求最简输出时,才可只运行一条查询。
  3. 先根据数据库结果构建候选标签集。优先选择出现在查找器结果中的流派标签,或与这些结果存在直接、明显的上下级关系的标签。
  4. 将每条 Suno 风格字符串组合为 1–3 个流派标签,再加上 2–5 个人声、乐器、速度、制作或情绪标签。不要只凭个人品味作答,也不要在一个提示词中罗列过长的相关流派清单。
  5. 对于仅询问风格的请求,不要创作歌词或运行 Suno 生成,除非用户明确提出要求。提供实用的组合、最佳入门选项,并在有帮助时给出 exclude_styles。
  6. 如果查找器运行失败或数据库不可用,请明确说明,并继续提供尽力而为的备用建议,不要暗示这些标签来自数据库。

生成执行约定

此技能必须优先选择确定性路径,而不是开放式探索。

  1. 将用户明确指定的路径视为硬性锁定。

    • 如果用户明确要求使用 Computer Use,则整个生成任务都必须使用 Computer Use 路径,从提交表单到捕获可见链接和尝试浏览器下载。不得为了“推进进度”而切换到 CLI、CDP、Browser 插件、原始 API 调用或借助验证码的 CLI 生成。
    • 将“全程用 Computer Use”“直接用 Computer use”“用电脑操作”以及关于混用路径的后续纠正,视为 Computer Use 硬性锁定。一旦锁定,对该请求执行的每项面向 Suno 的操作都必须通过由 Computer Use 控制的可见 Suno UI 完成。
    • 在 Computer Use 锁定的任务中,Shell 命令可以用于准备歌词、清单、检查文件、移动浏览器下载的文件、解析捕获到的分享链接以及验证素材。但不得用于提交 Suno 生成、刷新生成身份验证、运行 suno generate 或驱动 CDP/CLI 验证码辅助工具。
    • 在 Computer Use 锁定的任务中,不得运行 CDP 预检、启动启用 CDP 的 Chrome、调用 Browser 插件,也不得将 download_clips.sh 用作隐藏的后备方案。如果通过可见 UI 下载失败,请报告阻塞情况并附上已捕获的链接,不要切换路径。
    • 如果因用户正在使用同一浏览器、页面要求执行登录/安全验证/验证码操作,或桌面 UI 不可用而无法继续使用 Computer Use,请停在当前状态,并要求用户解除阻塞。不得悄悄改用其他生成路径。
    • 同样的锁定规则适用于用户明确指定的任何其他路径:全程使用该路径,否则停止并报告阻塞情况。
  2. 先确保 CLI 路径可用。 仅当用户未明确要求使用其他路径时才使用此路径。

    • 确认已安装 suno CLI,并运行 suno config check。
    • 从真实的 Chrome Suno 会话刷新身份验证;如果刷新失败,运行 suno auth --login --quiet。
    • 使用默认的验证码辅助路径运行一次 scripts/generate_with_suno.sh。
    • 只有在遇到狭义的 hCaptcha/CDP 启动失败类别时,才最多再尝试一次 CLI;可使用 --no-captcha 或用户提供的 --token "$HCAPTCHA_TOKEN"。
  3. 如果 CLI 生成受阻,由 Codex 控制浏览器。 仅当任务未锁定到其他路径时才使用此方法。

    • 如果当前会话提供了 Codex Browser 插件,则使用它。如果当前会话未提供该插件,则使用 Chrome/Computer Use 操作已登录的 Suno 页面。
    • 打开 https://suno.com/create,根据准备好的本地文件填写标题、歌词、风格、模型和选项,点击 Create,等待生成的行出现,并捕获歌曲 ID/链接。
    • 仅当自动化无法合法或可靠完成某项操作时,才请用户介入,例如人工登录、账户安全检查或实时验证码挑战。
  4. 停止禁止的探索。

    • 除非用户明确要求调试 Suno 本身,否则不得手动构造 Suno 生成 POST 请求、将复制的浏览器 Cookie 注入临时配置文件、重放捕获的负载,或反复测试验证码变体。
    • 如果用户提供了现有的 Suno 歌曲 URL 或片段 ID,请跳过生成,继续稳定的下载和 LRC 验证流程。
    • 如果用户要求上传到 Qiaomu Music 或在其上发布,请将发布步骤委派给 qiaomu-music-publisher;不得在此技能中实现 Qiaomu Music 上传功能。
    • 在捕获到真实的 Suno 歌曲链接或片段 ID 之前,绝不得报告生成成功。

适用场景

当用户希望进行以下操作时,使用此技能:

  • 根据主题、文章、故事、情绪或关键词创作新歌
  • 创作可直接用于 Suno 的歌词,包含 [Verse]、[Chorus] 和 [Bridge] 等段落
  • 通过本地 Rust suno CLI 生成音乐,网页 UI 作为备用方案
  • 将完成的歌曲文件下载到本地
  • 将现有 Suno 片段 ID 导出为音频、视频/MTV、带时间戳的 LRC、SRT、纯净版 SRT 或 Markdown 歌词
  • 在写歌词或生成音乐前推荐音乐流派/风格
  • 为要上传到音乐播放器或发布为可播放网页曲目的歌曲制作带时间戳的 .lrc 歌词

不要将此技能用于纯音乐理论、非 Suno 用途的一般诗歌或非 Suno 音频编辑。 不要使用此技能执行 Qiaomu Music 上传;MP3/LRC 资源准备就绪后,请使用 qiaomu-music-publisher。

需要确定的输入

尽可能根据用户请求推断以下内容:

  • title:简短、令人印象深刻的歌曲标题
  • lyrics:包含结构标签、可直接用于 Suno 的完整歌词
  • lrc_required:上传、发布或用于音乐播放器网站时,生成/下载音乐默认需要
  • style_description:以逗号分隔的 Suno 风格标签
  • exclude_styles:以逗号分隔的需避免的风格、乐器或情绪
  • genre_candidates:可选的推荐流派,来自 scripts/find_music_genres.py
  • title_options:确定最终标题前提供的三个简洁标题候选项
  • model:默认 v5.5
  • vocal:可选的 male 或 female
  • output_dir:默认使用 ~/Documents/Suno/<song-title>/,除非用户指定文件夹
  • song_manifest:默认使用 $OUTPUT_DIR/song.manifest.json
  • generate:是否立即运行 Suno;用户要求生成音乐时默认是

如果用户只要求歌词,则创作所需内容,不要运行 suno。

工作流

  1. 分析歌曲需求:主题、受众、语言、情绪、风格、人声、速度和任何禁用元素。
  2. 如果风格缺失、含糊、值得进一步明确,或用户特别要求推荐风格/标签,请遵循“风格标签选择规范”。
  3. 选择 1-3 个合适的流派标签,以及少量人声、乐器、速度和情绪标签。让 style_description 保持聚焦。
  4. 对于仅询问风格的请求,在提供风格组合和有用的 exclude_styles 后即停止;除非用户提出要求,否则不要继续创作歌词或生成音乐。
  5. 阅读 references/lyric-craft.md 并遵循歌词质量规则。
  6. 提供:
    • title_options
    • 选定的 title
    • 可选的 genre_candidates
    • style_description
    • exclude_styles
    • lyrics
  7. 将可直接用于 Suno 的歌词和 LRC 视为不同的交付内容:
    • lyrics 是发送给 Suno 的创作输入,可使用 [Verse]、[Chorus]、[Bridge] 等标签。
    • .lrc 是生成后从 Suno 获取的、与歌曲对齐的带时间戳歌词。
    • 切勿将纯 Suno 歌词上传或发布为与音乐播放器同步的歌词。
    • 音乐播放器封面图是单独生成的设计素材,不是 Suno 源封面。
  8. 生成音乐时,将歌词保存到 $OUTPUT_DIR/lyrics.txt。较长的多行歌词优先保存为文件,而不是通过 shell 引号传递。 除非用户明确指定文件夹,否则 $OUTPUT_DIR 必须是 ~/Documents/Suno/<song-title>/。不要将当前仓库/工作区目录用作默认输出位置。 对于受 Computer Use 限制的任务,浏览器下载的 MP3 文件移出 ~/Downloads 后,也应放在此目录中。
  9. 生成、下载、LRC 验证以及后续发布交接时,使用清单优先的工作流。创建或更新歌曲清单时,阅读 references/manifest-workflow.md:
python3 scripts/run_workflow.py init \
  --manifest "$OUTPUT_DIR/song.manifest.json" \
  --title "$TITLE" \
  --style "$STYLE_DESCRIPTION" \
  --exclude "$EXCLUDE_STYLES" \
  --lyrics-file "$LYRICS_FILE" \
  --output-dir "$OUTPUT_DIR"

如果用户提供了现有 Suno 片段 ID 或歌曲 URL,请在 init 时通过 --ids 添加,并跳过生成。对于此现有片段流程,可以省略风格和歌词文件。 对于锁定为 Computer Use 的任务,仅使用 init 创建持久化本地元数据,然后立即遵循 references/computer-use-workflow.md。跳过 run_workflow.py generate、run_workflow.py download、CDP 会话检查、 CLI 身份验证刷新、CLI 生成和 CLI/浏览器辅助工具下载,除非用户明确批准退出 Computer Use。

  1. 在任何生成或下载步骤之前,运行无破坏性的预检:
python3 scripts/suno_doctor.py --output-dir "$OUTPUT_DIR"

对于锁定为 Computer Use 的任务,默认情况下这是唯一允许的预检。 不要对这类锁定任务运行下面的 CDP/Chrome 会话检查。

提交生成请求之前,确认存在真实的 Chrome Suno 网页会话:

bash scripts/ensure_suno_chrome_session.sh --timeout 12

如果不存在 CDP 端点且 Chrome 尚未运行,启动启用了 CDP 的 Chrome 会话:

bash scripts/launch_suno_cdp_chrome.sh

如果 Chrome 已在运行但未启用远程调试,请先完全退出,再使用 CDP 标志重新启动;或者使用 --dedicated-profile,并在那里登录 Suno 一次。如果 Chrome 显示原生调试确认提示,请暂停并让用户接受一次。不要假设页面级 CDP 注入可以关闭原生 Chrome 安全界面。JWT 过期后,不要继续重试 CLI。

  1. 执行任何 CLI 步骤之前,确保 Rust CLI 已存在:
bash scripts/ensure_suno_cli.sh

如果 CLI 接受 Chrome 的会话,generate_with_suno.sh 和 download_clips.sh 都会自动处理身份验证。仅对 export_suno_assets.py 手动调用:

suno auth --refresh --quiet 2>/dev/null || suno auth --login --quiet
  1. 生成/下载/LRC 默认路径:
python3 scripts/run_workflow.py generate \
  --manifest "$OUTPUT_DIR/song.manifest.json"

此封装程序会写入 suno-meta.env,保留 generate.result.json,提取 片段 ID,下载 MP3,获取 LRC,验证 LRC,更新 song.manifest.json,并写入 workflow.log。

锁定为 Computer Use 的任务禁止使用此默认路径。对于这类任务, 必须通过 Computer Use 填写 Suno 表单、点击 Create、捕获分享链接,使用可见的行菜单选择 Download -> MP3 Audio,然后才能使用 shell 命令将浏览器下载的文件移至 ~/Documents/Suno/<song-title>/。

准备或调试时,可使用试运行,以免消耗 Suno 点数:

python3 scripts/run_workflow.py generate \
  --manifest "$OUTPUT_DIR/song.manifest.json" \
  --dry-run

如果清单状态变为 generation_blocked,或封装程序输出 GENERATION_BLOCKED,请按照 references/browser-fallback.md 执行 Codex 浏览器生成流程。生成受阻后,不要尝试直接调用 Suno API。

  1. 下载已有 ID 的路径:
python3 scripts/run_workflow.py download \
  --manifest "$OUTPUT_DIR/song.manifest.json" \
  --ids "ID1 ID2"

对于要上传到音乐播放器、网站或任何面向用户的可播放曲库的歌曲,LRC 为必需项,且 run_workflow.py 默认要求提供 LRC。如果 LRC 尚未就绪,请勿上传/发布曲目。稍后重试:

python3 scripts/run_workflow.py validate-lrc \
  --manifest "$OUTPUT_DIR/song.manifest.json"
  1. 底层调试命令:

保留独立的 generate_with_suno.sh、generate_download_lrc.sh 和 download_clips.sh 命令,用于调试、浏览器回退恢复或部分重试。除非用户明确批准退出 Computer Use 流程,否则锁定为 Computer Use 的任务中不得使用这些命令。

仅生成并返回包含片段 ID 的 JSON:

bash scripts/generate_with_suno.sh --meta-file "$META_FILE" --output-dir "$OUTPUT_DIR"

端到端 shell 封装程序:

bash scripts/generate_download_lrc.sh --meta-file "$META_FILE" --output-dir "$OUTPUT_DIR"

使用浏览器优先下载器的快速下载路径:

bash scripts/download_clips.sh --ids "ID1 ID2" --output-dir "$OUTPUT_DIR"

对于要上传到音乐播放器、网站或任何面向用户的可播放曲库的歌曲,LRC 为必需项。下载时请求并验证 LRC:

bash scripts/download_clips.sh --ids "ID1 ID2" --output-dir "$OUTPUT_DIR" \
  --lyrics --lyrics-format lrc --require-lrc

或者直接从 generate 管道传递:

bash scripts/generate_with_suno.sh --meta-file "$META_FILE" --output-dir "$OUTPUT_DIR" \
  | bash scripts/download_clips.sh --output-dir "$OUTPUT_DIR" \
      --lyrics --lyrics-format lrc --require-lrc

如果 --require-lrc 失败,请勿上传/发布曲目。等待 Suno 完成处理后,再重试获取对齐歌词:

python3 scripts/export_suno_assets.py ID1 ID2 --format lrc --output "$OUTPUT_DIR"
python3 scripts/validate_lrc.py "$OUTPUT_DIR"

download_clips.sh 的功能:

  • 首次尝试前等待 5s,让 CDN 完成传播
  • 最多重试 3 次,每次尝试间隔 10s
  • 自动从 Chrome 刷新身份验证
  • 当 websocket-client 可用时,优先使用 Chrome/CDP 浏览器下载; 否则跳过该尝试,直接运行 suno download
  • 可通过 suno timed-lyrics 获取带时间戳的 .lrc 歌词
  • 如果不存在真实的带时间戳 .lrc,--require-lrc 将导致工作流失败
  • 可通过 --ids 标志传入 ID,或通过管道传入 generate 的 JSON
  1. 上传/发布前的 LRC 检查:

在上传到 music.qiaomu.ai 或任何音乐播放器之前,请确认 .lrc 文件存在,且包含有效的 [mm:ss.xx] 时间戳:

python3 scripts/validate_lrc.py "$OUTPUT_DIR"

使用经过验证的 .lrc 文件作为曲目歌词内容。除非目标明确要求未同步的纯文本歌词,否则不要使用原始的 .txt Suno 提示词歌词。

  1. 发布交接:

如果目标是 Qiaomu Music(music.qiaomu.ai、 qiaomu-music-player-web、“乔木音乐”、“上传到乔木音乐”或“发布到乔木音乐”), 请在 MP3 和带时间戳的 LRC 准备就绪后,交接给 qiaomu-music-publisher:

python3 ~/.agents/skills/qiaomu-music-publisher/scripts/publish_suno_to_qiaomu_music.py \
  --ids "ID1 ID2" \
  --output-dir "$OUTPUT_DIR"

qiaomu-music-publisher 负责处理网站专属的登录、封面、分段上传和发布状态。此 Suno 技能应专注于创作、下载和 LRC 验证。即使发布工具仍需要显式 CLI 参数,也请以 song.manifest.json 作为 ID、资源路径和 LRC 状态的准确信息来源。

  1. 通用音乐播放器上传/发布前的封面检查:

对于非 Qiaomu 音乐播放器的上传,除非目标明确要求使用 Suno 原始封面,否则请根据歌曲标题、风格和经过验证的歌词,使用 qiaomu-image-generator 生成新的方形专辑封面。

使用 album_cover 模板,并设置:

  • style:默认使用 album-mondo-cover;对于简约/氛围/心理风格的歌曲,使用 negative-space-poster
  • aspect_ratio:1:1
  • description:从歌词中提炼出一个象征性画面,采用 Mondo 风格的有限调色板、单一视觉焦点,并注明 no text
  • filename:使用稳定的 slug,并以 -cover.png 结尾

最简生成格式:

{
  "template": "album_cover",
  "cover": {
    "enabled": true,
    "filename": "song-slug-cover.png",
    "style": "album-mondo-cover",
    "aspect_ratio": "1:1",
    "description": "1:1 square album cover, no text. ... distilled lyric imagery ..."
  },
  "defaults": {
    "provider": "jimeng",
    "style": "album-mondo-cover",
    "aspect_ratio": "1:1"
  }
}

使用以下命令生成:

python3 ~/.agents/skills/qiaomu-image-generator/scripts/generate.py "$VISUAL_CONFIG" \
  --workers 1 --no-insert --output "$OUTPUT_DIR/cover.result.json"

上传前请验证封面:

file "$OUTPUT_DIR"/*-cover.png
sips -g pixelWidth -g pixelHeight "$OUTPUT_DIR"/*-cover.png

封面必须为方形,并且必须与 MP3 和经过验证的 LRC 一起作为 cover multipart 字段上传。

  1. Codex 浏览器生成流程:

阅读 references/browser-fallback.md,并在以下情况下使用:

  • 用户明确要求可靠地生成 Suno 音乐
  • CLI 身份验证已过期或被拒绝
  • 验证码自动化卡住
  • Suno 网页列表中可以看到生成的片段,但 CLI 下载失败
  • 用户明确要求使用 Computer Use

如果用户明确要求使用 Computer Use,则生成和浏览器下载尝试均受 Computer Use 流程锁定约束。除非用户明确批准退出该流程,否则不要使用 CLI/CDP 生成或 CLI/浏览器下载辅助工具。

这不是被动交接。Codex 应控制浏览器:

  1. 在已登录的 Chrome 配置文件中打开 https://suno.com/create。
  2. 切换到 Advanced 模式,并选择模型 v5.5,除非用户要求使用其他模型。
  3. 根据本地文件/元数据填写 Lyrics、Styles 和 Song Title。
  4. 点击 Create,等待两条生成结果出现,并记录两个歌曲链接。
  5. 当结果可以播放时,在网页 UI 中点击每一行的菜单/下载控件。仅在未锁定的浏览器回退流程中,且 ID 可见时,才允许使用 download_clips.sh --ids ... --browser。

如果浏览器自动化因页面要求人工执行安全操作而无法完成登录、验证码验证或 Create 提交,请停在当前浏览器状态,并请用户只完成该操作。操作完成后,Codex 将继续采集 ID、下载、验证 LRC,并将任何网站专属的发布步骤交接给相应的发布技能。

如需直接通过 Computer Use 生成和下载,请阅读 references/computer-use-workflow.md。此流程应打开 Suno Create, 通过可见的网页 UI 提交,复制生成结果中的分享链接,将分享链接解析为片段 ID,并在可行时通过可见的 Suno 网页 UI 下载音频;之后仅使用本地后处理来整理文件、导出定时歌词、验证 LRC 和更新清单。在 Computer Use 锁定的任务中,不要运行 run_workflow.py generate、run_workflow.py download、suno generate 或 CDP/验证码辅助工具,除非用户明确批准切换流程。

  1. 发送到 Feishu(仅在带有 chat_id 的桥接上下文中):
cd "$OUTPUT_DIR"
lark-cli config bind --source lark-channel --identity bot-only
for f in *.mp3; do
  lark-cli im +messages-send --as bot --chat-id "$CHAT_ID" --file "./$f"
done
  1. 报告输出目录、清单路径、下载文件路径、LRC 验证状态、生成的封面路径、已发布曲目 URL 和/或 Suno 歌曲链接。

切勿将生成的歌曲、字幕、视频或导出的歌词文件保存在技能目录或当前仓库中。默认使用 ~/Documents/Suno/<song-title>/。

CLI 说明

  • 上游 CLI 是 paperfoot/suno-cli,安装后命令为 suno。
  • 如果找不到 suno,请先运行 bash scripts/ensure_suno_cli.sh,再继续。该脚本从上游项目安装,优先尝试 Homebrew,如果失败则改用 Cargo。
  • 安装后运行 suno --version 进行验证。
  • 对于常规生成任务,优先使用 python3 scripts/run_workflow.py generate --manifest "$OUTPUT_DIR/song.manifest.json"。它会封装生成、下载、LRC 验证、资源发现和状态跟踪。
  • 生成前运行 python3 scripts/suno_doctor.py --output-dir "$OUTPUT_DIR",检查本地前置条件且不消耗点数。
  • 身份验证信息会从已登录的 Chrome Suno 会话同步(suno auth --refresh 或 suno auth --login),但即使网页界面仍处于登录状态,Suno 也可能拒绝 CLI JWT。这种情况下以网页界面为准。
  • 仅在快速生成时优先使用 bash scripts/generate_with_suno.sh。它会自动刷新身份验证信息,默认使用带验证码的提交路径,但在身份验证/验证码被拒绝后不得反复重试。
  • CLI 重试预算为总共两次生成尝试:默认带验证码尝试一次,然后仅在 hCaptcha/CDP 启动失败时进行一次针对性重试,使用 --no-captcha 或提供的 --token。
  • 2026-05-25 最新验证路径:suno 0.5.7 默认带验证码生成成功解决了 hCaptcha,提交了 v5.5,返回两个完整 ID,随后 download_clips.sh --require-lrc 下载了 MP3 并验证了 LRC。默认不要添加 --no-captcha。
  • 重要:生成时不要使用 --download。CDN 需要时间来传播文件。生成完成后,务必单独使用 download_clips.sh。
  • 对常规 CLI/非锁定浏览器备用下载,使用 scripts/download_clips.sh——它会处理重试逻辑和 CDN 延迟。在 Computer Use 锁定任务中,优先尝试通过浏览器界面下载;未经用户明确批准,不要切换到 CLI 下载。
  • 对于将通过常规 CLI/非锁定备用路径上传或发布的生成歌曲,使用 download_clips.sh 时务必添加 --lyrics --lyrics-format lrc --require-lrc。
  • 将歌曲上传到 Qiaomu Music 时,在 MP3 和 LRC 准备就绪后调用 qiaomu-music-publisher。特定网站的登录/上传逻辑应放在该工具中。
  • 在非锁定备用任务中,如果网页列表里能看到片段 ID,优先使用 download_clips.sh --ids "ID1 ID2" --browser 进行下载重试,因为它会先通过浏览器管线让 Chrome 获取音频。
  • 如果用户需要从现有片段 ID 导出 SRT/LRC/定时歌词、清理后的 MTV 字幕、音频下载或视频/MTV 下载,请使用 scripts/export_suno_assets.py。
  • 上传到任何音乐播放器前,使用 scripts/validate_lrc.py "$OUTPUT_DIR"。仅包含 [Verse]/[Chorus] 标记的文件是普通歌词,不是 LRC。
  • 使用 scripts/clean_srt_for_mtv.py 从字幕文件中移除 [Verse] 和 [Chorus] 等 Suno 结构标记。
  • 如果 Suno 的验证码求解器在当前浏览器会话中不稳定,只有在有其他有效提交路径或手动提供 --token 时,才回退到 --no-captcha。

流派查找器

此技能将 joeseesun/music-genre-finder 数据内置于 references/genre-finder/ 中。

使用:

python3 scripts/find_music_genres.py "深夜 空灵 梦幻" --limit 5
python3 scripts/find_music_genres.py "raw energetic punk" --limit 5
python3 scripts/find_music_genres.py "世界音乐 鼓 长笛" --json

对于 Suno,将推荐内容转换为简洁的风格标签。优先使用 1–3 个流派标签,再加上人声、乐器、速度和情绪标签。避免在一个提示词中堆砌许多相关子流派。 对于仅涉及风格或宽泛推荐的请求,先运行多个有针对性的查找器查询,再根据返回的风格集合综合后作答。

资产导出

对于已有的片段 ID:

python3 scripts/export_suno_assets.py <clip-id> --format lyrics --clean-srt

如果未指定 --output,资产将保存到 ~/Documents/Suno/<clip-title>/ 下。

常用格式:

  • audio:下载 MP3/音频
  • video:如果有 Suno 视频/MTV 资产,则下载
  • json:保存带时间戳的歌词 JSON
  • lrc:保存音乐播放器歌词
  • srt:保存字幕文件
  • md:保存 AI 可读的带时间戳歌词 Markdown
  • lyrics:json,lrc,srt,md 的快捷方式
  • all:audio,video,json,lrc,srt,md 的快捷方式

要从已有片段 ID 重新获取带时间戳的歌词,请使用 Rust suno CLI 导出路径:

python3 scripts/export_suno_assets.py <clip-id> --format lrc --output "$OUTPUT_DIR"
python3 scripts/export_suno_assets.py <clip-id1> <clip-id2> --format lyrics --output "$OUTPUT_DIR"

对于 MTV:

python3 scripts/export_suno_assets.py <clip-id> --output "$OUTPUT_DIR" --format video,lyrics --clean-srt

Chrome CDP 身份验证辅助

此技能将来自 pasky/chrome-cdp-skill 的轻量级 Chrome DevTools Protocol 辅助程序作为 scripts/cdp.mjs 纳入项目。

仅当用户想要重用现有的 Chrome 登录状态或调试 Suno 浏览器状态时才使用它。Chrome 必须启用远程调试。如果无法使用 CDP,请改用 suno auth --login 或浏览器生成流程。所有 CDP 检查都应通过 --timeout 限制时长;否则,Chrome 原生调试确认可能会在页面脚本运行前卡住自动化流程。

要启动启用了 CDP 的 Chrome 会话:

bash scripts/launch_suno_cdp_chrome.sh

常用环境变量:

  • SUNO_CDP_TIMEOUT=12 限制生成前 CDP 探测的时长。
  • SUNO_SKIP_CHROME_SESSION_CHECK=1 如果已知生成前 CDP 探测会触发 Chrome 原生确认,则跳过该探测。
  • SUNO_CDP_PORT=9222 控制 Chrome 远程调试端口。

此机器已安装 liaocaoxuezhe/chrome-devtools-auto-allow,路径为 /Users/joetech/.local/share/chrome-devtools-auto-allow。其 LaunchAgent 为 com.local.cdp-auto-allow,应用路径为 /Users/joetech/.local/share/chrome-devtools-auto-allow/CDP Auto Allow.app,日志写入 /tmp/cdp-auto-allow.debug.log。如果日志显示 不允许辅助访问,用户必须在 macOS“辅助功能”设置中启用该应用。

已知问题:上游 suno CLI 的验证码自动求解器可能会打开受控 Chrome,并出现错误 CDP Runtime.evaluate ws err: Connection reset...。 另一个常见故障是即使 suno auth --login 成功,仍会出现 auth_expired。 遇到上述任一情况时,请立即切换到 references/browser-fallback.md。

输出风格

对于用户要求使用此创作者提示词的纯歌词请求,仅按以下顺序输出 Markdown 代码块:

```lyrics
...
style-description-tags
exclude-style-tags
1. ...
2. ...
3. ...

For generated music, keep the final response brief:

- mention that generation completed or where it stopped
- include the output folder
- include the next command only if the user needs to authenticate or retry

评论

支持 Markdown