内容
# OpenReaper
OpenReaper 是一个开源的 MCP 桥接和代理内核,适用于 REAPER,由 Streetlight Studio 开发。内部代码名称在许多软件包名称、日志和路径中仍为 Streetlight,但公共项目名称为 OpenReaper。OpenReaper 是独立且非官方的,与 Cockos 或 REAPER 项目无关。
第一个目标很小:让任何具有 MCP 功能的代理都可以通过安全、类型化、可测试和可撤销的操作来控制 REAPER。游戏音频是第一个官方工作流程包,但不是系统的限制。
## 功能
OpenReaper 为代理提供了一个紧凑的工具表面:
- 检查当前 REAPER 项目状态
- 导入和排列音频
- 为选定的项目创建变体
- 应用常见的游戏音频编辑,如音调、速率、反转、修剪、淡入淡出、区域和渲染
- 运行测试过的 Lua 模板,而不是要求 LLM 从头开始创建 ReaScript
- 通过模式、风险级别、日志和验证来暴露功能
预期第一个工作流程:
> 选择或提供源声音,要求代理提供影响/武器/UI/音效变体,然后让 OpenReaper 在 REAPER 中创建编辑后的项目、区域和渲染的 WAV 文件。
## 为什么是这种形式
LLM 在规划声音设计工作方面很有用,但当它们自由编写 REAPER Lua 时,不是很可靠。OpenReaper 将创意规划保留在代理中,并将 DAW 操作转移到具有明确模式的测试模板中。
这为项目提供了三个有用的属性:
- 与代理无关:与 Codex、Claude Code、Cursor 或任何 MCP 客户端一起工作
- REAPER 原生:使用 ReaScript 和用户本地的 REAPER 安装
- 可扩展:可以通过模板和配方添加新的工作流程,而无需重建整个应用程序
## 如何运行影响变体演示
这是 v0.1 验收演示:从一个选定的媒体项目中,OpenReaper 生成一个新的轨道上的 8 个命名变体,将每个变体包裹在一个区域中,并将它们渲染为 8 个 WAV 文件。
### 先决条件
在第一次运行之前,请确认以下每个先决条件 - 这里的错误通常会导致演示在途中因类型错误而失败。
首次在 Mac 上安装:双击 `install.command`,或从存储库根目录运行 `npm install && npm run build && npm run setup`。然后在 REAPER 中注册生成的启动器(操作 → 显示操作列表 → ReaScript:加载... → `~/Library/Application Support/REAPER/Scripts/Streetlight/start_bridge.lua`),并将 `setup-out/<your-client>.*` 中的代码片段复制到您的 MCP 客户端配置中。启动器路径仍然显示为 `Streetlight`,因为这是 v0.1 内部内核名称和兼容性路径。Windows 有 `install.cmd` / `install.ps1` 作为实验性便捷路径,但 v0.1 的实时验证是 macOS。详细步骤请参见 [docs/INSTALL.md](docs/INSTALL.md);跨 Mac 复制请参见 [docs/CROSS_MAC_SMOKE.md](docs/CROSS_MAC_SMOKE.md)。
1. **REAPER 7.x 正在运行**,并且加载了 OpenReaper / Streetlight 桥接。控制台(`视图 → 显示控制台`)显示 `bridge ready (generation N) — templates: …`。请参见 [docs/INSTALL.md](docs/INSTALL.md)。
2. **“在后台渲染”已启用。** `REAPER → 首选项 → 音频 → 渲染 → “在后台渲染(不适用于排队渲染)”` 已勾选。对于 `render_region` 来说是必需的 - 请参见 [INSTALL.md § 需求](docs/INSTALL.md#reaper-preferences-required-for-v01)。
3. **选择一个全新的或空的输出目录**(例如 `~/Desktop/streetlight-demo/`)。必须是 **绝对路径**(Lua 的 `io.open` 不会扩展 `~` - 使用解析路径,例如 `/Users/you/Desktop/streetlight-demo/`)。目录必须存在且可写入;演示不会覆盖现有文件(`OUTPUT_FILE_EXISTS`)。
4. **选择一个全新的项目**,或至少确认没有现有的区域命名为 `var_01` 到 `var_08`。演示会创建具有这些名称的区域;冲突会显示 `REGION_NAME_TAKEN` 并停止运行。
5. **在 REAPER 中选择一个媒体项目** - 这是变体的来源。配方会绑定该项目的 GUID,并在每次重复时重用它;如果初始选择计数不恰好为 1,则代理将被指示在任何突变调用之前中止。
6. **MCP 服务器已注册**,并与您的代理客户端(Codex / Claude Code)一起使用。`ping` 应该在 1 秒内往返。
### 提示
在您的具有 MCP 功能的代理中,发送:
```text
使用 OpenReaper 从选定的项目中创建 8 个影响变体。首先调用 list_recipes 并逐步执行 impact_variations, 将所有 8 个 WAV 渲染到 /absolute/path/to/your/output_dir。
```
替换您在先决条件 #3 中确认的绝对路径。
### 应该发生的情况
- 一个名为 `Streetlight - Impact Variations` 的新轨道出现
- 8 个从源项目复制的项目(`var_01` 到 `var_08`)位于该轨道上,每个项目都应用了配方的音调/速率/淡入淡出
- 8 个区域包裹着这些项目
- 8 个 WAV 文件出现在您的输出目录中,命名为 `var_01.wav` 到 `var_08.wav`(24 位 PCM,项目采样率,立体声)
- **输出目录仅包含这 8 个 WAV 文件,无其他文件** - 特别是,没有 `<region>.wav.RPP` / `<region>.wav.RPP-bak` 项目复制侧车。v0.1 通过有保护的清理强制执行此 WAV-only 工件合约,而不是 REAPER 配置抑制:在每次渲染之前,`render_region` 如果目标已经存在 `.wav`、`.wav.RPP` 或 `.wav.RPP-bak`,则拒绝启动(类型为 `OUTPUT_FILE_EXISTS`),并且在成功渲染后,它会删除 WAV 旁边编写的任何侧车 REAPER。在输出目录中出现 `.RPP` 或 `.RPP-bak` 侧车意味着有保护的清理合约回归;请报告。
- 代理报告返回 8 个文件路径和每个变体的参数
典型硬件的总时钟时间:不到 3 分钟。
`Cmd+Z` 按模板一步一步地恢复项目更改(大约 30 步,以完全恢复项目、轨道和区域)。磁盘上的渲染 WAV 文件不是项目状态的一部分,不会被撤销删除。
### 如果它在途中停止
代理将看到的可恢复错误,并且通常可以重试:
- `OUTPUT_DIR_MISSING` / `OUTPUT_DIR_NOT_WRITABLE` - 修复先决条件 #3
- `OUTPUT_FILE_EXISTS` - 选择一个新输出目录或删除旧的 `var_*.wav`
- `REGION_NAME_TAKEN` - 新项目,或删除旧的 `var_01..var_08` 区域
- `BRIDGE_NOT_RUNNING` 在 `render_region` 上 - 通常意味着“后台渲染”已关闭;请参见先决条件 #2
`list_recipes` 是一个文档 - OpenReaper 不会为您执行配方。代理读取 YAML 并发出一个 `call_template`,每个步骤都是如此。如果您希望自己驱动循环,模板和参数都列在 `recipes/impact_variations.yaml` 中。
## 架构
```text
具有 MCP 功能的代理
Codex / Claude Code / Cursor / 未来桌面 UI
|
v
streetlight-mcp
类型化的工具和模式
|
v
streetlight-core
操作验证、模板、配方
|
v
streetlight-bridge.lua
在 REAPER 中运行
```
有关 v0.1 完整规范,请参见 [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md)。
有关内核模型背后的更深入设计和类比,请参见 [docs/KERNEL_DESIGN.md](docs/KERNEL_DESIGN.md)。
## MVP
MVP 是一个完善的循环,而不是功能目录:
1. 将 MCP 代理连接到正在运行的 REAPER 会话
2. 读取选定的项目和项目上下文
3. 从一个源声音创建 6-10 个可用的变体
4. 将变体放置在具有清晰名称的轨道上
5. 创建区域
6. 将 WAV 文件渲染到输出文件夹
7. 返回更改的结构化报告
有关具体的逐文件构建计划,请参见 [docs/IMPLEMENTATION_PLAN.md](docs/IMPLEMENTATION_PLAN.md)。
有关 MVP 演示的渲染机制,请参见 [docs/RENDER_NOTES.md](docs/RENDER_NOTES.md)。
## 路线图
有关应该在第一个可靠工作流程之后等待的内容,请参见 [docs/ROADMAP.md](docs/ROADMAP.md)。
内部规划、粗略策略和私人笔记应存在于此公共存储库之外。
## 非 v0.1 目标
- 独立桌面 UI
- 语义声音库搜索
- Wwise 集成
- ElevenLabs 或其他生成服务
- 自动 SWS/ReaPack 安装
- 通用 DAW 支持
- 无限制远程代码执行
## 许可证
在首次公开发布前确定。