Unsloth now has Glass themes and more customization options for backgrounds, greetings and chats. This release also brings faster generation, more multi-GPU training options and CPU training in Unsloth.
Highlights
- New Glass themes with 5 themes, transparency + native macOS glass
- Customization with custom greetings, background controls and code fonts
- DeepSeek-V4.1 512K context benchmarks show Unsloth's GGUFs rank strongest across Terminal Bench, DeepSWE and AutomationBench. Analysis
- Chat navigation to preview, bookmark and jump between earlier turns
- CPU text training directly from the Train page
Make it yours
- Choose from five Glass styles with adjustable strength and optional glass menus, with or without a background image.
- Unsloth Desktop on Mac supports native glass, letting your desktop show through the window.
- Adjust background size and position, and choose where it appears across your chats.
- Add your own greeting with text, an icon or an image, or hide it entirely.
- Customize code fonts, line numbers, word wrapping and ligatures with a live preview.
- Use the Trick or Treat theme year-round without the seasonal extras.
Chat
- Preview earlier messages, bookmark turns and jump through long conversations with the new chat navigator.
- Paste formatted content as Markdown, including links, lists and spreadsheet tables.
- Arabic, Persian, Hebrew and Urdu messages display right to left while code keeps its original direction.
- Long chats stay more responsive while replies stream and you scroll.
- MCP connections recover after a server restart.
- Coding agents can follow instructions from files in your project's working folder.
Performance and media
- Supported single-GPU Llama and Qwen3 models generate faster in Unsloth's Transformers backend on NVIDIA GPUs with Linux or WSL. In our A100 test, 4-bit Qwen3-8B reached 99.1 tokens/s, up from 25.7, a 3.9x speedup.
- SDXL now renders under a 4 GiB VRAM budget, tested on T4 and L4 GPUs.
- Search large document collections faster with a new index for RAG.
- Save generated images as PNG faster without changing the output.
- Video models reuse cached INT8 weights for faster repeat loads.
- Wan2.2 A14B uses less system memory when building INT8 weights for offloaded generation.
- Adjust image LoRA strengths without reloading adapter files.
- Transcribe audio up to four hours long with audio.cpp, subject to upload and storage limits.
Mac
- Try experimental Fast Verify for faster generation with supported MLX speculative decoding models. Replies may differ slightly.
- MLX streaming spends less time processing text as replies grow.
- Unsloth now uses the Mac system font by default.
Training
- Fine-tune text models on CPU from the Train page when no GPU is available.
- Chat-only installs can add CPU training through Install Training.
- Fine-tune audio vision models such as Gemma 3n and Gemma 4 using audio and images together in the same dataset.
- Load supported non-quantized models larger than a single GPU by loading only each GPU's assigned pipeline layers.
- Configure supported combinations of data, tensor, pipeline and context parallelism with
UNSLOTH_PARALLEL. - Reduce MLP activation memory during training with
unsloth.tile_mlp(model). - Send images to vision models through CLI chat and inference commands.
What's Changed
- Bump install.sh / install.ps1 pins to unsloth>=2026.10.11 by @danielhanchen in #16131
- Don't warn about loss_type = "nll" on a TRL whose SFTConfig predates it by @debojyoti-dev in #16042
- Studio MLX estimate: ask the quantized-attention route about a cache longer than the chunk by @debojyoti-dev in #15970
- Tests: the supplied-component twins check runs where diffusers is not installed by @danielhanchen in #16126
- Tests: the titlebar smoke treats Vite outdated pre-bundle 504 as a reload by @danielhanchen in #16130
- Flex wrapper: send short no-grad queries to the main kernel where flex_decoding cannot compile by @danielhanchen in #16092
- Studio Windows AMD: pair triton-windows with torch after the dependency stack by @danielhanchen in #16074
- Studio: warn when a Windows GPU load leaves the system short of commit by @debojyoti-dev in #16046
- Studio: load LFM3 custom-code models (route by saving transformers version, fix generate, chat and export) by @danielhanchen in #16096
- Tests: fused LoRA TP parity compares O and dX at each tensor fp32 scale by @danielhanchen in #16144
- Studio: download files over 50GB from ModelScope over HTTPS (#15989) by @indrajeetapache in #15994
- Dependencies: pin pymupdf 1.28.2 on Windows ARM64, the only release with a win_arm64 wheel by @danielhanchen in #16160
- Studio: MOSS-Image negative-branch layer skip follows the reference workflows per checkpoint by @danielhanchen in #16127
- Studio MLX estimate: price attention scores where mlx really holds them, at the width it holds them by @danielhanchen in #16021
- Studio: HNSW (usearch) tier for gigantic RAG scopes, kept consistent with SQLite by @danielhanchen in #16145
- Tests: the skipped-menu linearity check times each size as the best of five by @danielhanchen in #16170
- Dependencies: the studio extra carries usearch like studio.txt by @danielhanchen in #16176
- Studio Images: SDXL-Turbo opens at its native 512x512 canvas by @danielhanchen in #16168
- Tiled MLP: one flag or one line for any model, on the new sequence tiling engine by @danielhanchen in #16125
- Tests: follow the tiled MLP hooks from #16125 (encoding, loader stubs, trainer logger) by @danielhanchen in #16196
- Vision GC offload: each model gets its own non-reentrant offloader by @danielhanchen in #16194
- LoRA: add the rank-r term inside the base GEMM so small updates are not rounded away by @danielhanchen in #16071
- Tests: compare the disabled 4-bit fused LoRA forward with dequantize + linear, not bitsandbytes' fused GEMM by @danielhanchen in #16252
- Pipeline parallel: every torch.distributed.pipelining schedule (Interleaved1F1B, LoopedBFS, zero bubble, ZBV, DualPipeV) by @danielhanchen in #15655
- Give the WMI deadline check headroom for Windows PowerShell job startup by @danielhanchen in #16257
- Run the dynamic-rank LoRA compile test on hosts without Triton by @danielhanchen in #16256
- Keep tensor subclass types through the fused LoRA accumulates by @danielhanchen in #16249
- Pipeline parallel: per-stage sharded loading (load models larger than one GPU) by @danielhanchen in #15656
- Tensor parallel: support few KV heads, full finetuning, weight-only QAT, eval, MoE and dropout instead of refusing by @danielhanchen in #15722
- Studio: MOSS-Image GGUF path follows the per-checkpoint negative-branch skip by @danielhanchen in #16255
- CI: raise the Core zoo job cap from 35 to 50 minutes by @danielhanchen in #16260
- Studio: offloaded diffusion runs both guidance branches in one batched call whenever memory allows by @danielhanchen in #16261
- Scan baseline: re-review the twelve unsloth-zoo sites 2026.10.11 moved by @danielhanchen in #16264
- Studio: a streamed Qwen-Image load from the hosted int8 checkpoint gets the int8 text stream and modulations by @danielhanchen in #16275
- Studio: an offline diffusion load reads the mirror the earlier online load staged by @danielhanchen in #16276
- Pin usearch for the document upload harness, and guard its CI-only RAG imports by @danielhanchen in #16284
- LoRA: decide the fused order once per call by @danielhanchen in #16282
- Studio video: cache the resident runtime-quantized int8 DiT so returning loads skip the requantize by @danielhanchen in #16291
- Slot resume tests: fake the disk in every test that calls save_slots_for_resume by @danielhanchen in #16305
- Studio: stream the SDXL UNet leaf by leaf when whole-module offload cannot fit it by @danielhanchen in #16295
- Studio: build offloaded video int8 denoisers per shard when the dense load does not fit host RAM by @danielhanchen in #16290
- RAG ANN test: build the recall check index on one thread by @danielhanchen in #16308
- Studio diffusion: keep the streamed text encoder in host RAM on the small-host route when it fits by @danielhanchen in #16304
- Studio tests: count the work in the prose-call amortization test instead of timing it by @danielhanchen in #16315
- Studio video: run the MiniMax-H3 int8 video decoder on the fused ConvRot act quant and int8 GEMM by @danielhanchen in #16314
- Studio: skip the MPS cache clear when torch has no usable Metal device by @danielhanchen in #16326
- Studio: the SDXL background compile runs only while no render runs by @danielhanchen in #16312
- Studio tests: count an exiting Clef worker as dead while init reaps it by @danielhanchen in #16328
- Studio video: keep the share of MiniMax-H3's streamed conditioner that fits in host RAM by @danielhanchen in #16325
- Studio: let Transcribe take larger and longer audio on audio.cpp models by @Etherll in #15952
- Tests: flush each DDP rank's result before teardown in the plain Trainer test by @danielhanchen in #16357
- Studio tests: a frozen background compile may be thawed more than once for one waiting compile by @danielhanchen in #16364
- Studio: warm the deferred SDXL speed profile off the render thread by @danielhanchen in #16360
- Studio tests: skip the real-prepare sandbox tests on a host without bubblewrap by @danielhanchen in #16371
- Notebooks CI: refresh the Colab oracle snapshots to the current GPU runtime by @danielhanchen in #16373
- Kaggle CI: install six beside the Kaggle client, and name an import failure as one by @danielhanchen in #16374
- Studio: run cheap dataset formatting maps in process for in-memory datasets by @danielhanchen in #16179
- Studio: share the loopback SSL context in one-shot llama-server calls by @danielhanchen in #16205
- Studio: skip unchanged messages when syncing a chat thread by @danielhanchen in #16213
- Studio: walk record offsets and batch member writes in log export by @danielhanchen in #16358
- Studio: list saved voices with one folder lookup and one sidecar read each by @danielhanchen in #16354
- Studio RAG: compile the docx run XPath once and remember style list lookups per document by @danielhanchen in #16343
- Studio: decode native attachment base64 with Uint8Array.fromBase64 when available by @danielhanchen in #16319
- Studio: skip pymupdf4llm's table search on PDF pages that cannot hold a lined table by @danielhanchen in #16280
- Studio: skip log redaction rules that cannot match a line by @danielhanchen in #16356
- Studio RAG: read each spreadsheet number format once per workbook by @danielhanchen in #16339
- Studio: stream durable chat events without re-parsing stored payloads by @danielhanchen in #16159
- Studio: reuse image header dimensions in the dataset labeling listing while the file is unchanged by @danielhanchen in #16366
- Studio: show right-to-left chat messages right to left by @shimmyshimmer in #16348
- Studio: split seed Hub file names by string and compile split label matchers once by @danielhanchen in #16352
- Studio: keep unchanged Recipe Studio nodes and edges across a drag step by @danielhanchen in #16307
- RL: read package versions once per trainer patch pass by @danielhanchen in #16203
- Studio: overlap web image lookup with text search and independent URL reads in one tool batch by @danielhanchen in #16174
- Studio: list the dataset folder once per upload for the caption-stem check by @danielhanchen in #16353
- Studio: update managed Node (node: 24.22.1 -> 24.22.2) by @danielhanchen in #16378
- Studio Alpaca formatting: build the missing-input fallback once per batch by @danielhanchen in #16341
- Studio: run the docx text rewrites over one unpacked part map instead of rezipping the archive after each by @danielhanchen in #16329
- MoE: keep the fitted dW tile for float32 activations in the heuristic configs by @danielhanchen in #15928
- Studio Images: encode gallery PNGs about 2x faster with byte-identical output by @danielhanchen in #16190
- Studio: ask ismount only where a directory's own stat can show a mount in the sandbox walk by @danielhanchen in #16370
- Import: scan installed distributions once while transformers and TRL import by @danielhanchen in #16189
- SFT: answer the pre-tokenized cap check from Arrow lengths when they prove it by @danielhanchen in #16293
- Studio: read a run's checkpoint state in the history listing only when the answer depends on it by @danielhanchen in #16323
- Studio export: upload a reused folder's fresh files instead of saving the model twice by @danielhanchen in #16266
- Studio: build the chat search index from a trimmed message view by @danielhanchen in #16207
- Studio: resume the Gemma body brace scan from its last end instead of rewalking the open body every token by @danielhanchen in #16346
- Studio: stream the recipe batch merge instead of loading a dataframe by @danielhanchen in #16262
- FP8: float32 dequant before torch 2.14, no direct path under mismatched autocast by @danielhanchen in #15927
- Lean varlen: ask torch 2.15's backend selector instead of the removed _can_use_cudnn by @danielhanchen in #16288
- Studio: copy tool schemas without deepcopy in the tool loop controller by @danielhanchen in #16306
- Studio: background fit and position controls, outline strength slider, composer setting in Appearance, audio and library polish by @shimmyshimmer in #16287
- Studio: cache checkpoint losses per unchanged trainer_state and scan checkpoints off the event loop by @danielhanchen in #16320
- Studio diffusion: change LoRA weights without reloading the adapter files by @danielhanchen in #16310
- Studio RAG: count chunking tokens in batches by @danielhanchen in #16265
- Studio model picker: On Device rows re-render only when their own data changes by @danielhanchen in #16316
- Studio: cut repeated work in the local model listing by @danielhanchen in #16146
- Studio video: decode reference audio once per request and stage H3 reference frames faster by @danielhanchen in #16324
- Studio: stop re-stripping the whole turn per token once tool markup is open by @danielhanchen in #16118
- Studio export: save MLX merged and base pushes once into a reused folder by @danielhanchen in #16278
- Studio: decode external provider images off the event loop by @danielhanchen in #16362
- Studio: reuse the BOS probe encoding instead of tokenizing a long prompt twice by @danielhanchen in #16289
- Studio: list the audio gallery from one folder scan and reuse unchanged sidecars by @danielhanchen in #16367
- Studio: run diffusion dataset upload file work on a worker thread by @danielhanchen in #16361
- Studio: choose where the background image shows (new chat page, chats, or all pages) by @shimmyshimmer in #16297
- Studio: greeting toggle in Appearance, and the composer stays put when the greeting is off by @shimmyshimmer in #16301
- Studio: Appearance > Code with a live preview, line numbers, word wrap and ligatures by @shimmyshimmer in #16299
- Studio: reuse each repo's partial verdict in the local model listing by @danielhanchen in #16199
- Studio CI: run the web tools overlap timings serially by @danielhanchen in #16383
- Tests: stub the new num_proc helpers in the no-torch venv, and read with utf-8 in the metadata cache test by @danielhanchen in #16386
- Studio: reconnect a chat's MCP session after the server restarts by @NilayYadav in #16209
- fix(studio): report why a model's security checks blocked it by @Lyxot in #16292
- Give Claude its shell back when the local agent can't run a command by @NilayYadav in #16211
- Studio: read each gallery PNG's recipe once while it is unchanged and resolve only symlinked clips by @danielhanchen in #16355
- Studio: Images and Video strips stop re-rendering every card per thumbnail and page by @danielhanchen in #16311
- Studio: long chats stop re-rendering source badges per token and tool cards per run by @danielhanchen in #16277
- Studio: keep transcript listing rows while their files are unchanged by @danielhanchen in #16363
- Studio: keep <function=...> tool-call parsing linear on long output by @danielhanchen in #16105
- Studio Images: another account's loaded model no longer offers Generate by @debojyoti-dev in #16200
- Docker: peel annotated tags to their commit when freezing refs by @NilayYadav in #16206
- Studio: stop the false "Could not sync pinned chats" toast during a desktop update by @oobabooga in #16188
- Studio: stream durable chat run snapshots without re-parsing the stored request by @danielhanchen in #16302
- Studio: tell the agent a project's working folder is where its tools run, so it reads the files instead of asking for them by @oobabooga in #16251
- Block CUDA graphs: auto mode stays off when decoder blocks span several devices by @danielhanchen in #15931
- Studio: cheaper per-token work in web page Markdown extraction by @danielhanchen in #16286
- Studio: stop Terminal calls hanging when a command starts a background process by @NilayYadav in #16210
- Studio: gate MiniMax-H3 Auto flash on a real flash SDPA kernel (#16294) by @indrajeetapache in #16296
- Studio: harden VAE encode dtype for Qwen-Image-2.1 GGUF Edit/Reference (#16375) by @indrajeetapache in #16376
- Studio Images: refuse a load whose resolved gated base the account cannot access by @danielhanchen in #16379
- Studio: list the video gallery from one folder scan and reuse unchanged sidecars by @danielhanchen in #16372
- Docker: stop shipping SSH host keys in the Studio image by @NilayYadav in #16208
- Kernel cache key tag and readback-barrier key for every thread (checkpoint recompute, torch >= 2.12) by @danielhanchen in #15997
- Flex attention: small shared-memory tiles for short no-grad calls so one short prompt does not leave the process on eager attention by @danielhanchen in #16049
- Reset the inference stance counter in for_inference by @danielhanchen in #16197
- Studio: say chats and projects are permanently deleted in delete dialogs by @shimmyshimmer in #16390
- Studio: train on CPU when no GPU is found, and offer Install Training on GPU-less Chat only installs by @oobabooga in #16175
- fix(studio): align settings sidebar rows with search field by @wasimysaid in #16391
- Studio MLX: decode reply snapshots incrementally instead of re-decoding every id by @danielhanchen in #16227
- Studio: skip the startup manifest migration scan when nothing changed since a clean pass by @danielhanchen in #16270
- Studio: keep a backticked tool-call tag in the answer instead of cutting it by @danielhanchen in #16132
- Desktop: stop the NVIDIA X11 flicker on WebKitGTK 2.54 (#16318) by @indrajeetapache in #16322
- Studio: Glass theme for the sidebar, composer and menus, glass without a background image, and drop the Classic and Minimal themes by @shimmyshimmer in #16333
- fix(providers): preserve all Anthropic system instructions by @hsusul in #16369
- Studio: stop routing parakeet.cpp GGUFs as chat with a false llama.cpp update hint (#16273) by @indrajeetapache in #16281
- Studio: let the background stay visible in open conversations by @danielhanchen in #16381
- CLI: list-checkpoints reports an --outputs-dir outside the outputs folder as an error by @hsusul in #16202
- Studio: convert ShareGPT image lists in placeholder order by @danielhanchen in #16385
- Studio: decode video attachments instead of fetching a data URL by @YakshithK in #16254
- Studio: never launch wxc-exec on Windows older than build 26100 by @danielhanchen in #16384
- CLI: inference and chat take images for vision models by @debojyoti-dev in #16347
- Use tar.xz for Node downloads on macOS and Linux by @NilayYadav in #16253
- Studio: serve the Decision API's pinned GGUFs from their ModelScope commits by @debojyoti-dev in #16285
- Flex attention on torch < 2.14: fitting tiles for short decode calls so a batch-size change does not leave the process on eager attention by @danielhanchen in #16073
- Gemma 3: generate on the non-flex attention path instead of flex_attention's fallback by @danielhanchen in #16041
- Decode CUDA graphs: opt-in whole-step capture for batch 1 (UNSLOTH_DECODE_CUDA_GRAPHS_FULL=1) by @danielhanchen in #15976
- Studio tests: pin the delete chat placeholder, not its wording by @danielhanchen in #16397
- Studio: macOS system glass on Unsloth Desktop by @shimmyshimmer in #16334
- Studio: turn on spell checking in Linux Desktop by @danielhanchen in #16380
- Studio: keep Trick or Treat as a year-round theme, remove the Halloween extras by @shimmyshimmer in #16392
- Studio: run and hide MiniMax-M2 tool calls that llama-server leaves in content by @danielhanchen in #16103
- Studio: answer a collapsed On Device row from disk, not the Hub by @yannickloth in #16271
- Studio: exit the inference worker instead of waiting to be killed by @YakshithK in #16338
- CLI: let train load models that need trust_remote_code by @YakshithK in #16332
- Studio: respawn a llama-server that ran out of GPU memory mid-session with more VRAM headroom by @danielhanchen in #16388
- Studio tests: data settings driver expects the named single-chat delete for one archived result by @danielhanchen in #16401
- Unsloth Studio MLX: Fast Verify toggle by @Lyxot in #16259
- FSDP2 float16 with CPU offload: unscale CPU DTensor grads as local shards by @danielhanchen in #16398
- Studio: decode with CUDA graphs by default in the transformers chat backend by @danielhanchen in #15993
- Studio tests: compare the hub source restore against the inherited source by @danielhanchen in #16236
- Stub the device context in the packed fp32 routing test by @danielhanchen in #16229
- GRPO PrefixGrouper: check the host-syncs layout test against the reference by @danielhanchen in #16244
- Tests: GQA routing oracle expects expanded K/V on torch without enable_gqa by @danielhanchen in #16225
- Studio: search earlier turns for the user's question, not the tool loop's own notices by @debojyoti-dev in #16204
- Studio: make Show in folder work on Linux, and report when it can't by @debojyoti-dev in #16198
- Tests: pin bf16 support and the HF cache location in the GGUF preflight fixtures by @danielhanchen in #15967
- Add unsloth.precision: one registry for low-precision recipes, refusals and high-precision layers by @danielhanchen in #16387
- Tests: run the RoPE 64-bit indexing metadata check on CPU-only runners by @danielhanchen in #16226
- Studio: use the macOS system font (SF Pro) as the default UI font on Mac by @shimmyshimmer in #16402
- Studio: customizable new-chat greeting by @shimmyshimmer in #16408
- Studio tests: skip the CUDA compiled-linear checks where production stays eager by @danielhanchen in #16237
- Studio: use the Hugeicons trash and bookmark-01 icons by @shimmyshimmer in #16409
- Studio tests: a separate engine port block for every xdist worker past 40 by @danielhanchen in #16245
- Full finetuning notice: say float32 for forced-float32 models on GPUs without bfloat16 by @danielhanchen in #16405
- Studio: run multi-GPU compile tests on real CUDA, fail on eager fallback by @danielhanchen in #16224
- Block compile: install the router_logits capture hooks before the first block compiles by @danielhanchen in #16410
- Pipeline parallel: carry the Qwen3-MoE router auxiliary loss across stages by @danielhanchen in #16406
- Tests: gpt-oss dense-expert reload fixture drops replaced experts' quant state by @danielhanchen in #16246
- Studio sandbox: remap the Windows spelling of /mnt/data-style paths by @danielhanchen in #16412
- Studio tests: best of five for the two single-sample nested-header linearity checks by @danielhanchen in #16426
- Risky loader baseline: record the float8 training precision fallback by @danielhanchen in #16428
- Studio tests: take the hub source baseline when the first test starts, not at collection by @danielhanchen in #16430
- Studio tests: chat width driver picks the presets by position, not by their copy by @danielhanchen in #16431
- Studio: shorten the Hugeicons trash and bookmark comments by @shimmyshimmer in #16439
- Multi-account Playwright: record and retry once when the post-logout /login load never fires by @danielhanchen in #16437
- Profile stats tests: seed at noon, so a run just before midnight keeps the reply on today by @danielhanchen in #16440
- Studio: update Hugeicons to 4.4.0 by @shimmyshimmer in #16442
- UNSLOTH_PARALLEL: one flag and one root mesh for dp / tp / pp / cp, pipeline parallel from the environment, and a capability registry by @danielhanchen in #16407
- Studio: replace stray Lucide icons and settle duplicate icons by @shimmyshimmer in #16445
- Repair the three CI checks #16407 left red on main by @danielhanchen in #16446
- Studio: read lookup tables lazily when needed to enable the MoE cache by @oobabooga in #16444
- Studio: turn navigator at the chat's left edge, building on #11668 by @shimmyshimmer in #16300
- PP env GA test: compare the trained adapter at 5e-5 by @danielhanchen in #16457
- Studio: add a Time format setting and drop the redundant desktop update note by @shimmyshimmer in #16448
- Backend CI: run the context parallel compose gloo suite in its own shard by @danielhanchen in #16447
- Preserve external chat import recovery across checkpoint failures by @danielhanchen in #16458
- Studio: list every Gemini chat model (follow nextPageToken, allow new families) by @debojyoti-dev in #16433
- Studio: estimate the prompt's time left from how the cost per token grows, not the rate so far by @oobabooga in #16450
- Studio: keep the live generation line from moving the branch picker, and update it during short replies by @oobabooga in #16449
- Studio: time a continued reply as the whole answer, not just its last pass by @oobabooga in #16451
- Studio: Composer appearance section, composer outline on by default by @shimmyshimmer in #16455
- Studio: translate the live generation figures, the reply timing tooltip and the weight placement row by @oobabooga in #16452
- Studio: add a link preview setting by @danielhanchen in #16459
- Fix OpenRouter MAI-Voice speech playback by @danielhanchen in #16463
- fix(api): preserve refusal text in collected connection replies by @hsusul in #16435
- Studio: honour Voice Settings Load into on cold STT API loads (#15280) by @indrajeetapache in #15284
- studiobench parity: treat every data-*-id attribute as an instance id by @danielhanchen in #16464
- Studio: report the measured VRAM shortfall instead of blaming the previous worker by @YakshithK in #16453
- Fix pipeline denoiser downloads labeled as required assets by @Imagineer99 in #16465
- Recognize shared encoder assets in Model Hub inventory by @Imagineer99 in #16466
- Studio: paste links, tables, lists and formatting into the composer as Markdown by @shimmyshimmer in #16298
- Studio: keep the chat background, interface scale and Browser preferences with the account by @shimmyshimmer in #16454
- Studio: keep a text selection in Settings › Logs across polls so part of the log can be copied by @LeoBorcherding in #16099
- Studio: match diffusion training access facts to the no-token mirror fetch by @danielhanchen in #16216
- Studio: /v1/chat/completions puts the whole answer in reasoning_content for templates with a {% generation %} tag by @LeoBorcherding in #16121
- Skip pinned staging for native int8 host quantisation on integrated GPUs by @danielhanchen in #16235
- Studio: restore public OpenAPI descriptions on four routes and schemas by @danielhanchen in #16223
- Studio: apply the mapped chat template once per loaded tokenizer by @danielhanchen in #16377
- Studio: train audio VLMs on the images in a mixed audio + image dataset by @LeoBorcherding in #16124
- Studio: keep feature indexes and the markdown renderer out of the startup bundle by @danielhanchen in #16394
- Studio: keep a nested active HF hub clearable and listed by @danielhanchen in #16215
- Concretize RMSNorm width before the narrow-row self-check by @danielhanchen in #16228
- Fused LM head: accept TRL 1.17's score_ids kernel argument by @danielhanchen in #16220
- Block compile: say when packed rows run each block uncompiled by @danielhanchen in #16272
- Studio video: reuse bounded conditioning image decodes by @danielhanchen in #16403
- Studio: show the voice description on Clone for Breeze TTS 2 and VoxCPM2 by @Etherll in #15878
- Studio: do not subtract live segment graph outputs twice from reusable cache by @danielhanchen in #16231
- Studio: keep an anonymous Hub token anonymous in the hosted bf16 VAE path by @danielhanchen in #16214
- Studio: wait on worker exit instead of fixed sleeps when switching models by @danielhanchen in #16344
- Studio Windows XPU Triton: verify the swap and torch's XPU triton payload, repair a broken triton, skip pip backups by @danielhanchen in #16250
- Studio: wake the dispatcher on stop instead of waiting out its queue poll by @danielhanchen in #16350
- Studio: recognise a worker VRAM release that finished before the first settle poll by @danielhanchen in #16404
- Saving: drop the training truncation and padding from saved tokenizers by @LeoBorcherding in #16102
- Cleanup: remove six private helpers and constants in core that nothing calls by @danielhanchen in #15695
- Desktop: overlap owner liveness probes and skip redundant preflight HTTP by @danielhanchen in #15739
- Studio: name FFmpeg when a video GGUF can't decode, and shrink clips with the ffmpeg llama-server uses by @LeoBorcherding in #16098
- Studio: build the code highlighter from shiki/core so the unused WASM engine leaves the bundle by @danielhanchen in #15740
- Studio diffusion: turn off coordinate descent where Max pins reduction configs by @danielhanchen in #16269
- Studio: start the credential bootstrap with the entry instead of after the route checks by @danielhanchen in #16389
- Loader: fetch each config probe once per from_pretrained call by @danielhanchen in #15757
- Saving: write the source tokenizer_class instead of TokenizersBackend by @LeoBorcherding in #16104
- Studio: LFM3-Omni audio input, export, LoRA defaults and Stop for custom-code generate by @LeoBorcherding in #16242
- feat(studio): draft MLX tool, video, grammar, KV and LoRA replies by @Lyxot in #16441
- Studio sd.cpp install: treat ELF symbol-version mismatches as loader refusals by @danielhanchen in #16150
- Studio fine-tuning queue: do not start jobs cancelled during the batching probe by @danielhanchen in #16151
- Studio: keep style keywords inside quoted state labels in the Mermaid guard by @danielhanchen in #16133
- Studio: emit only the woff2 KaTeX fonts by @danielhanchen in #16382
- FP8: strip activation_scale sources when matching the 16-bit save conversion by @danielhanchen in #16156
- Studio: chat with LFM3-Audio-2B (text and speech in, text out) by @LeoBorcherding in #16243
- Decode graphs: preserve eager cache growth and reject stale replay by @danielhanchen in #16191
- Studio OpenAI API: refuse unsupported weights in selected JSONL chats by @danielhanchen in #16153
- Flex small-smem tiles: keep float32 calls on the default tiles by @danielhanchen in #16172
- Prevent Desktop owner lockout before adding accounts by @mahiatlinux in #13961
- Studio: carry FP8 / NVFP4 compile cache tags into render and compile threads by @danielhanchen in #16158
- chore: pre-commit autoupdate by @pre-commit-ci[bot] in #16492
- FSDP2: average tp gradients over dp when every trainable param is ignored by @danielhanchen in #16180
- Studio video: load cached weights offline while the Hub is unreachable by @danielhanchen in #16152
- Packing: do not serve compiled inference_mode metadata to a training step by @danielhanchen in #16183
- Studio diffusion prequant cache: do not count cgroup shmem as reclaimable by @danielhanchen in #16154
- FSDP2 save: one writer for a tensor parallel x FSDP2 model by @danielhanchen in #16181
- FSDP2 QAT export: count the converted copy in the writer's host RAM check by @danielhanchen in #16166
- Desktop: recheck the install fingerprint before accepting a cached capability answer by @danielhanchen in #16134
- Studio Compare: keep the negative prompt on cells the Detailer pass still uses by @danielhanchen in #16149
- Studio diffusion: a numbered shard without its index is not a complete snapshot by @danielhanchen in #16418
- Multi-LoRA grouped experts: run the grouped support and parity probes only eagerly by @danielhanchen in #16415
- Packed mRoPE attention: no graph break on warm packed rows by @danielhanchen in #16416
- Resolve compatible Unsloth and Zoo pairs for all no-torch installs by @danielhanchen in #16157
- Fix FSDP2 checkpoint planning across parameter swaps and accumulation by @danielhanchen in #16171
- SDPA training on SM100: keep the caller's backend policy when avoiding cuDNN by @danielhanchen in #16230
- Studio Hub download: keep refs/main on the last complete snapshot under failed updates and concurrent workers by @danielhanchen in #16422
- Keep fused-loss engagement counters out of traced code by @danielhanchen in #15575
- PPO fused rollouts: keep TRL's scores when generate applies logits processors by @danielhanchen in #15574
- Studio: keep a generated chat title in the conversation's language by @debojyoti-dev in #16413
- Studio: save idle auto-unload seconds on Enter by @NilayYadav in #16501
- Studio: accept auto and all in custom GPU-layer arguments by @danielhanchen in #16518
- Fix emoji reading in chat read-aloud by @rugved8607 in #16480
- Studio: darken Liquid Glass 3D composers over bright wallpapers by @wasimysaid in #16477
- Studio: offer only the reasoning levels a template allows and show its raise message by @oobabooga in #16502
- Recover VAE storage after precision-conversion OOMs by @danielhanchen in #16147
- Studio settings: size the composer Beta badge and the settings search offsets from the UI scale by @danielhanchen in #16524
- Worker stderr mirror: read once more after an empty read that raced the stop by @danielhanchen in #16525
- Parallel isolation guard: list the Hub download tests poll deadlines as benign timing by @danielhanchen in #16526
- Save Desktop Gallery batches with one folder choice by @danielhanchen in #16521
- No-Triton import: hand the triton stub to unsloth importers without publishing it by @danielhanchen in #15576
- FSDP2: sum fp16 replicated gradients over unsynced micro-batches in float32 by @danielhanchen in #16173
- Scoped download tests: seed the Hub cache the offline path now pins by @danielhanchen in #16530
- Multi-LoRA cold compile test: read the source as utf-8 by @danielhanchen in #16531
- No-torch install harness: model a feed that resolves the Unsloth / Zoo pair by @danielhanchen in #16532
- Pipeline parallel: end a non-last stage without a graph break under torch.compile by @danielhanchen in #16167
- No-deps pair test: start PowerShell through the shared runner by @danielhanchen in #16533
- FP8: keep rowwise _scaled_mm for float32 where cuBLAS supports it (torch < 2.14) by @danielhanchen in #16393
- GPU supervisor signal test: publish its handshake files atomically by @danielhanchen in #16535
- Pipeline parallel: agree on overflow once when explicitly unscaling by @danielhanchen in #16417
- Prevent FP16 overflow in grouped multi-LoRA expert projections by @danielhanchen in #16414
- MLX inference stub: answer the _FIRST_USE_WORK import zoo added by @danielhanchen in #16537
- ROCm progress test: model a feed that resolves the no-torch pair by @danielhanchen in #16542
- Multi-LoRA overflow test: read the kernel source as UTF-8 by @danielhanchen in #16544
- Studio: combine OpenCode Console and Go into one connection by @NilayYadav in #16482
- Fix Connections dropdown shrinking on scroll and hover by @wasimysaid in #16543
- Studio: size audio.cpp TTS models from measured peaks and run TQ2_1 on the CPU by @oobabooga in #16514
- Desktop: allow a custom backend port with UNSLOTH_DESKTOP_PORT by @danielhanchen in #16523
- Studio: keep the loaded model when Switch back has to download a GGUF by @NilayYadav in #16474
- Respect interface scaling in Settings search and rich-paste badge by @danielhanchen in #16471
- Block Swap: get_peft_model crashes on MoE models with offload_layers (evicted expert weights read as empty) by @LeoBorcherding in #15159
- Keep a verified live Desktop backend after watchdog recovery by @danielhanchen in #16470
- Keep Studio windows signed in during concurrent session refresh by @danielhanchen in #16468
- Studio diffusion: skip settling for proven resident replans by @danielhanchen in #16400
- Make page-in startup progress tests independent of host scheduling by @danielhanchen in #16476
- Preserve prompt cache during deferred MCP tool search by @wasimysaid in #16546
- Studio: show image generation time by @Aafimalek in #16462
- Preserve split-device compressed-tensors input transfers by @danielhanchen in #16155
New Contributors
- @yannickloth made their first contribution in #16271
- @rugved8607 made their first contribution in #16480
Full Changelog: v0.1.913-beta...v0.1.914-beta