From 6f9d8ad4c38bfc7f256621e34cc5fe74f88daaa8 Mon Sep 17 00:00:00 2001 From: Michael Han <107991372+shimmyshimmer@users.noreply.github.com> Date: Wed, 18 Mar 2026 17:15:10 -0700 Subject: [PATCH 01/10] Add BETA in README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index bfc9b614ec..828d09bd46 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ Run and train AI models with a unified local interface. unsloth studio ui homepage -Unsloth Studio lets you run and train text, [audio](https://unsloth.ai/docs/basics/text-to-speech-tts-fine-tuning), [embedding](https://unsloth.ai/docs/new/embedding-finetuning), [vision](https://unsloth.ai/docs/basics/vision-fine-tuning) models on Windows, Linux and macOS. +Unsloth Studio (BETA) lets you run and train text, [audio](https://unsloth.ai/docs/basics/text-to-speech-tts-fine-tuning), [embedding](https://unsloth.ai/docs/new/embedding-finetuning), [vision](https://unsloth.ai/docs/basics/vision-fine-tuning) models on Windows, Linux and macOS. ## ⭐ Features Unsloth provides several key features for both inference and training: @@ -42,7 +42,7 @@ Unsloth provides several key features for both inference and training: Unsloth can be used in two ways: through **[Unsloth Studio](https://unsloth.ai/docs/new/studio/)**, the web UI, or through **Unsloth Core**, the code-based version. Each has different requirements. ### Unsloth Studio (web UI) -Unsloth Studio works on **Windows, Linux, WSL** and **macOS**. +Unsloth Studio (BETA) works on **Windows, Linux, WSL** and **macOS**. * **CPU:** Supported for **chat inference only** * **NVIDIA:** Training works on RTX 30/40/50, Blackwell, DGX Spark, Station and more From e6a42d0073a0419e8d0449f4c6b43058324921b5 Mon Sep 17 00:00:00 2001 From: Michael Han <107991372+shimmyshimmer@users.noreply.github.com> Date: Wed, 18 Mar 2026 20:13:48 -0700 Subject: [PATCH 02/10] Update Install instructions.md --- README.md | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 828d09bd46..6bf612df4a 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ Run and train AI models with a unified local interface. unsloth studio ui homepage -Unsloth Studio (BETA) lets you run and train text, [audio](https://unsloth.ai/docs/basics/text-to-speech-tts-fine-tuning), [embedding](https://unsloth.ai/docs/new/embedding-finetuning), [vision](https://unsloth.ai/docs/basics/vision-fine-tuning) models on Windows, Linux and macOS. +Unsloth Studio (Beta) lets you run and train text, [audio](https://unsloth.ai/docs/basics/text-to-speech-tts-fine-tuning), [embedding](https://unsloth.ai/docs/new/embedding-finetuning), [vision](https://unsloth.ai/docs/basics/vision-fine-tuning) models on Windows, Linux and macOS. ## ⭐ Features Unsloth provides several key features for both inference and training: @@ -42,7 +42,7 @@ Unsloth provides several key features for both inference and training: Unsloth can be used in two ways: through **[Unsloth Studio](https://unsloth.ai/docs/new/studio/)**, the web UI, or through **Unsloth Core**, the code-based version. Each has different requirements. ### Unsloth Studio (web UI) -Unsloth Studio (BETA) works on **Windows, Linux, WSL** and **macOS**. +Unsloth Studio (Beta) works on **Windows, Linux, WSL** and **macOS**. * **CPU:** Supported for **chat inference only** * **NVIDIA:** Training works on RTX 30/40/50, Blackwell, DGX Spark, Station and more @@ -51,7 +51,8 @@ Unsloth Studio (BETA) works on **Windows, Linux, WSL** and **macOS**. * **Coming soon:** Training support for Apple MLX, AMD, and Intel. * **Multi-GPU:** Available now, with a major upgrade on the way -#### MacOS, Linux or WSL Setup (One time): +#### MacOS, Linux, WSL: +For MacOS, ensure you have `cmake` installed. If not, run `brew install cmake`. ```bash curl -LsSf https://astral.sh/uv/install.sh | sh uv venv unsloth_studio --python 3.13 @@ -66,7 +67,8 @@ source unsloth_studio/bin/activate unsloth studio -H 0.0.0.0 -p 8888 ``` -#### Windows PowerShell (One time): +#### Windows: +Run in Windows Powershell: ```bash winget install -e --id Python.Python.3.13 winget install --id=astral-sh.uv -e @@ -82,9 +84,17 @@ Then to launch every time: unsloth studio -H 0.0.0.0 -p 8888 ``` -Use our [Docker image](https://hub.docker.com/r/unsloth/unsloth) ```unsloth/unsloth``` container. Read our [Docker Guide](https://unsloth.ai/docs/get-started/install/docker). +#### Docker +Use our [Docker image](https://hub.docker.com/r/unsloth/unsloth) ```unsloth/unsloth``` container. Run: +```bash +docker run -d -e JUPYTER_PASSWORD="mypassword" \ + -p 8888:8888 -p 8000:8000 -p 2222:22 \ + -v $(pwd)/work:/workspace/work \ + --gpus all \ + unsloth/unsloth + ``` -#### Nightly Installation - MacOS, Linux or WSL Setup (One time): +#### Nightly Install - MacOS, Linux, WSL: ```bash curl -LsSf https://astral.sh/uv/install.sh | sh git clone --filter=blob:none https://github.com/unslothai/unsloth.git unsloth_studio @@ -102,7 +112,8 @@ source .venv/bin/activate unsloth studio -H 0.0.0.0 -p 8888 ``` -#### Nightly Installation - Windows Powershell (One time): +#### Nightly Install - Windows: +Run in Windows Powershell: ```bash winget install -e --id Python.Python.3.13 winget install --id=astral-sh.uv -e From e793c378db5879059e412af1d705b13b8c5146b8 Mon Sep 17 00:00:00 2001 From: Manan Shah <52329525+Manan17@users.noreply.github.com> Date: Thu, 19 Mar 2026 02:11:27 -0500 Subject: [PATCH 03/10] turning data recipes on for mac (#4454) --- studio/frontend/src/app/routes/__root.tsx | 8 +++++++- studio/frontend/src/components/navbar.tsx | 4 ++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/studio/frontend/src/app/routes/__root.tsx b/studio/frontend/src/app/routes/__root.tsx index 0725d383c7..d7780c6743 100644 --- a/studio/frontend/src/app/routes/__root.tsx +++ b/studio/frontend/src/app/routes/__root.tsx @@ -15,10 +15,16 @@ import { AppProvider } from "../provider"; const CHAT_ONLY_ALLOWED = new Set(["/", "/chat", "/login", "/signup", "/change-password"]); +function isChatOnlyAllowed(pathname: string): boolean { + if (CHAT_ONLY_ALLOWED.has(pathname)) return true; + if (pathname === "/data-recipes" || pathname.startsWith("/data-recipes/")) return true; + return false; +} + export const Route = createRootRoute({ beforeLoad: ({ location }) => { const chatOnly = usePlatformStore.getState().isChatOnly(); - if (chatOnly && !CHAT_ONLY_ALLOWED.has(location.pathname)) { + if (chatOnly && !isChatOnlyAllowed(location.pathname)) { throw redirect({ to: "/chat" }); } }, diff --git a/studio/frontend/src/components/navbar.tsx b/studio/frontend/src/components/navbar.tsx index 0f159add77..03ea77a8b2 100644 --- a/studio/frontend/src/components/navbar.tsx +++ b/studio/frontend/src/components/navbar.tsx @@ -93,7 +93,7 @@ export function Navbar() { const disabledByTraining = isTrainingRunning && item.href !== "/studio"; const disabledByDevice = - chatOnly && item.href !== "/chat"; + chatOnly && item.href !== "/chat" && item.href !== "/data-recipes"; if (!item.enabled || disabledByTraining || disabledByDevice) { return ( Date: Thu, 19 Mar 2026 03:52:07 -0500 Subject: [PATCH 04/10] Fixing Qwen3.5 bug and adding Outetts dependencies (#4459) * Fixing Qwen3.5 bug and adding Outetts dependencies * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Apply suggestion from @danielhanchen --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Daniel Han --- studio/backend/requirements/extras.txt | 5 +++-- studio/backend/utils/models/model_config.py | 5 ++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/studio/backend/requirements/extras.txt b/studio/backend/requirements/extras.txt index 170b1c9ec8..d783975a4f 100644 --- a/studio/backend/requirements/extras.txt +++ b/studio/backend/requirements/extras.txt @@ -26,8 +26,9 @@ omegaconf einx pyloudnorm openai-whisper -# uroman # 4.0 MB - romanization, no imports found -# MeCab # 19.9 MB - Japanese tokenizer, no imports found +uroman # 4.0 MB - used for Outetts. +MeCab # 19.9 MB - used for Outetts. +inflect # number-to-words, required by OuteTTS loguru flatten_dict ffmpy diff --git a/studio/backend/utils/models/model_config.py b/studio/backend/utils/models/model_config.py index aaf15994be..13f1b5febf 100644 --- a/studio/backend/utils/models/model_config.py +++ b/studio/backend/utils/models/model_config.py @@ -630,7 +630,10 @@ _AUDIO_TOKEN_PATTERNS = { "whisper": lambda tokens: "<|startoftranscript|>" in tokens, "audio_vlm": lambda tokens: "" in tokens, "bicodec": lambda tokens: any(t.startswith("<|bicodec_") for t in tokens), - "dac": lambda tokens: "<|audio_start|>" in tokens and "<|audio_end|>" in tokens, + "dac": lambda tokens: "<|audio_start|>" in tokens + and "<|audio_end|>" in tokens + and "<|text_start|>" in tokens + and "<|text_end|>" in tokens, "snac": lambda tokens: sum(1 for t in tokens if t.startswith(" 10000, } From 6c2bfebb20284f9b1cfd6968636c5f47377ae5b5 Mon Sep 17 00:00:00 2001 From: Wasim Yousef Said Date: Thu, 19 Mar 2026 10:04:53 +0100 Subject: [PATCH 05/10] fix(studio): mobile navbar layout and chat settings sheet (#4458) * fix(studio): mobile navbar layout and chat settings sheet * fix(studio): portal select dropdowns inside sheet modal subtree --- studio/frontend/src/components/navbar.tsx | 22 +++++-- studio/frontend/src/components/ui/dialog.tsx | 1 + studio/frontend/src/components/ui/sheet.tsx | 8 ++- .../frontend/src/features/chat/chat-page.tsx | 1 + .../src/features/chat/chat-settings-sheet.tsx | 65 ++++++++++++++----- 5 files changed, 73 insertions(+), 24 deletions(-) diff --git a/studio/frontend/src/components/navbar.tsx b/studio/frontend/src/components/navbar.tsx index 03ea77a8b2..d90276a641 100644 --- a/studio/frontend/src/components/navbar.tsx +++ b/studio/frontend/src/components/navbar.tsx @@ -209,7 +209,7 @@ export function Navbar() { {/* Right: mobile */} -
+
{tourId ? ( ) : null} +
+ Theme + +
diff --git a/studio/frontend/src/components/ui/dialog.tsx b/studio/frontend/src/components/ui/dialog.tsx index bb9e6816d5..5556c42e2b 100644 --- a/studio/frontend/src/components/ui/dialog.tsx +++ b/studio/frontend/src/components/ui/dialog.tsx @@ -189,6 +189,7 @@ export { DialogHeader, DialogOverlay, DialogPortal, + DialogPortalContainerContext, DialogTitle, DialogTrigger, }; diff --git a/studio/frontend/src/components/ui/sheet.tsx b/studio/frontend/src/components/ui/sheet.tsx index 8e7ad75e0d..d2b12e6cba 100644 --- a/studio/frontend/src/components/ui/sheet.tsx +++ b/studio/frontend/src/components/ui/sheet.tsx @@ -3,8 +3,10 @@ import { Dialog as SheetPrimitive } from "radix-ui"; import type * as React from "react"; +import { useState } from "react"; import { Button } from "@/components/ui/button"; +import { DialogPortalContainerContext } from "@/components/ui/dialog"; import { cn } from "@/lib/utils"; import { Cancel01Icon } from "@hugeicons/core-free-icons"; import { HugeiconsIcon } from "@hugeicons/react"; @@ -69,6 +71,7 @@ function SheetContent({ overlayClassName?: string; overlayPosition?: "fixed" | "absolute"; }) { + const [contentEl, setContentEl] = useState(null); return ( - {children} + + {children} + {showCloseButton && (