Move engine pickers into the Video / Image / Music cards.
Flux/Krea, MiniMax/LTX, and ACE/YuE sit on the top kind cards so you choose the engine before the prompt form.
This commit is contained in:
+15
-35
@@ -7,42 +7,19 @@
|
||||
/>
|
||||
|
||||
<main class="mx-auto min-w-0 max-w-7xl space-y-6 px-4 py-6 sm:px-6">
|
||||
<StudioKindCards current="music" @select="goStudio" />
|
||||
<StudioKindCards
|
||||
current="music"
|
||||
:music-engine="engineFamily"
|
||||
@select="goStudio"
|
||||
@music-engine="selectEngineFamily"
|
||||
/>
|
||||
<div class="grid min-w-0 gap-6 lg:grid-cols-[minmax(0,1fr)_minmax(0,1fr)] lg:items-stretch">
|
||||
<section class="glass min-w-0 max-w-full space-y-5 rounded-3xl p-5 sm:p-6">
|
||||
<div class="overflow-hidden rounded-2xl border border-white/15 bg-zinc-950/50">
|
||||
<div class="border-b border-white/10 px-4 py-3">
|
||||
<h2 class="font-display text-2xl font-bold">Music Generator</h2>
|
||||
<p class="mt-1 text-sm text-zinc-400">
|
||||
Tags describe style and voice. Lyrics use structure chips. Instrumental skips the vocal line.
|
||||
</p>
|
||||
</div>
|
||||
<div class="grid grid-cols-2">
|
||||
<button
|
||||
type="button"
|
||||
class="border-r border-white/10 px-3 py-2.5 text-left text-sm transition"
|
||||
:class="engineFamily === 'ace' ? 'bg-amber-400/10 text-amber-100' : 'text-zinc-400 hover:bg-white/5 hover:text-zinc-200'"
|
||||
@click="selectEngineFamily('ace')"
|
||||
>
|
||||
<span class="block font-semibold">ACE-Step</span>
|
||||
<span class="text-xs opacity-80">Fast vocals</span>
|
||||
</button>
|
||||
<button
|
||||
type="button"
|
||||
class="px-3 py-2.5 text-left text-sm transition"
|
||||
:class="engineFamily === 'yue' ? 'bg-amber-400/10 text-amber-100' : 'text-zinc-400 hover:bg-white/5 hover:text-zinc-200'"
|
||||
@click="selectEngineFamily('yue')"
|
||||
>
|
||||
<span class="flex items-center gap-2">
|
||||
<span class="font-semibold">YuE</span>
|
||||
<InfoTip
|
||||
aria-label="What YuE does"
|
||||
text="YuE is a separate lyrics-to-song engine (stage-1 7B + stage-2 1B + xcodec). It needs the ComfyUI_YuE custom node on Beast and is slower and heavier than ACE-Step. Use it when you want a full sung track from lyrics rather than ACE-Step’s tag-conditioned sampler."
|
||||
/>
|
||||
</span>
|
||||
<span class="text-xs opacity-80">Lyrics-to-song</span>
|
||||
</button>
|
||||
</div>
|
||||
<div>
|
||||
<h2 class="font-display text-2xl font-bold">Music Generator</h2>
|
||||
<p class="mt-1 text-sm text-zinc-400">
|
||||
Tags describe style and voice. Lyrics use structure chips. Instrumental skips the vocal line.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div v-if="engineFamily === 'ace'" class="flex items-center justify-between gap-3 rounded-2xl border border-white/10 bg-zinc-950/40 px-4 py-3 text-sm">
|
||||
@@ -746,12 +723,15 @@ function applyPreset() {
|
||||
onMounted(async () => {
|
||||
await loadLibrary()
|
||||
await loadMusicPresets()
|
||||
const route = useRoute()
|
||||
const engineQ = String(route.query.engine || '').toLowerCase()
|
||||
if (engineQ === 'yue' || engineQ === 'ace') selectEngineFamily(engineQ)
|
||||
applyIncomingMusic()
|
||||
await resumeActiveMusic()
|
||||
await refreshStudioQueue()
|
||||
stopQueuePoll()
|
||||
queuePoll = setInterval(() => { void refreshStudioQueue() }, 8000)
|
||||
const query = useRoute().query
|
||||
const query = route.query
|
||||
if (typeof query.track === 'string' && query.track) {
|
||||
audioUrl.value = `/api/library/tracks/${query.track}/audio`
|
||||
trackId.value = query.track
|
||||
|
||||
Reference in New Issue
Block a user