iArt.ai
AI 모션 그래픽 소프트웨어, 누구나 사용할 수 있는 After Effects 대안, 텍스트 프롬프트로 몇 분 안에 애니메이션·설명 영상 제작
AI-powered live music creation in the browser — describe your music in natural language, get Strudel live coding generated and played instantly.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
oddeNova 是一个【即兴音乐制作的 Agent】。通过与它的对话,一步一步制作出想要的音乐。 无论是暂时缺乏编曲知识,不会使用音乐制作软件,还是对这一切早已熟稔于心 你不满足于流行到腻味的模版“神曲”,不满足于抽卡式的 AI音乐 与 oddeNova 对话来生成和调整音乐,或是直接修改控制音乐播放的 Strudel 代码 • 自然语言编曲 — 描述你的想法与意见,不断迭代创作结果 • 分层音轨管理 — 鼓组、弦乐、合成器等等,各自作为独立 layer,实现精细地管理 • 精准迭代编辑 — 修改空间从整首曲子,到单个音符,通过对话就能完成 • 即时播放 — 代码生成后立即在浏览器中执行播放,更新代码也能无缝衔接 • WAV 导出 — 有了满意的demo,导出 wav 文件 • 分布式的创作 — Agent 不会一次生成完整的曲子,而是像自然创作一样,根据想法从简单到复杂地组织音轨 • 思考过程可见 — 推理过程可见,一眼看明白 Agent 是如何用代码结构出乐段的 • 编曲辅助建议 — 根据当前上下文自动给出下一步的操作建议 • 多 LLM 服务商 — 支持 DeepSeek、OpenAI、Claude、GLM(智谱),可在设置中切换README 전문 보기 ↗
中文 | English
oddeNova 是一个【即兴音乐制作的 Agent】。通过与它的对话,一步一步制作出想要的音乐。
像 vibe coding 一样,vibe 音乐
为那些在乎音乐的创作者们
无论是为自己的作品制作配乐,还是音乐即是自己的作品本身
无论是暂时缺乏编曲知识,不会使用音乐制作软件,还是对这一切早已熟稔于心
你不满足于流行到腻味的模版“神曲”,不满足于抽卡式的 AI音乐
你想要让节奏,音符,和弦都完完全全成为表达的一部分
与 oddeNova 对话来生成和调整音乐,或是直接修改控制音乐播放的 Strudel 代码
你的想法和选择才是创作的主体
核心创作体验
AI 与交互
会话与历史
界面与其他
git clone https://github.com/yiichuan/oddeNova.git
cd oddeNova
npm install
npm run dev
打开浏览器访问 http://localhost:5173,首次使用时在弹窗中选择服务商并填写对应的 API Key 即可开始创作。
| 命令 | 说明 |
|---|---|
npm run dev | 启动 Vite 开发服务器 |
npm run build | 类型检查 + 生产环境构建 |
npm run preview | 预览生产构建产物 |
npm run lint | ESLint 代码检查 |
npm test | 运行单元测试(Vitest) |
你输入的每一条文字都会触发一个 AI Agent 推理循环:
用户文字输入
↓
AI Agent(多轮工具调用循环,最多 30 轮)
├── setCode(code) 编写或修改完整 Strudel 代码
├── validate(code) 验证代码语法与运行时
└── commit(explanation) 提交最终代码并播放
↓
Strudel 引擎执行 → 浏览器 WebAudio 播放
Agent 通过 setCode 直接管理完整的 Strudel 代码。每次对话写入新版本后经 validate 校验,最终 commit 触发热重载播放。代码内以 /* @layer NAME */ 注释标记各音轨层,实现结构化的增量编辑。
简单上手——你可以不明白编曲,也可以看不懂代码:
新手友好 · 用你最自然的语言描述
"我想要一首让人放松的背景音乐"
"加点活泼的感觉,像下午喝咖啡的氛围"
"一段简单的鼓"
"让节奏快一些,声音亮一些"
进阶用户 · 精准控制每一个细节
"来一段 lo-fi 鼓点加贝斯,BPM 90,加点 vinyl 噪声"
"加个合成器旋律,偏 ambient 风格,用 Fender Rhodes 音色"
"把军鼓换成更 trap 的感觉,加 808 低音"
"把整体调到 A 小调,tempo 升到 140"
| 层级 | 技术选型 |
|---|---|
| 前端框架 | React 19 + TypeScript |
| 构建工具 | Vite |
| 样式 | Tailwind CSS v4 |
| 代码编辑器 | CodeMirror 6 |
| 音频引擎 | Strudel + superdough(WebAudio API) |
| AI 模型 | DeepSeek / Kimi / OpenAI / Claude / GLM,可在界面中自由切换 |
| 数据持久化 | IndexedDB(会话存储) |
| 测试 | Vitest |
| 部署 | Vercel(含 Serverless Functions) |
┌─────────────────────────────────────────────────────┐
│ Browser │
│ │
│ ┌──────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ History │ │ Chat / UI │ │ Code Panel │ │
│ │ Panel │ │ (React 19) │ │ (CodeMirror) │ │
│ └──────────┘ └──────┬───────┘ └──────────────┘ │
│ │ │
│ ┌────────▼────────┐ │
│ │ Agent Loop │ │
│ │ loop.ts │ │
│ │ executor.ts │ │
│ │ tools.ts │ │
│ └────────┬────────┘ │
│ │ tool calls │
│ ┌───────────────────┼───────────────────┐ │
│ ▼ ▼ ▼ │
│ setCode() validate() commit() │
│ └───────────────────┬───────────────────┘ │
│ │ final code │
│ ┌────────▼────────┐ │
│ │ Strudel Engine │ │
│ │ (WebAudio API) │ │
│ └─────────────────┘ │
│ │
│ ── LLM API (DeepSeek / Kimi / OpenAI / Claude) ── │
│ ── IndexedDB (session + undo history) ─────────── │
└─────────────────────────────────────────────────────┘
详见 docs/frontend-architecture.md。
src/
├── App.tsx # 应用主组件
├── agent/
│ ├── tools.ts # Agent 工具定义(3 个工具)
│ ├── executor.ts # 工具执行器
│ ├── loop.ts # Agent 推理循环(最多 30 轮)
│ └── parser.ts # Strudel 代码解析(layer 提取)
├── components/ # UI 组件
│ ├── ChatInput.tsx # 文字输入
│ ├── CodePanel.tsx # 代码编辑器 + WAV 导出
│ ├── ConversationView.tsx # 对话历史 + Agent 推理展示
│ ├── HistoryPanel.tsx # Session 浏览器 + 回放控制
│ └── ...
├── hooks/
│ ├── useSessions.ts # Session 状态管理(IndexedDB)
│ ├── useReplay.ts # Session 回放
│ ├── useSuggestions.ts # AI 建议生成
│ └── useStrudel.ts # Strudel 音频引擎管理
├── services/
│ ├── llm.ts # LLM API 调用(双协议:Anthropic + OpenAI)
│ ├── llm-config.ts # 多服务商配置与路由
│ ├── share.ts # 分享链接生成
│ └── strudel.ts # Strudel 引擎封装与验证
├── demo/ # Demo 模式配置与 LLM 模拟
└── prompts/
├── active.ts # 当前激活的提示词版本指针
└── versions/ # 版本化提示词(一个需求一个工作版本,完成后冻结)
AGPL-3.0(基于 Strudel 依赖的许可证要求)