This release includes breaking changes for platform teams planning a safe upgrade.
✓ No known CVEs patched in this version
Topics
+12 more
Affected surfaces
ReleasePort's take
Light signalRelease v4.7.0 adds managed voice cloning profiles via UI and REST endpoints.
Why it matters: Developers can create custom voice clones through /api/voice-profiles or /v1/audio/speech APIs, expanding application personalization options.
Summary
AI summaryBroad release touches π Bug Fixes, π§ Models, π New Contributors, and π Documentation.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| Feature | Medium |
Adds managed voice cloning profiles via UI and REST endpoints. Adds managed voice cloning profiles via UI and REST endpoints. Source: llm_adapter@2026-07-14 Confidence: high |
β |
| Feature | Medium |
Introduces LongCat video and avatar generation backend with new gallery models. Introduces LongCat video and avatar generation backend with new gallery models. Source: llm_adapter@2026-07-14 Confidence: high |
β |
| Feature | Medium |
Enables interleaved thinking with tool calls across assistant turns. Enables interleaved thinking with tool calls across assistant turns. Source: llm_adapter@2026-07-14 Confidence: high |
β |
| Feature | Medium |
Adds moss-transcribe-cpp for joint multiβspeaker transcription and diarization. Adds moss-transcribe-cpp for joint multiβspeaker transcription and diarization. Source: llm_adapter@2026-07-14 Confidence: high |
β |
| Feature | Medium |
Integrates F5βTTS into CrispASR with 24β―kHz voice cloning support. Integrates F5βTTS into CrispASR with 24β―kHz voice cloning support. Source: llm_adapter@2026-07-14 Confidence: high |
β |
| Feature | Medium |
Implements true streaming TTS in vibevoiceβcpp, reducing TTFA from 39.96β―s to 2.38β―s. Implements true streaming TTS in vibevoiceβcpp, reducing TTFA from 39.96β―s to 2.38β―s. Source: llm_adapter@2026-07-14 Confidence: high |
β |
| Feature | Medium |
Supports auto full context with `context_size: -1` resolving to model's trained max. Supports auto full context with `context_size: -1` resolving to model's trained max. Source: llm_adapter@2026-07-14 Confidence: high |
β |
| Feature | Medium |
Adds GPU device selection via `devices:` option in llama.cpp options. Adds GPU device selection via `devices:` option in llama.cpp options. Source: llm_adapter@2026-07-14 Confidence: high |
β |
| Feature | Medium |
Introduces modelβload failure cooldown to prevent GPU memory leaks. Introduces modelβload failure cooldown to prevent GPU memory leaks. Source: llm_adapter@2026-07-14 Confidence: high |
β |
| Bugfix | Medium |
Fixes OIDC auth to accept EC/PS/EdDSAβsigned tokens, resolving 500 errors. Fixes OIDC auth to accept EC/PS/EdDSAβsigned tokens, resolving 500 errors. Source: llm_adapter@2026-07-14 Confidence: low |
β |
| Bugfix | Low |
Honors transcription language and translate settings in backend processing. Honors transcription language and translate settings in backend processing. Source: granite4.1:30b@2026-07-14-audit Confidence: low |
β |
| Bugfix | Low |
Prevents foreign model loads for opus and local-store backends. Prevents foreign model loads for opus and local-store backends. Source: granite4.1:30b@2026-07-14-audit Confidence: low |
β |
| Bugfix | Low |
Makes gallery backend (re)install atomic to avoid stale files. Makes gallery backend (re)install atomic to avoid stale files. Source: granite4.1:30b@2026-07-14-audit Confidence: low |
β |
| Bugfix | Low |
Corrects VRAM reporting for HF models, showing max quant size instead of sum. Corrects VRAM reporting for HF models, showing max quant size instead of sum. Source: granite4.1:30b@2026-07-14-audit Confidence: low |
β |
| Bugfix | Low |
Captures backend stdout/stderr into log store by default in single mode. Captures backend stdout/stderr into log store by default in single mode. Source: granite4.1:30b@2026-07-14-audit Confidence: low |
β |
| Bugfix | Low |
Pins vllm arm64 backend to 0.24.0 for stability on L4T/GPU platforms. Pins vllm arm64 backend to 0.24.0 for stability on L4T/GPU platforms. Source: granite4.1:30b@2026-07-14-audit Confidence: low |
β |
| Bugfix | Low |
Bundles full transitive runtime dependencies in DS4 image, fixing missing gRPC crashes. Bundles full transitive runtime dependencies in DS4 image, fixing missing gRPC crashes. Source: granite4.1:30b@2026-07-14-audit Confidence: low |
β |
| Bugfix | Low |
Ensures generated images saved as PNG to avoid unknown file extension errors. Ensures generated images saved as PNG to avoid unknown file extension errors. Source: granite4.1:30b@2026-07-14-audit Confidence: low |
β |
| Bugfix | Low |
Preserves uploaded file content when regenerating nonβlast answers in UI. Preserves uploaded file content when regenerating nonβlast answers in UI. Source: granite4.1:30b@2026-07-14-audit Confidence: low |
β |
| Bugfix | Low |
Prevents large data tables from breaking flexbox layout and causing horizontal scrollbars. Prevents large data tables from breaking flexbox layout and causing horizontal scrollbars. Source: granite4.1:30b@2026-07-14-audit Confidence: low |
β |
Full changelog
π LocalAI 4.7.0 Release! π
LocalAI 4.7.0 is out!
This release widens what LocalAI can generate and how you drive it: a UI-managed voice cloning library, local video and audio-driven avatar generation, and interleaved reasoning that travels with tool calls. It also lands new audio engines (one-pass diarized transcription, F5-TTS, true streaming TTS) and a batch of reliability fixes across auth, transcription, and the model gallery.
Highlights:
- ποΈ Managed voice cloning - record or upload a consented reference in the UI, save it as a reusable profile, and reference it from any cloning-capable TTS backend with a stable
localai://voice-profiles/<id>URI. No more hand-edited YAML or copying audio into model folders. - π¬ Local video & avatars - a new
longcat-videobackend brings text-to-video, image-to-video, and audio-driven talking-avatar generation, wired into the Studio UI with audio and reference-image controls. - π§ Interleaved thinking with tool calls - an assistant turn can now carry
reasoningandtool_callstogether and keep the reasoning across the tool-result loop, with areasoning_contentinbound alias and Anthropicthinkingblock support. - π£οΈ New audio engines - one-pass diarized transcription (
moss-transcribe-cpp), F5-TTS voice cloning in CrispASR, and true streaming TTS in vibevoice-cpp (time-to-first-audio 2.38s vs 39.96s on CPU). - ποΈ Auto full context -
context_size: -1runs a model at its full trained context window, read from GGUF metadata per-model, with a VRAM-fit warning. - π₯οΈ Sharper control - pick which GPUs llama.cpp offloads to (
devices:), and a new model-load cooldown stops a deterministically-failing model from respawning its backend on every poll and leaking VRAM.
Plus DFlash speculative-decoding gallery models, an OIDC fix for EC/PS/EdDSA-signed tokens, transcription language/translate settings that reach the backend, and the usual set of dependency updates.
π TL;DR
| Area | Summary |
|------|---------|
| ποΈ Voice Library | Admin-managed voice cloning profiles: record/upload consented reference audio in the UI, preview, and reference via localai://voice-profiles/<id>. New GET/POST/DELETE /api/voice-profiles, MCP tools (list/create/delete_voice_profile), and a typed tts.voice_cloning config. Cloning declared as a capability across 12+ TTS backends (self-discovered, no hardcoded backend names). |
| π¬ LongCat video & avatars | New longcat-video Python backend: text-to-video, image-to-video, and LongCat-Video-Avatar 1.5 audio-driven avatars. Gallery entries longcat-video and longcat-video-avatar-1.5; new known_input_modalities/known_output_modalities config fields; /video endpoint extended with staged audio. CUDA 12/13 x86_64 + CUDA 13 ARM64 images. |
| π§ Interleaved thinking | Assistant turns carry reasoning + tool_calls together and preserve reasoning across the tool loop. reasoning_content accepted as an inbound alias; Anthropic Messages local path round-trips thinking blocks (gated on thinking: {type: "enabled"}). |
| π£οΈ moss-transcribe-cpp | New Go backend over the C++/ggml MOSS-Transcribe-Diarize port: joint multi-speaker transcription + diarization + timestamps in one pass. Gallery model moss-transcribe-cpp-0.9b. Offline; 1.6-2.2x faster than reference on CPU, bit-exact on CUDA. |
| β‘ vibevoice streaming TTS | Real incremental streaming via vv_capi_tts_stream: TTFA 2.38s vs 39.96s batch (~17x) on CPU for VibeVoice-Realtime-0.5B. |
| π¨ F5-TTS | F5-TTS linked into CrispASR + f5-tts-crispasr gallery model (24kHz, voice cloning via voice:/voice_text: options). |
| ποΈ context_size: -1 | Negative context_size (or LOCALAI_CONTEXT_SIZE=-1) resolves to the model's n_ctx_train from GGUF metadata, with a GPU-only VRAM-fit warning and a safe clamp so no backend ever sees a negative window. |
| π₯οΈ llama.cpp device selection | options: [devices:CUDA1,CUDA2] restricts offload to named GPUs (from --list-devices). |
| π‘οΈ Model-load cooldown | A failed load enters a cooldown (default 10s, geometric growth capped at 5m) so polling clients get 503 + Retry-After instead of respawning a crashing backend and leaking GPU memory. |
| π§ Speculative decoding models | Four Qwen DFlash gallery entries (4B / 9B / 27B / 35B-A3B), each bundling target + drafter, spec_type:draft-dflash. |
π New Features & Major Enhancements
ποΈ Managed voice cloning profiles (Voice Library)
Record or upload a consented reference, save it as a reusable profile, and reference it from any cloning-capable TTS backend.
Voice cloning becomes a first-class, UI-driven workflow. Record or upload consented reference audio in the React UI, normalize it to WAV, preview it, and save it as a named profile. Reference the profile from the TTS UI or /v1/audio/speech with a stable localai://voice-profiles/<id> URI, no YAML editing and no copying audio into model directories.
- New REST surface:
GET /api/voice-profiles,GET /api/voice-profiles/:id/audio,POST /api/voice-profiles(admin),DELETE /api/voice-profiles/:id(admin), surfaced in Swagger,/api/instructions, and the auth capability registry. MCP admin toolslist_voice_profiles,create_voice_profile,delete_voice_profile. - New typed config
tts.voice_cloning(bool) opts custom model names in or out of Voice Library compatibility;falsealso rejects saved profile references with HTTP 400. Request precedence isvoice->tts.voice->tts.audio_path; existing options still work with no breaking change. - Compatibility is server-discovered from backend capabilities (the frontend hardcodes no backend names) and offers gallery models to install when none are present. Cloning is declared in the capability registry for
vllm-omni,vibevoice-cpp,coqui,pocket-tts,qwen-tts,qwen3-tts-cpp,faster-qwen3-tts,fish-speech,neutts,chatterbox,voxcpm,omnivoice-cpp, and model-dependentcrispasr. - Cross-backend contract: reference WAV + exact transcript via
params.ref_text. E2E verified on qwen3-tts-cpp (4.47s reference produced a non-silent 3.44s 24kHz WAV).
π PRs: #10799
π¬ LongCat video and avatar generation
A new longcat-video Python backend brings local video generation to LocalAI: text-to-video, image-to-video, and LongCat-Video-Avatar 1.5 for audio-driven talking avatars. It is wired into the React Studio UI with audio and reference-image controls.
- Gallery entries
longcat-video(text+image input, video output) andlongcat-video-avatar-1.5(text+image+audio input, video output). Backend images: CUDA 12 and CUDA 13 x86_64, plus CUDA 13 ARM64 (DGX Spark / NVIDIA ARM64 guidance included). - Introduces declarative capability metadata: new
known_input_modalities/known_output_modalitiesconfig fields so generic code discovers what a checkpoint accepts instead of branching on backend or checkpoint names. The HF importer emits matching self-describing recipe metadata. - The
/videoendpoint gains staged audio and video-generation parameters, with distributed audio staging (input bounded to 128 MiB). Avatar mode supports multi-segment generation, BF16 or optional INT8 quantization, and distillation settings, documented in a newfeatures/longcat-video.mdpage.
π PRs: #10792
π§ Interleaved thinking with tool calls
An assistant turn can now carry reasoning and tool_calls together, and the reasoning survives the tool-result loop across turns. This is uniform, tested, and documented behavior rather than a per-backend accident.
- OpenAI chat messages accept
reasoning_contentas an inbound alias for the canonicalreasoningfield (vLLM/DeepSeek/cogito-style clients emit it); emission is unchanged and the canonical field wins when both are present. - The Anthropic Messages local path round-trips
thinkingblocks: inboundthinkingblocks parse into the message reasoning, and athinkingblock is emitted beforetool_useon both non-streaming and streaming responses, gated on the request paramthinking: {type: "enabled"}. The cloud-proxy passthrough path is untouched. - Verified live:
lfm2.5-8b-a1bandgemma-4-e2breturnreasoningplus structuredtool_callsin a single turn. A newfeatures/interleaved-thinking.mddoc is cross-linked from the model-configuration, text-generation, and functions guides.
π PRs: #10744
π£οΈ New audio engines: diarized transcription, F5-TTS, and streaming TTS
Three additions widen the audio surface:
- moss-transcribe-cpp (#10756): a new Go backend that dlopens the C++/ggml MOSS-Transcribe-Diarize port to do joint multi-speaker transcription, diarization, and timestamps in a single offline pass. Gallery model
moss-transcribe-cpp-0.9b(defaultq5_kGGUF). The ggml port is byte-exact to the reference PyTorch and 1.6-2.2x faster on CPU, bit-exact on CUDA (verified on Blackwell / Jetson Thor). Builds across the full Linux matrix plus Darwin/Metal. - F5-TTS in CrispASR (#10753): links the F5-TTS static runtime into the CrispASR build (SWivid, MIT; a 22-layer DiT flow-matching model with a built-in Vocos vocoder) and ships an
f5-tts-crispasrgallery model. Produces 24kHz mono audio and auto-detects asf5-tts(nobackend:selector). Voice cloning viaoptions: [voice:/path/ref.wav, voice_text:Transcript...]; note F5-TTS runs a 32-step ODE solver, so CPU synthesis is compute-heavy. - vibevoice-cpp true streaming (#10764): replaces whole-clip-then-chunk synthesis with real incremental streaming through the new
vv_capi_tts_streamcallback ABI. Time-to-first-audio drops from 39.96s (batch) to 2.38s (streaming), about 17x, on a CPU-only box forVibeVoice-Realtime-0.5B. Scope is the realtime-0.5B model; the non-streaming path is unchanged.
π PRs: #10756, #10753, #10764
ποΈ Auto full context with context_size: -1
A context_size: -1 sentinel (any negative value) now makes a model run at its full trained context, resolved per-model from the GGUF n_ctx_train metadata at load. This lets you opt a model into its true maximum window even when a gallery YAML already pins a value, without hardcoding a number. The global equivalents LOCALAI_CONTEXT_SIZE=-1 / --context-size -1 make every model resolve to its own trained max, while an explicit per-model value still wins.
Three defense layers keep it safe: GGUF resolution degrades to the default with a warning if metadata lacks a usable max; a GPU-only warnIfContextExceedsVRAM helper logs (never blocks) when the window likely will not fit; and the backend options layer clamps any residual negative to the default so no backend receives a negative n_ctx. The previously-only path (unset context_size) is unchanged.
π PRs: #10752
π₯οΈ GPU device selection and model-load cooldown
- llama.cpp device selection (#10724): a new
device/devicesoption in the llama.cppoptions:array maps to upstream--device, so you can restrict offload to specific GPUs (for example excluding a display or debug GPU). Example:options: [devices:CUDA1,CUDA2,CUDA3]. Device names come fromllama-server --list-devices. - Model-load failure cooldown (#10728): after a load fails, new independent load triggers are refused during a cooldown window, returning a typed error mapped to
503 + Retry-Afterinstead of respawning the backend on every poll. This stops a deterministically-failing model from leaking GPU/CUDA state (a reporter saw leaked contexts climb to ~58 GB) and, underLOCALAI_SINGLE_ACTIVE_BACKEND, from stealing the active slot from healthy models. Configurable via--model-load-failure-cooldown/LOCALAI_MODEL_LOAD_FAILURE_COOLDOWN(default10s,0disables); the cooldown doubles per consecutive failure, caps at 5m, and resets on a successful load. Coalesced followers of a genuine concurrent burst still get their one retry.
π PRs: #10724, #10728
π§ Models
- Qwen DFlash speculative-decoding models (#10791): four gallery entries for the
llama-cppbackend, each bundling a full target model plus its small block-diffusion drafter (drafters are not standalone chat models):qwen3-4b-dflash,qwen3.5-9b-dflash,qwen3.6-27b-dflash,qwen3.6-35b-a3b-dflash. Per-entry config isflash_attention: on,draft_model:,use_jinja:true,spec_type:draft-dflash,spec_n_max:15. Requires the pinned llama.cpp with upstream DFlash support; every bundled drafter is verifiedgeneral.architecture = dflash(fork-onlydflash-draftGGUFs are intentionally excluded because they fail to load). GPU recommended. - Inference defaults (#10741): adds recommended sampling defaults for
deepseek-v4(auto-generated from unsloth), so LocalAI applies correct generation parameters for the family automatically. - Plus new gallery models added via the gallery agent (#10743, #10755).
π Bug Fixes (recap)
fix(auth): accept EC/PS/EdDSA-signed OIDC ID tokens, not just RS256 (OIDC login was 500ing at callback with EC-signed tokens, e.g. Authentik) - #10736fix(transcription): honor model-configparameters.language/parameters.translateand the OpenAIlanguageform field, which were silently ignored for multipart uploads - #10731fix(backends):opusandlocal-storenow refuse foreign model loads, so an LLM with no explicit backend cannot silently bind to the audio codec or vector store during backend probing - #10769fix(gallery): backend (re)install is now a clean atomic replace (stage, validate, swap, rollback) instead of an overlay, so stale files from a prior version no longer shadow the new one - #10726fix(vram): report the largest single GGUF quant instead of summing every quant in an HF repo, so a 9B model no longer shows as 71 GB / "May not fit" - #10707fix(logs): capture backend stdout/stderr into the log store by default in single mode, so the Backend Logs page is populated out of the box - #10742fix(vllm): pin the L4T arm64 backend tovllm==0.24.0for GB10 / DGX Spark stability (0.23 crashes deterministically on cold loads and pins GPU memory) - #10725fix(ds4): bundle the full transitive runtime dependency closure so the from-scratch DS4 image no longer exits 127 on a missing gRPC library - #10783fix(diffusers,vllm-omni,tinygrad): save generated images as PNG explicitly, fixing anunknown file extension: .tmpcrash right after successful inference - #10729fix(react-ui): preserve uploaded file content when regenerating a non-last answer (attachments were silently dropped after forking and regenerating a file turn) - #10819fix(ui): prevent a large data table from breaking the flexbox layout and forcing a page-wide horizontal scrollbar - #10754
π Dependencies
Submodule and backend bumps this cycle:
ggml-org/llama.cppx7CrispStrobe/CrispASRx7vllm-metal(darwin) x6ServeurpersoCom/qwentts.cppx4ServeurpersoCom/omnivoice.cppx4leejet/stable-diffusion.cppx3ikawrakow/ik_llama.cppx3ggml-org/whisper.cppx2mudler/moss-transcribe.cppx1mudler/locate-anything.cppx1vllm-project/vllm0.24.0 -> 0.25.0 (Python backend) and cu130 wheel to0.25.0
Plus grpcio 1.81.1 -> 1.82.1, charset-normalizer >=3.4.9, and GitHub Actions bumps (actions/cache 4 -> 6, actions/stale 10.3.0 -> 10.4.0).
π Documentation
- Refreshed the LocalAI homepage to frame the project as a modular multimodal AI runtime: breadth lanes (reason, listen and speak, create, see, act), the small-core plus on-demand-backends architecture, the native engines built by the LocalAI team, and the scale path from laptop to team server to cluster - #10780
- Docs-site version bump - #10709
π New Contributors
- @rvmz made their first contribution in #10724
- @hogeheer499-commits made their first contribution in #10783
- @ajuijas made their first contribution in #10819
Full Changelog: https://github.com/mudler/LocalAI/compare/v4.6.2...v4.7.0
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About LocalAI
LocalAI is the open-source AI engine. Run any model - LLMs, vision, voice, image, video - on any hardware. No GPU required.
Beta — feedback welcome: [email protected]