v0.1.41-beta

ocrmypdf/OCRmyPDFv0.1.41-betaMay 19, 2026by danielhanchen

AI Summary

This update focuses on bug fixes and UI/UX improvements for Unsloth Studio, including fixes for offline mode support, MTP (Multi-Token Prediction) performance on various hardware, and desktop shortcuts.

Key Highlights

  • Fixes for `unsloth studio update` command and desktop shortcuts not working.
  • Improved MTP performance on Macs, CPUs, and GPUs.
  • Enhanced offline mode support.
  • Multiple UI/UX bug fixes including accessibility and layout adjustments.
  • Tool calling support for Llama-3, Mistral, and Gemma 4 on safetensors.

New Features

  • Tool healing utilities.
  • Speculative decoding toggle for MTP.
  • Playwright default model expectation derivation.
  • Respect for `HF_HUB_OFFLINE` and `TRANSFORMERS_OFFLINE` environment variables.
  • Fix for GGUF multi-image chat handling.

Full Release Notes

## Lots of bug fixes, UI, UX fixes to Studio!

To get the latest updates do:
#### macOS, Linux, WSL:
```bash
curl -fsSL https://unsloth.ai/install.sh | sh
```
#### Windows:
```powershell
irm https://unsloth.ai/install.ps1 | iex
```

## Fixes
1. Fix `unsloth studio update` not working well
2. Fix getting stuck on `reset-password` page
3. More offline mode support
4. Improve MTP not being faster on Macs, CPUs and GPUs - now it's much better!
5. Fix Desktop Shortcut not working after update
6. Many many UI UX bug fixes

## What's Changed in Unsloth
* install scripts: bump unsloth pin to >=2026.5.3 by @danielhanchen in https://github.com/unslothai/unsloth/pull/5557
* studio: engage draft-mtp on vision MTP GGUFs (drop incorrect vision gate) by @danielhanchen in https://github.com/unslothai/unsloth/pull/5560
* install scripts: bump unsloth pin to >=2026.5.4 by @danielhanchen in https://github.com/unslothai/unsloth/pull/5566
* Studio: derive Playwright default model expectation by @Imagineer99 in https://github.com/unslothai/unsloth/pull/5589
* studio: read Playwright default model from defaults.py without importing it by @danielhanchen in https://github.com/unslothai/unsloth/pull/5595
* [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in https://github.com/unslothai/unsloth/pull/5586
* studio: fix toast close-button click and light-mode hover by @shimmyshimmer in https://github.com/unslothai/unsloth/pull/5597
* fix(loader): honour HF_HUB_OFFLINE/TRANSFORMERS_OFFLINE env vars by @xodn348 in https://github.com/unslothai/unsloth/pull/5598
* studio: emit one comma-chained --spec-type for CPU/Mac MTP path by @danielhanchen in https://github.com/unslothai/unsloth/pull/5575
* Fix loss function not patched for Qwen3.5 models by @rycerzes in https://github.com/unslothai/unsloth/pull/5442
* Fix GGUF multi-image chat handling by @alkinun in https://github.com/unslothai/unsloth/pull/5508
* Expose standalone tool healing utilities by @alkinun in https://github.com/unslothai/unsloth/pull/5583
* studio/frontend: reconcile stale must_change_password localStorage flag by @danielhanchen in https://github.com/unslothai/unsloth/pull/5576
* studio/frontend: cap auto-load cascade attempts by @danielhanchen in https://github.com/unslothai/unsloth/pull/5578
* studio: regenerate desktop launcher on `unsloth studio update` (macOS + Linux + Windows) by @danielhanchen in https://github.com/unslothai/unsloth/pull/5577
* ci: advisory lockfile supply-chain audit (no install-script changes) by @danielhanchen in https://github.com/unslothai/unsloth/pull/5604
* loader: import FORCE_FLOAT32 from unsloth_zoo (single source of truth) by @danielhanchen in https://github.com/unslothai/unsloth/pull/5610
* fix(peft): expose finetune_last_n_layers for parity with mlx-lm CLI by @danielhanchen in https://github.com/unslothai/unsloth/pull/5564
* studio: add --spec-draft-n-max toggle for MTP speculative decoding by @danielhanchen in https://github.com/unslothai/unsloth/pull/5582
* studio: reserve VRAM headroom for the MTP draft cache in auto-fit by @danielhanchen in https://github.com/unslothai/unsloth/pull/5585
* Studio: tools, thinking blocks, code execution and web search for safetensors by @danielhanchen in https://github.com/unslothai/unsloth/pull/5520
* studio/frontend: widen settings sidebar so 'Connections' label fits by @danielhanchen in https://github.com/unslothai/unsloth/pull/5607
* studio: respect prefers-reduced-motion across animations by @danielhanchen in https://github.com/unslothai/unsloth/pull/5611
* studio/frontend: guard message-timing badge against unphysical tok/s by @danielhanchen in https://github.com/unslothai/unsloth/pull/5570
* studio/web: differentiate offline from backend-down in fetch error by @danielhanchen in https://github.com/unslothai/unsloth/pull/5591
* studio/frontend: keep theme classes mutually exclusive on <html> by @danielhanchen in https://github.com/unslothai/unsloth/pull/5580
* studio/frontend: show Loading fallback instead of blank pane on lazy route navigation by @danielhanchen in https://github.com/unslothai/unsloth/pull/5568
* studio/frontend: include filename in attachment aria-label + img alt by @danielhanchen in https://github.com/unslothai/unsloth/pull/5594
* studio/frontend: compare composer blocks send when no model picked by @danielhanchen in https://github.com/unslothai/unsloth/pull/5574
* studio: restore focus to opener when settings dialog closes by @danielhanchen in https://github.com/unslothai/unsloth/pull/5612
* studio/frontend: add aria-label to Dictate / Stop dictation buttons by @danielhanchen in https://github.com/unslothai/unsloth/pull/5599
* studio/frontend: settings dialog fits viewport at tablet widths by @danielhanchen in https://github.com/unslothai/unsloth/pull/5600
* studio/frontend: show Generation stopped placeholder when cancelled mid-thinking by @danielhanchen in https://github.com/unslothai/unsloth/pull/5565
* studio: tool calling for Llama-3, Mistral, Gemma 4 on safetensors + MLX by @danielhanchen in https://github.com/unslothai/unsloth/pull/5615
* Revert "studio: tool calling for Llama-3, Mistral, Gemma 4 on safetensors + MLX (#5615)" by @danielhanchen in https://github.com/unslothai/unsloth/pull/5619

## What's Changed in Unsloth Zoo:
* Honour offline env vars when enabling hf_transfer by @danielhanchen in https://github.com/unslothai/unsloth-zoo/pull/675
* Fix Studio q2_k_l GGUF export and new llama.cpp converter package layout by @danielhanchen in https://github.com/unslothai/unsloth-zoo/pull/667
* fix(mlx): match mlx-lm batch padding rule (1 + pad_to * ceil) by @danielhanchen in https://github.com/unslothai/unsloth-zoo/pull/672
* fix(mlx): expose finetune_last_n_layers for parity with mlx-lm CLI by @danielhanchen in https://github.com/unslothai/unsloth-zoo/pull/669
* fix(mlx): honor max_grad_value=None as a disable signal by @danielhanchen in https://github.com/unslothai/unsloth-zoo/pull/671
* fix(mlx): seed mx.random immediately before linear_to_lora_layers (re-PR of #674) by @danielhanchen in https://github.com/unslothai/unsloth-zoo/pull/678
* fix(mlx): warn on bf16 -> fp16 downcast in FastMLXModel loader by @danielhanchen in https://github.com/unslothai/unsloth-zoo/pull/670
* fix(mlx): make_baseline_loss_fn byte-identical to mlx-lm default_loss when labels=None by @danielhanchen in https://github.com/unslothai/unsloth-zoo/pull/673
* Fix Q2_K_L recipe: q2_k base + ffn_down=Q3_K, output=Q6_K, embed=Q4_K by @danielhanchen in https://github.com/unslothai/unsloth-zoo/pull/677

**Full Changelog**: https://github.com/unslothai/unsloth/compare/v0.1.40-beta...v0.1.41-beta