github unslothai/unsloth v0.1.916-beta
Large Performance Fixes

2 hours ago

This release brings large performance fixes across Unsloth: faster typing and search in long chats, faster image/video loads, two-GPU image/video gen. It also adds separate browsers for each chat, floating browser window.

Highlights

  • Large performance fixes with more Glass theme optimizations coming next week
  • Glass theme fixes no more blur, better rendering, more options
  • Unified memory offloading now properly works for big models
  • Separate browsers for each chat - Multiple chats can now run their own browser individually
  • Floating browser you can move and resize over the chat & let the model do it's thing
  • Dynamic V3.1 Qwen3.8-Flash - 50% less token use, 15% more accurate
  • Two-GPU image and video up to 2x faster on matching NVIDIA cards
  • Faster chat search and deleting - search and delete chats much faster
  • Stable diffusion image/video models loads up to 40% faster
  • LTX-2.5 video much faster for new prompts on 16 to 24 GB GPUs

Chat performance

  • Typing in a long chat no longer lags when a Glass theme or chat background is on.
  • Chat search stays fast on very long histories instead of failing to load.
  • Clearing and deleting chats is much faster on large histories.
  • The first use of voice or audio features after launch no longer freezes a streaming reply for seconds.
  • Read aloud with the Unsloth model engine no longer waits seconds on a model lookup before speaking.
  • Glass themes over a background image respond up to 2x faster without GPU rendering, as on some Linux desktops.

Images and video

  • With two matching, idle NVIDIA GPUs, models such as SDXL, Qwen-Image and Wan2.2 5B run half of each step on the second card when they fit on one, about 1.5 to 1.8x faster.
  • On the same setup, FLUX and Lumina 2 split an even-sized batch of images across both cards.
  • SDXL loads up to 40% faster, so the first image arrives sooner.
  • On 16 to 24 GB GPUs, LTX-2.5 encodes new prompts on the GPU instead of the CPU, so a clip with a new prompt renders much faster.
  • LTX-2.5 GGUF Q8_0 video renders about 10% faster on NVIDIA GPUs, with identical frames.
  • Repeat renders with the same LoRA are faster when the model is not quantized, GGUF or offloaded.
  • Some image models, such as FLUX and Z-Image, render faster on Linux with AMD RDNA3 and RDNA4 GPUs.

New in Unsloth

  • Float the built-in browser over the chat as a small window you can move and resize; each chat remembers whether it floats.
  • Load Anima, Chroma, MOSS-Image and Krea 2 image models from single-file checkpoints, with LoRA and LoKR files for all but Chroma.
  • Glass themes dim the background image instead of blurring it, and controls on other pages match the chat's glass.
  • Owners can rename a managed account without losing its chats, files or settings.
  • Owners can cap model download speed in Settings > General > Downloads.
  • OpenAI-compatible connections can send custom headers.

Fixes

  • On chat-only installs with a non-GGUF model already downloaded, the first chat fetches the default model instead of failing.
  • GGUF models on CPU-only machines no longer run out of memory with Auto context.
  • On Windows, HTTPS downloads resume after a pause or interruption instead of starting over.
  • Updating Unsloth on Windows no longer sits silent for half a minute at the end.
  • Connecting Blender through MCP works again.
  • Compare mode no longer leaves one pane empty on the first message.

Training and library

  • In Python, model.generate() for Llama, Qwen2 and Qwen3 models is faster by default on NVIDIA GPUs under Linux, up to several times for small models.
  • Training on a Hub dataset split into hundreds of files starts up to a minute sooner.
  • With Assistant completions only, answers that start with a newline are no longer left out of training.

Download Unsloth Desktop

Unsloth Desktop is free and open source. Download it for:

Platform Link
Windows Download
macOS Download
Linux x64 / Ubuntu (deb) Download
Linux ARM64 / Ubuntu 24.04+ (deb) Download
Linux x64 (AppImage) Download
Windows ARM64 Download

What's Changed

  • Bump install.sh / install.ps1 pins to unsloth>=2026.11.2 by @danielhanchen in #16688
  • Carry the float8 training mode into the parallel capability query by @danielhanchen in #16637
  • Studio: send custom headers on remote connections by @Souravrajvi0 in #15097
  • Studio: fold an unchanged LoRA set into a resident denoiser, restore it exactly before a change by @danielhanchen in #16675
  • Refuse tensor parallel on blocks that own parameters in the registry by @danielhanchen in #16638
  • Kernels: keep sequence length out of Triton specialization in the RoPE kernels by @danielhanchen in #16690
  • Studio: keep Qwen-Image's bf16 text encoder automatically when the card has room by @danielhanchen in #16678
  • Studio: read the SDXL v-prediction markers beside the weight load and once per commit, skip the UNet scheme probe by @danielhanchen in #16696
  • Studio video small host: price the encoder converted beside the cast misses, cast an oversized DiT from its source shards by @danielhanchen in #16700
  • Native quant tests: make peft see torchao as absent when the test blocks it by @danielhanchen in #16704
  • Studio: decode escaped text in spreadsheet previews by @DimitriChrysafis in #16592
  • Studio: preserve refusal messages in imported chats by @DimitriChrysafis in #16599
  • Capability registry: refuse tensor parallel where tp_native cannot shard, and add the zoo MoE families by @danielhanchen in #16709
  • README: say UNSLOTH_LLAMA_CPP_BACKEND picks the GGUF chat build, not PyTorch by @LeoBorcherding in #14256
  • Studio: state the audio memory estimate in placement refusals by @debojyoti-dev in #16628
  • Decode with CUDA graphs by default in plain generate(), with memory release and an eager fallback by @danielhanchen in #16691
  • Studio diffusion: CFG-parallel for U-Net families (SDXL) by batch split by @danielhanchen in #16679
  • Studio diffusion: Automatic arms CFG-parallel on an idle card of the same model by @danielhanchen in #16680
  • Studio diffusion: CFG-parallel for a group-offloaded denoiser by @danielhanchen in #16681
  • Studio diffusion: Automatic partner card, FLUX batch split, LoRA scale mirror, CFG batching fallback by @danielhanchen in #16682
  • Studio diffusion: Automatic prefers one card plus a second-card copy over a layer split for FLUX when the primary holds the whole denoiser by @danielhanchen in #16687
  • Pipeline parallel: weight the MoE router aux loss per accumulation step as the model forward does by @danielhanchen in #16708
  • Scan baseline: re-review the five unsloth-zoo sites 2026.11.2 moved by @danielhanchen in #16732
  • Kaggle Studio GPU CI: request hardware detection after sign-in by @danielhanchen in #16728
  • Studio video: report the dense bf16 text encoder when the automatic hosted fp8 encoder cannot be fetched by @danielhanchen in #16724
  • CPU backend: honour unsloth_tiled_mlp and UNSLOTH_TILED_MLP in FastLanguageModel.from_pretrained by @danielhanchen in #16731
  • Notebooks CI: refresh the Colab oracle snapshot to the torch 2.14.1 GPU runtime by @danielhanchen in #16738
  • CPU backend: install the every_n_layers gradient checkpointing router by @danielhanchen in #16730
  • Context parallel: compiled layers follow each packed row under Ulysses by @danielhanchen in #16733
  • Studio: load NVFP4 diffusion checkpoints from .safetensors only by @danielhanchen in #16739
  • Studio: stop silently dropping earlier replies sent as item references by @NilayYadav in #16694
  • Studio: keep the typed message when picking a saved prompt by @NilayYadav in #16695
  • Studio: show the chat background in conversations on Windows at 100% scaling by @LeoBorcherding in #16702
  • Keep reasoning when formatting chats with the gemma-4-thinking template by @NilayYadav in #16701
  • Studio: run each Compare model with its own recommended sampling by @NilayYadav in #16686
  • Multi-account Playwright: an aborted /login must not use up the stalled-load retry by @danielhanchen in #16768
  • Studio: answer Refresh and Edit in a Compare pane with its own model by @NilayYadav in #16698
  • Context parallel: no graph break in compiled Ulysses attention on packed rows by @danielhanchen in #16734
  • Hide the Model hub scroll fade in glass themes by @Imagineer99 in #16780
  • Studio: glass theme dims the wallpaper instead of blurring it, page controls take the model button glass, Reduce motion off by default by @shimmyshimmer in #16751
  • Studio: let an approved Python call reach a host outside the sandbox allowlist by @danielhanchen in #16674
  • Studio: rename a managed account without recreating it by @danielhanchen in #16668
  • Bump trufflesecurity/trufflehog in / by @dependabot[bot] in #16778
  • Bump step-security/harden-runner in / by @dependabot[bot] in #16777
  • Bump docker/login-action in / by @dependabot[bot] in #16776
  • Add opt-in BF16 AdamW with stochastic parameter updates by @danielhanchen in #16662
  • Studio: floating monitors stay under the pointer and land without a flash by @shimmyshimmer in #16781
  • open_login test: bring its own Playwright error types so a leaked stub cannot break it by @danielhanchen in #16784
  • GRPO: keep packed forwards off for models that mix tokens across packed rows by @lonexreb in #16349
  • Studio: search for llama-server once per Decision API settings answer by @danielhanchen in #16617
  • Desktop: keep the bundled AppImage tray loader off the host's Ayatana by @debojyoti-dev in #16613
  • Studio: fingerprint the same manifest scopes the downgrade migration scan reads by @danielhanchen in #16556
  • Studio: the in-app browser can float over the chat as a small, resizable window by @shimmyshimmer in #16775
  • Studio MLX images: faster GGUF to MLX bit packing, byte-identical output by @danielhanchen in #16746
  • Studio: skip the NVML memory probe child when CUDA_VISIBLE_DEVICES is blank by @danielhanchen in #16597
  • Studio: list a GGUF repo once for the mmproj, MTP, DSpark and DFlash lookups of one load by @danielhanchen in #16565
  • Studio: read each thread's stored messages once per chat re-import by @danielhanchen in #16615
  • Studio remote-code scan: read each Hub config once per scan request by @danielhanchen in #16606
  • Studio RAG: reuse one rag.db connection per thread within a linked-folder sync pass by @danielhanchen in #16607
  • Studio: browser dictation in Chrome no longer repeats the last word by @NilayYadav in #16685
  • Studio: judge an HSA_OVERRIDE_GFX_VERSION GPU by its override in the cold engine status by @danielhanchen in #16670
  • perf(studio): queue MLX prompt-cache snapshots without waiting on the GPU by @Lyxot in #16683
  • Studio: keep cancelled fine-tuning jobs in paginated results by @Max-Reisinger in #16633
  • Studio: read adapter_config.json once per inference worker load by @danielhanchen in #16604
  • Studio: load Anima, Chroma, MOSS-Image and int4 Krea 2 ComfyUI single files by @oobabooga in #16710
  • Studio: fix two first-use regressions from deferred startup hardware detection by @danielhanchen in #16629
  • perf(studio): stream MLX VLM SentencePiece tokens as they are sampled by @Lyxot in #16684
  • Studio: quantize Qwen-Image-2.1-Turbo NVFP4 with the Qwen-Image-2.1 layer policy by @danielhanchen in #16757
  • Studio: size more audio.cpp music models from measured peaks and show the load estimate in the picker by @oobabooga in #16726
  • Studio: answer the first Compare message in both panes by @NilayYadav in #16693
  • Studio: fit Auto context to system RAM on CPU-only machines by @NilayYadav in #16689
  • Fused LoRA backward: skip the gradient GEMMs of a frozen A or B by @danielhanchen in #16752
  • Studio: reuse an identical llama-server prompt count within a tool round by @danielhanchen in #16756
  • Decode: CUDA-graph replay for Qwen2 models by @danielhanchen in #16753
  • Studio diffusion: stream the LTX-2.5 encoder, cache and trim FLUX.3 prompt encodes by @danielhanchen in #16750
  • Studio video: denormalize decoded frames slice by slice in the uint8 export by @danielhanchen in #16748
  • Avoid duplicate successful sandbox probes during refresh by @heychaeyin in #16735
  • Studio: move MLX to mlx-vlm 0.7.12 and serve mlx-vlm-only text families by @Lyxot in #16765
  • Studio diffusion: fused FLUX AdaLN on by default on NVIDIA Linux (2.4% per eager step, fp32 error unchanged) by @danielhanchen in #16760
  • Studio diffusion: TF32 matmuls on the default speed tier, not only max by @danielhanchen in #16762
  • Studio video: MiniMax-H3 int8 video decoder on by default (30-33% faster decode, LPIPS 0.0004-0.0013) by @danielhanchen in #16764
  • Studio multi-GPU: split an even Lumina 2 batch across two cards (1.7-2.1x, fp-order only) by @danielhanchen in #16786
  • Studio video: keep a streamed LTX-2 denoiser partly resident per request (21% faster per step) by @danielhanchen in #16787
  • Studio Images: pin the parked SAM 3 copy with registered host memory by default (unpark 0.36 -> 0.14 s) by @danielhanchen in #16791
  • Diffusion autoopt parity: add tf32 to the Anima and Chroma default-tier rows by @danielhanchen in #16838
  • Studio: apply ComfyUI LoRA and LoKR files to Anima, Krea 2 and MOSS-Image by @oobabooga in #16711
  • Studio diffusion: fuse the SwiGLU product into the down projection's act quant on untuned sm80+ archs by @danielhanchen in #16785
  • Studio sd.cpp: --mmap for CPU renders on builds whose --mmap keeps the CPU repack by @danielhanchen in #16758
  • Studio CPU diffusion: one thread per logical CPU on small SMT hosts, for sd.cpp and torch (1.03x to 1.26x) by @danielhanchen in #16774
  • Studio: int8 activations on T4 for Qwen-Image-Edit (2.03x per step) by @danielhanchen in #16813
  • Studio diffusion: compiled int8 W8A8 linear on RDNA3 / RDNA4 ROCm (Qwen-Image-2.1 int8 21% faster per step on gfx1151, now ahead of bf16) by @danielhanchen in #16825
  • Studio: install flash-attn's Triton AMD backend on ROCm RDNA3 / RDNA4 (10-15% faster diffusion steps on gfx1151) by @danielhanchen in #16767
  • Studio video: opt-in Sol-H3-VAE decoder for MiniMax-H3 by @danielhanchen in #16747
  • Studio video: decode the VAE untiled on CPU hosts when it fits in RAM (Wan2.2 VAE decode 1.5x) by @danielhanchen in #16766
  • Studio: label the Chroma and Anima families in the family picker by @danielhanchen in #16809
  • Parallel capabilities: follow the measured composition evidence (packed CP, Unsloth checkpoint, tiling, block swap) by @danielhanchen in #16773
  • Studio tests: check family picker labels in backend CI, where families are added by @danielhanchen in #16856
  • FP8 LoRA test: expect the kernel route when unsloth_zoo drops HF output flags by @danielhanchen in #16855
  • CPU backend: context parallelism engages (or refuses) instead of silently running DDP; CP modules import by @danielhanchen in #16802
  • Studio sd.cpp installer: retry a transient download failure before stepping down to the CPU build by @danielhanchen in #16788
  • Studio sd.cpp: read the linked CUDA major from DT_NEEDED so a CUDA 13 build gets no cu12 cuDNN by @danielhanchen in #16789
  • Studio bookmarks test: click Follow link again when the click does not navigate by @danielhanchen in #16858
  • Studio diffusion training: no per-micro-step host syncs, one decode per cached image, streamed int8 base load by @danielhanchen in #16763
  • Studio: let the floating browser go anywhere, and float per chat by @shimmyshimmer in #16859
  • Studio video memory plan: count the forward's headroom before keeping whole-module offload by @danielhanchen in #16805
  • Studio MiniMax-H3: price the slab compaction against the host reserve so a 16 GiB L4 render is not OOM-killed by @danielhanchen in #16849
  • Studio chat UI test: drag the monitor grip again when a native resize stops early by @danielhanchen in #16861
  • Studio diffusion: protect the first and last NVFP4 steps by default on sm_100-class cards (W4A16 auto) by @danielhanchen in #16759
  • Studio: prompt More menu for Fork and Bookmark, and no composer scrollbar flash by @shimmyshimmer in #16866
  • Mac CI: run the permission and loaded-models indicator suites alongside the UI suites by @sfjchen in #15703
  • Installer mirror test: bound the probe speed by the batch time, not a fixed 1 KiB/s by @danielhanchen in #16871
  • Pipeline parallel on CPU: run the chunked cross entropy on the last stage by @danielhanchen in #16846
  • Studio LTX-2.5: release the server's cached GPU blocks before an encode, so later prompts stop encoding on the CPU by @danielhanchen in #16804
  • Studio LTX-2.5: keep a streamed denoiser partly resident per request by @danielhanchen in #16845
  • Studio diffusion: measured activations for Lumina-Image-2.0 (int8 stays resident on 16-24 GB cards, ~3% per render) by @danielhanchen in #16808
  • Context parallel: give decoder layers no mask inside a CP step so block compile keeps one graph on packed rows by @danielhanchen in #16862
  • Studio: name the runtime and its release in the runtime update card by @shimmyshimmer in #16880
  • Studio: clear the API key when the connection type changes by @NilayYadav in #16842
  • Studio: stop read aloud from waiting on a model catalog rescan by @oobabooga in #16831
  • Fix slow typing in long chats on Windows by @Imagineer99 in #16656
  • Pipeline parallel: refuse the MoE router aux loss over several micro-batches at Trainer init by @danielhanchen in #16822
  • Context parallel: accept Unsloth's fast Qwen3 attention and compiled FastModel attention by @danielhanchen in #16870
  • Studio: CI gate that fails when typing in a long chat gets slower as the chat grows by @danielhanchen in #16801
  • Studio: draw nothing for the glass lens when it is Off (glass 1.4 to 2.1x faster without GPU rendering) by @oobabooga in #16852
  • Studio: probe STT Transformers availability off the event loop by @danielhanchen in #16783
  • Studio: round the MLX warmup and eval ratios up like transformers by @vineethsaivs in #16827
  • Studio: build the video backend off the event loop in /video/status by @danielhanchen in #16792
  • Studio MiniMax-H3: opt-in FlashInfer SM120 fused block kernels for FP8 and NVFP4 by @danielhanchen in #16875
  • Studio: validate each dataset snapshot once per provenance attestation by @danielhanchen in #16790
  • Studio: show the OpenAI thinking summary once by @NilayYadav in #16841
  • Studio: keep fine-tuning jobs in order when a batch starts ahead of them by @NilayYadav in #16832
  • Studio: read unread scheduled replies aloud when opened by @oobabooga in #16847
  • Studio audio analyze: screen the true peak in float32 and convolve only the candidate outputs by @danielhanchen in #16794
  • Studio: resume paused and interrupted model downloads on Windows by @NilayYadav in #16828
  • Studio: update the NPU runtime, harden its pin updates, and polish the NPU UI by @oobabooga in #16834
  • get_chat_template: apply mapping when the role key is not renamed by @vineethsaivs in #16425
  • Studio: run Chroma's ComfyUI fp8 files in fp8, as ComfyUI does by @oobabooga in #16872
  • Studio: let unsloth start dsh install DeepSeek Harness on Node 22 by @NilayYadav in #16844
  • Legacy CLI: accept --dtype None on every backend, not only MLX by @vineethsaivs in #15775
  • RL patch pass: skip the whole-module ast.parse when reading trainer class source on Python < 3.13 by @danielhanchen in #16806
  • Studio: index FK child columns, partial index for the run lease sweep, keep the inventory clean on Deep Research start by @danielhanchen in #16795
  • TextPreprocessor.add_structure_tokens: leave fenced code blocks alone by @vineethsaivs in #16697
  • Studio RAG: batch llama-server token counts and encode the auto-inject query once by @danielhanchen in #16812
  • RL class source: parse the code above a class with ast.parse, not a dynamic compile() by @danielhanchen in #16896
  • install.ps1: delete the committed venv rollback in a background process by @danielhanchen in #16796
  • Unsloth Studio: keep chat search fast on long histories by not shipping tool images and widget seeds to the index by @LeoBorcherding in #16848
  • Studio: make the claude mcp add command work in every project by @NilayYadav in #16839
  • Studio: decode the Transformers chat stream incrementally instead of re-decoding the current line per token by @danielhanchen in #16800
  • Load path: read an adapter's base config through the probe memo, skip the remote mapper for unknown LoRA bases in Studio by @danielhanchen in #16793
  • Studio GGUF: fuse Q8_0 dequant and cast into one kernel (LTX-2.5 Q8_0 denoise -12%, bit-identical) by @danielhanchen in #16884
  • Studio chat UI test: wait for the monitor size limits before the resize, and report them by @danielhanchen in #16885
  • Studio: ask before Python runs blocked shell commands via import by @NilayYadav in #16840
  • Studio: test that the picker keeps a Hub search tab when a local model lands by @mrityu75 in #14180
  • Studio: ask to update Codex when it is too old for unsloth start codex by @NilayYadav in #16843
  • Studio: limit model download speed by @NilayYadav in #16819
  • Studio: start Blender MCP on mcp 2 by @danielhanchen in #16895
  • Report incomplete Studio streams in the CLI by @Max-Reisinger in #16868
  • Studio: make links in the collapsed update notes clickable by @NilayYadav in #16829
  • Check a dataset for bad rows and over-length examples before training by @NilayYadav in #16818
  • Match the Chat with files panel and Add files button to the glass theme by @Imagineer99 in #16761
  • Backend tests: importorskip the unsloth submodule a test uses, not the stubbable package by @danielhanchen in #16898
  • Studio: compile Anima's transformer blocks by @oobabooga in #16873
  • Keep gradient checkpointing settings working on transformers 5.23 by @NilayYadav in #16833
  • Studio diffusion: settle device memory once per video plan, wake sd.cpp polls on server output by @danielhanchen in #16797
  • Studio Qwen-Image-2.1: fused q/k RMSNorm + RoPE and broadcast modulation for eager renders on ROCm by @danielhanchen in #16891
  • Studio: reorder cloud providers in the connection picker by @shimmyshimmer in #16904
  • Document browser use and sandboxing in the README by @Imagineer99 in #16903
  • Studio: smaller sidebar logo on web, desktop sidebar header back to its pre-#16775 look by @shimmyshimmer in #16907
  • Studio: fix the browser use bar's text size and button order by @shimmyshimmer in #16905
  • Studio diffusion: overlap the quant scheme probe with the planner import on a cold image load by @danielhanchen in #16882
  • Studio LTX-2.5: read the hosted int8 checkpoint as native Linears when the DiT is offloaded by @danielhanchen in #16886
  • Studio: prequant fingerprint check on a thread pool, zero-copy (13x faster first load verify) by @danielhanchen in #16879
  • Studio: fill the H3 conditioner's pinned arenas once, before registering (33% faster cold pin) by @danielhanchen in #16887
  • Tests: undo the Unsloth load's PEFT LoRA forward swap after the probe memo tests by @danielhanchen in #16908
  • Chat UI: let the floating monitor settle after the viewport restore before dragging it by @danielhanchen in #16909
  • fix(studio): preserve Unicode separators in S3 JSON Lines transcripts by @Max-Reisinger in #16725
  • Studio: keep fine-tuning job pages complete when a batch starts by @NilayYadav in #16823
  • Studio: wait for a pending embedding model download instead of failing every linked-folder file by @debojyoti-dev in #16722
  • Studio: Element outline setting, outlined light glass, Transparent glass with strength as opacity, glass Show on, and glass on pages without a background by @shimmyshimmer in #16890
  • Reduce scrolling lag in long chats by bounding offscreen reply painting by @Imagineer99 in #16782
  • Studio: stop dialogs and menus from restyling the whole chat on open and close by @danielhanchen in #16902
  • Studio: reduce long-chat panel and scrolling lag on Linux by @wasimysaid in #16854

New Contributors

Full Changelog: v0.1.915-beta...v0.1916-beta

Don't miss a new unsloth release

NewReleases is sending notifications on new releases.