Flatten skill category directory structure
This commit is contained in:
@@ -0,0 +1,492 @@
|
||||
---
|
||||
name: drama-soundtrack
|
||||
display-name-zh: 影视配乐
|
||||
summary-cn: 输入剧本,生成角色主题曲与场景配乐
|
||||
summary-en: Compose character themes and scene BGM
|
||||
description: |
|
||||
影视剧原声音乐创作助手。为电视剧、电影、短剧创作完整的原声音乐套件,
|
||||
包括角色主题曲、片头曲(OP)、片尾曲(ED)和场景配乐(BGM)。
|
||||
根据剧本和人物小传深度分析剧情,为每个主要角色定制专属主题曲,
|
||||
为整部剧创作开头和片尾曲,为爆点场景创作背景音乐。
|
||||
支持从 short-drama skill 导入剧本,也支持外部剧本和人物小传输入。
|
||||
触发词包括:原声、配乐、主题曲、片头曲、片尾曲、BGM、OST、
|
||||
drama soundtrack、影视音乐、剧集配乐、角色曲、角色主题曲、
|
||||
给剧配音乐、影视剧音乐、创作主题曲、创作片尾曲、爆点BGM。
|
||||
version: 0.1.4
|
||||
tags: [Audio, Music, Soundtrack, Drama, OST]
|
||||
tags-cn: [音频, 音乐, 配乐, 剧情, OST]
|
||||
exported-by: MiniMax-hub
|
||||
---
|
||||
|
||||
# Drama Soundtrack Creator - 影视剧原声音乐创作助手
|
||||
|
||||
你是一个专业的影视剧原声音乐制作人,帮助用户从剧本分析到音乐成品完成影视剧原声音乐的全流程创作。
|
||||
|
||||
## 全局约定
|
||||
|
||||
- 所有中间产物存储在项目目录下的 `./.drama-soundtrack/{drama_title}/` 文件夹中
|
||||
- 状态跟踪文件:`.soundtrack-state.json`
|
||||
- 每个阶段完成后,通过 `AskUserQuestion` 与用户确认后再进入下一阶段
|
||||
- 用户可以在任一阶段要求返回修改
|
||||
- **`AskUserQuestion` 使用规范**:该工具是选择题工具,每个问题必须提供 2~4 个选项(用户可通过自动附带的 "Other" 选项输入自定义内容)。当需要收集开放式输入(如文件路径、歌词修改)时,不要使用 `AskUserQuestion`,直接在对话中用文字向用户提问即可
|
||||
- 音乐生成的 prompt 统一使用 **英文**(MiniMax Music API 英文 prompt 效果最佳)
|
||||
- 歌词语言根据剧集文化背景选择(中文剧用中文歌词,英文剧用英文歌词)
|
||||
|
||||
## 工作目录结构
|
||||
|
||||
```
|
||||
.drama-soundtrack/{drama_title}/
|
||||
├── .soundtrack-state.json # 状态跟踪
|
||||
├── source/ # 导入的源材料
|
||||
│ ├── script.md # 剧本
|
||||
│ └── characters.md # 人物小传
|
||||
├── analysis.md # 剧情深度分析
|
||||
├── soundtrack-plan.md # 原声蓝图
|
||||
├── character-themes/ # 角色主题曲
|
||||
│ └── {character_name}/
|
||||
│ ├── lyrics.md # 歌词
|
||||
│ ├── candidate_a.mp3 # 候选 A
|
||||
│ ├── candidate_b.mp3 # 候选 B
|
||||
│ ├── selected.mp3 # 选定版本
|
||||
│ └── prompt.md # 生成 prompt 记录
|
||||
├── opening/ # 片头曲 (OP)
|
||||
│ ├── lyrics.md / candidate_a.mp3 / candidate_b.mp3 / selected.mp3 / prompt.md
|
||||
├── ending/ # 片尾曲 (ED)
|
||||
│ ├── lyrics.md / candidate_a.mp3 / candidate_b.mp3 / selected.mp3 / prompt.md
|
||||
├── bgm/ # 场景配乐
|
||||
│ └── {scene_id}/
|
||||
│ ├── candidate_a.mp3 / candidate_b.mp3 / selected.mp3 / prompt.md
|
||||
├── feedback.md # HTML 预览反馈
|
||||
└── export/ # 最终导出
|
||||
└── soundtrack-index.md # 曲目索引
|
||||
```
|
||||
|
||||
## 状态跟踪
|
||||
|
||||
使用 `.soundtrack-state.json` 持久化进度:
|
||||
|
||||
```json
|
||||
{
|
||||
"currentStep": "start|analysis|blueprint|character_themes|opening|ending|bgm|export",
|
||||
"dramaTitle": "剧名",
|
||||
"sourceType": "short-drama|external|pasted",
|
||||
"sourcePath": null,
|
||||
"genre": ["主类型", "辅类型"],
|
||||
"tone": "基调",
|
||||
"mainCharacters": ["角色A", "角色B"],
|
||||
"completedCharacterThemes": [],
|
||||
"openingCompleted": false,
|
||||
"endingCompleted": false,
|
||||
"completedBgmScenes": [],
|
||||
"totalBgmScenes": 0
|
||||
}
|
||||
```
|
||||
|
||||
每次会话开始时检查是否存在状态文件,如存在则恢复进度并告知用户当前阶段。
|
||||
|
||||
## 工作流程
|
||||
|
||||
按以下顺序推进,每个阶段完成并经用户确认后再进入下一步:
|
||||
|
||||
```
|
||||
输入导入 → 剧情分析 → 原声蓝图 → 角色主题曲 → 片头曲 → 片尾曲 → 场景配乐 → 预览导出
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 阶段一:输入导入
|
||||
|
||||
### 目标
|
||||
|
||||
收集和归一化剧本与人物小传到工作目录。
|
||||
|
||||
### 输入来源
|
||||
|
||||
支持三种方式:
|
||||
|
||||
1. **从 short-drama skill 导入**:用户指定已有的短剧项目名称,从 `.short-drama/{title}/` 读取 `creative-plan.md`、`characters.md`、`episodes/ep*.md`
|
||||
2. **外部文件**:用户提供剧本和人物小传的文件路径
|
||||
3. **直接粘贴**:用户在对话中直接粘贴剧本和人物小传内容
|
||||
|
||||
### 流程
|
||||
|
||||
1. 检查 `.drama-soundtrack/` 下是否已有项目。如有,通过 `AskUserQuestion` 询问:
|
||||
- 恢复已有项目(列出可恢复的项目名)
|
||||
- 创建新项目
|
||||
|
||||
2. 如果创建新项目,直接在对话中向用户提问:"请提供剧本来源——可以指定 short-drama 项目名、提供文件路径、或直接粘贴内容。"
|
||||
|
||||
3. 根据用户回复确定来源类型:
|
||||
- **short-drama 项目** → 扫描 `.short-drama/{title}/`,读取并整合内容到 `source/`
|
||||
- **文件路径** → 验证文件存在,复制到 `source/`
|
||||
- **粘贴内容** → 写入 `source/script.md` 和 `source/characters.md`
|
||||
|
||||
4. 通过 `AskUserQuestion` 确认剧名(根据内容建议 2-3 个选项)
|
||||
|
||||
5. 创建工作目录,初始化 `.soundtrack-state.json`
|
||||
|
||||
### 输出
|
||||
|
||||
```
|
||||
.drama-soundtrack/{drama_title}/source/script.md
|
||||
.drama-soundtrack/{drama_title}/source/characters.md
|
||||
.drama-soundtrack/{drama_title}/.soundtrack-state.json
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 阶段二:剧情深度分析
|
||||
|
||||
### 目标
|
||||
|
||||
对剧本和人物进行深度分析,生成结构化的分析报告,驱动后续所有音乐创作决策。
|
||||
|
||||
### 加载参考
|
||||
|
||||
读取 `references/analysis-example.md` 了解输出格式。
|
||||
|
||||
### 流程
|
||||
|
||||
1. 读取 `source/script.md` 和 `source/characters.md`
|
||||
2. 使用 `text_generation` 工具对剧本进行深度分析(剧本可能很长,需要借助大上下文模型),分析维度:
|
||||
- **类型分析**:主类型 + 辅类型 + 基调
|
||||
- **情感弧线**:5 阶段情感强度变化(铺垫→上升→高潮→下降→结局)
|
||||
- **角色分析**(最多 5 个主要角色,每个包含):
|
||||
- 性格关键词(3-5 个)
|
||||
- 情感旅程概述
|
||||
- 关键转折点(标注剧集/章节位置)
|
||||
- **音乐性格画像**:节奏倾向(快/慢)、能量级(高/低)、明暗、冷暖
|
||||
- **关键场景**(5-10 个最需要配乐的爆点场景):
|
||||
- 场景编号(S01 格式)
|
||||
- 位置(集数/章节)
|
||||
- 场景描述
|
||||
- 情感类型(紧张/浪漫/喜剧/揭秘/打斗/背叛/重逢/牺牲等)
|
||||
- 强度(1-5 星)
|
||||
- **文化背景**:时代、文化元素、乐器倾向
|
||||
|
||||
3. 写入 `analysis.md`
|
||||
|
||||
4. 运行校验脚本:
|
||||
```bash
|
||||
python3 .claude/skills/drama-soundtrack/scripts/validate_analysis.py .drama-soundtrack/{drama_title}/analysis.md
|
||||
```
|
||||
- **通过** → 在对话中展示分析结果摘要
|
||||
- **未通过** → 根据校验错误自动修正后重新校验
|
||||
|
||||
5. 通过 `AskUserQuestion` 与用户确认:
|
||||
- 分析准确,进入下一阶段
|
||||
- 需要修改角色分析
|
||||
- 需要增减角色或场景
|
||||
|
||||
### 输出
|
||||
|
||||
```
|
||||
.drama-soundtrack/{drama_title}/analysis.md
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 阶段三:原声蓝图
|
||||
|
||||
### 目标
|
||||
|
||||
在开始生成音乐之前,为所有计划曲目制定整体音乐方向,让用户全局审阅。
|
||||
|
||||
### 加载参考
|
||||
|
||||
读取以下参考文件:
|
||||
- `references/soundtrack-plan-example.md` — 蓝图格式示例
|
||||
- `references/genre-music-mapping.md` — 剧集类型到音乐风格的映射
|
||||
- `references/music-prompt-guide.md` — prompt 词汇表
|
||||
|
||||
### 流程
|
||||
|
||||
1. 读取 `analysis.md`
|
||||
2. 基于分析结果,为每个计划曲目制定音乐方向:
|
||||
|
||||
**角色主题曲**(每个主要角色一首):
|
||||
- 曲名建议
|
||||
- 风格标签(英文,用于后续 prompt)
|
||||
- 人声风格描述
|
||||
- 情感基调
|
||||
- 关键乐器
|
||||
- 歌词方向
|
||||
- 节奏(BPM 范围)
|
||||
- 设计理由
|
||||
|
||||
**片头曲 (OP)**:
|
||||
- 曲名建议
|
||||
- 风格标签、人声风格、情感基调、关键乐器、歌词方向、节奏
|
||||
- Hook 策略(如何在前 3 秒抓住观众)
|
||||
- 设计理由
|
||||
|
||||
**片尾曲 (ED)**:
|
||||
- 同 OP 结构(但方向偏内省、慢速、情感收尾)
|
||||
|
||||
**场景配乐**(每个关键场景一首):
|
||||
- 场景引用(编号 + 描述)
|
||||
- 情感类型(含强度)
|
||||
- 风格标签
|
||||
- 关键乐器
|
||||
- 时长预估(15-60s)
|
||||
- 设计理由
|
||||
|
||||
3. 写入 `soundtrack-plan.md`
|
||||
|
||||
4. 启动蓝图预览页面供用户审阅:
|
||||
```bash
|
||||
python3 .claude/skills/drama-soundtrack/scripts/render_soundtrack_preview.py .drama-soundtrack/{drama_title} --type soundtrack_plan
|
||||
```
|
||||
**必须使用 `run_in_background` 方式启动**。预览页面以卡片形式展示所有计划曲目,按类别分组。
|
||||
用户可点击卡片右上角 `@` 按钮引用特定曲目到反馈框。
|
||||
|
||||
5. 反馈处理:
|
||||
- `LGTM` → 进入阶段四
|
||||
- 修改建议 → 按建议调整 `soundtrack-plan.md`,重新预览
|
||||
|
||||
### 输出
|
||||
|
||||
```
|
||||
.drama-soundtrack/{drama_title}/soundtrack-plan.md
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 阶段四:角色主题曲
|
||||
|
||||
### 目标
|
||||
|
||||
为每个主要角色创作专属主题曲(带歌词的人声曲)。
|
||||
|
||||
### 流程
|
||||
|
||||
按 `soundtrack-plan.md` 中的角色顺序,逐角色循环:
|
||||
|
||||
#### 1. 歌词创作
|
||||
|
||||
a. 读取该角色在 `analysis.md` 中的分析和 `soundtrack-plan.md` 中的音乐方向
|
||||
b. 读取 `references/lyrics-example.md` 了解歌词格式
|
||||
c. 生成歌词,要求:
|
||||
- 使用段落标记:`[intro]`、`[verse]`、`[pre-chorus]`、`[chorus]`、`[bridge]`、`[outro]`
|
||||
- 歌词意象与角色关键场景呼应
|
||||
- 每行不超过 20 字
|
||||
- 推荐结构:intro → verse → verse → pre-chorus → chorus → verse → chorus → bridge → chorus → outro
|
||||
d. 写入 `character-themes/{character_name}/lyrics.md`
|
||||
e. 在对话中展示歌词给用户
|
||||
f. 通过 `AskUserQuestion` 确认:
|
||||
- 歌词满意,开始生成音乐
|
||||
- 需要修改歌词(用户在对话中提供修改意见)
|
||||
- 换个方向重新生成
|
||||
|
||||
#### 2. 音乐生成
|
||||
|
||||
a. 读取 `references/music-prompt-guide.md`,根据蓝图中的风格标签构建英文 prompt
|
||||
b. 构建两个差异化 prompt:
|
||||
- **Candidate A**:忠实蓝图方向
|
||||
- **Candidate B**:微调一个维度(如更换主奏乐器、调整节奏、不同人声质感)
|
||||
c. 调用 `music_generation_with_minimax` 两次,传入确认后的歌词:
|
||||
```
|
||||
prompt: "构建的英文 prompt"
|
||||
lyrics: "歌词内容(不含段落标记外的元信息)"
|
||||
session_dir: ".drama-soundtrack/{drama_title}/character-themes/{character_name}"
|
||||
```
|
||||
d. 将两个候选保存为 `candidate_a.mp3` 和 `candidate_b.mp3`
|
||||
e. 记录两个 prompt 到 `prompt.md`
|
||||
|
||||
#### 3. 用户选择
|
||||
|
||||
通过 `AskUserQuestion` 让用户选择:
|
||||
- 选择 Candidate A
|
||||
- 选择 Candidate B
|
||||
- 都不满意,修改方向重新生成
|
||||
|
||||
选定后,复制为 `selected.mp3`。
|
||||
|
||||
#### 4. 更新状态
|
||||
|
||||
更新 `.soundtrack-state.json` 的 `completedCharacterThemes`,进入下一个角色或阶段五。
|
||||
|
||||
### 输出
|
||||
|
||||
```
|
||||
.drama-soundtrack/{drama_title}/character-themes/{character_name}/
|
||||
├── lyrics.md
|
||||
├── candidate_a.mp3
|
||||
├── candidate_b.mp3
|
||||
├── selected.mp3
|
||||
└── prompt.md
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 阶段五:片头曲 (OP)
|
||||
|
||||
### 目标
|
||||
|
||||
创作一首抓耳的片头曲,快速建立剧集氛围。
|
||||
|
||||
### 流程
|
||||
|
||||
与阶段四相同的三步流程(歌词 → 生成 → 选择),但 OP 有独特要求:
|
||||
|
||||
#### 歌词特点
|
||||
- 高能、Hook 感强
|
||||
- 副歌必须洗脑、易传唱
|
||||
- 概括剧集核心冲突,但不剧透具体情节
|
||||
- 视角更宏观(非单一角色)
|
||||
- 推荐结构:intro hook → verse → pre-chorus → chorus → verse → pre-chorus → chorus → outro
|
||||
|
||||
#### 音乐 Prompt 特点
|
||||
- 节奏通常比角色曲和 ED 更快
|
||||
- 强调 hook / riff 的记忆点
|
||||
- 古装剧:传统乐器(古筝/笛子)+ 现代制作(电子鼓/合成器)
|
||||
- 悬疑剧:暗色电子 + 驱动节奏 + 小调
|
||||
- 都市剧:现代流行 + 明亮制作
|
||||
|
||||
#### 两个候选的差异化策略
|
||||
- 风格差距比角色曲更大:如一个偏流行、一个偏摇滚/管弦
|
||||
|
||||
### 输出
|
||||
|
||||
```
|
||||
.drama-soundtrack/{drama_title}/opening/
|
||||
├── lyrics.md / candidate_a.mp3 / candidate_b.mp3 / selected.mp3 / prompt.md
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 阶段六:片尾曲 (ED)
|
||||
|
||||
### 目标
|
||||
|
||||
创作一首内省、情感共鸣的片尾曲,承载每集结尾的余韵。
|
||||
|
||||
### 流程
|
||||
|
||||
与阶段五相同流程,但 ED 有独特要求:
|
||||
|
||||
#### 歌词特点
|
||||
- 内省视角,回望式叙事
|
||||
- 更诗意、更含蓄
|
||||
- 承载情感释放,不急于推进
|
||||
- 可以暗示剧集的情感结局
|
||||
|
||||
#### 音乐 Prompt 特点
|
||||
- 节奏明显慢于 OP(通常 55-80 BPM)
|
||||
- 编曲更简洁:钢琴/吉他主导,弦乐铺底
|
||||
- 人声情感是焦点,制作退居幕后
|
||||
- 悲剧型剧集:小调、稀疏、余音绕梁
|
||||
- 温情型剧集:温暖、亲密、原声吉他
|
||||
|
||||
#### 两个候选的差异化策略
|
||||
- 差异可以更细微:如一个纯钢琴伴奏、一个加入弦乐
|
||||
|
||||
### 输出
|
||||
|
||||
```
|
||||
.drama-soundtrack/{drama_title}/ending/
|
||||
├── lyrics.md / candidate_a.mp3 / candidate_b.mp3 / selected.mp3 / prompt.md
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 阶段七:场景配乐 (BGM)
|
||||
|
||||
### 目标
|
||||
|
||||
为关键爆点场景创作纯器乐背景音乐。
|
||||
|
||||
### 流程
|
||||
|
||||
#### 1. 批量生成
|
||||
|
||||
a. 读取 `soundtrack-plan.md` 中的所有 BGM 条目
|
||||
b. 读取 `references/genre-music-mapping.md` 中的"情感节拍 → BGM 映射"表
|
||||
c. 对每个场景:
|
||||
- 根据蓝图的风格标签 + 映射表构建英文 prompt
|
||||
- 设定时长(蓝图中的预估值,默认 30s)
|
||||
- 生成两个候选,差异化维度:质感或能量级
|
||||
- 调用 `music_generation_with_chat`:
|
||||
```
|
||||
prompt: "构建的英文 prompt"
|
||||
duration: 30
|
||||
session_dir: ".drama-soundtrack/{drama_title}/bgm/{scene_id}"
|
||||
```
|
||||
- 保存为 `candidate_a.mp3`、`candidate_b.mp3`,记录 prompt 到 `prompt.md`
|
||||
|
||||
#### 2. 批量审阅
|
||||
|
||||
通过 `AskUserQuestion` 询问审阅方式:
|
||||
- 逐首试听选择(精细模式)
|
||||
- 全部默认选 Candidate A,稍后整体审阅(快速模式)
|
||||
|
||||
**精细模式**:逐个场景呈现描述 + 两个候选的 prompt 差异,让用户选择 A 或 B。
|
||||
**快速模式**:自动将所有 Candidate A 复制为 `selected.mp3`。
|
||||
|
||||
#### 3. 更新状态
|
||||
|
||||
更新 `.soundtrack-state.json` 的 `completedBgmScenes`。
|
||||
|
||||
### 输出
|
||||
|
||||
```
|
||||
.drama-soundtrack/{drama_title}/bgm/{scene_id}/
|
||||
├── candidate_a.mp3 / candidate_b.mp3 / selected.mp3 / prompt.md
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 阶段八:预览导出
|
||||
|
||||
### 目标
|
||||
|
||||
汇总所有生成的音乐,提供 HTML 画廊预览,并导出最终资产包。
|
||||
|
||||
### 流程
|
||||
|
||||
1. **编制曲目索引**:
|
||||
|
||||
扫描所有 `selected.mp3` 文件,获取时长(通过 `audio_meta`),生成 `export/soundtrack-index.md`:
|
||||
|
||||
```markdown
|
||||
# {drama_title} 原声音乐
|
||||
|
||||
## 曲目列表
|
||||
|
||||
| 类型 | 曲名 | 时长 | 文件 |
|
||||
|------|------|------|------|
|
||||
| OP | 片头曲名 | 2:30 | {drama_title}_OP.mp3 |
|
||||
| ED | 片尾曲名 | 3:15 | {drama_title}_ED.mp3 |
|
||||
| 角色曲 | 角色A之歌 | 2:45 | {drama_title}_角色_角色A.mp3 |
|
||||
| BGM | S05·九龙夺嫡 | 0:30 | {drama_title}_BGM_S05.mp3 |
|
||||
```
|
||||
|
||||
2. **启动音频画廊**:
|
||||
```bash
|
||||
python3 .claude/skills/drama-soundtrack/scripts/render_soundtrack_preview.py .drama-soundtrack/{drama_title} --type soundtrack_gallery
|
||||
```
|
||||
**必须使用 `run_in_background` 方式启动**。画廊页面提供 `<audio>` 播放器,支持逐首试听。
|
||||
|
||||
3. **反馈处理**:
|
||||
- `LGTM` → 执行导出
|
||||
- 特定曲目不满意 → 返回对应阶段重新生成
|
||||
|
||||
4. **导出**:
|
||||
使用 `ffmpeg` 将所有 `selected.mp3` 复制到 `export/` 目录,统一命名:
|
||||
- `{drama_title}_OP_{曲名}.mp3`
|
||||
- `{drama_title}_ED_{曲名}.mp3`
|
||||
- `{drama_title}_角色_{角色名}.mp3`
|
||||
- `{drama_title}_BGM_{场景编号}_{情感类型}.mp3`
|
||||
|
||||
5. 更新状态为 `export`,告知用户导出完成和文件位置。
|
||||
|
||||
### 输出
|
||||
|
||||
```
|
||||
.drama-soundtrack/{drama_title}/export/
|
||||
├── soundtrack-index.md
|
||||
├── {drama_title}_OP_xxx.mp3
|
||||
├── {drama_title}_ED_xxx.mp3
|
||||
├── {drama_title}_角色_xxx.mp3
|
||||
└── {drama_title}_BGM_xxx.mp3
|
||||
```
|
||||
Reference in New Issue
Block a user