
这是什么
一个 Strudel(浏览器里的实时编码音乐语言)分支,上面加了一套多模态 agent 回路。按住键说话、打一行字、或点一个预设按钮,都走同一条流水线:变成 Strudel 代码,替换掉正在播放的那段 pattern;音频调度器保持原有的循环,所以改动在下一小节到位,而不是把音乐停掉。语音识别和代码生成都可插拔,每个后端都能纯本地免费跑——语音用 whisper 或 vosk,模型用 Ollama——也可以指向任何 OpenAI 兼容端点。
谁做的他的 GitHub 显示名是 `d2VpanQ2MDY`——也就是他用户名 weijt606 的 base64,而这个身份同样出现在本仓库的提交记录里。他的主页写着自己「Shipping AI agents, tools, and weird ideas」,主张「Less hype, more working systems」,所在地填的是 Mars。二十一个公开仓库里星最多的是一个把 AI 生成文风「去味」的写作工具;另外两个是他在柏林和巴黎参加 AI 黑客松留下的仓库。
制作过程
7 个阶段- 01
回路是什么,以及「热替换」到底指什么
三种输入方式——按住说话的语音、文本框、以及十个可点击的预设按钮——都汇入同一条流水线:输入是音频就先转写,带着当前会话发给模型,拿回 Strudel 代码,校验,然后替换正在运行的那段 pattern。这个项目立身的说法是:这个过程从不打断播放。编辑器里的一切都由 Strudel 的循环时钟调度,新 pattern 是在循环边界上换进去的,而不是重启调度器,所以改动落在下一小节。如果生成的代码没通过校验,替换会被回滚,原来的 pattern 继续播——这是「现场工具」和「演示品」的区别:它的失败形态是「什么都没变」,而不是静音。
- 02
快到能上台用语音后端
语音识别有三个可切换的后端,README 里那张延迟表是整个项目里最有意思的工程判断。本地跑 whisper 需要 700–900 毫秒,准确率标注为中等。走 API 要一到两秒,对自由表达准确率高。同样跑在本地的 vosk 只要大约十毫秒——因为它根本不做开放词表识别:它只在一份工具能理解的命令的封闭语法上做匹配。接受受限词表换来了两个数量级,而在这个场景里这笔交易是划算的,因为一个表演者在演出中途对着麦克风说的话(「再狠一点」「把低音切了」「混响大点」)本来就是一个小而已知的集合。同一份文件还提到,浏览器端复用了 Strudel 的 AudioContext,以免录音把播放弄出杂音。
- 03
提交日志记下了 AI 从哪一刻开始被署名
五十九次提交里有二十六次带着 `Co-Authored-By: Claude Opus 4.7` 尾注——十九次直接写模型名,七次写的是 1M 上下文的变体。真正有意思的是它从哪开始。仓库的第一天,2026 年 4 月 26 日,是十六次完全没有尾注的提交;第一次带共同作者的提交在 4 月 27 日,此后大部分都带着。无论原因是什么——新习惯、新工具,还是决定公开——提交日志把它精确地标了日期,这很少见。这和一个仓库的提交在中途换掉作者身份是同一类证据:一个项目是怎么做出来的,记录往往在元数据里,而不在任何人的文字里。
- 04
这个 fork 继承了别人的数据库密钥
第一个 pull request 的标题是「drop upstream Strudel Supabase key + hackathon residue」,描述的是一处从 fork 继承来的真实缺陷。Strudel 代码库里有个文件硬编码了 Supabase 的 URL 和 anon key,指向的是 strudel.cc 项目自己的数据库,于是从一个 VibeRave 部署发出的每一次短分享链接或公开 pattern 查询,都写进了别人的后端。修复把两个值移进环境变量,并在未设置时让调用点直接短路。同一个提交还清理了它自己称作 hackathon residue 的东西:一条针对某编辑器目录的 ignore 规则、音频指标文件里一句「good enough for a hackathon demo」的注释,以及词库文件里作者字段写着「voice pipeline / hackathon」。结合他另外两个黑客松仓库,以及 README 顶部那张画成机架管线的 banner——上面印着「Made in Berlin — built for the rave」——这个项目的来历不用任何人说明就能读出来。
- 05
所有曲风听起来都一样
第二个 pull request 是对提示词设计的复盘,而且对失败原因的交代异常具体。agent 产出的东西「每个曲风都差不多、都中等密度,因为有三条规则被过度套用」:一条 lushness 规则要求每轨都有氛围,于是连 trap 和 minimal 都自动配上幽灵 pad,所有曲风都收敛到同一种「丰润电子」的性格;一条 variation 规则硬性要求至少四层,结果稀疏曲风喘不过气,密集曲风也没法超出这个下限;而复杂度这个维度根本不存在,于是「complex deep house」拿到的是和「deep house」一样的四层模板。修复把 lushness 规则分成几档——ambient、dub、lo-fi、jazz 要求氛围,trap、minimal、IDM、breakcore、chiptune 默认干声——并补上缺失的那个维度。这份文档有用,是因为「音乐听起来都一样」这个症状和「三条规则互相打架」这个成因,通常比这里难联系得多。
- 06
这个 rave 工具长出了一个课堂模式
文档里有一份九千二百字的中文指南,讲怎么把 VibeRave 用在中小学音乐课上,带着十分钟和二十分钟两档课时表、课前准备清单,以及儿歌、进行曲、动物嘉年华的提示词建议。有两个细节说明它不只是翻译练习。应用内置了 family mode,会屏蔽被认为不适合小朋友的声音——指南点名说它在触发特定关键词时会挡掉 808 sub、FM 失真和暗色滤波。而且它建议课堂演示时把 whisper 和 Ollama 跑在本地,理由不是隐私,而是别让一堂课依赖学校的网络。默认的 rave 风格背景图也可以换,指南建议换成卡通乐器或五线谱。
- 07
数字长什么样
五十九次提交,其中四十三次集中在 2026 年 4 月 26 日首次开源发布后的头五天,`main` 上最新一次是 2026 年 7 月 16 日。五百四十八个文件、二十四 MB,绝大部分是继承来的 Strudel 代码库;README 本身就有五万五千字符,旁边还有一份五万二千字符的中文版。没有 release,没有 tag。十颗星、一个 fork。两个 pull request 都是作者自己开、自己合,也没有任何评论。没有线上部署:这是一个自托管应用,你自己装好、指向自己的模型。仓库自己的事件流里能看到一条悬着的线索:9 月 4 日有一次创建、到 9 月 7 日共三次推送、9 月 10 日一次删除,而分支列表里仍然只有 `main`、也没有 tag——也就是说,这个仓库最近的动作是一次没有落地的改动。