Skip to content

feat: add Music Studio tab with Suno/ACE-Step BYOK support#103

Draft
pftom wants to merge 8 commits intomainfrom
cursor/376f147b
Draft

feat: add Music Studio tab with Suno/ACE-Step BYOK support#103
pftom wants to merge 8 commits intomainfrom
cursor/376f147b

Conversation

@pftom
Copy link
Copy Markdown
Contributor

@pftom pftom commented Apr 30, 2026

Summary

Adds a minimal Music Studio inspired by fspecii/ace-step-ui, integrated as a fourth top-level tab next to Designs / Examples / Design systems.

  • New tab + UI (src/components/MusicStudioTab.tsx): simple/custom (lyrics) mode toggle, prompt + style + title + model + instrumental fields, in-flight progress, and a localStorage-backed track library with inline <audio> playback, download, and delete.
  • Provider abstraction (src/providers/music.ts): switches on MusicProviderId to call a Suno-compatible REST gateway (sunoapi.org and friends, BYOK Bearer auth) or a local ACE-Step Gradio server. custom is an escape hatch for any compatible mirror.
  • Daemon proxy (POST /api/music/proxy in daemon/server.js): forwards a single fetch to a user-specified URL so CORS-strict gateways still work and the API key never traverses third-party origins. Validates http(s) URLs, bounds upstream calls at 60s, and returns { status, ok, data }. Client transparently falls back to direct fetch when the daemon is offline.
  • Settings + persistence: new Music section in SettingsDialog (provider / API key / base URL / model). AppConfig.music is merged into the existing config blob; tracks persist separately under open-design:music-tracks (capped at 100 entries).
  • i18n: full English / 简体中文 / Português (Brasil) coverage for every new string, plus a music + trash icon in the shared Icon component.
  • Styles: appended a self-contained .music-studio stylesheet block to src/index.css, reusing the existing surface tokens so it feels native.

Test plan

  • pnpm typecheck passes
  • pnpm test — 29/29 passing
  • pnpm build (Next.js production) succeeds
  • Live daemon smoke test: /api/music/proxy forwards GET correctly and rejects non-http(s) URLs
  • Manual QA: configure a real Suno API key, generate a song, verify polling → streaming → complete and audio plays back
  • Manual QA: verify track library survives a page refresh and resumes any in-flight pollers

Made with Cursor

pftom added 8 commits April 28, 2026 14:48
- Updated project name in package.json, package-lock.json, and README files.
- Changed CLI commands and references from "ocd" to "od".
- Adjusted file structure references in documentation and code to reflect new naming conventions.
- Enhanced .gitignore to include new runtime data files.
- Updated metadata in LICENSE file to match new project name.
Minimal music generator inspired by ace-step-ui: a fourth top-level tab
in the entry view with simple/custom (lyrics) modes, polling pipeline,
and a localStorage-backed track library with inline audio playback.
Settings dialog gains a Music section to configure the provider, API
key, base URL, and default model. A new daemon /api/music/proxy endpoint
forwards calls to dodge CORS and keep keys off the page; the client
falls back to direct fetch when the daemon is offline.

Made-with: Cursor
@lefarcen lefarcen self-requested a review April 30, 2026 08:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant