riffusion-app-hobby
riffusion/riffusion-app-hobby加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
你有没有想过,只要输入一句「爵士钢琴,舒缓放松」,就能得到一段专属的背景音乐?Riffusion 让这件事变成了现实——它不是直接生成音频,而是让 Stable Diffusion「画出」音乐的频谱图,再把频谱图转成声音。
想象一下,当你用文字描述一段音乐时,AI 其实是在脑海中构建一段声波的「可视化图像」。Riffusion 正是抓住了这个原理,将文本到图像的生成能力嫁接到了音乐生成领域。
Riffusion 诞生于 2022 年底,由美国创业者 Seth Forsgren 和工程师 Hayk Martiros 共同开发,两人是多年的创客伙伴。项目最初只是一个周末兴趣项目,目的是探索「能不能用 Stable Diffusion 做点不一样的事」。他们在 GitHub 首页写下了「stable diffusion for real-time music generation」,没想到迅速在社交媒体上病毒式传播,项目 Star 数在数周内从零冲到数万。
Riffusion 的核心思路非常巧妙:不对音频波形直接建模,而是对音频的**频谱图(Spectrogram)**进行图像生成。Stable Diffusion 本身对图像的理解能力极强,只要将音乐转化为频谱图图像,就能利用 SD 的强大生成能力来「作曲」,再通过逆变换得到真实音频。这一技术路径大大降低了音乐生成的门槛,因为 SD 社区积累了大量的图像生成经验可以直接复用。
目前 Riffusion 已被收录在 Hugging Face 的模型库中,其底座模型 riffusion-model-v1 基于 Stable Diffusion v1.5 微调而来,原始 SD 模型的 CLIP 文本编码器已经具备对音乐概念的语义理解能力,为微调提供了良好基础。项目虽已标记为「不再活跃维护」,但其核心思路仍在持续影响后续的 AI 音乐生成研究。
从代码结构来看,Riffusion App 采用的是前后端分离架构:前端是一个纯静态的 Next.js 应用,负责 UI 交互和音频播放;推理生成部分完全依赖外部 Flask 后端服务(riffusion-inference)。
前端采用 Next.js + TypeScript 构建,页面入口为 pages/index.tsx,采用 React Hook 管理状态,核心状态包括:
推理请求由 ModelInference.tsx 组件发起,通过 API 调用外部 Flask 服务(RIFFUSION_FLASK_URL 环境变量指定),请求体包含 start/end 两组提示词、采样步数、去噪强度等参数。后端返回频谱图图像 URL 和音频 URL,前端负责展示和播放。
一个有趣的细节是 ModelInference.tsx 支持 URL Query String 初始化参数,用户可以通过 URL 参数直接指定推理参数(如 ?alphaVelocity=0.3&seed=42&guidance=7.5),这使得 Riffusion 具备很强的可分享性——用户可以直接把生成链接分享给朋友。
Riffusion 最令人惊艳的地方在于其可视化效果。ThreeCanvas.tsx 使用 @react-three/fiber 和 @react-three/drei 在浏览器中构建了一个 3D 空间,频谱图不再是一张静态图片,而是一系列在三维空间中连续飞行的「光栅」。
SpectrogramViewer.tsx 实现了核心渲染逻辑:
Shader 层面,shaders.js 定义了自定义的顶点着色器(处理频谱高度映射)和片元着色器(色调调整),通过 GLSL 代码精确控制频谱图像素到 3D 几何的映射关系。这套可视化方案在技术上有一定门槛,但也正因此成为了 Riffusion 区别于其他 AI 音乐工具的核心视觉标签。
音频播放层使用 Tone.js(专业 Web Audio 库),负责同步音频播放与 3D 动画的进度。AudioPlayer.tsx 组件管理音频加载、播放/暂停和进度控制。
必须直面的现实是:Riffusion App 本身只是一个「壳」,真正的 AI 生成能力需要独立的推理后端。README 明确说明「You will need a large GPU that can run stable diffusion in under five seconds」,推荐使用 NVIDIA GPU 运行 Stable Diffusion,且推理耗时需控制在 5 秒以内才能保证实时体验。
部署需要两套环境:
npm install && npm run dev,无需 GPU两套服务通过本地 HTTP 接口通信,前端 .env.local 配置 RIFFUSION_FLASK_URL=http://127.0.0.1:3013/run_inference/ 即可。项目没有提供 Dockerfile 或 docker-compose,这在有多服务依赖的场景下给部署带来了一定复杂度。
Riffusion 的出现证明了「跨模态迁移」在 AI 生成领域的巨大潜力——将图像生成能力嫁接到音频领域,不需要重新训练一个完整的音频生成模型。但其局限性同样明显:
尽管如此,Riffusion 开创的「图像生成模型 → 频谱图 → 音频」技术路径,为后续 AudioGen、MusicGen 等专门音频模型的研究提供了重要启发。其 2600+ 的 Star 数也证明了市场对「低门槛 AI 音乐创作工具」的强烈需求。
图1:Riffusion 组织头像
