diff --git a/experiments/acestep15-xl-sft/README.md b/experiments/acestep15-xl-sft/README.md index a162bc9..621bf75 100644 --- a/experiments/acestep15-xl-sft/README.md +++ b/experiments/acestep15-xl-sft/README.md @@ -16,8 +16,8 @@ Python-Modulen und teilweise aus dem Browser-`localStorage`. Deshalb bindet der Compose-Dienst vier kleine, versionierte Overrides aus `./overrides` read-only in den Container ein. Sie setzen fuer das XL-SFT-Modell: -- 50 DiT-Schritte, Guidance 7, ODE/Euler und CFG-Intervall 0 bis 1 (Upstream-Defaults) -- Shift 1 statt des fehlerhaften UI-Werts 3 +- 80 DiT-Schritte, Guidance 8, Shift 3, ODE/Euler und CFG-Intervall 0 bis 1 +- reine Stilreferenzen werden entsprechend der ACE-Step-API-Empfehlung automatisch mit Stärke 0,2 übertragen; Cover-/Quellaudio behält seine eigene Stärke - ADG aus, keine benutzerdefinierten Timesteps - FLAC als verlustfreie Standardausgabe - 320 kbit/s als MP3-Ausweichwert @@ -49,7 +49,7 @@ Image-Build ab. Die Community-UI unter `http://192.168.1.212:7861` ist bis zu vollstaendigen Ende-zu-Ende-Tests von Cover und Remix als experimentell gekennzeichnet. -Die Community-UI startet XL-SFT mit 50 Schritten, Guidance 7, Shift 1, FLAC +Die Community-UI startet XL-SFT mit 80 Schritten, Guidance 8, Shift 3, FLAC und aktivem Thinking ueber den 1,7B-Planer. `AI Enhance` wird als `use_format` uebertragen. Vor jedem Auftrag zeigt sie die tatsaechlich gesendeten Parameter und faengt offensichtliche Widersprueche ab. Referenzaudio steuert nur Klang diff --git a/experiments/acestep15-xl-sft/ace-step-ui/patch-source.mjs b/experiments/acestep15-xl-sft/ace-step-ui/patch-source.mjs index fedc0db..e20cd82 100644 --- a/experiments/acestep15-xl-sft/ace-step-ui/patch-source.mjs +++ b/experiments/acestep15-xl-sft/ace-step-ui/patch-source.mjs @@ -72,6 +72,11 @@ function buildReleaseTaskPayload(params: GenerationParams): Record 0 ? params.duration : -1, - inference_steps: params.inferenceSteps ?? 50, - guidance_scale: params.guidanceScale ?? 7.0, - shift: params.shift ?? 1.0, + inference_steps: params.inferenceSteps ?? 80, + guidance_scale: params.guidanceScale ?? 8.0, + shift: params.shift ?? 3.0, infer_method: params.inferMethod || 'ode', batch_size: Math.min(Math.max(params.batchSize ?? 1, 1), 16), use_random_seed: params.randomSeed !== false, @@ -109,7 +114,7 @@ function buildReleaseTaskPayload(params: GenerationParams): Record { }); patch('components/CreatePanel.tsx', (text) => { - text = replaceOnce(text, 'useState(9.0);', 'useState(7.0);', 'guidance default'); + text = replaceOnce(text, 'useState(9.0);', 'useState(8.0);', 'guidance default'); text = replaceOnce( text, 'useState(false); // Default false for GPU compatibility', @@ -332,9 +337,9 @@ patch('components/CreatePanel.tsx', (text) => { 'thinking default', ); text = replaceOnce(text, "useState<'mp3' | 'flac'>('mp3');", "useState<'mp3' | 'flac'>('flac');", 'lossless default'); - text = replaceOnce(text, 'useState(12);', 'useState(50);', 'XL-SFT steps default'); + text = replaceOnce(text, 'useState(12);', 'useState(80);', 'XL-SFT steps default'); text = replaceOnce(text, "localStorage.getItem('ace-lmModel') || 'acestep-5Hz-lm-0.6B'", "localStorage.getItem('ace-lmModel') || 'acestep-5Hz-lm-1.7B'", 'planner model default'); - text = replaceOnce(text, 'useState(3.0);', 'useState(1.0);', 'shift default'); + // Upstream already defaults to Shift 3. Keep it instead of replacing it. text = replaceOnce( text, @@ -347,6 +352,10 @@ patch('components/CreatePanel.tsx', (text) => { window.alert('Widerspruch: Der Auftrag verlangt Gesang, aber das Liedtextfeld ist leer. Bitte Text eintragen oder „Instrumental“ wählen.'); return; } + if (instrumental && asksForVocals) { + window.alert('Widerspruch: „Instrumental“ ist aktiv, aber die Beschreibung verlangt Gesang. Bitte Gesangsbegriffe aus der Beschreibung entfernen oder „Instrumental“ deaktivieren und einen Liedtext eintragen.'); + return; + } if ((taskType === 'cover' || taskType === 'audio2audio') && !sourceAudioUrl.trim() && !audioCodes.trim()) { window.alert('Für einen Cover-Auftrag fehlt das Quellaudio. Bitte unter „Quellaudio / Cover“ eine Datei auswählen.'); return; @@ -368,6 +377,7 @@ patch('components/CreatePanel.tsx', (text) => { \`Gesang: \${instrumental ? 'nein (Instrumental)' : 'ja'}\`, \`Referenzaudio (nur Klang/Produktion): \${referenceAudioUrl ? 'vorhanden' : 'keines'}\`, \`Quellaudio (Melodie/Rhythmus/Akkorde): \${sourceAudioUrl ? 'vorhanden' : 'keines'}\`, + \`Audio-Einfluss: \${referenceAudioUrl && !sourceAudioUrl && taskType === 'text2music' ? '0,2 (sichere Stilreferenz)' : audioCoverStrength}\`, \`Ausgabe: \${audioFormat.toUpperCase()}, \${batchSize} Variation(en), \${bulkCount} Auftrag/Aufträge\`, '', 'Auftrag jetzt starten?',