知漪
MURRIPPLE

给它一首歌加一份歌词,它产出一个零依赖的单文件网页——双击即开、 可发给任何人——以及一份 1080p60 的 MP4

全部跑在你自己的机器上 一次外部接口调用都没有 产物是一个文件 画面是时间的纯函数

1成品长什么样

下面这个就是它吐出来的东西:一个 HTML 文件,没有别的。

10.9 MB 的单文件页面(音频整个内嵌在里面),要联网才载得进来。 这个介绍站本身不联网也能看,只有这一个方框例外。

这首歌是谁的

《Trempe-moi》——音乐由 Suno 生成、歌词由 YU Miao 创作,版权归他本人。 它是这个项目的第五首歌,也是第一首非中文的(法语)。

也可以直接开:在新标签页打开成品 ↗

2界面长什么样

不想碰命令行的话,它自带一个只跑在本机的网页壳子。

演示 下面那个链接打开的是产品界面本身,但它不会真的算。

点进去按「开始」,界面会真的跑起来——日志一行行滚、进度条依次亮、最后 跳出成品链接。滚出来的每一行都是真的:2026-08-15 在 《Trempe-moi》上真跑一次 murripple run 的逐行实录, 一个字没编。

但它只是在放录像。真跑要在你自己机器上起 Demucs 和 WhisperX,那一次实测 121.9 秒;演示按 ×8 播,页面顶上 那个时钟走的是真跑那次的秒数,不是播放秒数。

打开界面演示 →

实录原文:docs/site/demo/run-log.txt · 出处与重抄步骤:docs/site/demo/README.provenance.md
演示页是 murripple/web/static/index.html 逐字节加一块补丁, 守卫 tests/test_site.py 把补丁减掉后要求与产品那个文件完全相等

那一次真跑,机器上发生了什么

238.3秒 · 这首歌的长度
121.9秒 · 整趟跑完(这台机器)
34句歌词,全部对上
10.9MB · 产物那一个文件

这四个数出自同一次跑:docs/site/demo/run-log.txt(macOS 24.1.0 / arm64,2026-08-15)。它是一首歌、一台机器的实测,不是一个分布 ——换一首歌、换一台机器,最花时间的那一步(音源分离与歌词对齐)会完全 不一样。

3怎么在自己机器上跑

这个站不承担任何算力——它只是介绍。真要用,得把项目装到本地。

代码在这里

github.com/ymustc/murRipple-public —— 许可证是 PolyForm Noncommercial 1.0.0不是开源许可证: 随便改、随便玩、随便研究,不能商用。 仓里带着下面那首示例歌,clone 完就能跑一次真的,不必先去找素材。

成品那一页单独放在 ymustc/murripple-demo—— 一个仓只装一个 index.html,那就是这套工具的产出长什么样。

前置:Python 3.11(锁定,不支持 3.13——Demucs 与 3.13 不兼容)、 ffmpeg,以及包管理器 uv

# 装依赖(歌词对齐是可选 extra,不装也能跑,只是降级为无歌词继续)
uv sync --group dev --extra align

# 起一个只跑在本机的网页壳子,终端会打印一行地址
uv run murripple serve

# 或者走命令行:分析 + 打包,每步先看产物在不在,在就跳过
uv run murripple run songs/<歌曲目录> --title "歌名"

壳子只绑环回地址——同一个局域网里别的机器连不上它。 它拿你给的文件去起子进程,不该交给整个网段。

4它做不到的

这一节和上面几节一样长,是有意的。下面每一条都写在项目自己的文档里。

  • 没有准确率数字。整个项目一个都没有——没有人量过。 量过的三个替代指标全部被推翻:其中一个等于在说「有歌词的地方有人声」, 另一个把整份歌词平移六秒之后反而更好看。 做不到就说做不到,不拿代理指标充数。
  • 面板上七行,能单独静音的只有四个。这不是设计选择, 是分离模型只输出四条分轨。界面上那几行共用一条分轨的会连成一道竖脊, 不点、不悬停就看得出来是一体的——在这之前它一度看上去 像七个独立开关,那是界面在骗人。
  • 自动听写只写草稿,管线一个字都不读它。因为断句是人的事: 实测一首 36 行的歌,自动转写只切回 6 段,而歌词的行数决定对齐质量。 一份行数不对的歌词比没有歌词更坏。
  • 自己作曲那条线还不好听。参数化合成第一版跑通了, 被作者判「不好听」,搁置。当前版本只做「对已有音乐的拆解」。
  • 绘制循环无条件重画,实测占一个核的 111%,暂停时也一样烧。 已定位,未修。
  • 产物有 15,000,000 字节的硬上限,第十条声部装不下。 不是「余量紧张」,是装不下——产物里绝大部分就是内嵌的音频。
逐条出处见项目报告第 2、3、5、6 节(docs/design/2026-08-15-project-report/); 111% 与 6 段是实测数,15,000,000 是 murripple/pack.py 里的常量
为什么把这些摆在介绍站上

因为反过来那一面没法验证。一个看起来像证据、却经不起追问其来源的东西, 比没有证据更坏——它会终止追问。

5许可证

PolyForm Noncommercial License 1.0.0——可改、可自用、 不可商用

它不是开源许可证:不符合开放源代码促进会(OSI)对「开源」 的定义,因为它限制了使用领域。把它叫作开源是不诚实的,所以这里写清楚。

素材是你自己的事。成品页面把完整音频内嵌在里面, 公开分享前请确认你拥有相应权利。全部处理都在你自己的机器上完成, 不上传任何内容。