👋 New Contributors
💥 Breaking
- Android 7.x is no longer supported. The minimum is now Android 8.0 (API 26). The old minimum promised a compatibility the app never actually had —
setRendererPriorityPolicythrew on launch on 7.0/7.1. (#468 by @Pento95)
✨ Features
- Story navigation panel: a persistent panel listing landmarks by entry number and full branch lineage, each labelled with its owning branch, with inline checkpoint renaming and a mode that either stays on the current branch or jumps to a landmark's own branch. (#458 by @collegatore)
- Duplicates window: consolidate duplicate characters, locations, items and lore entries one group at a time, reviewing a merge plan first — field sources shown, conflicts you pick, prose kept from both. World-state entities are now checked for duplicates too, and there's a manual "consolidate lore" run. (#437 by @Pento95)
- Dialogue highlighting and a dialogue TTS voice: colour quoted speech in the story text (Settings → Interface, colour configurable) and optionally read it aloud in a second voice. (#435 by @Pento95)
- Prompt packs travel with stories. Export, import and sync now carry a story's pack identity, its variable answers and the pack's variable definitions, so an imported story is narrated by the pack its author chose instead of silently falling back to the default. Story Settings now names the pack a story uses. (#446 by @collegatore)
- Update a prompt pack from a file, in place: replace a pack's contents from a newer
.prompt.jsonwithout breaking the stories bound to it, behind a confirmation that spells out the cost and can export the pack first. The built-in pack can also pull in shipped improvements to templates you've edited. (#471 by @collegatore) - Incognito Keyboard setting for Android — input fields ask the keyboard not to use personalized learning. (#467 by @a-frazier)
- Setup and import wizards now confirm before discarding in-progress answers, and text areas grow to fit their content. (#447 by @failerko)
- On phones, the story entry toolbar's secondary actions fold into a "More actions" menu instead of running off the card. (#450 by @Pento95)
🐛 Fixes
- A single bad field no longer wipes a whole world-state update. When the classifier's response is partly malformed, valid characters, locations, items and scene changes are salvaged and a toast offers to regenerate. (#430 by @Pento95)
- Imported stories keep their reasoning, action choices and world-state deltas. Imports and device sync had dropped all three, causing choices to regenerate on every open and rollback to skip imported entries; persisted choices now also show immediately on open. (#419 by @collegatore)
- Inline images: markers stopped disappearing on entries containing an apostrophe; a
<pic>tag with no image record now shows a rescan placeholder instead of vanishing; a transaction bug that wedged writes with "database is locked" is fixed; character presence and departures are tracked correctly. (#445 by @Pento95) - Deleting a story entry now prunes its orphaned checkpoint, so the branch panel no longer offers to branch from an entry that's gone. The image-model picker no longer lists a saved id the provider doesn't offer. (#450 by @Pento95)
- Switching stories mid-generation no longer redirects the in-progress AI task; chapter summaries follow the configured verbosity; story-specific prompts resolve consistently across generation, translation, retrieval and image prompts. (#444 by @failerko)
- Character discovery: JannyAI downloads work again with a metadata-only fallback when Cloudflare blocks them; Backyard.ai browsing is updated to their current API; RisuRealm downloads keep personality, scenario, greeting, examples and creator notes; NSFW filtering and pagination are consistent across providers. (#451 by @Selene29)
- Providers: errors surface instead of an empty model list; third-party AI Studio proxies return their models even without reported generation capabilities; models with unknown reasoning support still expose the thinking slider; NanoGPT model fetches are authenticated. (#465 by @a-frazier)
- Reasoning effort can be switched off on NanoGPT again; "Manual Request Body" now applies to Lore Manager, Agentic Retrieval and the Vault Assistant; a generic gateway's reasoning is no longer left inline in the narration; the "Off" level is now labelled "None". (#438 by @Pento95)
- Switching to a shorter branch no longer leaves a blank view — branch switches rest at the end of the branch, and a panel-header button jumps to where the current branch forked. The experimental Branch Switch Landing Labs toggle is removed. (#440 by @collegatore)
- Mobile sidebar: horizontal swipes inside scrollable content no longer get hijacked into toggling the sidebar or changing its tab, and choosing Lorebook or Memory now closes the sidebar. (#472 by @collegatore)
- In the library on a narrow screen, the header shows the Settings button directly instead of a menu holding one item, and the misconfiguration warning badge shows without opening the menu. (#434 by @Pento95)
🔧 Improvements
- Import and export icons are now consistent app-wide: content arriving uses the download glyph, content leaving uses upload, everywhere the two were mismatched. (#474 by @collegatore)
- Android: lint now runs in CI, and the undersized hdpi launcher icon is fixed. (#468 by @Pento95)