diff --git a/components/StudioKindCards.vue b/components/StudioKindCards.vue index 57f9e0e..dabe601 100644 --- a/components/StudioKindCards.vue +++ b/components/StudioKindCards.vue @@ -1,54 +1,164 @@ diff --git a/pages/index.vue b/pages/index.vue index 3f25abf..48f54c7 100644 --- a/pages/index.vue +++ b/pages/index.vue @@ -8,7 +8,15 @@ />
- +
@@ -27,89 +35,44 @@
-
-
- - -
-
- Source still - -
-
- -

Still loaded · preview hidden

-

Toggle Hide input still off to show it

- -
-
-

{{ studioMode === 'edit' || studioMode === 'editv2' ? (studioMode === 'editv2' ? (v2Mode === 'refine' ? 'Still A · canvas' : 'Still A') : 'Image 1') : (textToVideo ? 'Start still · optional' : 'Choose an image') }}

-

{{ textToVideo ? 'Text-to-video does not need a still. Shot 2+ will still extend from the last frame.' : 'Browse the library or upload a new PNG, JPG, or WEBP' }}

-
+
+ +
-
- Still A is loaded for Edit / Compose / Refine. Generate ignores it and uses the prompt only. +
+ Source still +
-
- - +
+ +

Still loaded · preview hidden

+

Toggle Hide input still off to show it

+
-
- - +
+

{{ studioMode === 'edit' || studioMode === 'editv2' ? (studioMode === 'editv2' ? (v2Mode === 'refine' ? 'Still A · canvas' : 'Still A') : 'Image 1') : (textToVideo ? 'Start still · optional' : 'Choose an image') }}

+

{{ textToVideo ? 'Text-to-video does not need a still. Shot 2+ will still extend from the last frame.' : 'Browse the library or upload a new PNG, JPG, or WEBP' }}

+
+ Still A is loaded for Edit / Compose / Refine. Generate ignores it and uses the prompt only. +
- +
-
-
-

Music Generator

-

- Tags describe style and voice. Lyrics use structure chips. Instrumental skips the vocal line. -

-
-
- - -
+
+

Music Generator

+

+ Tags describe style and voice. Lyrics use structure chips. Instrumental skips the vocal line. +

@@ -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