+ Only Vocal and Instrument (Medium Accuracy) is available while not integrated with K.G.One Music Studio server.
+ Processing in local may take long time depending on your hardware. When fallback to CPU happens, the webpage may
+ temporarily hang with little or no UI response until processing advances.
+
- Select an audio region on the timeline to extract stems from it.
- Only audio regions are supported — MIDI regions cannot be separated.
+ {localOnlyMode && !isLocalModelCached
+ ? 'Download the local separator model, then select an audio region on the timeline to extract stems from it.'
+ : 'Select an audio region on the timeline to extract stems from it. Only audio regions are supported — MIDI regions cannot be separated.'}
Only Vocal and Instrument (Medium Accuracy) is available while not integrated with K.G.One Music Studio server.
Processing in local may take long time depending on your hardware. When fallback to CPU happens, the webpage may
- temporarily hang with little or no UI response until processing advances.
+ temporarily hang with little or no UI response until processing advances.{' '}
+ Learn more about K.G.One Music Studio server integration.
diff --git a/src/components/Toolbar.tsx b/src/components/Toolbar.tsx
index b4279be..5381f16 100644
--- a/src/components/Toolbar.tsx
+++ b/src/components/Toolbar.tsx
@@ -122,6 +122,30 @@ const Toolbar: React.FC = () => {
return;
}
+ // Untitled Project is ephemeral — no existing save to preserve, so rename directly
+ if (savedProjectName === RESERVED_PROJECT_NAME) {
+ const storage = KGProjectStorage.getInstance();
+ const exists = await storage.exists(newName);
+ if (exists) {
+ const confirmed = await showConfirm(
+ `Project "${newName}" already exists. Do you want to overwrite it?`
+ );
+ if (!confirmed) return;
+ setProjectName(newName);
+ await saveProject(newName, savedProjectName, setStatus, (finalName) => {
+ setSavedProjectName(finalName);
+ if (finalName !== newName) setProjectName(finalName);
+ }, true /* forceOverwrite */);
+ return;
+ }
+ setProjectName(newName);
+ await saveProject(newName, savedProjectName, setStatus, (finalName) => {
+ setSavedProjectName(finalName);
+ if (finalName !== newName) setProjectName(finalName);
+ });
+ return;
+ }
+
// Ask whether the user wants to rename or save as a copy
const choice = await showChoice(
"Would you like to rename this project, or save it as a new copy?",
diff --git a/src/components/settings/sections/GeneralSettings.tsx b/src/components/settings/sections/GeneralSettings.tsx
index cbdc30a..8baedfd 100644
--- a/src/components/settings/sections/GeneralSettings.tsx
+++ b/src/components/settings/sections/GeneralSettings.tsx
@@ -591,7 +591,7 @@ const GeneralSettings: React.FC = () => {
disabled={kgoneServerManaged}
/>
- Base URL of a running K.G.One server. Used for full-song generation, clip generation, and stem separation.
+ Base URL of a running K.G.One Music Studio server. Used for full-song generation, clip generation, and stem separation.