【免费下载链接】skills
Get production-ready images, video, audio, and 3D from any AI agent: skills that pick the right model, price before spending, and keep characters and brands consistent through the Scenario MCP, plus expert teams that drive Blender, Maya, ZBrush, Unreal, and Unity.
ACE-Step 1.5 是 Scenario 平台上的一组音乐生产模型,它把"文本生成歌曲""翻唱重编""局部重绘""加轨""补全编曲""分轨提取"拆成各自独立的模型成员,并通过 Scenario MCP 交给 AI Agent 调用。本文以仓库中的 scenario-ace-step 技能文档 为主线,结合仓库里 scenario 核心循环、scenario-audio 音频总纲 与 音乐视频音轨编辑流程 等文件,把"如何选成员、如何写歌词、如何在不整曲重生成的前提下改一句话"讲成一条可执行的工程路径。
技能定位:它解决的是什么问题
从仓库结构看,skills/scenario-ace-step/ 目录下只有一份 SKILL.md,没有脚本和 references 子目录。根据 AGENTS.md 的约定,只有当参考内容大到无法内联时才拆分成附属文件,所以这份技能是纯"程序性知识"文档:它不提供可执行代码,而是教会 Agent 在正确的时机调用正确的 MCP 工具,并避开一批已经踩过的坑。
它的 frontmatter 已经写明了适用边界:
---
name: scenario-ace-step
description: "Use when creating or editing music with ACE-Step models on Scenario via MCP: text-to-music songs with sung vocals from a lyric sheet, instrumental tracks, covering or restyling an existing song, repainting one section in place, changing sung lyrics, adding an instrument layer, completing a partial recording into a full arrangement, extracting stems, or choosing between Turbo and Quality lanes. Keywords: ACE-Step 1.5, cover strength, repaint, Vocal2BGM, stem separation, karaoke, BPM."
license: MIT
---
也就是说,只有在"用 ACE-Step 模型做音乐"时才加载它。通用音频需求(音效、配音、TTS、视频配乐)归 scenario-audio,连接方式与通用生成循环归 scenario。
安装方式与仓库其它技能一致,可以只装这一个,也可以按角色成套装。安装机制说明在 INSTALL.md 与 docs/listing-and-install.md:
# 只安装 ACE-Step 技能
npx skills add scenario-labs/skills --skill scenario-ace-step
# 按 "Sound Designer" 角色安装(含 music、SFX、语音、合成等 9 个技能)
npx skills add scenario-labs/skills --skill scenario scenario-moderation scenario-report scenario-audio scenario-sonilo scenario-video-assembly scenario-minimax-music scenario-elevenlabs scenario-ace-step
注意一个设计上的前提:技能文档本身不会写入仓库的安装命令。仓库的 scripts/check-style.sh 会检查 skills/ 下是否出现 skills add scenario-labs/skills,因为已安装的技能包若再指示 Agent 去安装可变版本的依赖,会被安全扫描器判为不可信来源;同级技能应当用 skill_get(Scenario MCP)加载。这也是文档里那句"sibling skill 缺失时用 skill_get,无人值守则依据工具 schema 继续并标记缺口"的由来。
核心架构:一个模式,一个模型成员
ACE-Step 技能最重要的认知是:不要指望一个模型自己推断模式。文本生成、翻唱、重绘是三种不同的模型成员,Turbo 和 Quality 又是两个不同的成员,再加上全质量的编辑三件套(Add Layer、Complete Track、Stem Extract),撰文时共有九个成员。
调用前先用 search 发现它们,按模式名挑选,再以 model_schema_get 返回的 schema 作为唯一契约。
| 模式 | 关键输入 | 行为 |
|---|---|---|
| Text to Music | prompt 或 lyrics(二者其一即可) | 生成完整歌曲;duration 10 到 600 秒(留空由模型决定)、bpm、keyscale |
| Cover | srcAudio(可加 referenceAudio) | 对已有歌曲重编风格,或用新 lyrics 重唱;audioCoverStrength 决定原曲保留程度 |
| Repaint | srcAudio + 时间窗 | 就地重生成 repaintingStart 到 repaintingEnd 区间,总时长不变 |
| Add Layer | srcAudio + trackName + prompt | 新增一条匹配调性、速度与律动的分轨,可选时间窗 |
| Complete Track | srcAudio + completeTrackClasses + prompt | 围绕一段半成品录音编排出完整伴奏(Vocal2BGM) |
| Stem Extract | srcAudio + trackName | 从混音中分离出单条分轨 |
参数契约的四个要点
原文把容易出错的参数集中在一段里,这里逐条展开:
- 数字上限以 schema 为准。 文档明确写出"Numbers are at authoring time: read caps off
model_schema_get"。也就是说 10 到 600 秒的duration、1 到 4 的numOutputs都是撰文时的观测值,不是恒定承诺。这与 scenario 中的规则一致:超出max_length之类的上限会返回 400,而不是自动截断。 - 分轨字段只接受十二个固定值。
trackName与completeTrackClasses的合法取值是:vocals、backing_vocals、drums、bass、guitar、keyboard、percussion、strings、synth、fx、brass、woodwinds。写 "kick drum" 这类自由文本是错误用法。 srcAudio是单个音频资产 id。 必须先用upload_asset上传本地文件,或复用已生成资产的 id;文件类字段只认 asset id,不接受 URL。- 跨成员参数的分布是有规律的。
numOutputs(1 到 4):所有成员都有,且直接乘算成本。thinking:默认true,会先跑一遍规划;Stem Extract 上没有这个字段。vocalLanguage:有该字段的成员默认自动识别语种。guidanceScale:只出现在编辑三件套(Add Layer、Complete Track、Stem Extract)上。audioCoverStrength:只出现在 Cover 上。repaintingEnd: -1:表示重绘到整首结束。
车道选择:Turbo 与 Quality
技能对车道差异的描述非常具体,值得单独成节:
- Turbo 与 Quality 是参数相同的两兄弟,唯一的例外是
audioFormat(mp3、wav、flac),撰文时只出现在 Repaint Turbo 上。 - 没有任何成员暴露
seed。 这带来一个直接后果:同一个窗口重绘两次就是两个 take,歌手音色在两次之间可能变化。 - Quality 是完整尺寸的 checkpoint,调优目标是保真度与 prompt 遵循度;Turbo 是蒸馏版本,速度优先,撰文时成本约为一半。
- 编辑三件套没有 Turbo 车道。
duration与numOutputs都影响价格,所以长曲或批量前先跑dry_run=true。
据此可得到一条工作流:在 Turba 上迭代歌词、结构与窗口,再把定稿参数原样搬到 Quality 兄弟成员上跑最终版本。 注意不要把"有 seed 但没有 numOutputs"的成员(其它家族里的某些段落作曲模型就是这样)与这里弄混,scenario-audio 明确写了这条按成员而非按车道区分的规则:有 numOutputs 的就批量取优,有 seed 的就并行多跑几次、每次单独计价。
写歌:prompt 与 lyrics 的分工
这是最容易写错的一节,原文给了四条硬规则:
prompt只写一行的风格说明:流派、情绪、乐器、制作感。歌词不进prompt,因为该字段上限 512 字符,而且它承载的是风格语义。- 歌词放进
lyrics,用段落标签整形:[Verse]、[Chorus]这类标签划分段落;- 标签内可以带方向,例如
[Bridge - whispered]; - 和声写在括号里;
- 需要嘶吼/高音推进的行用大写;
- 换行分隔句子,段落之间空行(这条在 scenario-minimax-music 的歌词语法里也有对应说明)。
- 纯器乐用
instrumental: true,不要靠在描述里写 "no vocals"。 - 速度与调性用专用字段(
bpm、keyscale,如 "C Major"),不要塞进描述文本。
一个可直接复用的参数对象:
{
"prompt": "indie folk, warm, fingerpicked guitar, soft female vocals",
"lyrics": "[Verse]\nwoke up to the kettle's hum\n...\n[Chorus]\nhold the morning, hold it slow\n...",
"duration": 90,
"vocalLanguage": "en"
}
编辑而不整曲重生成
这是 ACE-Step 技能真正的价值所在:它把"改一个地方"拆成几条互不相同的路径,并明确每条路径保证什么、不保证什么。
Cover:保留结构与钩子
Cover 用 srcAudio 生成"可辨识"的改编版本,audioCoverStrength 是核心旋钮,文档给出了三档语义:
audioCoverStrength | 效果 |
|---|---|
| 接近 1 | 忠于原编曲,只做有限变化 |
| 0.5 到 0.6 | 改变流派,但副歌钩子仍然存活 |
| 约 0.2 | 只借用原曲的情绪气质 |
referenceAudio 可以额外贡献流派与感觉;改写的歌词放进 lyrics。
改一句歌词时,两条路线怎么选
原文对"源音色重要"的歌词修正(唱错的一句、必须改掉的人名)给出了一条 Cover 路线:
{
"srcAudio": "<asset id>",
"lyrics": "<完整歌词表,新版本已替换到位>",
"audioCoverStrength": 1,
"numOutputs": 3
}
同时原文非常克制地声明了边界:高强度会偏向源音色,但不保证唱出正确的词、不保证同一位歌手、不保证演绎方式与时间点。 而且"波形差异"既不能证明换人,也不能证明拼接有痕迹。正确做法是:
- 把候选与母带放在一起试听;
- 在两份录音中定位替换区间;
- 只保留修正后的那一段。
拼接是本地编辑工作,不是再跑一次生成:model_scenario-audio-cut 是固定的第一方工具 id(Scenario 唯一确定性的音频裁剪器,所以不需要"发现",search 只会重新推导出同一个 id),用它把选定 take 的片段裁出来,asset_download 下载该片段与母带,本地拼接。MCP 没有把两个音频文件接起来的工具,这一点文档写得很直白:不要为这个缺口去发明新的生成调用。
如果成品要压到画面上,scenario-video-assembly 里的合成器 model_scenario-compose-video 可以把这段音频作为 audio layer 铺在片段上,走时间线而不是拼接。
Repaint:换一个 take 的局部重绘
当"这一段的新的演唱"可以接受时,Repaint 是更短的路径。原文给出的配方由三件事组成,缺一不可:
prompt以固定句式开头:"Repaint the selected section with new sung lyrics:";lyrics传完整歌词表,新版本放在它该在的位置;thinking: false,跳过规划开销。
{
"srcAudio": "<asset id>",
"repaintingStart": 24,
"repaintingEnd": 52,
"thinking": false,
"prompt": "Repaint the selected section with new sung lyrics:",
"lyrics": "<full sheet with the new chorus in place>"
}
要预期的是:这一段的音色会是新的 take。因为窗口被整体重生成,且没有 seed 能钉住任何一次结果。
Complete Track:Vocal2BGM
completeTrackClasses 配合 prompt,围绕一段不完整的录音把分轨编配出来。使用前提写在文档里:源音频要有清晰的旋律与节奏,否则编配缺少可对齐的依据。
Stem Extract:单轨提取
trackName 取十二个固定值之一,从混音中分离出单条分轨。这条能力常被用在"抽干音做卡拉 OK"的场景,但要注意:scenario-audio 明确说明分轨分离每次只产出一条具名分轨(含 vocals),没有 instrumental 选项;想得到"去掉人声的伴奏"并不是一条可以直接点名的分轨,需要另行处理。
完整实战:修复生成歌曲中的副歌
原文的第 4 节给出了一个七步流程,这里完整保留并补上参数形态与判据。
第 1 步:发现成员。 用 search,target="models"、query="ace-step"、public=true,按模式名挑选,例如 model_ace-step-1-5-turbo-text-to-music 与 model_ace-step-1-5-turbo-repaint。这些 id 是撰文时的实际命中,每次会话都应重新发现。
第 2 步:取 schema。 对每个 id 先 model_schema_get,确认字段名、必填、默认值与上限。
第 3 步:先估价。 用 dry_run=true 跑 Text to Music 成员,观察 creativeUnitsCost;改动 duration 或 numOutputs 后要重新估价。
第 4 步:启动并等待。 以 wait=false 触发,然后 jobs_wait 传 job id;超时时用返回的 pending_job_ids 再次调用,绝不重复 model_run。这是 scenario 的核心循环,也是避免重复计费的关键。
第 5 步:试听并记时间窗。 用 asset_display 播放,记下副歌区间,比如 24 到 52 秒。
第 6 步:决定这条修改必须保留什么。
- 只要这一段的新的演唱(音色可变):走 Repaint,参数见上一节。
- 源音色连续性重要:走 Cover,
audioCoverStrength: 1,numOutputs: 3,然后按"编辑而不整曲重生成"里的流程试听、裁剪、拼接。
第 7 步:交付。 再听一遍,asset_download 下载保留的版本,音频不要传 format(它只做图像格式转换,传了会 400 Invalid target format)。
成本、批量与可重复性
三条与预算直接相关的规则散落在文档不同位置,这里汇总:
dry_run是顶层的model_run参数,不是parameters里的键。 scenario-audio 明确提醒:误放进parameters的dry_run仍会扣费,误放的wait会阻塞最多 180 秒。numOutputs是乘法器。 1 到 4 份输出即多份成本,所以"取优"应当用批量而不是反复重跑。- 在已经有母带的情况下,
asset_download不用format。 音频按生成格式(WAV、MP3 等)返回,扩展名以其返回的mimeType为准。
还有一条与"可重复性"直接相关的判断:不要在这些成员上找 seed。 找不到不是遗漏。如果工作流需要"同一段多次尝试后挑一条",那就用 numOutputs 批量;如果成员只有 seed 而没有批量字段,就并行跑多次、每次独立计价。
常见错误清单
原文的最后一节是最有实操价值的部分,逐条对应到具体后果:
| 错误做法 | 后果与正确做法 |
|---|---|
| 指望一个模型自己推断模式 | 每个模式都是独立成员,按名字从 search 里挑 |
把歌词写进 prompt | 该字段上限 512 字符且承载风格,歌词应放 lyrics |
在 trackName 或 completeTrackClasses 里写自由文本(如 "kick drum") | 只有十二个固定值有效 |
| 重绘新歌词却不带那套配方 | 固定前缀 prompt、完整歌词表、thinking: false 三者必须一起用 |
| 想靠重绘修一句词并保留同一位歌手 | 没有 seed 钉住 take,窗口整体重生成,音色可能改变;想要候选应用全强度 Cover 加修正歌词,然后试听 |
在这些成员上找 seed,或在有 seed 的作曲成员上找 numOutputs | 本家族用 numOutputs 批量;有 seed 无批量的成员并行多跑,各自计价 |
| 期望 Repaint 改变曲长 | 窗口只是就地重生成;要变长应走 scenario-audio 讲的 extend 车道(另一个家族的成员),要从零做不同长度则是新的 Text to Music |
最后一条尤其重要,因为它是"选错能力"而不是"写错参数":scenario-audio 明确指出,Repaint、edit、add-layer 这些成员都在原曲时长内重生成,永远不会把歌变长;延长歌曲属于 audio2audio 车道,需要 sections 数组按段决定"保留原曲片段"还是"生成新片段"。
与仓库中其它技能的协作边界
这份技能不是孤岛,读清它与邻居的分工可以少走很多弯路。
与 scenario: 连接、作用域(team_id/project_id)、模型发现、model_schema_get、model_run、jobs_wait、asset_display、asset_download 这套循环全部由核心技能定义。ACE-Step 技能只补充"本家族该怎么用"。
与 scenario-audio: 音频总纲把音乐、音效、语音三条车道分层,并明确 ACE-Step 与 MiniMax Music 同属"歌曲"分支。它还给出跨家族的对比口径:调性、时长、歌词字段各成员不同,因此"一个音频模型的参数不会适配另一个"。
与 scenario-kinetic-music-video: 这是最能体现"文档互相引用"的一处。audio_editing.md 在处理"导演要求改一句发音"时,明确让读者回看本技能:Repaint 提供窗口内的新 take,但不保证同一位歌手、同一条旋律或同一层伴奏;值得尝试源音色连续性时用高强度的 Cover 候选。它还补了一条本技能没有展开的工程细节:送给模型的歌词表应当从手工校正过的 analysis/lyrics.txt 构建,只改目标词,因为歌词表在别处不同会让模型把其它行也唱得不一样,最终只有目标片段可用。
与 scenario-video-assembly: 当一个修正片段要落到画面上时,走 model_scenario-compose-video 的 audio layer,而不是在本地做一个拼接文件再当作视频源。这一层区分了"编辑音频"与"合成视频"两种职责。
维护视角:这份技能为什么长这样
如果要在本仓库里修改或新增类似技能,有几条机制值得知道:
- 附属文件必须被
SKILL.md直接链接。 scripts/check-skill-files.sh 会对每个技能目录检查:除SKILL.md自身与该技能用于维护者说明的README.md之外,每个被 git 跟踪的文件都必须以 markdown 链接形式出现在SKILL.md里,因为 Agent 解析文件引用只深入一层。ACE-Step 目录没有附属文件,所以这条检查对它天然通过。 - 技能正文有字数约束。 scripts/check-style.sh 里设定的是 1000 词目标、2500 词硬上限。这也是为什么这份文档把大量信息压进表格与短句,而不是写成教程散文。
- 改动要过应用测试。 docs/application-test.md 规定的流程是:给一个没有对话历史的新 Agent 只喂
SKILL.md(必要时加scenario核心技能)和一个真实任务,要求它只输出带确切工具名与参数形态的编号计划;然后对照工具参考逐条核对。任何被断言却没有出现在技能文档或工具参考里的内容,都算猜测。这条流程正是"每个模式一个成员""歌词不进 prompt"这类事实必须写在文档里、而不能靠 Agent 直觉的原因。 - 分组与安装清单是生成物。 skills.sh.json 把 ACE-Step 归入 "Audio model families",与 MiniMax Music、ElevenLabs、Sonilo 并列;插件清单由
scripts/generate-plugin-manifest.mjs从该文件生成,不应手改。
把这几条放在一起看,ACE-Step 技能的设计取向就很清楚了:用成员拆分消除模式歧义,用 schema 承担参数真相,用"不保证什么"的显式声明代替乐观假设。 对使用者来说,最省成本的做法也由此确定:先用 Turbo 和 dry_run 把歌词、结构与时间窗试出来,再把这些参数原样搬到 Quality 上做终版;需要改一句话时,先判断"能否接受新的 take",能就用 Repaint 的固定配方,不能就走全强度 Cover 加本地裁剪拼接,并把不确定性如实写在交付说明里。
【免费下载链接】skills
Get production-ready images, video, audio, and 3D from any AI agent: skills that pick the right model, price before spending, and keep characters and brands consistent through the Scenario MCP, plus expert teams that drive Blender, Maya, ZBrush, Unreal, and Unity.
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



