Add ACE-Step music generation to the studio and library.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Towsty
2026-09-02 23:58:18 -05:00
co-authored by Cursor
parent c79cca39ae
commit 5555155884
25 changed files with 2157 additions and 44 deletions
+31
View File
@@ -280,3 +280,34 @@ export function clipSettingsRows(clip: {
if (loras) rows.push({ label: 'LoRA', value: loras })
return rows
}
export function trackSettingsRows(track: {
tags?: string
lyrics?: string
duration?: number
steps?: number
seed?: number
cfg?: number
instrumental?: boolean
engine?: string
samplerName?: string
scheduler?: string
lyricsStrength?: number
}) {
const rows: SettingsRow[] = []
if (track.engine) rows.push({ label: 'Engine', value: track.engine === 'ace-step-1.5' ? 'ACE-Step 1.5' : 'ACE-Step' })
if (track.tags?.trim()) rows.push({ label: 'Tags', value: track.tags.trim() })
if (track.instrumental) rows.push({ label: 'Instrumental', value: 'On' })
else if (track.lyrics?.trim()) rows.push({ label: 'Lyrics', value: track.lyrics.trim() })
if (typeof track.duration === 'number' && track.duration > 0) {
const rounded = Math.round(track.duration * 10) / 10
rows.push({ label: 'Duration', value: Number.isInteger(rounded) ? `${rounded}s` : `${rounded.toFixed(1)}s` })
}
if (track.steps != null) rows.push({ label: 'Steps', value: String(track.steps) })
if (track.cfg != null) rows.push({ label: 'CFG', value: formatNum(track.cfg) })
if (track.samplerName) rows.push({ label: 'Sampler', value: track.samplerName })
if (track.scheduler) rows.push({ label: 'Scheduler', value: track.scheduler })
if (track.lyricsStrength != null) rows.push({ label: 'Lyric strength', value: formatNum(track.lyricsStrength) })
if (track.seed != null) rows.push({ label: 'Seed', value: String(track.seed) })
return rows
}