Privacy AI 2.x release notes 2.x releases
Every change in Privacy AI 2.0.1 to 2.0.28, newest first. For the latest releases, see what's new.
2.0.28
General
- featureSign in with ChatGPT
Use your ChatGPT Plus or Pro subscription instead of an OpenAI API key. Open API Keys → OpenAI, switch the sign-in method to Sign in, and tap Sign in with OpenAI. Safari opens to a short device-code page; once you sign in there the app picks up your account automatically and routes Codex models (gpt-5.5, gpt-5.4, gpt-5.3-codex, gpt-5.2-codex) through your subscription. Tokens are stored in the shared Keychain on this device only, never in iCloud. xAI Grok OAuth ships in code and turns on once xAI broadens access for standard SuperGrok.
- featureLive Performance Stats In Chats
See exactly how fast your AI is responding, in real time. While a reply streams, a compact line under the message shows elapsed time, decode speed, and context window usage. Every completed message now has an expandable stats row: tap the chevron to see time to first token, prefill speed, decode speed, context used versus total, token counts, and total time. Works uniformly for local and remote models, and local models show context usage in place of cost in the compact row.
- featureExa Web Search Provider
Exa is now available as a web search engine alongside Tavily, Serper, Brave, and LangSearch. Exa is a neural search engine that returns the full page text with each result, which is well suited for in-depth research questions. Add your Exa API key in the web search tool settings, then select Exa directly or let Auto mode fall through to it; the free tier includes 1,000 searches per month.
- improvementText Selection In Fullscreen Chat
Selecting text in the fullscreen chat input no longer accidentally slides the main menu open. While a chat is in fullscreen mode, dragging a selection or moving the cursor handle stays in the text field, so editing your message on iPad feels precise and predictable.
- improvementChoose Transcription Language
When converting a video or audio file to text, you can now pick the spoken language for every speech engine (iOS Speech, Speech Analyzer, Whisper, MLX, and FluidAudio) right in the engine and model settings. Set it to match the audio so speech in a language other than your device language is transcribed accurately instead of coming out garbled or cut short. Leave it on Auto to keep using your device language.
- improvementSmoother Transcription Progress
The progress shown while converting audio to text now moves forward steadily instead of occasionally jumping backward as the words are recognized.
- bug fixSoul Greeting Now Appears From the Model View
Fixed an issue where starting a chat with a Soul from the model settings screen did not show the Soul's configured first message, even though starting the same Soul from the Soul screen did. Every chat-creation path now resolves the greeting, so the opening message appears consistently no matter where you begin the conversation.
- bug fixAttaching a Video to Chat
Fixed an error that appeared when attaching a video in chat, showing "Video Processing Error: file doesn't exist". Videos now save reliably and attach as expected.
- bug fixEmpty Transcript From iOS Speech
Fixed an issue where converting a clear recording to text with the iOS speech recognizer could return nothing, even though the words were recognized correctly partway through. The transcript now keeps the recognized text instead of discarding it.
- bug fixConvert to Text Could Hang
Fixed an issue where converting a video or audio file with the iOS Speech Analyzer could get stuck at "Analyzing audio" and never finish. Transcription now completes, and if the Speech Analyzer stalls or its language model is not yet available, the app automatically falls back to the system speech recognizer so you still get a transcript.
Memories
- featureUSER Profile From Your Memories
Each memory sector now has a Profile button that asks an AI model of your choice to summarize the long-term memories in that sector into one short paragraph (up to 500 characters). The synthesized profile is cached and quietly prefixes every chat prompt in that sector, so the assistant always opens with a fresh sense of who you are without re-reading hundreds of memories every turn.
- featureOne-Tap Memory Consolidation
A new Consolidate button on each sector finds near-duplicate long-term memories, asks an AI model of your choice to merge each cluster into a single canonical entry, and removes the redundant rows. The oldest memory's creation date is preserved, and any cluster the AI declines to merge is left untouched.
- featureMemory Maintenance In One Tap
Tapping Profile or Consolidate now runs a three-step cleanup before the final action: it first categorizes any long-term memories still tagged Uncategorized, then promotes fresh short-term notes to long-term, then runs your chosen action. Empty-state dead ends like "No long-term memories yet" are mostly gone, and the panel shows the progress of each step as it happens.
- featureMemory Audit History
A new Audit History view lists every add, update, and delete the memory system has performed, with a keyword search box so you can investigate exactly when and why a memory changed. The log is bounded so it never grows without limit.
- improvementSmarter Duplicate Detection
When several memories want to be saved at once (for example after a long turn that surfaces multiple facts), the app now evaluates them all in a single AI call and is aware of any memory it just read aloud to you this turn, so it stops re-saving facts you were just reminded of. Memories that look near-identical to an existing entry are skipped without an AI call at all.
- improvementMemory Search Knows Profile From Facts
When the assistant pulls memories into a prompt, the cached USER profile paragraph is now sent separately from the matching fact / preference / decision rows, so the model sees a clean "who is this person" sentence at the top and the supporting facts ranked by relevance underneath.
- bug fixLegacy Memories Now Reachable
Memories created before category and type tracking existed (those showing an Uncategorized chip) were silently invisible to Consolidate, Profile, and the older tidy step. They are now picked up by all maintenance flows and get a real category on first run.
- bug fixMemory AI Calls No Longer Stall On First Event
Fixed a streaming bug where the Profile, Consolidate, and Categorize AI calls could return empty because the very first event from the AI was misinterpreted as a terminator. These calls now read the full response as intended.
- bug fixMemory List Refreshes After Maintenance
After tapping Profile or Consolidate, the Uncategorized chips on rows that were just categorized now disappear immediately instead of waiting for you to switch sectors and back.
Local Models
- featureOn-Device Model Benchmark With Suggested Settings
Compare local models on your own device with a new Benchmark button in local model settings. It runs a llama-bench style test (512 prompt tokens, 128 generated tokens, 3 samples) and reports prompt processing and generation speed with mean and standard deviation, plus model size, parameter count, and peak memory. Results are saved per model, and the app then suggests an optimal context size, batch size, and thread count for that model on your device, with a one-tap Apply button.
- improvementllama.cpp Engine b9553
The local inference engine has been updated from b9279 to b9553, folding in 269 upstream changes. New on-device vision and multimodal models are now supported, including DeepSeek-OCR 2, IBM Granite 4 Vision, EXAONE 4.5 vision-language, and the Gemma 4 unified vision and audio encoders, and qwen-vl video models now merge consecutive frames automatically. New text architectures arrive too, including Gemma 4, the Mellum code model, and DeepSeek V3.2 sparse attention. Apple Silicon benefits from templated Metal GLU kernels and restored large-kernel im2col, and the engine adds NVFP4 quantized weights with faster model loading.
- improvementMLX-Swift LM Engine tag-20260607
The MLX-Swift local inference engine has been updated to tag-20260607. On-device vision models are faster and more accurate: Qwen2.5-VL position and attention-mask handling is corrected for sharper image understanding, SmolVLM2 is up to 9 times faster on small images, Idefics3 fixes a vision precision issue, and Gemma 4 resolves quantized memory and projection bugs. The engine also adds support for new on-device quantized model formats (ParoQuant) and audio model input, and hardens local tool calling so models more reliably trigger tools.
View Assistant
- improvementSharper Camera Focus for Documents
View Assistant now locks focus more reliably on close-up subjects such as documents and labels, which improves on-device text reading. The camera biases autofocus toward near subjects and turns on smooth autofocus, and you can also tap anywhere on the live preview, in both the inline and fullscreen camera, to focus on that spot. This is especially helpful on iPhone 17 Pro, where continuous autofocus alone tended to hunt on close pages.
Accessibility
- bug fixVoiceOver Input Stays Reachable After Sending
Fixed an issue where the chat input bar collapsed to a hidden state after you sent a message, leaving VoiceOver users with no discoverable way to bring it back. When VoiceOver is running, the input now stays visible and focusable after sending so you can immediately type your next message. For sighted users the input still minimizes after sending exactly as before.
2.0.25
General
- featureDatabricks Model Serving Support
Privacy AI now connects to Databricks Model Serving as an AI provider. Enter your workspace serving URL and personal access token, and the app automatically discovers the chat models you have deployed so you can pick them from the model list. Streaming replies and tool calls both work, including models that return structured reasoning such as the GPT OSS family.
- featureComprehensive Video Understanding From Any Link
Paste a video link from almost any major site and the assistant now pulls the full context behind it: page text, post description, video title, and the captions or transcript. When a video has no captions at all, the app offers to download the audio and transcribe it locally on device, with a quick in-chat prompt that shows the estimated size and asks for permission before fetching anything large. Audio is pulled and transcribed by the on-device speech recognizer, and the resulting transcript is fed into the conversation exactly like a native caption track. Links from social platforms additionally merge the post text with any attached video's captions in a single pass, and links with long tracking parameters or share tokens are now detected with the system data detector so they are no longer truncated. Works with most major video and social platforms.
- featureReal-Time Flight Search
Ask the assistant about any flight, airport board, or baggage carousel and get live answers. A new search_flight tool returns flight status, delays, gate assignments, and baggage carousel info, with automatic fallback across FlightAware, AirLabs, AviationStack, and AeroDataBox. Configure one or more provider API keys in the tool settings and queries like "Is AA100 on time?" or "Show arrivals at ORD" work end to end.
- improvementFaster First Reply in a New Chat
Fixed an issue where the first message in a brand new chat triggered an unnecessary load of the on-device relevance scorer (a small embedding model used to rank prior messages). With no past messages to rank, the app now skips this step entirely, so the first reply in a fresh conversation starts noticeably faster and uses less memory.
- improvementKeyboard Opens Automatically in New Chats
Opening an empty chat now brings up the keyboard immediately so you can start typing without an extra tap. Chats that already contain messages are unchanged, and the keyboard never steals focus when returning from the model settings screen.
- improvementDraft Text Protected From Accidental Minimize
The chat input bar no longer collapses to zero height while you have unsent text. Tapping the drag handle, dragging the bar down, or using the VoiceOver "Minimize" action while a draft is in the field now keeps the input visible so your in-progress message is never hidden. VoiceOver users hear "Cannot minimize while composing" when the action is blocked, and sending a message minimizes the bar exactly as before.
- improvementIsolated OpenAI Responses Chat History
Quick Ask, the LLM Council, Siri shortcuts, and sub-agents no longer disturb the conversation thread of an open OpenAI Responses chat (such as GPT-5 or GLM-5.1 on the Responses API). Each one-off invocation now starts on a fresh server-side chain instead of overwriting the foreground chat's chain, and sub-agents keep their own isolated history. Your main chat continues exactly where it left off when these side panels run in the background.
- bug fixWeb Search Now Cascades Through Empty Results
Fixed an issue where the assistant could appear to find nothing on the web even when other search providers had answers. When the first search engine returned zero results (common for Serper engine), the app now correctly falls through to Tavily, Brave, and LangSearch until a provider returns real content, and the persisted search response always carries a proper results list so the AI has grounded sources to cite.
- bug fixDark Mode Colors On macOS
Fixed several screens on macOS (most visibly the upgrade reminder and other shared backgrounds) that stayed in light-mode colors when the system was set to Dark. The shared color shims now follow the current appearance and update immediately when you toggle Dark Mode.
- bug fixClear Chat Now Actually Starts Fresh On OpenAI Responses
Fixed an issue where tapping Clear Chat on a chat backed by the OpenAI Responses API (GPT-5, GLM-5.1 on the Responses endpoint, and similar) only emptied the on-screen messages while the server-side conversation transcript and the chat's workspace files quietly rejoined the next turn, so the model still "remembered" the prior conversation. Clearing a chat now also drops the server-side reference and wipes the per-chat workspace (context document, iteration history, tool responses, compaction snapshots, attached files, and sub-agent notes), so the next message truly starts a brand-new conversation.
Local Models
- improvementllama.cpp Engine b9279
The local inference engine has been updated from b9165 to b9279. HunyuanOCR and HunyuanVL are now unified into a single vision encoder with an OCR precision fix, and DeepSeek-OCR image preprocessing handles padded resizes more reliably. Apple Silicon gets faster Metal concat and pad+cpy kernels for vision workloads, and Flash Attention now respects the actual KV and Q dtypes instead of assuming f32. The release also adds NvFP4 quantized LM head support and a null-buffer crash fix for sliding-window attention models.
- improvementMLX-Swift LM Engine tag-20260522
The MLX-Swift local inference engine has been updated to tag-20260522. Gemma 4 text generation is about 24 percent faster on Apple Silicon through compile-fused RMSNorm and gelu kernels in the decoder layer, with prefill and output unchanged. Three Gemma 4 crashes are resolved: a broadcast crash when running 31B 4-bit checkpoints, a continuation-turn prefill crash on 1D token inputs, and a vision pooler kernel mismatch that silently zeroed out real patches at the 280-token budget. Idefics3 prefill now correctly runs in a single pass when it should, and M-RoPE position state for Qwen3.5, Qwen3VL, and GlmOcr is now threaded through the forward output instead of being mutated mid-eval, making long multimodal turns more stable.
- improvementGGUF Tool Calling Reliability
Local GGUF models including Gemma 4, Qwen, LFM2, and other modern models now reliably invoke tools such as get_date, web search, and read_file. The app was sending tool parameters as a plain text string rather than a structured JSON Schema, which caused Gemma 4 and similar models to silently skip all tools. Parameters are now passed in the standard OpenAI function-calling format that all modern model templates are trained on.
- improvementFaster First Reply From Local GGUF Models
Local GGUF models now pre-compile their Metal kernels at load time, so your first reply skips roughly two seconds of one-time cold-start work and feels as fast as later replies. A new Pre-compile Metal kernels toggle in the Basic model settings lets you turn this off for cold-start debugging; it stays on by default. Vision models skip the warmup automatically since their image encoder uses a separate path.
- bug fixGemma4-E2B and E4B Crash on Some Devices
Fixed a crash that occurred when running Gemma4-E2B or Gemma4-E4B on iPhones with a 32 KB Metal threadgroup memory limit, including iPhone 16 Pro Max. The local inference engine now automatically adjusts flash-attention parallelism to stay within the device limit, so these models run correctly instead of crashing on the first response.
- bug fixGGUF Model Metadata Read Crash
Fixed a crash that could occur while reading metadata from a local GGUF model file, particularly when the file was stored on an external drive or in iCloud and the system encountered an I/O error. The app now handles these errors gracefully instead of terminating.
- bug fixMLX Long Prompt Crash on iOS
Fixed a crash on iPhone and iPad when running local MLX models (Qwen3.5, Qwen3VL, Gemma3, Mistral3, Pixtral, Idefics3, LFM2VL, FastVLM, GlmOcr, and others) with long prompts or tool-enabled chats. Once the prompt approached roughly 6500 tokens, the inference engine tried to build the full attention map in one pass and the system terminated the app for exceeding the memory limit. Prompts are now fed to the model in 512-token chunks on iOS and Mac Catalyst, so long contexts and tool-heavy conversations complete reliably. Native macOS keeps the single-pass path for full throughput.
- bug fixMLX Image Recognition After Text-Only Reply
Fixed an issue where local MLX vision models (Qwen3.5-MLX and similar) could ignore an attached image and describe a generic chat interface, or crash with a Metal broadcast error, when a picture was sent in the same conversation right after a text-only reply. The chunked prefill path now runs the model's full vision-aware forward pass end to end and resets per-turn position state, so images are described correctly and the engine no longer crashes mid-prompt.
- bug fixDuplicate "Recovered From..." Entries On Cold Launch
Fixed an issue where the local model list could grow extra "Recovered from..." entries every time the app was launched cold, especially when models were stored in iCloud or on an external drive. The orphan scan now skips when the known-files snapshot is empty, includes vision encoder and entity list snapshots, and de-duplicates recovery records before they are written, so each model appears exactly once in the list.
Novel Writer
- improvementBetter Novels on Small Local Models
Novel Writer is now noticeably more robust when you use a small local GGUF or MLX model. The outline parser recovers from missing closing tags and merges duplicate key-event blocks so chapter summaries no longer come back empty, the protagonist and named antagonists keep the same names from chapter to chapter, and stray "to be continued" markers, bare separator lines, and mid-chapter chapter headings no longer leak into the generated prose.
- improvementSmall Local Model Heads Up
When you pick a small local model for novel writing (16K context or smaller, or a model in the 1B to 3B parameter range), the project view now shows a one-line banner with the model's exact context size and per-call output cap. This makes it clear when very long chapters may truncate or repeat, and the banner is dismissible per project and resets if you switch to a different model.
- improvementReliable Custom Assistants On Reasoning Models
Reasoning models such as GLM-5.1, DeepSeek, and the OpenAI o-series now get enough output budget to think through their answer and still emit the full structured output. Previously the third assistant in a three-assistant batch could come back empty because the model spent its entire response budget on hidden reasoning. If one does still fail to parse, you now see a status banner telling you exactly how many were generated so you can tap New Assistant to add the rest.
- improvementChapters Stay Inside The Target Length Band
After the ending smoothing pass, Novel Writer now checks the final chapter length and runs one quick correction pass when needed. If the chapter ended up under 70 percent of your target length it is extended, and if it ended up over 130 percent the trailing section is condensed while preserving the ending beat. Chapters now reliably land within the band you configured instead of occasionally finishing well under target.
- improvementAccurate Token Usage For Reasoning Models
Token Usage charts now reflect the real spend for reasoning models that report thinking tokens separately. Previously a long GLM-5.1 or DeepSeek turn could show as zero output tokens in the daily and monthly views; usage rows and provider cost rollups now count the full output including reasoning.
- bug fixCustom Assistants Always Identical
Fixed an issue where generating a custom assistant produced the same result every time when using a local model. Each generation request now uses a fresh random seed, so assistants vary in role, background, and personality as expected.
Accessibility
- improvementSingle Source For Chat Actions
The duplicate bottom action bar in the chat view has been removed, so VoiceOver users no longer encounter the same nine actions (Create Chat, Fork, Share, Clear, Full Screen, Theme, Outline, Inspector, Chat Settings) twice on the same screen. All chat actions now live in the top-right ellipsis menu only.
- bug fixVerbose VoiceOver Reads The Full Response
Fixed an issue where turning on Verbose VoiceOver announcements caused the system to read only "Response complete" and drop the actual answer. The generic completion announce and the full-text announce are now merged into a single message, so verbose users hear the complete reply when generation finishes.
- bug fixThinking Strip No Longer Reads Stray Letters
Fixed an issue where the collapsed "thinking" preview strip below a reasoning model's reply exposed partial streaming text to VoiceOver, sounding like a mid-screen text field full of stray letters. The header already announces thinking state, and the scrolling preview is now treated as decorative.
- bug fixBulleted Lists Read Cleanly
Fixed an issue where bullet markers in chat responses were read aloud as "circle, image" before each item. Markers are now decorative and VoiceOver moves directly to the item text.
- bug fixMath Expressions Speak Their Content
Fixed an issue where rendered LaTeX and math expressions in chat were silent under VoiceOver. Every math block now exposes a "Math expression" label and the source expression as its value, so screen reader users can hear what is on screen instead of skipping past it.
2.0.17
General
- featureQuick Text Home-Screen Shortcut
A new "Quick Text" shortcut appears when you long-press the app icon. It opens a fullscreen text editor with the AI toolbar so you can paste any paragraph, run Translate, Polish, Expand, or Concise in one tap, then copy the result straight to your clipboard. Nothing is saved; closing the screen discards the text but auto-copies whatever you typed as a safety net.
- improvementSmarter Tool Call Deduplication
When the AI invokes the same local tool with the same arguments twice in one turn, the second call now returns a short acknowledgment instead of running again. This saves context tokens, prevents the model from looping on identical requests, and lets long answers stay in view longer. Tools that intentionally support repeated calls (paginated reads, retries) keep working as before by varying a parameter such as page or cursor.
- improvementOnboarding Shown Only Once
The welcome onboarding screen now appears exactly once on first install and never again. Previously, users who only used mini-apps without creating any chats would see the onboarding screen every time they launched the app.
- improvementQuick Ask Full Chat Interface
Quick Ask now uses a full streaming chat view with message bubbles and a multi-line expandable input bar, so responses appear as they are generated. A new model button in the toolbar lets you switch the AI model for Quick Ask without leaving the view.
- improvementImage Preview Pinch to Zoom
Tapping an image attachment now opens an interactive preview that supports pinch-to-zoom, pan, and rotation. You can inspect fine details and reorient the image without leaving the conversation.
- improvementAI Toolbar in Fullscreen Text Editor
Editing a chat message in fullscreen now offers an AI toolbar at the bottom with one-tap Translate, Polish, Expand, and Concise actions. Pick a target language and any combination of transforms, then tap Submit to run them as a single pipeline; the result streams into a side-by-side Original vs Candidate panel where you can Accept, Reject, or Retry. Your model choice and visible toolbar buttons are remembered across sessions, and a Customize panel lets you hide actions you do not use.
- improvementTappable Setup and Permission Links in Tool Errors
When a local tool needs configuration (such as an API key) or has been denied a system permission (Calendar, Contacts, Reminders, Health, Location, Notifications), the assistant's reply now includes a tappable link that takes you straight to the right tool settings page or the iOS Settings screen. Settings no longer pops open on its own behind the chat, so you stay in the conversation and decide when to open it.
- bug fixMedia Studio About View
Fixed an issue where tapping "About" in Media Studio opened the LLM Council about screen instead of Media Studio information. The about view now correctly describes Media Studio's image, voice, music, and video generation capabilities.
- bug fixChat Input Menu Hidden by Keyboard on iPad
Fixed an issue on iPad where tapping the + or settings button while the keyboard was visible did not show the expandable menu. Both menus now appear correctly above the keyboard.
- bug fixMistral Tool Call Compatibility
Fixed an issue where Mistral API requests failed with a 422 validation error when the AI called a tool. The app was including Responses API fields in the Chat Completions message format, which Mistral's strict validation rejected. Tool calls now work correctly with Mistral models.
- bug fixLock Screen Activity Leak
Fixed an issue where an AI generation Live Activity showing "Generating..." could remain stuck on the lock screen after the app was force-quit or crashed. The app now dismisses these activities at launch, when entering the background, and on termination.
- bug fixRepeated iCloud Data Found Prompt
Fixed an issue where the "iCloud Data Found" prompt appeared on every launch when iCloud Drive was disabled but the app's iCloud folder contained only empty directories with no user files. The prompt no longer appears for folders that hold no actual data.
- bug fixImage Editor Crash on Close
Fixed a crash that could occur when closing the image editor while a drawing was in progress. The drawing canvas was still active as the first responder during sheet dismissal, which caused a layout conflict and terminated the app.
- bug fixRemote Model Title Display
Fixed an issue where remote model configurations showed only the bare provider name (such as "openrouter") instead of the combined provider and model name. This occurred when a model was saved before the model list finished loading, or when the model identifier was entered manually rather than chosen from the list. Model titles now correctly reflect both the provider and the selected model.
Media Studio
- featureCivitai Image Generation in Media Studio
Media Studio now supports image generation through Civitai, opening up thousands of community SDXL, Flux, and Pony checkpoints. A new "Search Civitai Models" browser lets you filter and sort the live Civitai catalogue, then pick a model with one tap. Image-to-image and inpaint modes work the same way as other providers by adding a reference image and optional mask, and Civitai-only LoRA strengths can be passed alongside any base model from the editor's advanced settings.
- bug fixStability AI Endpoint Routing
Fixed an issue where stable-image-core and stable-image-ultra models were routed to the wrong API endpoint, causing generation requests to fail with a 400 error. Each Stability model family now uses its correct endpoint: sd3 variants use the sd3 path, stable-image-core uses the core path, and stable-image-ultra uses the ultra path.
- bug fixStability SD3 and SD3.5 Model Names
Fixed an issue where selecting a Stability SD3 or SD3.5 model (such as SD 3.5 Medium or SD 3.5 Large) returned a 404 "engine not found" error. The app was sending the pricing catalog name (stable-diffusion-3.5-medium) instead of the v2beta API name (sd3.5-medium). All SD3 and SD3.5 variants now use the correct API identifiers.
Local Models
- featureAdvanced Local Model Tuning
Local GGUF models now expose a full set of advanced runtime options in model settings: KV cache quantization (q8_0 by default, halving cache memory with negligible quality loss when flash attention is on), a physical batch size (n_ubatch) for lowering peak VRAM during prefill, RoPE base and scale overrides, and YaRN long-context scaling controls (ext factor, attn factor, beta fast/slow, original context). Each option ships with safe defaults that inherit from the model's GGUF metadata, so existing chats keep working unchanged while power users can extend context or shrink memory use per model.
- improvementllama.cpp Engine b9090
The local inference engine has been updated from b9008 to b9090. ggml is now at v0.11.0, bringing fused RMS_NORM and MUL kernels on CPU and a fast Walsh-Hadamard transform for KV rotation. KleidiAI is updated to v1.24.0 for improved matrix throughput on Apple Silicon. New model support includes MiMo v2.5, MiniCPM-V 4.6, Sarvam MoE, Sarashina2.2 Vision 3B, and IBM Granite 4.0 Speech (audio encoder). A Whisper audio tail truncation in the FFT buffer is also fixed.
- improvementMLX-Swift LM Engine tag-20260509
The MLX-Swift local inference engine has been updated to tag-20260509. A crash that occurred when sending a plain text message to a Qwen3.5 VL model is now fixed: the engine no longer panics with a SmallVector out-of-range error when a 1D token array is passed instead of the expected 2D batch tensor. Integration test coverage has also been expanded across 18 model families including Gemma 3n, Gemma 4, Granite 4.0-H, LFM2, Jamba 3B, SmolLM3, and Qwen3.5.
- bug fixHuggingFace GGUF Download Import
Fixed an issue where a GGUF model downloaded from HuggingFace would show "Invalid Model File" immediately after the download completed. The app was passing the remote download URL to the import step instead of the local file path, so the file could never be found. Models now import correctly as soon as the download finishes.
Novel Writer
- featureChapter Illustrations and Cover Generation
Novel Writer now generates inline chapter illustrations, character concept sheets, and book covers using any text-to-image model from any supported provider (Replicate, Fal, Stability, OpenAI, Google, Minimax, Runway, Civitai). Turn on Illustrations in advanced settings, pick a provider and model, and the writing pipeline auto-creates one concept sheet per main character plus cinematic illustrations at AI-selected anchor moments inside each chapter. Inline images render in the chapter preview, in Markdown export, and in EPUB export with all images embedded into the book file.
- featureAI Character Generation
Novel Writer can now fabricate main characters for you. Set 0 to 10 AI-generated characters in project settings to populate the cast during outlining, or tap New AI Character on the project detail view to add one at a time. Each character is built from your synopsis plus any existing outline, story bible, narrative threads, and established facts so it fits a slot the story needs and stays consistent with canon, and a Delete entry on each character row removes characters you no longer want.
- featureCharacter Concept Sheets On Demand
Each character row now has a Generate Char Sheet (or Regenerate Char Sheet) action in its menu, so you can create a portrait for any character without rerunning the whole illustration pipeline. Sheets are built from the character's description and depth fields using your selected image provider, persist with the project, and are embedded into the EPUB export's character appendix.
- improvementCharacter Relationship Web
The project detail view now includes a character relationship graph. Each character appears as a labelled node colored by role (protagonist, antagonist, supporting), and edges between them are colored by relationship sentiment (ally, adversary, romantic, family, neutral). Tap a node to open a character detail sheet with role, description, and depth fields (want, need, wound, lie, arc, voice). Tap a relationship row to see a chapter-by-chapter timeline of how that relationship evolved across the novel.
- improvementMood Arc and Thread Timeline
The outline section now shows two new at-a-glance visualisations. A mood arc strip renders one colored cell per chapter so you can see emotional pacing across the novel at a glance, and a thread timeline draws each story thread as a horizontal track with dots marking the plant, reinforce, and payoff chapters. Each chapter row in the outline editor gains a mood picker, and the story thread editor adds a reinforce-chapters field so you can mark every chapter where a foreshadowed thread is actively kept alive between its plant and payoff.
- improvementClearer New Project Status
The status badge on a new Novel Writer project now reads "Ready" instead of "Configuring", making it clear the project is set up and waiting for you to generate an outline.
- bug fixDuplicate Chapter Title Prefix
Fixed an issue where chapter titles in the chapters list appeared doubled, such as "Chapter 1: Chapter 1: The Signal". This happened when the AI included the chapter heading inside the title field of the outline. Chapter titles now display correctly everywhere: the chapters list, chapter view, outline editor, EPUB and Markdown export, character relationship timeline, and all AI prompt context.
Local Gateway
- featureMini-App REST Endpoints
LLM Council and Novel Writer are now accessible as REST APIs through the Local Gateway. Call GET /v1/apps to discover all available endpoints and their schemas, then POST to /v1/apps/council/execute or /v1/apps/writer/novel from any script or tool. Both endpoints support Server-Sent Events streaming so you receive stage, progress, and partial-content events in real time. An optional Bearer token set in the Gateway view protects all mini-app routes, with the key stored securely in Keychain.
Local Audio
- improvementmlx-audio-swift Engine tag-20260509
The MLX local audio engine has been updated to tag-20260509. The full MOSS-TTS model with a Qwen3 backbone is now available for higher-quality bilingual (Chinese/English) voice synthesis and voice cloning. Silero VAD v5 and v6 are now supported as a lightweight MLX voice activity detection option. A critical Qwen3-ASR bug that caused runaway repetition loops on long recordings (consuming excessive RAM and stalling for minutes) is now fixed with chunked prefill, a repetition penalty, and a degenerate-loop guard.
- improvementFluidAudio Engine tag-20260509
Kokoro ANE now supports Mandarin (v1.1-zh) using the same 7-stage CoreML chain as the English model, paired with a full Mandarin G2P pipeline: erhua merging, POS-aware tone sandhi, jieba HMM for proper-noun boundary recovery, a g2pW polyphone classifier (int8 CoreML BERT) for ambiguous characters such as xing, zhang, and zhong, number and date verbalization, and a user-supplied custom lexicon. A Metal crash in Kokoro ANE that could occur on empty or whitespace-only synthesis requests is now fixed: zero-length token arrays no longer reach CoreML and instead surface as a recoverable Swift error. Speaker diarization accuracy at the tail of audio files is improved by a fix to DiarizerTimeline that prevented the final speech segment from being committed when the silence threshold was nonzero.
- bug fixFluidAudio Startup Crash
Fixed a crash that could occur at launch when the app checked FluidAudio model download status on the main thread during initialization. The check now runs on a background thread so the main thread is never blocked by filesystem scanning at startup.
2.0.15
Fatal Bug Fix
- bug fixFatal Launch Crash on CoreData Migration Failure
Fixed a fatal launch crash that could terminate the app immediately at startup on devices where the local database had been opened with iCloud Drive previously enabled and later disabled. The persistent store would be forced into read-only mode, automatic schema migration would fail, and any subsequent save would crash with NSInternalInconsistencyException. The app now always enables persistent history tracking, retries store loading with iCloud disabled if the first attempt fails, and guards every database write so a missing store can never trigger an uncatchable exception. Affected users on 2.0.14 will recover automatically on the next launch with this build.
General
- featureBackground AI Generation
Remote AI models (OpenAI, Claude, HuggingFace, and OpenAI Responses) now continue generating when you switch apps or lock your screen. A Live Activity appears on the Dynamic Island and Lock Screen showing progres. You receive a notification when the response is ready. If the app is force-quit, the response is recovered and delivered when you reopen the chat. Enable or disable this in Settings under "Continue AI generation in background". Local models are not affected.
- featureNotification Preferences
Settings now includes a Notifications section where you can independently control which completion alerts the app sends. Toggle notifications on or off for AI responses, mini-app tasks (Council and Novel Writer), and model downloads separately.
- improvementMini-App Background Generation
Council and Novel Writer tasks now keep running when you navigate away to another chat. A Live Activity on the Dynamic Island and lock screen shows the active task with a progress indicator, and you can cancel it without returning to the mini-app. If you open a chat that uses the same local model as a running task, a dialog lets you keep the task running or switch chats.
- bug fixSVG Image Crash in Markdown
Fixed a crash that occurred when opening a chat file containing SVG images in a markdown document. The app no longer terminates with an internal inconsistency error when rendering SVG images stored in the workspace.
- bug fixShare Sheet Chat List Refresh
Fixed an issue where chats created via the iOS Share Sheet were not visible in the chat list until the app was restarted. The new chat now appears immediately after tapping Continue in the model picker.
- bug fixBack Button Hidden in Stage Manager
Fixed an issue on iPad where the chat toolbar's back button was covered by Stage Manager window controls when the app ran in a floating window. The button now shifts automatically to stay clear of the system chrome whenever the window is smaller than the screen.
- bug fixLocal Tool Parameter Parsing
Fixed an issue where local tools silently failed when parameter names arrived in camelCase. Affected tools would return "missing parameter" errors or fall back to incorrect defaults. All tools now correctly read parameters regardless of key casing.
iCloud
- featureiCloud Leftover Data Cleanup
When iCloud Drive is turned off, Storage Settings now shows a "Manage iCloud Leftovers" button. Tap it to scan for app settings, files, and model entries left in iCloud from a previous install, then choose to clean everything, keep the data and re-enable iCloud Drive, or decide later. After three deferrals the prompt stops appearing automatically but the button remains in Storage Settings.
- improvementClearer iCloud Migration Instructions
The "Sync Local to iCloud" and "Sync iCloud to Local" buttons have been removed from Storage Settings. In their place, the iCloud Drive section now shows step-by-step instructions for safely migrating data in either direction, including the correct order of steps and a reminder to re-download AI models afterward.
- bug fixFresh Install Showed Incorrect iCloud Status
Fixed an issue where installing the app with iCloud Drive disabled showed "Syncing data from iCloud" on the launch screen and displayed green download checkmarks for model files that did not exist on the device. The launch screen now shows a neutral status message when iCloud Drive is off, and model download state is resolved from local storage only.
Backup and Restore
- improvementStorage Deletion Now Shows a Category Breakdown
When tapping Clean Local or Clean iCloud, the confirmation prompt now lists each data category (Chats, Local Models, Cache, Souls, and others) with its file count and size before you confirm. Sizes are shown in KB, MB, or GB as appropriate.
- bug fixBackup Import Preserved the Wrong iCloud Setting
When importing a backup created with iCloud Drive enabled onto a device where iCloud Drive was turned off, the app could silently enable iCloud Drive mid-import and write all restored settings to iCloud instead of local storage. The importer now always preserves the target device's iCloud Drive setting throughout the entire import, regardless of what the backup file contains.
LLM Council
- featureCouncil Completion Notifications
Privacy AI now sends a notification when the council finishes deliberating, so you can lock your device, switch apps, or turn off the screen while all models weigh in and return when the conclusion is ready.
- improvementLive Stage 0 Role Assignment
The chairman's role-assignment step now streams output in real time instead of showing a static status line for up to 90 seconds. Expand the "Chairman: Role Assignment" row to watch the chairman's reasoning as it arrives, including a dedicated thinking disclosure for models that reason before responding.
- improvementFull Language Support
Council prompts and system messages now display in your selected app language. Previously, council template text appeared in English regardless of the language setting.
- improvementThree New Game Theory Scenarios
Council's Game Theory mode now includes three additional classic scenarios: Ultimatum Game (sequential bargaining where fairness norms challenge rational self-interest), Trust Game (investment where trust and reciprocity determine mutual gains), and Public Goods Game (multi-player collective action with free-rider dynamics). All three appear in the Game Type picker alongside the original five scenarios.
Novel Writer
- featureChapter Completion Notifications
Privacy AI now sends a notification when your novel chapter finishes generating, so you can lock your device or switch apps while the writing runs and return when the chapter is ready to review.
- improvementFull Language Support
Genre descriptions and character depth field labels now display in your selected app language. Previously, these texts appeared in English regardless of the language setting.
- improvementMultilingual Novel Import
Chapter detection when importing an existing novel now recognises headings in all 11 supported app languages, including German (Kapitel), French (Chapitre), Italian (Capitolo), Spanish and Portuguese (Capitulo), Japanese, Korean, and Russian (Glava). Previously only English and Chinese headings were detected.
Local Models
- improvementLocal AI Engine Update (b9008)
The on-device llama.cpp engine has been updated to build b9008. Integer-quantized models (IQ2, IQ3, IQ4) now use new fast matmul and mat-vec kernels for noticeably faster inference on Apple Silicon. This release also adds GGUF support for Nemotron Nano 3 Omni and fixes a subtle accuracy issue in Qwen3 and LLaMA attention computation.
Local Audio
- featureMOSS-TTS-Nano-100M Voice Synthesis
MOSS-TTS-Nano-100M is now available as a local MLX Audio TTS model. This compact bilingual model generates Chinese and English speech entirely on-device with voice cloning support: create a Voice Clone profile from a short audio recording, set it as your active clone, and MOSS-TTS-Nano will match the tone and style of that voice.
- featureUnified Voice Selection in TTS Preview
The voice test panel for local TTS models now has a three-tab picker: Preset to choose from built-in voices (with a language dropdown for multi-language models), Cloned to select a saved voice clone profile, and Design to describe the voice style for design-mode models. Both MLX Audio and FluidAudio models use the same panel. PocketTTS model details now include a Voice Cloning section that links directly to the voice clone manager.
- featurePocketTTS Voice Cloning
PocketTTS now supports voice cloning across all six language packs (English, French, German, Italian, Portuguese, Spanish). Record or import a short audio sample to create a voice clone profile, then select it in the Cloned tab of the TTS preview panel to synthesize speech that matches the tone and style of that recording.
- improvementMLX Audio Engine Update (tag-20260502)
The on-device audio engine now includes MOSS-TTS-Nano, a fast bilingual (Chinese and English) TTS model with voice cloning support using reference audio. All TTS and ASR models (Chatterbox, EchoTTS, Qwen3-TTS, Kokoro, and others) now respond more quickly when you stop playback mid-generation, and Qwen3-ASR stops transcription more promptly when cancelled during real-time streaming.
- improvementFluidAudio Engine Update (tag-20260502)
Cohere Transcribe now handles audio longer than 35 seconds by splitting it into overlapping chunks and stitching results together, so long recordings are no longer silently truncated. PocketTTS gains 9 new language packs (French, German, Spanish, Italian, Portuguese, Chinese, Japanese, Korean, Arabic). The Parakeet TDT v3 encoder switches to int4-per-channel quantization for faster inference on Apple Neural Engine, and streaming diarization produces more accurate segment boundaries when short pauses separate speech segments.
Media Studio
- featureImage Generation
Media Studio now lets you create AI-generated images directly from the app. Choose an image provider and model, describe what you want, and generate images without leaving Privacy AI.
2.0.12
General
- featureShare to Privacy AI from Any App
You can now share content directly into Privacy AI from any app using the iOS Share Sheet. Select text, links, images, PDFs, EPUBs, Office documents, audio, or video in Safari, Photos, Files, Notes, or any other app, tap Share, and choose Privacy AI. The extension prepares your content and opens the model and action picker so you can immediately choose which AI model and action to apply.
- featurePython Code Execution Tool
The AI can now write and run Python code directly in your chat. Python 3.14 runs fully on-device with a rich set of preinstalled packages including numpy, Pillow, beautifulsoup4, httpx, openpyxl, cryptography, regex, jinja2, and websockets. The Python environment shares the same workspace and file access as the JavaScript tool, so the AI can read, write, and process your files in either language.
- featureGitHub Search Tool
You can now search GitHub repos, code, issues, and users directly from chat, and fetch repo details, README content, file contents, and release notes. Works out of the box anonymously (up to 60 requests per hour). Add a GitHub Personal Access Token in Settings for 5,000 requests per hour and full code search support.
- improvementChat Input Bar Redesign
The chat input bar now uses a unified card layout with consistent button styling, a pill-shaped send button, and a top-center handle to expand the input area. Attachment and settings options are accessed through a single expandable menu button, reducing clutter and making the bar easier to use.
- improvementContext Compaction
Privacy AI now summarizes older turns automatically when a conversation grows long, so chats no longer hit a hard context limit. You can also tap Compact in the context-usage bar to compact manually at any time. A result card shows how many tokens were freed and which AI summarized the history.
- improvementSettings Respect iCloud Drive Sync Preference
When you disable iCloud Drive sync in Settings, your app preferences (TTS and speech settings, model selection, UI toggles, and other user settings) are now saved locally on your device only and are no longer synced to iCloud. Re-enabling iCloud Drive sync resumes cloud-backed preference storage.
- improvementModel Picker Shows Context Window and Capabilities
Each model row in the model selection screen now displays the context window size, token limits, and whether the model supports tool calls. You can compare models at a glance without opening each model's detail page.
- improvementMore Reliable Icon Button Taps
The hamburger menu button, message action buttons (copy, paste, resend, and others), and the expandable input bar menu button now respond correctly across their full visible frame. Previously, taps near the edges of these buttons could animate but not trigger the action because only the icon's rendered pixels were treated as tappable. The fix is especially noticeable on iOS 26, where the glass pill style made the gap between the visual and tappable areas more apparent.
- bug fixEPUB Full Chapter Content Extraction
Fixed an issue where sharing an EPUB file produced near-empty output with only catalog headings. When a single table-of-contents entry spans multiple HTML files (common in large omnibus collections such as a 15-book series), Privacy AI now reads all of the linked files for that chapter instead of stopping after the first one. The full text of every chapter is now available for AI analysis.
- bug fixLast Message Reappears After Deletion
Fixed a bug where deleting the last message in a conversation would cause it to reappear after reloading the chat. The history file was not written when the message list became empty, so the deleted message was restored on next load. The history file is now saved correctly as an empty list when all messages are removed.
- bug fixDeleted Message Stays Visible in Chat
Fixed a bug where deleting a message from a conversation did not immediately remove it from the chat view. The deleted message remained on screen until the view was fully reloaded. The chat view now updates instantly after a message is removed.
- bug fixiCloud Drive Activated Before User Opts In
On a fresh install, Privacy AI was creating iCloud Drive folders and starting background sync at launch, before you had a chance to choose your storage settings. iCloud Drive initialization is now gated on your explicit preference, so no iCloud directories are created until you enable the feature in Settings.
- bug fixSpurious "Syncing with iCloud" Messages When iCloud Drive Is Off
When iCloud Drive sync was disabled in Settings, the app still showed "Syncing with iCloud" status messages at startup and in the chat view. CloudKit event monitoring, the startup sync wait, and the periodic sync are now all gated on the iCloud Drive preference, so no iCloud activity or messaging occurs when the feature is turned off.
View Assistant
[Bug Fix] Double-voice fix VoiceOver and TTS no longer speak the same description simultaneously. VoiceOver now stays silent while TTS handles the readout, and takes over when TTS is disabled/muted.
Novel Writer
- improvementBetter Plot Consistency Across Long Novels
The state tracking and context selection for long novels have been significantly improved. STATE.md now accumulates chapter states as append-only sections ("After Chapter N") instead of being overwritten each time, so every chapter’s state is preserved throughout the novel. When STATE.md grows too large, it is automatically compacted by AI into a "Settled State" summary of older chapters while keeping the three most recent chapters verbatim. FACT.md now uses hybrid tail and relevance selection, keeping foundational world and rule facts from early chapters alongside recent and outline-relevant facts rather than just truncating to the newest entries. A full story outline is always included at the top of each chapter prompt so the model always knows where it is in the story arc. Earlier chapter summaries also use hybrid selection (tail and relevance-scored) instead of newest-first greedy picking. STATE.md over-budget situations are now gracefully handled via hybrid selection instead of silently dropping content. Story bible selection uses semantic relevance instead of hardcoded keyword matching.
- improvementPersistent Review Model Selection
The AI model you choose in the Novel Review sheet is now remembered across sessions. Privacy AI saves your selection to iCloud or local device storage (matching your iCloud Drive preference) and restores it automatically the next time you open the review sheet.
- improvementPer-Device Writer Model Preference
The default AI model chosen for Novel Writer is now saved locally on each device instead of syncing through iCloud. Each of your devices can remember its own preferred writer model independently, so selecting a model on one device no longer overwrites the choice on another.
- bug fix"Model File Not Found" with iCloud Drive Disabled
Fixed an issue where GGUF models (such as Qwen3.5 4B) were reported as missing even though they were present on the device. The file search now checks both the local storage and iCloud drive regardless of whether iCloud Drive is enabled, so models downloaded before disabling iCloud Drive are found correctly. A separate issue where file paths containing spaces or special characters were silently discarded (causing a misleading "not found" error) has also been fixed. The same corrections apply to the MLX local model path resolver.
- bug fixAdvanced Settings accessibility fix
The "Advanced Settings" DisclosureGroup in Writer project detail is now fully reachable with VoiceOver. Removed a bad .isHeader trait that suppressed the expand toggle on some iOS versions; added a rotor action so the control is reachable via the Actions rotor as a backup path. [Bug Fix] longer default chapters Default chapter target for non-CJK languages raised from 6,000 to 10,000 characters. Produces chapters closer to typical genre-fiction length (~2,000 words) and triggers more multi-pass extension passes on small-context local models. Existing projects unchanged (per-chapter values were baked in at outline time). CJK languages remain at 4,500 chars.
- bug fixChapter Outline Row Width Jank on iPad
Fixed a layout issue where typing in a chapter title or summary field while the outline row was expanded caused all visible rows to suddenly become narrower. The expanded row content is now pinned to the full list width, so the layout stays stable while you edit.
Local Audio
- featureNoise Reduction for Local Speech Recognition
Background noise is now filtered out before audio is sent to the on-device speech-to-text engine. Noise reduction runs via DeepFilterNet on the MLX audio engine and produces cleaner transcripts in noisy environments such as cafes or open offices.
- featureQwen3 TTS Voice Cloning
Qwen3 TTS can now reproduce a reference speaker's voice across an entire response. The reference audio is encoded once and reused for every chunk of the utterance, so generation starts faster and the voice stays consistent from start to finish.
- improvementMLX Audio Engine Upgraded with DeepFilterNet and Parakeet Batch Transcription
The on-device MLX Audio engine has been upgraded. DeepFilterNet V1/V2/V3 is now available as a Speech Enhancement model for real-time and offline noise reduction, running at over 100x real-time on Apple Silicon for long recordings. Parakeet speech-to-text now supports batch transcription with a hybrid TDT decoder and bfloat16 compute for improved performance. The Qwen3-TTS voice design sampler now correctly respects generation parameters.
- improvementFluidAudio ASR Engine Upgraded (tag-20260419 to tag-20260425)
Offline speaker diarization is significantly more accurate: the diarizer was collapsing all speakers into one, giving a single-speaker transcript regardless of how many voices were present; it now correctly separates speakers at 97% F1. A heap corruption that caused the diarizer to crash or produce garbled output on iOS 26.4 has been fixed. Parakeet TDT v3 no longer inserts Cyrillic characters when transcribing English or other Latin-script languages. Kokoro TTS now expands abbreviations correctly, so "Dr.", "St.", and similar short forms are spoken as full words. Cohere Transcribe, a 14-language speech-to-text model accelerated by the Apple Neural Engine, is now listed as a supported ASR model.
- bug fixDiarizer Model Picker Shows Correct Models for Each Engine
The speaker-diarization model picker in Speak to Text now shows only the models compatible with the active transcription engine. MLX streaming shows MLX diarizer models, FluidAudio streaming shows FluidAudio diarizer models (fa-ls-eend, fa-sortformer, fa-speaker-diar), and batch engines such as Whisper and iOS Speech show both groups with clear labels. Previously, FluidAudio diarizer models were never shown regardless of which engine was selected.
Local Models
- improvementLLaMA Inference Engine Upgraded (b8843 to b8933)
The on-device LLaMA inference engine has been updated. Metal matrix-multiply dispatch is now optimized for Apple Silicon, reducing inference latency. This release also adds support for the Reka Edge 2603 vision model (yasa2 encoder), improves M-RoPE position decoding correctness for multimodal models, and includes a security fix for a heap-buffer-overflow (CVE-2026-21869).
2.0.10
General
- featureText to Video Generation
You can now select "Text to Video" as a chat mode in the chat-mode settings sheet. Describe what you want, choose options such as aspect ratio (16:9, 9:16, 1:1, and more), resolution (480p up to 4K), duration (4 to 30 seconds), and whether to generate audio, then send your message to generate a video via OpenRouter (for example, using the google/veo-3.1 model). Generated videos display a real first-frame thumbnail preview instead of a static icon. A dismissible chip above the text input shows the active mode and current settings at a glance, with a quick-dismiss button to return to normal chat.
- featureOpenRouter Video Generation
Privacy AI now supports video generation through OpenRouter models such as bytedance/seedance-2.0-fast. In the Text to Video chat mode, you can select an OpenRouter model and configure aspect ratio, resolution, duration, audio generation, and seed options before sending your prompt. Generated videos appear inline in the chat and can be saved or shared.
- improvementFullscreen Text Editor Toggle
All text editors now have a small expand button in the top-trailing corner. Tapping it opens a near-fullscreen editing view for more comfortable writing, and tapping again collapses it back to its original position. This works whether the editor is embedded in a sheet, a small card, or any other part of the app.
- improvementSmoother Chat Navigation
Chat conversations now open and respond more quickly. Background system monitoring no longer causes the chat view to reload continuously, and navigation between conversations loads content only when needed. This reduces unnecessary CPU work and makes switching between chats feel more responsive.
- featureLive Activities for Model Downloads
Downloads now show a live progress indicator on the Lock Screen and in the Dynamic Island (on supported devices) while a model is downloading. The indicator shows the model name, a blue progress bar, and the percentage complete, and includes a Cancel button so you can stop a download without unlocking your phone. Live Activities work for GGUF, HuggingFace MLX, and CoreML downloads.
- improvementBackground Download Completion Handling
HuggingFace MLX and CoreML download managers now correctly receive background URL session completion events from iOS. Previously only GGUF downloads handled these events, which could cause background downloads to stall or fail to finalize when the app was not in the foreground.
- improvementCSV Table Header Row Alignment
Column headers in CSV table previews now render with a uniform row height even when one or more column names wrap to multiple lines. Previously, short header labels were vertically misaligned next to taller wrapped ones.
- bug fixCrash When Starting a Chat with Certain Model Settings
Fixed a crash that occurred when starting a conversation with a model that had a negative seed value configured in its settings.
- bug fixCrash on Launch When Checking Speech Models
Fixed a crash that could occur at app startup while Privacy AI was checking whether Whisper speech recognition models were available on your device.
Local Audio
- featureLocal Audio VAD and Speaker Diarization
The Local Audio (MLX Speech-to-Text) feature now supports Voice Activity Detection (VAD) and Speaker Diarization. In the Local Audio settings panel, you can pick a VAD model (such as Smart Turn v3) to improve how audio chunks are detected and flushed during live transcription, and a Diarizer model (such as Sortformer 4spk) to automatically label speakers in the transcript with [Speaker N] prefixes. Both pickers are always visible and each offers a "None" option if you prefer to transcribe without them.
Local Models
- improvementMLX Local Inference Engine Upgraded (tag-20260419)
The on-device MLX inference engine now supports Google Gemma 4 text-only models (E2B and E4B) for local inference on Apple Silicon. Gemma 4 VLM system prompts and image ordering are now handled correctly, Qwen3 Next models can invoke tools as expected, KV cache prompt-caching works for Mamba and hybrid models (improving response speed on repeated prompts), and BERT-based embedding models no longer crash on long inputs.
- improvementMLX Audio Engine Upgraded (tag-20260419)
The on-device MLX Audio engine is updated with several fixes and improvements. Kokoro TTS now produces correctly phonemized speech after a bug where the G2P text processor was silently discarded, causing garbled output. Voice clone sessions with Qwen3-TTS are faster because the speaker embedding is cached between chunks instead of recomputed each time. The Cohere Transcribe speech-to-text model now loads Python-produced quantized (int8/int4) checkpoints correctly. Qwen3 ASR gains context-aware decoding to improve accuracy on multi-segment audio.
- improvementLLaMA Inference Engine Upgraded (b8763 to b8843)
The on-device LLaMA inference engine has been updated. This release adds support for Qwen3 audio models (Qwen3-Omni and Qwen3-ASR), fixes a crash when sending images smaller than 2x2 pixels, and corrects Metal Flash Attention on Apple Silicon. Vision model position handling is also improved via a new M-RoPE decoder API, which benefits multimodal models.
- improvementFluidAudio ASR Engine Upgraded (tag-20260412 to tag-20260419)
Japanese speech recognition now uses a unified TDT model for both short and long utterances. Short words like "yes", "no", and "stop" previously went through an older CTC path that silently dropped them; they now transcribe correctly with token-level timings. The minimum audio length guard has also been lowered from 1 second to 300ms, so brief single-word commands are no longer rejected before reaching the model.
- bug fixTool Calls Now Work on Ternary-Bonsai MLX Models
Tool calls were silently dropped on the Ternary-Bonsai series (1.7B, 4B, 8B). These models encode the opening tool call tag as a special vocabulary token that decodes to an empty string, so the JSON body arrived in the output stream before the closing tag with no visible start marker. A buffer that holds back JSON-starting output was incorrectly flushed when a newline appeared, discarding the tool call content before it could be parsed. The buffer is now held until the closing tag confirms the content is a tool call.
- bug fixGemma 4 Crash with Quantized KV Cache
Gemma 4 models crashed when quantized KV cache was enabled. The attention layer called the standard
KVCache.update()path, which hits a fatal error when handed aQuantizedKVCache. The fix detects a quantized cache and callsupdateQuantized()followed by an explicit dequantize step, so Gemma 4 now works correctly with KV cache quantization enabled. - bug fixMLX Model Memory Not Released After Unload
After using an MLX chat model and tapping "Unload All Local Models", App Memory and GPU Memory shown in the Device RAM screen did not drop, and any subsequent attempt to load another MLX model would fail with "Not enough free memory to load this model". A device reboot was the only way to recover. The cause was that unloading a model cleared the model references but left the process-global Metal buffer pool pinned. The Metal buffer pool is now explicitly released whenever an MLX model is unloaded, the chat session is closed, or the app moves to the background.
Feedback
- improvementFeedback Email Reminder and Auto-Save
When you tap "Send Feedback" without entering an email address, Privacy AI now shows an alert reminding you to add one so you can receive a reply. You can choose to go back and add your email or send the feedback without it. It now automatically saves your in-progress feedback (title, description, and email) to your device as you type. If you leave the feedback screen before submitting, your draft is restored when you return. After successful submission, the saved draft is cleared.
Memory
- improvementSmarter Memory Recall
Memory search now surfaces more relevant and varied results. Recent memories are ranked higher so current context is prioritized over older duplicates. When multiple memories cover the same topic, the results now include diverse angles instead of repeating the same fact. For large documents and knowledge bases, the most relevant sentences are extracted to fit within the context window rather than cutting off mid-document, which means answers drawn from attachments and notes are more complete.
- improvementRanked Retrieval on All Devices
Recency weighting, diversity reranking (MMR), and progressive compression now run on every device, not just high-end ones. Memory search, chat history selection, document chunk extraction, knowledge base context, and lorebook entries all benefit from these improvements regardless of how much RAM your device has.
General
- bug fixError Messages Now Announced to VoiceOver
Hard-stop errors reported via
reportErrorare now announced aloud to VoiceOver users, matching the existing behaviour for warnings. Previously only warnings were announced; errors were shown visually but silent for blind users. - bug fixmacOS Build Errors in Knowledge Wiki Views
Fixed build failures on macOS caused by iOS-only view modifiers (
navigationBarTitleDisplayMode,insetGrouped) used in Knowledge Wiki views without platform guards. Knowledge Wiki now builds and runs correctly on both iOS and macOS.
Novel Writer
- improvementTransient Writing Errors Now Visible and Announced
API timeout, authentication failure, and empty-response errors that occur during chapter writing are now shown in the warning banner and announced to VoiceOver users. Previously these transient errors were silently discarded, leaving no indication that something went wrong.
- improvementCleaner Chapter Endings When Smoothing Fails
When the LLM smoothing pass fails or returns an empty result, the chapter now ends at the nearest sentence boundary within the last 200 characters instead of leaving a ragged mid-sentence cut.
- improvementSmall-Context Model Support
The writer now handles token-limit truncation silently instead of showing a "Writing Paused" alert. Partial output is preserved, the multi-pass loop recovers automatically, and any truncated outline gets a continuation pass to fill in missing chapters. This makes the writer usable with small local models or API providers that cap output tokens.
- improvementSmooth Chapter Endings
After all writing passes complete, the writer automatically detects if a chapter ends mid-sentence and runs a short smoothing pass to bring it to a natural sentence boundary, without adding new plot or characters.
- improvementNovel Writer Pipeline Error Reporting
When writing or resuming a novel fails, Privacy AI now shows an alert describing what went wrong instead of silently doing nothing. Errors from the AI pipeline are surfaced directly in the Novel Writer view so you can see the problem and take action.
- bug fixNovel Writer Chapter Content Blank After Opening
Completed chapters sometimes appeared blank when opened, even though the content had loaded. The chapter view now correctly displays text after loading completes. An additional fix prevents the content from reloading unnecessarily each time a child sheet (such as Revise or Evaluate) is dismissed.
- bug fixNovel Writer About View Shows Correct Content
The "About" menu item in Novel Writer previously displayed the LLM Council's About view instead of information about Novel Writer. It now opens a dedicated About view with the correct content for the Novel Writer feature.
View Assistant
- featureMultiple Custom Scenarios
You can now save multiple named custom scenarios in View Assistant (for example, "Grocery labels" or "Airport wayfinding") and switch between them instantly using the scenario picker. A new "Manage Scenarios" button opens a full list where you can add, edit, and delete your custom scenarios. Each scenario stores its own prompt and vision mode settings, so you no longer need to re-type prompts for recurring tasks. Any existing inline custom prompt is automatically migrated to a named scenario on upgrade. Built-in scenarios remain read-only.
- improvementDetailed Analysis Scene
A new "Detailed analysis" scene has been added to View Assistant. It produces richer scene descriptions with per-person physical details (skin tone, eye color, hair color, estimated height and weight, head coverings), stricter OCR rules that transcribe all visible text exactly as it appears, and explicit behavioral guidelines to keep descriptions thorough and consistent. Thanks to Enes Deniz for the suggestion.
2.0.9
General
- bug fixmacOS First Launch Crash on Initial Settings Screen
Fixed a crash that occurred immediately on first launch for users running Privacy AI on macOS (iPad app on Mac). The initial privacy settings screen failed to load. The app now launches and displays the first-run setup screen correctly.
Health and Fitness Tools
- featureFood Search with Full Nutrient Profiles
A new search_food tool queries the USDA FoodData Central database and returns complete nutrient data inline for every result, including macros, vitamins, minerals, and fiber. No follow-up request is needed to see the full breakdown. You can request up to 25 results per search. The tool works out of the box using a DEMO_KEY; if you need higher rate limits, you can enter your own FoodData Central API key in the tool settings.
- featureExercise Search by Name, Muscle, or Category
A new search_exercise tool searches the wger.de open exercise database. You can find exercises by name, target muscle group, or category. When your query matches a known muscle or category, the tool runs parallel lookups to return richer results including exercise descriptions, targeted muscles, and required equipment. No API key is required.
2.0.7
General
- featureInitial Settings on First Launch
A one-time setup sheet now appears after onboarding so new users can configure three important privacy and data choices before using the app: Analytics collection (on by default), iCloud Drive sync (off by default), and Passcode Protection (off by default). Each option is explained in plain language so you can make an informed choice without hunting through Settings. The sheet never appears again once you acknowledge it.
- featureTool For Reddit Search
Privacy AI can now add a new tool to search Reddit. Ask the AI to find posts by keyword across all of Reddit or within a specific subreddit, filter by sort order (relevance, hot, new, or top) and time range, and retrieve a post's top-level comments. Results include post scores, authors, comment counts, and links so you can dive deeper into any thread.
- bug fixStatistics Cost Breakdown Totals Now Correct
Fixed an issue where the provider cost and model cost breakdowns in the Statistics view showed totals far lower than the overall Total Cost card. Operator precedence caused each loop iteration to discard the running total, so only the last entry was counted. The breakdown now correctly sums all entries. Past data is unaffected at the storage level and will display correctly on the next view load.
- bug fixThree Production Crash Fixes from v2.0.3
Fixed three crashes that were occurring for users on v2.0.3. Dismissing a sheet while the keyboard was still animating in could trigger an NSGenericException; the keyboard is now dismissed before the sheet closes to prevent the conflict. Streaming AI responses could crash the app due to a SwiftUI layout engine violation caused by updating published properties from a background thread; all such updates now happen on the main thread. Opening a sheet containing a list view could cause a stack overflow; list views inside sheets now use a regular stack layout instead of a lazy one to avoid the overflow during sheet sizing.
Novel Writer
- featureNovel Writer Review Novel
A new "Review Novel" action is available in the Novel Writer project menu. Select any AI model with a large context window (200K tokens or more is recommended) to evaluate the complete novel across 10 literary dimensions: Plot Design, Character Development, World Building, Language and Prose Style, Thematic Depth, Pacing, Originality and Creativity, Dialogue Quality, Emotional Impact, and Overall Polish. The review also includes an AI generation probability assessment (High, Medium, or Low). You can choose the review language before running the analysis. Results are displayed as formatted markdown and can be copied to the clipboard. The last result is saved so reopening the view shows it immediately without re-running. The action is disabled when no completed chapters exist.
- improvementNovel Writer Synopsis Always Visible
The Synopsis and Characters fields in the new project form are now shown for all project types (template, blank, and import), not only when starting from a template. After a project is created, a Synopsis section now appears above the chapter list in the project detail screen so you can read and edit the synopsis at any time, using the same edit-sheet pattern as the Story Bible.
- improvementNovel Writer Editable Writing Rules
When "Enhanced Writing Rules" is enabled, a "View Rules" button now appears in the Novel Writer. Tapping it opens a full-screen editor where you can view, customize, and save the craft rules injected into AI writing prompts, with a "Reset to Defaults" button to restore the original rules. Custom rules are persisted per-project.
- improvementNovel Writer Edit Project Settings
The "Change" model button in the project header has been replaced with an "Edit" button that opens a full project settings editor covering title, genre, writing style, output language, chapter count, characters, and AI model, without losing any existing chapters or outlines.
- improvementNovel Writer Chapter Actions Menu
Completed chapters now show a context menu (ellipsis icon) with four quick actions: Copy chapter text to clipboard, Revise, Evaluate chapter quality, and Tighten prose.
- bug fixNovel Writer Cleaner Chapter Titles
XML tag remnants (such as outline_summary tags) no longer appear in chapter titles after outline generation.
- bug fixNovel Writer Cleaner EPUB Export
EPUB export now removes duplicate chapter headings and strips XML tag remnants from chapter content for cleaner output.
View Assistant
- featureFullscreen Camera View
A new fullscreen button in View Assistant expands the camera preview to fill the entire screen. Flip, torch, and zoom controls remain accessible in fullscreen mode. The latest AI response appears as a banner at the bottom of the screen.
- improvementCPU-Only Vision Processing
A new "CPU-Only Vision Processing" toggle in View Assistant Advanced Settings forces Apple Vision framework detections to run on the CPU instead of the GPU. This is recommended when you are also using a local MLX model, as running both on the GPU simultaneously can cause memory conflicts that crash the app. The toggle defaults to on.
- improvementLive Scenario Switching
Switching the active scenario in View Assistant (for example, from "Describe Scene" to "Read Text") now takes effect on the next capture cycle without stopping and restarting the camera. Previously a Stop then Start was required.
- featureVision Modes
View Assistant can now detect and describe what the camera sees before sending each query to the AI. Four detection modes are available: Live Text reads text from signs and labels in the frame, Face detection counts the number of people visible, Animal identification names the species of any animal in the scene, and Object classification tags the scene with categories such as indoor, furniture, or vehicle. All detections run on-device using Apple Vision framework, with no data sent to the network.
Audio and Speech
- improvementmlx-audio-swift Engine Upgraded to tag-20260412
Kokoro 8-bit quantized TTS models now work correctly on iOS: a weight transposition crash, invalid duration values (NaN), and out-of-memory errors caused by bad integer casts have all been fixed. Qwen3-TTS CustomVoice models now maintain consistent voice identity across sentences by injecting speaker embeddings at each step, so the voice no longer drifts between utterances. A new Cohere Transcribe speech-to-text model is available, including quantized checkpoint support. Quantized Parakeet model configurations now parse correctly.
- improvementQwen3 TTS 0.6B CustomVoice Model
A new Qwen3 TTS 0.6B CustomVoice model is now available in MLX Audio, offering seven named speakers: Vivian, Serena, Uncle_Fu, Dylan, Eric, Ryan, and Aiden. The model supports 10 languages, making it a versatile on-device text-to-speech option for multilingual use.
- improvementFluidAudio Engine Upgrade: 2.2-2.8x Faster Batch Transcription
Batch audio transcription (long file transcription) is now 2.2-2.8x faster, powered by parallel chunk processing with 4 concurrent workers, benchmarked on iPhone SE 3 and Apple M3. Nemotron streaming ASR adds support for 160ms and 80ms chunk sizes, enabling ultra-low latency live transcription. The Japanese CTC model (Parakeet-ja) now loads correctly after download; the previous version showed a misleading error that made it appear broken when it was not. The online streaming diarizer now uses Pyannote 3.1 and the offline diarizer uses Pyannote Community-1, with both configurations clearly documented.
- bug fixTTS Language Picker Shows Duplicate Names
Fixed an issue in the Text-to-Speech language picker where locales sharing the same language name (for example, multiple English variants) all appeared as identical entries. The picker now shows the full locale name including region, so entries like "English (United States)" and "English (United Kingdom)" are correctly distinguished.
- bug fixTTS Voice Picker Shows Stale Voices After Model Switch
Fixed an issue in the Voice Preview section where preset voices from a previously selected TTS model remained visible after switching to a model that has no preset voices. The voice picker now resets correctly whenever the active model changes.
Local Models and Inference
- improvementllama.cpp Engine Upgraded to b8763
The local inference engine has been updated from b8690 to b8763. This release adds three new vision and audio encoders (Dots.OCR, Gemma 4 Audio conformer, and Step3-VL-10B) and introduces support for the MERaLiON-2 multimodal audio model. Metal GPU acceleration for Q1_0 1-bit quantized models is now fully complete with all previously missing specializations in place. Gemma 4 multimodal conversations benefit from a padding token fix and improved chat template alignment. An experimental tensor parallelism API (LLAMA_SPLIT_MODE_TENSOR) is also included for advanced multi-device configurations.
- improvementMLX Swift Engine Upgraded to tag-20260412
The on-device MLX inference engine has been updated from tag-20260403 to tag-20260412. This release adds speculative decoding support, where a lightweight draft model proposes tokens that the main model verifies in a single pass, enabling faster on-device generation. The Llama 3 tool-call pipeline has been rebuilt from the ground up with parallel tool-call support, so multiple tools can now be invoked in a single response. A Swift 6 Sendable fix resolves a Release-build compilation failure for Llama 3 tool-call users on iOS. The Pythonic tool-call parser has been rewritten using Swift Regex, replacing NSRegularExpression for more reliable extraction of multi-call output.
- featureGemma 4 On-Device Model Support
Privacy AI now supports Google's Gemma 4 (gemma-4-e2b-it-4bit) as an on-device MLX model. Gemma 4 runs entirely on your device via Apple Silicon, with no data sent to the cloud. You can download it from the model library and use it with any chat or workflow just like other local MLX models.
- featureDocs.OCR Local Model
A new "Dots.OCR" model is now available in the model library for local download and use via llama.cpp. This on-device model is purpose-built for document OCR tasks, extracting text from images and scanned documents entirely on your device with no data sent to the cloud.
- featureMetal Acceleration Toggle
You can now enable or disable Metal GPU acceleration for local GGUF models directly from the Basic settings tab. This toggle was previously hidden from the settings UI. On x86_64 Macs that do not support Metal, the toggle is automatically disabled so the setting always reflects what your hardware can actually use.
- featureContext Overflow Policy
The Context Overflow Policy picker in the Basic settings tab for local GGUF models now offers four strategies for handling a full KV cache. Rolling Window discards the oldest tokens after the system prompt and slides the context forward continuously. Compact (Summarize) runs a brief inference pass to summarize the conversation, then resets with the system prompt and summary, preserving semantic meaning at the cost of a short pause. Truncate Middle removes tokens from the middle of the conversation while keeping the system prompt, earliest context, and most recent messages, which works well for long sessions where recent turns matter most. Stop at Limit halts generation immediately when the context boundary is reached, giving a clear signal with no silent data loss.
- improvementProtocol Inspector Covers All Inference Logs
The Protocol Inspector (OpenAI Debug Log view) now intercepts all llama.cpp internal log output across the entire inference engine, including logs from model loading, generation, vision, and template processing. MLX model loading, unloading, tool calls, and generation events are also captured. When the Inspector is disabled, there is zero CPU and memory overhead: no strings are allocated in the C logging callback path and no buffering occurs. Toggling the Inspector on or off takes effect immediately.
Memory and Knowledge
- improvementAI-Powered Memory Duplicate Detection
Memory now uses a two-phase system to decide whether an incoming fact is a duplicate. Text that is near-identical (cosine similarity 0.95 or above) is blocked immediately. Text in the grey zone (0.5 to 0.95) is sent to the chat model for AI evaluation, so a note like "Takes creatine every morning" is never wrongly blocked just because a fitness-related memory already exists. When the AI determines that a new fact updates an existing one (for example, "gym 5 days a week" replacing "gym 4 days a week"), the existing entry is updated in place instead of creating a duplicate. Delete and update operations also go through AI verification so that only the correct memory is affected even when multiple memories share a similar topic.
- bug fixMemory Summarizer Race Condition Fixed
Fixed a race condition in the AI-powered memory deduplication system that could prevent duplicate detection from running during tool calls. Memory dedup is now always active and reliable when tool calls are in progress.
- bug fixImport Memory Operation Count Corrected
Fixed an issue where the "Applied Operations" summary shown after importing memories listed every proposed operation, including ones that were skipped or rejected. The count now reflects only the operations that were actually saved, giving you an accurate picture of what changed.
Backup and Restore
- featureApp Configuration Backup and Restore
You can now back up and restore your entire Privacy AI setup from Settings → Storage → Backup and Restore. The export includes all app settings, AI model configurations, API keys, custom prompts, and memory. You can also choose to include data directories such as Chats, Apps (Council and Writer), Souls, and Readers. Two export formats are available: a plain
.zipfile for easy portability, or an encrypted.pabackupfile protected with a password using AES-GCM encryption. On import, you can choose to skip files that already exist or overwrite them, giving you full control over how the restore is applied. - improvementBackup Import Confirmation Dialog
A confirmation dialog now appears before applying a backup import, giving you a chance to review what will be overwritten before committing. This prevents accidental data loss from an unintended import.
- bug fixBackup Import Is Now Atomic
Fixed an issue where a failed backup import could leave the app in a partially-restored state with some data overwritten and other data missing. An import that fails now rolls back cleanly, leaving your existing data untouched.
- bug fixStronger Backup Password Encryption
Fixed the key derivation used when encrypting password-protected backup files. Backups are now protected with a significantly stronger method that is far more resistant to brute-force attacks.
- bug fixDate Settings Preserved Through Backup Round-Trip
Fixed an issue where date-type settings lost their type information when exported and then re-imported from a backup. Date values are now correctly restored after a backup round-trip.
- bug fixBackup Password Mismatch Error Readable by VoiceOver
Fixed an issue where the error message shown when backup passwords do not match was not accessible to VoiceOver. The error is now announced correctly.
LLM Council
- improvementEdit Council Settings In Place
You can now edit an existing LLM Council's title, members, system prompt, discussion mode, and tools directly from the council chat view. There is no longer any need to clone the council, make changes, and delete the original.
- bug fixCouncil Sessions No Longer Show a Blank View on Return
Fixed an issue where navigating back to a previously opened LLM Council session showed a blank view with no messages. The council executor registry was returning a stale executor whose message history had been cleared, causing all existing messages to appear missing. Council sessions now correctly reload their full message history when revisited.
Chat
- bug fixChat Messages No Longer Vanish During Tool Calls
Fixed an issue where all previous chat messages would momentarily disappear and show a blank "AI is thinking" screen whenever a tool call completed during a streaming reply. The messages now remain visible throughout the entire response, including when tool results are being appended.
- bug fixChat Rendering and Scroll Stability
Fixed a blank-screen rendering bug that could occur during streaming AI responses, and resolved a scroll overshoot issue where the view would jump past the end of the response once generation finished. Markdown content now transitions from streaming to final layout without a visible delay. VoiceOver now also announces "Response failed" when an AI response errors out.
UI and Navigation
- improvementHuggingFace Model Import Redesign
The GGUF and MLX model import screens now guide you through the process with clearly numbered steps, making it easier to understand what to do at each stage. You can now import a multimodal projection (MMPROJ) file separately from the main model file, which is required for vision-capable models. Destructive actions such as replacing an existing model now use a confirmation dialog to prevent accidental overwrites. All new interface text is fully localized.
- improvementDevice RAM View and Resource Monitor Toggle
The Device RAM page now supports three ways to open it: as an overlay under memory pressure, as a sheet tapped from the HUD metrics area, and as a standalone menu destination. The sheet mode has a navigation bar with a Done button. The Resource Monitor on/off toggle has moved here from System Settings, placed alongside the Unload button and tips where it is easier to find. The page also shows a GPU Memory row, a System and Other Apps row, and a CPU Usage and Thermal State section, with all values refreshing live about once per second. All text on the page is now fully localized.
- improvementInference Resource HUD Redesign
The resource monitor HUD has a new compact layout with a minimize button on the left, the metrics area in the center, and a dismiss button on the right, separated by visible dividers. Tapping the minimize button collapses the HUD to a small thermometer icon pinned to the edge of the screen; tapping the icon expands it again. The thermometer color reflects the current thermal state (green, yellow, orange, or red) so you can check at a glance without expanding. Minimized state is saved per chat. The dismiss button hides the HUD until the next inference starts. The HUD now appears during both local and remote model inference, includes a GPU Memory pill when Metal has active allocations, and is constrained so it can never be dragged off-screen.
- improvementDebug Log Type Icon Hidden from VoiceOver
The icon displayed alongside debug log entries is now correctly marked as decorative and hidden from VoiceOver, preventing redundant announcements when browsing logs.
- bug fixNavigation Menu Overlay Hidden from VoiceOver
Fixed an issue where background content behind the navigation menu overlay remained focusable by VoiceOver. The background is now correctly hidden from VoiceOver while the menu is open.
- bug fixNavigation Menu Observer Leak Fixed
Fixed a notification observer leak that occurred when the main menu view was recreated (for example, on account changes). Observers are now properly cleaned up, preventing duplicate notifications and memory accumulation.
- bug fixMenu Animation Divide-by-Zero on First Render
Fixed a crash that could occur on the very first render of the navigation menu due to a divide-by-zero in the animation calculation.
2.0.3
Features:
- Device RAM Management
A new "Device RAM" item in the side menu lets you monitor and manage local model memory at a glance. The page shows live RAM stats (Total, App Used, and Available), lists every currently loaded local model with its category (Text, TTS, ASR, or Embedder) and inference engine, and includes a tips section explaining how much memory each model type typically uses and how to avoid out-of-memory crashes. An "Unload All Local Models" button frees memory immediately with haptic feedback, a sound effect, and a toast confirmation.
- Real Time Streaming For ASR models
The ASR (speak-to-text) now supports live streaming transcription for engines that offer it, such as FluidAudio fa-parakeet-eou-120m and MLX Audio Qwen3 ASR. Tapping Record starts a streaming session immediately, and a "Live Transcript" panel appears showing confirmed utterances in normal text alongside the current partial hypothesis in secondary text, updating in real time as you speak. Engines that do not support streaming (WhisperKit and standard models) continue to use the existing record-then-transcribe flow unchanged.
- Gemma 4 Support
The local inference engine now supports Gemma 4 models, including Gemma 4V for vision and image understanding tasks. Gemma 4 models (E2B and E4B) can call all tools now. It is able to search the web, run code, and use other tools just like other supported models.
- Bonsai-8B 1-Bit Quantization Support
The local inference engine now supports prism-ml/Bonsai-8B-gguf models, which use Q1_0 1-bit quantization types ported from the PrismML. These extremely compact models can be loaded and run on-device with full Metal GPU acceleration
Improvements:
- Navigation Bar Titles for Audio Model Lists
The MLX Audio Models and FluidAudio Models list views now show a proper title in the iOS navigation bar header, making it easier to know where you are when navigating through audio model settings.
- EXIF Metadata Extracted from Photos
When you share or attach an iPhone photo (including HEIC files), Privacy AI now reads the image's EXIF metadata and includes it in the description sent to the AI. Camera model, date taken, lens, focal length, aperture, shutter speed, ISO, resolution, and GPS coordinates are all captured. Previously, photos with no readable text showed "No description available"; now the AI receives the full camera and location context from your photo.
- Query Editor Stays Open While Scrolling on iPad
The text editor for editing a query in chat no longer dismisses when you scroll the chat. The keyboard now stays visible while you browse the conversation, so you can scroll for context and keep typing without interruption.
- Clearer Tool Selection Sheet
The tool configuration sheet now shows a "Manual | Auto" segmented control, making the two modes immediately recognizable. When Auto is selected, the tool list is replaced with a concise explanation card so the mode's meaning is clear at a glance. An info button opens a short guide explaining Auto vs Manual and when to use each.
- Improved Auto Tool Selector for All Context Sizes
Small context models (4K–8K) now receive a compact tool list that always fits within budget, so essential tools are never silently dropped. Large context models (64K+) receive richer tool descriptions when the budget allows, improving tool selection accuracy.
- Larger Default Context for Local Models
Default context sizes for local models are now set based on model file size. Models under 1GB default to 20000 tokens, models between 1GB and 2GB default to 14000 tokens, and larger models default to 8000 tokens. The context warning threshold has also been raised from 4096 to 12000 tokens, so warnings appear at a more useful point for today's larger context windows.
- Smarter Swipe-to-Open-Menu Gesture
The swipe-to-open-main-menu gesture now works selectively: it is active in list views (chats, models, prompts, memory, and more) where there are no conflicts, and automatically disabled in settings views that contain sliders or scrubbers. Swiping to close the menu still works from any view.
- FluidAudio Engine Upgrade (tag-20260403 to tag-20260406)
The FluidAudio engine has been upgraded to tag-20260406 with expanded language support and performance improvements. A new Japanese ASR model (Parakeet CTC 0.6B-ja) delivers 6.5% character error rate, and a new Mandarin Chinese ASR model (Parakeet CTC 0.6B-zh-cn, experimental) delivers 8.2% character error rate. The PocketTTS session API now supports voice prefill once per session with unlimited subsequent utterances, reducing per-utterance latency and maintaining audio continuity across a conversation. Also fixed: Kokoro audio trimming, EOU 320ms frame count, and a concurrent transcription use-after-free crash.
- MLX Audio Swift Engine Upgrade (tag-20260403)
The mlx-audio-swift speech recognition (STT) engine has been upgraded to tag-20260403, adding MLXFast as a dependency for full Metal GPU acceleration in STT models. This benefits Qwen3-ASR, GLM-ASR, Granite Speech, Parakeet, FireRed, and SenseVoice, all of which now run faster on Apple Silicon.
- Faster Chat Start When No History Exists
An embedder (~130MB) no longer loads on every chats. It now loads only when there are actual past messages or documents to score for relevance, so new conversations and chats with no history start more quickly and use less memory.
- MLX Model Loading Speed (10x to 15x Faster)
Loading MLX models on Apple Silicon is now 10x to 15x faster. The tokenizer library used by the MLX inference engine has been replaced with a streamlined implementation that loads in milliseconds instead of several seconds. Models you run locally on-device will start responding noticeably sooner after you select them.
- Local Inference Engine Upgrade (llama.cpp b8565 to b8690)
The on-device AI inference engine has been updated from b8642 to b8690. Official Q1_0 1-bit quantization is now supported natively. HunyuanOCR vision model support is added for on-device OCR tasks. A Qwen2 stability fix prevents incorrect output on long inputs. Multiple Gemma 4 improvements are included covering generation accuracy and model compatibility. KV cache handling has been improved so that SWA (sliding window attention) cache layers are no longer quantized, which improves output quality for models that use sliding window attention. Quantization quality is improved via activation rotation, producing sharper quantized weights across all quantization levels. Multimodal projection file conversion (mmproj) is fixed for audio and vision GGUF files. Granite 4.0 chat template support is added with correct tool_call role mapping for function calling.
Bug Fixes
- Voice Picker Always Shown for TTS Models That Support It
Fixed an issue where the voice selection control in the TTS preview widget was incorrectly hidden for FluidAudio models. Voice selection now appears for any TTS model (MLX Audio or FluidAudio) that offers multiple voices, so you can always choose your preferred voice before previewing.
- ASR Language Falls Back to Engine Setting
Fixed an issue where the transcription language was ignored when no language was explicitly passed by the caller. ASR now falls back to the per-engine language preference (Whisper, MLX Audio, or FluidAudio) stored in settings, so your chosen language is always used even when the call site does not specify one.
- Transcription Errors Now Visible in ASR Test View
Fixed an issue in the ASR test view where errors such as "model file not found" disappeared silently instead of being shown to the user. Error messages now appear as red text in the result area so you can see exactly what went wrong.
- Confirmation Alert Before Setting Default ASR Model
The "Set as Default ASR" button in the ASR test view now shows a confirmation alert before applying the change, preventing accidental overwrites of your current default. The button also disappears immediately after you confirm, reflecting the updated state without requiring a manual refresh.
- Default ASR Model Flag Updates Correctly When Switching Models
Fixed an issue in ASR settings where switching the speech-to-text engine or model did not clear the previous model's default flag. The previously selected model is now properly unmarked when you choose a new one, matching the behavior of the MLX Audio and FluidAudio detail views.
- Transcription Language Picker Available in ASR Test Widget
The language selection control was only accessible inside the engine-specific settings sections, so it was missing when using the ASR test widget embedded in a model detail preview. The language picker is now shown directly in the test widget, letting you change the transcription language from any view that includes it.
- Speech Recognition Number and Currency Formatting
Fixed an issue where spoken numbers, currencies, and percentages were not converted to their written forms in transcribed text. Phrases like "two hundred dollars" now correctly appear as "$200", "fifty percent" as "50%", and "third" as "3rd". The conversion (Inverse Text Normalization) previously relied on a native library unavailable on all devices, so it silently did nothing. A built-in Swift fallback now handles cardinals, USD/EUR/GBP/JPY currency, percentages, and ordinals. The fix applies to both single-recording and live streaming transcription modes.
- MLX Audio Voice Preference Remembered Per Model
Fixed an issue where all MLX Audio TTS models shared a single global voice setting. Switching to a different MLX Audio model would reset the voice selection, losing your previous choice. Each model now stores its own voice preference independently, so switching back to a model restores the voice you had selected for it.
- TTS and Speech Recognition Fall Back Gracefully After Storage Clear
Fixed an issue where clearing app storage left TTS and speech recognition models marked as available even though their files had been deleted. This caused infinite loading spinners when trying to use voice features. The app now verifies model files are actually present (including files managed by iCloud), re-checks availability each time the settings view appears, and automatically switches to the built-in system engine (AVFoundation TTS and iOS Speech Recognition) with a notification when the downloaded model files are missing.
- Stale AI Response Tokens No Longer Leak into New Queries
Fixed an issue where stopping an active AI generation and immediately sending a new query could cause leftover tokens from the cancelled response to appear in the new reply. A generation session ID now tracks each prediction, and any streaming output that arrives after a new query starts is silently discarded. As part of this fix, four backends (Claude, HuggingFace, Apple Intelligence, and the OpenAI Responses API) now also cancel their in-flight network requests as soon as you stop generation, so responses stop promptly instead of continuing in the background.
- MLX Vision Model Crash with Penalty Settings
Fixed a crash that occurred when running MLX vision language models such as Qwen2VL and Gemma3 with repetition, presence, or frequency penalty enabled. The error "broadcast_shapes: Shapes cannot be broadcast" was caused by the token ring receiving 2D shaped token input from vision processors instead of the expected 1D format. Tokens are now flattened to 1D before processing, so vision models run correctly with any penalty setting.
- Council Chat History Not Loading After Restart
Fixed an issue where selecting a Council from the list showed an empty chat history even though messages were saved on disk. The executor's config ID was being set after the message loading step had already run and exited early, so saved messages were never read back. Config ID is now assigned before loading messages, and history is restored correctly on every app launch.
- Writer Chapter Text Selection Crash
Fixed a crash that occurred when selecting text in the Writer chapter view and the system showed the copy/paste edit menu. The app now handles layout changes during text selection gracefully, so copying or editing selected text no longer causes an unexpected exit.
- iPad Council Chat Keyboard Covers Input Field
Fixed an issue on iPad where the text input bar in Council Chat was hidden behind the keyboard when tapped. The input bar now rises above the keyboard when it appears, matching the behavior of the main chat view.
2.0.1
Features
- Language Support
The app now supports 10 languages in addition to English: Simplified Chinese, Traditional Chinese, Japanese, Korean, French, German, Italian, Spanish, Russian, and Brazilian Portuguese. An in-app language picker in Settings lets you override the system language without changing your device locale. All menus, model settings descriptions, feature labels, onboarding screens, tips, template names, and chat list UI strings are translated.
- View Assistant
View Assistant is a new mini app in the Apps menu that uses your device camera and an AI vision model to describe your surroundings in real time. The app continuously captures camera frames at a configurable interval (1 to 10 seconds), sends each frame to a vision-capable AI model, and reads the response aloud via text-to-speech. This makes it practical for blind and low-vision users to get spoken descriptions of their environment without touching the screen. You can customize the prompt, choose the capture interval, and set the image resolution (Low 512x512, Medium 768x768, High 1024x1024). A first-launch disclaimer explains AI reliability limitations, battery usage, and token costs before the session begins. Full VoiceOver support is included throughout.
- HuggingFace Inference Provider Selection
You can now choose which inference provider powers your HuggingFace API calls. Open API Keys settings, select HuggingFace, and pick from available providers such as hf-inference, nebius, groq, and fal-ai. The selected provider applies to all HuggingFace requests including chat, image generation, and video generation. The model list is also filtered to show only models supported by the chosen provider.
- HuggingFace Model Search
When importing a HuggingFace model, you can now search by keyword instead of typing the full repository ID. Enter a term such as "Qwen3.5" in the Repository ID field and tap "Search HuggingFace" to browse the top trending results, filtered by model library (MLX or GGUF) to match the import type you are using. Tapping a result fills in the repository ID and copies it to the clipboard. The import sheets also now open full-screen for a more comfortable browsing experience. Unsupported or malformed LaTeX expressions now display as readable monospaced text instead of a blank file icon. Math content remains legible even when a specific command is not yet supported, so you never lose the meaning of an equation mid-conversation.
- Expanded LaTeX Math Support
LaTeX math rendering now supports approximately 125 additional commands. New additions include over 100 symbols (negated relations such as nleq and nsubseteq, binary operators such as ltimes and diamond, Hebrew letters, extra arrows, and operator names such as arccot and sech), Dirac notation (bra, ket, braket), delimiter sizing commands (big, Big, bigg, Bigg), the boldsymbol font alias, and the operatorname command for custom upright operator names. Unsupported expressions now render as readable monospaced text instead of a blank icon.
Improvements
- Unlimited Conversations with Apple Intelligence
Long conversations with the Apple Intelligence on-device model no longer hit a dead end when the context window fills up. The app automatically detects when the limit is reached, summarizes the conversation history in the background, and continues the session in a fresh context with your prior discussion preserved. The handoff is seamless.
- Instant Startup When Offline
The app now starts almost instantly when your device has no network connection, such as on a subway or in airplane mode. It detects the offline state immediately and loads a cached or default config instead of waiting for a network fetch, eliminating a 6-second or longer hang at launch.
- Smoother Streaming Markdown Rendering
AI responses with rich formatting, including tables, now stream in without scroll position jumps or layout resets mid-response. The chat message list has been rebuilt on a more stable foundation, so the view stays steady as new content arrives and large structured outputs render incrementally without disruption.
- AI Gateway Screen Saver
AI Gateway now includes a Screen Saver mode. Tap "Screen Saver" in the Server Status section to show a black overlay with dim, slowly drifting stats (connected clients, tokens processed, and request count). The screen stays on while the overlay is active, keeping your device awake during long server sessions and protecting the display from burn-in. Tap anywhere to dismiss.
- Storage Settings as a Standalone Page
Storage settings now has its own dedicated page in the Settings menu, making it easier to find and manage your storage options. It was previously embedded inline within the System Settings page.
- Novel Writer: State Tracking
After each chapter is written, the AI extracts a structured story state snapshot covering character positions, emotional states, relationship changes, and foreshadowing updates, and saves it to a STATE.md file in your project. This snapshot is injected into subsequent chapter prompts, preventing continuity contradictions before they occur. Enable "State Tracking" in Writer project settings. The feature is off by default and costs one extra AI call per chapter.
- Novel Writer: Chapter Review and Auto-Repair
After each chapter is written, the AI reviews it for continuity errors, character inconsistencies, and plot logic breaks and assigns a score. If the score falls below a configurable threshold (default 7.0), the AI performs a targeted repair pass fixing only the flagged issues. Review scores and state snapshots are shown as collapsible panels in the chapter view. Enable "Chapter Review" in Writer project settings. The feature is off by default and costs one to two extra AI calls per chapter.
- Novel Writer: More Reliable Structured Output
The novel writer pipeline now uses XML-based structured output throughout, replacing the previous JSON and regex-based parsing. Outline generation, chapter analysis, fact extraction, and summary parsing are all handled through a consistent XML format that is more resilient to formatting variations and works correctly across all supported languages, including non-Latin scripts.
- Novel Writer: Clearer Project Start Options
Starting a new novel project now presents three clearly labeled choices at the top of the screen: "Choose a Template" to start from a pre-built genre template, "Import a Novel" to continue writing in the same universe as an existing novel you upload, and "Create an Empty Novel" for a blank project. Previously, the import option was hidden inside a genre dropdown and easy to miss.
- Novel Writer: Smarter Outline Review
The outline review process (available when Outline Review Rounds is set above 0) now produces noticeably better results. The AI evaluator provides concrete fix suggestions alongside each issue it identifies, rather than simply flagging problems, so the refiner has clear direction on how to improve the outline. Both the evaluator and refiner now see the history of previous review rounds, preventing them from cycling through the same failed approaches. The pass threshold has also been lowered from 8.5 to 7.5, making it achievable in a realistic number of rounds. In testing, outline quality improved from around 7.5 to consistently reaching to 9.0.
- Language Picker for MLX Audio TTS
The MLX Audio TTS settings screen now includes a language selector. Choose "Auto-detect" to let the engine infer the language from your text, or pick a specific language to ensure consistent pronunciation and prosody for your use case.
- Advanced Generation Parameters for MLX Audio TTS
Four generation parameters are now exposed in MLX Audio TTS settings: Top P, Repetition Penalty, Repetition Context, and Streaming Interval. Adjusting these lets you fine-tune output quality, reduce repeated phrases, and control how quickly audio begins streaming.
- Local Inference Engine Upgrade (llama.cpp b8461 to b8565)
The on-device AI inference engine has been updated from b8461 to b8565, merging 110 upstream commits. This release adds support for the DeepSeekOCR vision encoder, enabling OCR-optimized multimodal models. The reasoning API now passes the reasoning_content field back to the model across turns, improving multi-turn performance for thinking models such as DeepSeek-R1 and QwQ. A Metal GPU fix resolves a dimension constraint violation in the matmul2d descriptor, and a segfault on model load failure in the completion path is fixed. Three new FILE-pointer-based APIs are added for loading and writing GGUF models and contexts.
Bug Fixes
- Soul with Local Models
The Soul character feature no longer causes a Jinja template error ("System message must be at the beginning") when used with local llama.cpp or MLX models.
- Imported Models No Longer Disappear After Storage Move
Models that were moved between local and iCloud storage using "Move to Local" or "Move to iCloud" no longer vanish from the models list after a refresh. Previously, the model scanner only checked the currently active storage location, so a model sitting in the other location was incorrectly treated as missing and its record was permanently deleted. The scanner now checks both locations before removing any entry.
- Model Deletion Leaves No Orphaned Files
Deleting a model now removes its files from both local device storage and iCloud Drive in a single operation. Previously, only the currently active storage location was cleaned up, so copies left behind from a storage migration or after toggling the iCloud Drive setting were never removed, wasting disk space. Both locations are now always checked and deleted regardless of which storage mode is active.
- Faster Startup, Less Main-Thread I/O
Tool settings sync now writes to the database once in a single batched operation instead of once per tool. This reduces I/O and main-thread pressure during startup, making the app feel more responsive when launching.
- Local Models List Crash Fix
Fixed a crash in the local models list that could occur when the model list was updated (for example, a model deleted or synced via iCloud) while the app was checking model file availability in the background. The app now safely handles the case where the list changes during background processing.
- Chat Scroll Crash Fix
Fixed a crash that occurred when the chat message list tried to scroll to a new message while the list was still processing a layout update. The scroll is now deferred until the update finishes. This affected both the main chat view and the Council chat view.
- VoiceOver Accessibility Fixes
Fixed several VoiceOver issues across the app. In the side navigation menu, main content is now hidden from accessibility while the menu is open, and menu content is hidden when the menu is closed, preventing VoiceOver from reaching elements behind the overlay. In the Writer feature, status announcements are now posted throughout the writing workflow (generating outline, writing chapters, revising) so blind and low-vision users hear progress, completion, and error notifications. Progress indicators in Writer now report their percentage value to VoiceOver instead of being silent. The "Depth Fields" disclosure group in the character edit sheet now announces its expanded or collapsed state, and depth text fields report their current value (or "empty") when focused.
- Voice Chat Crash Fix
Fixed a crash in voice chat that could occur when starting voice recognition while it was already active, for example when re-entering the voice chat screen mid-session. The audio engine is now safely reset before restarting, preventing a fatal audio system exception.
- Health Data Tool: Incorrect Step and Distance Counts
Fixed the health data tool (get_health_data) returning implausibly low values for cumulative metrics such as steps, distance, and flights climbed. Samples within each time bucket were being averaged instead of summed. Sleep total duration was also corrected to avoid double-counting when detailed sleep stage data (Core, Deep, REM) overlaps with InBed samples.
- EPUB Export Corruption Fixes
Fixed four bugs in the EPUB exporter that produced broken or unreadable files. Body text is no longer corrupted with stray fragments scattered between words, caused by an attribute-cleaning regex that was incorrectly applied to all HTML instead of only to tag attributes.