<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>The Loup Frères Island patch notes</title>
  <subtitle>What changed in every release of The Loup Frères Island, up to version 1.23.0.</subtitle>
  <link rel="alternate" type="text/html" href="https://loupfreres.com/changelog"/>
  <link rel="self" type="application/atom+xml" href="https://loupfreres.com/changelog.xml"/>
  <id>https://loupfreres.com/changelog</id>
  <updated>2026-09-14T00:00:00Z</updated>
  <author><name>Loup Frères</name><uri>https://loupfreres.com/</uri></author>
  <icon>https://loupfreres.com/img/favicon-192.png</icon>
  <entry>
    <title>Version 1.23.0</title>
    <link rel="alternate" type="text/html" href="https://loupfreres.com/changelog#v1.23.0"/>
    <id>https://loupfreres.com/changelog#v1.23.0</id>
    <updated>2026-09-14T00:00:00Z</updated>
    <content type="html"><![CDATA[<p><strong>New Feature: Character Kitchen</strong></p>
<p>We at Loup Frères are excited to announce the Character Kitchen! The Character Kitchen is a repository of characters and worlds submitted by trusted community members. You will find it under the <code>+</code> menu.</p>
<p>Our goal with the Character Kitchen is to create a source where quality writers can upload their creations. To combat low effort uploads and ensure that the Character Kitchen, with your help, grows to become a renowned space, we&#39;ve decided to restrict uploads to Chefs. Chefs are community members approved by the TLFI staff, evaluated for highly emotional writing and creation depth. Anyone may apply to become a chef.</p>
<p><em>Browsing</em></p>
<ul>
<li>Search characters by name. Open <strong>Filters</strong> to sort by newest, downloads, or hearts, hide 18+ characters, and narrow by tag.</li>
<li>109 tags across seven headings: genre, setting, kinds, art style, role, gender, and temperament.</li>
<li>A bar along the bottom of Filters counts how many characters your picks leave. Picked tags stay above the grid.</li>
<li>Hearts and download counts refresh every hour.</li>
</ul>
<p><em>Character Pages</em></p>
<ul>
<li>Every character has a full page: portrait, personality, appearance and abilities, reference art in a large viewer, how much lore they carry with a star map of their Knowledge Graph, their opening scene, the creator, the world, and what&#39;s in the file.</li>
<li>On PC, pages spread across the window in three columns. Long sections fold.</li>
<li>The top of each page shows whether the download includes the character&#39;s Knowledge Graph, and whether it comes with a World.</li>
<li>Every page shows its downloads and hearts.</li>
</ul>
<p><em>Worlds</em></p>
<ul>
<li>Added a <strong>Worlds</strong> tab with the same search, sorts, and Hide 18+ switch as characters. Worlds are tagged by genre and setting.</li>
<li>A world&#39;s page shows its cover, description, static lore, every lorebook entry in full, its Knowledge Graph, its cast with portraits and cards, and every Kitchen character who lives there.</li>
<li>Worlds can be downloaded on their own and hearted.</li>
</ul>
<p><em>Downloading</em></p>
<ul>
<li>Downloaded characters open straight in the editor, with their world attached when they come with one.</li>
<li>Downloaded characters use your own notification settings, not their creator&#39;s.</li>
<li>Hearts can be left once you&#39;ve downloaded.</li>
<li>Added a <strong>Report</strong> button to every page, for anything that doesn&#39;t belong in the Kitchen.</li>
<li>Kitchen images stored on your device are capped at 32 MB. The least recently viewed are cleared first.</li>
</ul>
<p><em>Publishing</em></p>
<ul>
<li>Publishing is invite-only for now.</li>
<li>Invited chefs publish, update, and delete their characters and worlds from the <strong>My uploads</strong> tab. Any page of yours has an <strong>Edit</strong> button.</li>
<li>Chefs pick up to 8 tags per character. On PC, the publish page shows a live preview of the card.</li>
<li>Changes to tags, the tagline, the 18+ mark, About, Personality, Appearance, and Abilities go live immediately and keep the character at its current version.</li>
<li>Changes to the character&#39;s card, pictures, lore, or world publish a new version with a version note.</li>
<li>Worlds can be published on their own. Publishing a character with an unpublished world publishes the world&#39;s page too. Both require at least one genre or setting tag for the world.</li>
<li>If the world is already on your account, the publish page says so before sending, and the character links to it instead of uploading it again.</li>
<li>Character pages can show up to 12 reference images.</li>
</ul>
<p><em>EULA &amp; Privacy Policy</em></p>
<ul>
<li>You will be asked to accept the updated EULA and Privacy Policy once.</li>
<li>Both now cover the Character Kitchen: what browsing, downloading, hearting, and reporting send (a hashed per-device id, nothing about your own characters), what chefs publish and the license they grant for it, the content rules for published files, and how reports are handled.</li>
</ul>
<p><strong>Narrator Rebuild</strong></p>
<p>The Narrator now directs scenes instead of writing them. Each turn it makes one decision — stay silent, let the world respond, put a cast member on stage, or invent someone the scene needs — and hands a short note to a dedicated performer who writes the prose.</p>
<blockquote>
<p><strong>Check your Narrator model.</strong> The Narrator&#39;s model setting now picks a <em>deciding</em> model, and has moved to a new setting with a fast default. Your old choice is still saved, but no longer used. Flagship models are best spent on the Narrator Voice and NPC Actor, which write what you read.</p>
</blockquote>
<p><em>Narration</em></p>
<ul>
<li>The world only speaks when the Narrator can point to a reason: a condition it was watching for just happened, the current story scene calls for it, or a consequence it wrote down earlier has come due. Silence is the default.</li>
<li>Unprompted scenery is largely gone. Wake Rules remain the volume knob.</li>
<li>Added a <strong>Narrator Voice</strong> section to Settings → Narrator, with its own model and prompt. It voices the world — weather, a room reacting, what the cursed thing does when someone touches it — and never a named character.</li>
<li>Merged the Free Roam and Storyteller Narrator prompts into one prompt, with a campaign section that appears only while a story is running. Customized versions of the old prompts are kept, but no longer used.</li>
</ul>
<p><em>NPCs</em></p>
<ul>
<li>Campaign NPCs written by the Overseer now get full character cards — personality, appearance, and private lore — and can hold a scene like a cast member. Campaigns generated before this update still work.</li>
<li>NPCs the Narrator invents on the spot can now stay for several turns instead of a single line. Defaults to 3, adjustable in Settings → Narrator → World Cast.</li>
</ul>
<p><strong>New Feature: World Cast</strong></p>
<p>Added named cast members to world cards. Every character in that world inherits the whole cast, and the Narrator can put any of them on stage.</p>
<p><em>Writing a Cast</em></p>
<ul>
<li>Cast members are written like characters: portrait, personality, appearance, physical traits, and private lore only they know.</li>
<li>Everything except the one-line public blurb reaches the model only while that cast member is speaking.</li>
<li>Added <strong>Write This Cast Member For Me</strong>. It writes with your world&#39;s lore and existing cast in front of it, and only fills empty fields. Direction is optional: &quot;a harbor official who hates the Guild&quot;, or nothing at all.</li>
<li>Added <strong>Transcribe Appearance from Images</strong> to the cast editor.</li>
</ul>
<p><em>In Play</em></p>
<ul>
<li>Cast members appear with their own portrait and accent color, and speak from their own card, including private lore your character has no way of knowing.</li>
<li>While a cast member holds the scene, the Narrator steps back entirely and a smaller, sharper model plays them. Long NPC conversations stay cheap, and hold up better on older and smaller models.</li>
<li>Cast members leave on their own when their business is done. Type <code>/dismiss</code> to hand the scene back to the Narrator immediately.</li>
<li>The turn limit, model, and prompt for cast members are in Settings → Narrator → World Cast.</li>
</ul>
<p><strong>Worlds &amp; Lore</strong></p>
<ul>
<li>Fixed an issue where world lorebook paragraphs that mentioned the character by name were rarely recalled in chat, losing out to the character&#39;s own lore.<ul>
<li><strong>Re-index your worlds</strong> (open the world and press <strong>Index</strong>) to apply the fix. Attached characters need no changes.</li>
</ul>
</li>
<li>Fixed an issue where a world&#39;s static lore was never sent to the model. It is now included on every turn, ahead of the character&#39;s own, so the character card can still override it.</li>
<li>Fixed an issue where <strong>Inject Full Lore</strong> and rubber-band history left out the attached world&#39;s lorebook. Both lorebooks are now included, world first.</li>
</ul>
<p><strong>Files &amp; Sharing</strong></p>
<p><em>Opening Files</em></p>
<ul>
<li>On PC, <code>.loupchar</code>, <code>.loupworld</code>, and <code>.louptheme</code> files are now registered with Windows on install and show the app&#39;s icon. Double-clicking one launches the app, or brings it to the front, and imports the file.</li>
<li>On Android, tap a Loup file anywhere — the Downloads notification, the Files app, a chat — and choose the app, or share the file to it from another app&#39;s share sheet.</li>
<li>Characters open in the editor, worlds land on your Worlds page, and themes ask before importing.</li>
<li>Fixed an issue on PC where launching the app a second time misfired. A second launch now hands its file to the running window.</li>
</ul>
<p><em>Import</em></p>
<ul>
<li>Merged Import Character, Import ST Card, Import Timeline, and Import Story into a single <strong>Import</strong> button. The app detects what the file is: a character, a SillyTavern card (PNG or JSON), a timeline, a story, a world, or a theme.</li>
<li>On PC, the file dialog only shows files the app can open.</li>
<li>Renamed <strong>Create World</strong> to <strong>Worlds</strong>. It opens your world gallery, with Create and Import inside.</li>
<li>Reordered the <code>+</code> menu: Build Character, Import, Worlds, Character Kitchen, Image Studio, New Group Chat.</li>
</ul>
<p><em>File Formats</em></p>
<ul>
<li>Characters now share as a single <code>.loupchar</code> file containing the portrait, reference art, memory, and — with &quot;Also send the world&quot; ticked — the entire world. One save on PC, one share on mobile.</li>
<li>Importing a character whose world you already have links it to your copy instead of importing a duplicate.</li>
<li>Worlds now share as a <code>.loupworld</code> container instead of JSON. Files are meaningfully smaller, and the import prompt appears without loading any images.</li>
<li>Themes now share as a packed <code>.louptheme</code> container, about a third smaller for image-heavy themes. Imports read one panel at a time.</li>
<li>Themes exported from this version require this version or newer to open.</li>
<li>Character, world, and theme files from older versions still import.</li>
<li>Fixed an issue on PC where importing a character deleted the file you picked, even when the import succeeded.</li>
<li>Fixed an issue where imported PNG portraits were renamed to <code>.jpg</code>.</li>
</ul>
<p><strong>License &amp; Devices</strong></p>
<p><em>Device Slots</em></p>
<ul>
<li>Added <strong>Remove other devices</strong> to Settings → License &amp; Updates for permanent keys, including free Open Beta keys. It signs every other device out of your key and keeps the current one. Available once every 30 days.</li>
<li>Devices you still use sign back in on their own at their next update check, as long as a slot is free.</li>
<li>A device turned away by the three-device limit now shows <strong>Device limit reached</strong>, lists the devices using your key, and can clear them from there.</li>
<li>Patreon keys can now run Patreon verification from a blocked device.</li>
<li>Signing a device out no longer frees its slot. A slot now stays with its device for 30 days after it last used the key, and every device in the list shows when its slot frees.</li>
<li>Merged <em>Remove</em> and the ⊖ next to this device into a single <strong>Sign out</strong>, which removes the key from the device and clears the page.</li>
<li>A device that hasn&#39;t used your key in over 30 days now needs a free slot when it returns, like any new device.</li>
<li>Fixed an issue where the reset countdown showed &quot;0 days&quot; during its final hour.</li>
</ul>
<p><em>Patreon</em></p>
<ul>
<li>Fixed an issue where Patreon verification always failed with &quot;does not match the license key&quot;. Existing Patreon keys are corrected the next time Patreon reports on the membership.</li>
<li>Keys now follow the Patreon membership: a lapsed or declined pledge pauses updates, and a renewed one resumes them.</li>
</ul>
<p><strong>Pictures &amp; Media</strong></p>
<p><em>Deleting</em></p>
<ul>
<li>Fixed an issue on PC where deleting a message or timeline could delete the original picture or clip from your computer. Only the app&#39;s own copies are deleted now.</li>
<li>Fixed an issue on Android where attached pictures could vanish from old messages. They are now kept in app storage instead of a cache Android may clear.</li>
<li>Deleting a message, timeline, or Image Studio result now removes its picture or clip from your device right away, including a video&#39;s preview frame.</li>
<li>Pictures you remove or replace — character portraits and references, world covers, cast member pictures, removed cast members, theme panels, and alarm tones — are now deleted from the cache when you confirm. <strong>Discard changes</strong> keeps them.</li>
<li>Pictures picked but never saved are cleaned up. Closing an imported character without saving deletes the pictures it brought from the cache.</li>
<li>Fixed an issue where deleting one alarm blanked the character picture on another alarm voiced by the same character.</li>
</ul>
<p><em>Replacing</em></p>
<ul>
<li>Fixed an issue where removing a profile visual reference and adding a new one kept showing the old picture, and on PC could send the old picture to the AI.</li>
<li>Fixed an issue where removing a profile reference from the middle of the list and then adding one could overwrite a picture you kept.</li>
<li>A new profile picture now shows in your chats right away instead of after a restart.</li>
<li>Pictures removed or replaced on your profile are now deleted instead of piling up on your device.</li>
<li><strong>Find Orphaned Data</strong> now clears replaced cast portraits, removed references, and old copies left behind by changes on a paired device.</li>
</ul>
<p><em>Sync</em></p>
<ul>
<li>Removing a character&#39;s portrait or last reference picture, a world&#39;s cover, a cast member&#39;s portrait or pictures, or your persona&#39;s last reference picture now removes it on paired devices too.</li>
<li>When a paired device replaces a picture or deletes a world, cast member, or persona, this device deletes its own copy of the old picture.</li>
<li>A portrait changed on a paired device now shows without restarting.</li>
</ul>
<p><em>Narrator Picture</em></p>
<ul>
<li>Added a <strong>Remove picture</strong> button under the avatar in Settings → Narrator → Identity. The Narrator returns to its default icon.</li>
<li>Fixed an issue on PC where setting a Narrator picture left a copy in your Documents folder. Replaced or removed Narrator pictures are now deleted from your device.</li>
</ul>
<p><strong>Campaigns</strong></p>
<ul>
<li>Fixed an issue where a campaign could get stuck one scene short of the end when the Narrator wrote a scene number in an unexpected format.</li>
<li>Fixed an issue where a campaign could never advance if the scene it pointed at had been deleted.</li>
</ul>
<p><strong>Chat &amp; Appearance</strong></p>
<ul>
<li>New chat backgrounds for both built-in themes: hand-painted sepia clouds with gold stars in Light Academia, and a storm of dark clouds, rain and lightning in Dark Academia. PC and phone each get their own version, a wide one for the PC window and a tall one for the phone, so neither is cropped down to a sliver.</li>
<li>With <strong>Color quoted dialogue</strong> on and no custom color picked, dialogue now takes its color from the chat background instead of the theme accent, kept readable and distinct from narration.</li>
<li>Added a <strong>Use contrasted</strong> button to the dialogue and chat text color pickers. It moves your pick to the nearest version of that color that stays readable on your chat background. Nothing changes until you press <strong>Apply</strong>.</li>
</ul>
<p><strong>Mobile</strong></p>
<ul>
<li>Fixed an issue on Android where tapping inside text you had typed highlighted everything between the cursor and your finger instead of moving the cursor. Applies to every text box, including the message composer, the fullscreen editor, prompt fields, and the Image Studio prompt bar.</li>
</ul>
<p><strong>Miscellaneous</strong></p>
<ul>
<li>The forced-text test in Settings → Reaching Out → Diagnostics &amp; Debug now only picks characters you&#39;re friends with, and says so when nobody is.</li>
<li>The Favorite&#39;s <strong>Try one now</strong> buttons are disabled until you&#39;re friends.</li>
<li>Lore retrieval now reports in the debug console how many paragraphs were in the running and which owner each came from.</li>
</ul>]]></content>
  </entry>
  <entry>
    <title>Version 1.22.0</title>
    <link rel="alternate" type="text/html" href="https://loupfreres.com/changelog#v1.22.0"/>
    <id>https://loupfreres.com/changelog#v1.22.0</id>
    <updated>2026-08-25T00:00:00Z</updated>
    <content type="html"><![CDATA[<p><strong>New Feature: Image Studio.</strong></p>
<p>Ever thought to yourself: I need that perfect OC reference, and I have my API keys loaded up right here, but it&#39;s such a pain squeezing an image out of characters? Well, I certainly did.</p>
<p>Added <strong>Image Studio</strong> to the <code>+</code> menu — generate images and video directly, with no character involved. Built primarily around the Grok family! It supports every other image model the app offers, but we recommend Grok, especially its new Imagine Image 2.0, that was added to the app TODAY! It hits the holy trifecta of reference images, good output quality, and not being afraid of hot OCs. Go try it.</p>
<p><em>Generating</em></p>
<ul>
<li>Batching: Grok supports up to four images per press, each appearing the moment it finishes rather than waiting on the slowest.</li>
<li>The aspect-ratio picker morphs to preview the shape being picked, and only offers ratios the selected model accepts. Quality and resolution controls appear only on models that use them.</li>
<li>Grok and Gemini generations display a cost estimate under the controls before submission, priced from xAI&#39;s own table.</li>
</ul>
<p><em>Video</em></p>
<ul>
<li>Switch the prompt bar to video for text-to-video, or press <strong>Animate</strong> on any image to make it the first frame of a clip. Duration, resolution, aspect, and sound are set on chips.</li>
<li>Leaving the prompt empty lets Grok decide what happens in the shot. Typing something steers it.</li>
<li>Clips render as background jobs with a live percentage. Leaving the page or closing the app does not cancel a render; finished clips land in your feed.</li>
</ul>
<p><em>Results &amp; Library</em></p>
<ul>
<li>Every result carries its full recipe — the prompt, the model, and every setting — one tap away, with copy buttons.</li>
<li>Results can be reused as prompts, fed back in as reference images (up to three, from disk, from a character&#39;s visual references, or from any earlier result), favorited, or saved to your device.</li>
<li>The Library keeps every generation, searchable by prompt text and filterable by favorite or type. Nothing generated here is swept up by the app&#39;s cleanup passes.</li>
</ul>
<p><em>Failures &amp; Prompting</em></p>
<ul>
<li>A generation blocked by a provider&#39;s content filter shows a dedicated &quot;blocked by content policy&quot; card with a Retry on it.</li>
<li>Optional <strong>auto-refine</strong> switch lets the Content Refiner reword a blocked prompt and try once more on its own.</li>
<li>Prompt enhancement can be set to off, always, or auto (auto expands short prompts only). Both the original and the enhanced prompt are kept on the result, and the enhancement instructions are editable like every prompt in this app.</li>
</ul>
<p><strong>New Feature: Worlds</strong></p>
<p>Added <strong>Create World</strong> to the <code>+</code> menu. A world is a setting authored once and attached to any number of characters, replacing the practice of pasting the same lore into five lorebooks and indexing it five times.</p>
<ul>
<li>A world is authored like a character card — a lorebook split into entries, static lore that is always in play, the same taxonomy tags with the same Auto-Generate button — and gets its own knowledge graph, browsable in the Archival Scholar and the constellation.</li>
<li>Attaching a world copies nothing. The character reads the world&#39;s lore live, so an edit to the world reaches every character using it with no re-import.</li>
<li>A character&#39;s own lorebook KG fuses on top of the world&#39;s rather than beside it, so a world figure a character has a private take on does not appear twice.</li>
<li>The world itself is never written to. Anything a character changes becomes that character&#39;s own copy, so the same world dropped into somebody else arrives exactly as authored.</li>
<li>Detaching keeps the lore a character actually fused; the world&#39;s own entries stop appearing. Deleting a world lists the characters using it first.</li>
<li><strong>Build it for me</strong>: a line of direction — &quot;a drowned Victorian city where the tide is a law&quot; — drafts four different settings to choose between, rerolls included, and the chosen one is built out in full. It only fills fields left empty.</li>
<li>Worlds can be shared as a file. Lore, cover, and the fully indexed graph travel together, so the recipient does not pay to re-index lore that has already been read.</li>
<li>Worlds sync between your devices like characters do, cover art included.</li>
</ul>
<blockquote>
<p><strong>One slow first sync after this update.</strong> Worlds change how devices compare libraries, so the first time each pair connects they perform one full comparison instead of the usual quick check. On a large library that is a few minutes and a lot of traffic, once. Every connect after that is back to normal.</p>
</blockquote>
<p><strong>New Feature: First Message</strong></p>
<p>Added <strong>First Message</strong> — an opening post a character carries, used to begin every new timeline with them instead of starting on a blank screen.</p>
<ul>
<li>Written at the bottom of the character card, by hand or with <strong>Write it for me</strong>, which reads the character&#39;s own card so the opening sounds like them rather than like a description of them. Guidance can be left blank.</li>
<li>The opening is a real message: the character remembers it, it can be recalled later in the story like anything else, and it can be edited, regenerated, or deleted like any other post.</li>
<li>Multiple openings put arrows under the first post — swipe to pick which scene the timeline starts on.</li>
<li>The switch is a mute, not a delete: turning it off stops new timelines using the opening but keeps the text.</li>
<li>Group chats always start empty.</li>
</ul>
<p><em>SillyTavern Import</em></p>
<ul>
<li>Opening messages are no longer discarded. It now arrives intact, word for word, switched on and ready, with alternate greetings as the swipe options above it.</li>
<li>The opening is copied across untouched rather than passed through the converter, so its wording, formatting, and pacing are not rewritten.</li>
<li><code>{char}</code> and <code>{user}</code> from the original card are converted to this app&#39;s spelling. However, SillyTavern&#39;s native spelling should function just fine.</li>
</ul>
<p><strong>Web Search</strong></p>
<p>Characters can look things up mid-conversation.</p>
<ul>
<li>Search runs on four surfaces, each with its own switch: the main timeline, Backstage, Live Chat, and the Narrator. The main timeline and the Narrator start off. The Narrator uses at most one search per scene evaluation, so it can check a fact before directing around it.</li>
<li>A character who looked something up gets a green shimmer and a globe on their name. Long-press the message (right-click on desktop) for <strong>&quot;What they looked up&quot;</strong> — the exact searches they ran and the sources they used, with tappable links.</li>
<li>Characters write their own notes on what they found, on the turn they search (since persisting search results is impossible - they are kept server-side and never exposed via API). The notes stay on that message for as long as it exists, so a fact looked up once is still there when the story circles back weeks later — in the conversation, and in memory recall on the main timeline. They appear under the sources in &quot;What they looked up&quot;.</li>
<li>Characters actually search instead of pretending to. Models left to their own devices roleplay the lookup — &quot;hang on, googling it&quot; — and then invent the answer. A nudge now licenses the tool in plain terms: asking them to look something up (&quot;can you google X&quot;, &quot;look it up&quot;) is an always-honored cue, anything real and current is fair game, and claiming to have checked without checking is forbidden outright.</li>
<li>Gemini gets the full search suite: alongside Google Search it can open and read the pages it finds — and links you paste — instead of settling for result blurbs.</li>
<li>A quiet &quot;looked something up&quot; line appears the moment a search happens.</li>
<li>Requires no new account and no new key — it runs on Google, xAI, Anthropic, or OpenRouter. If the chat model can search by itself it does; otherwise a second, cheap search-capable model searches for it and hands it the report, which lets even a local model look things up. On Windows, Claude Code does it on your existing subscription.</li>
</ul>
<p><em>Web Search Settings</em></p>
<ul>
<li>The settings say in plain words which provider a search would actually use and what it costs, before anything is turned on.</li>
<li>Searches per reply and findings per search go up to 25 each — a character can chase a topic as far as it needs to and stops on its own — and a list of sites never to read from is configurable. Every search-related instruction is an editable prompt.</li>
<li>The sidecar model picker only offers models that can actually search.</li>
</ul>
<p><strong>Lore Research</strong></p>
<p>Added a <strong>Research lore for me</strong> button above the Lorebooks field on a character card. Name a subject that already exists — Lady from Devil May Cry, a noble house of GoT, an entire worldbuild — and it reads up on it and writes what it found straight into the lorebook.</p>
<ul>
<li>Nothing is summarized, trimmed, or rewritten on the way in, and nothing already written is touched — findings are added below.</li>
<li><strong>Deep Research</strong> (requires a paid Google key) plans its own investigation, runs well over a hundred searches, and returns a properly cited report. It costs real money per run, so the price and the likely wait are shown before it starts.</li>
<li>Research runs on Google&#39;s side, so the card, the app, or the phone can be left. A blue ring on the character&#39;s portrait means it is still running, and a notification opens their card when it lands.</li>
</ul>
<p><strong>Lazy Creator</strong></p>
<ul>
<li>Added dismiss-with-reason. Turning down one concept or all four now asks what was wrong with it — &quot;almost, but make her older&quot;, &quot;less noble, more feral&quot;, &quot;wrong century&quot; — and the redraw is told to treat that as a correction and keep what was working. An empty box redraws blindly as before; canceling discards nothing.</li>
<li>The Lazy Creator now reads an attached world in full — places, factions, history, rules — and offers people who live there, with a faction they owe or a city they fled. A line under the button indicates when this is happening.</li>
<li>With a world attached it is given different instructions: do not invent nations or magic systems, do not re-explain the setting, spend the character&#39;s lorebook on the character. Both instruction sets are editable under Settings → Services.</li>
<li>Added an opt-in checkbox for your persona, remembered between runs. It is used to give the character somewhere to touch — a trade, a grudge, a gap you could walk into — and is explicitly forbidden from writing you into their history.</li>
</ul>
<p><strong>Models &amp; Providers</strong></p>
<p><em>Model Family</em></p>
<ul>
<li>Added a <strong>Model family</strong> picker under Primary Provider for OpenRouter, NanoGPT, and relays. Claude, Gemini, GPT, and Grok are selectable, and every model the app has not been told about follows that family. The provider does not change; only the models behind it do.</li>
<li>The card lists the actual model each tier lands on — <em>NanoGPT · Gemini 2.5 Pro</em> rather than a guess.</li>
<li>Each family sends writing and analysis to different models: the flagship rated for prose goes on the story slots (Gemini 2.5 Pro, Opus 4.6) and the more literal successor goes on the knowledge graph and the Chronicler. The card spells out which is which.</li>
<li>Fixed an issue where the cheapest NanoGPT tier pointed at a Claude Haiku name NanoGPT does not serve, failing background jobs on a NanoGPT key. Its Gemini and Grok names were wrong as well; all are now checked against the live model lists.</li>
<li>Models picked by hand are never moved by a family switch. The <em>Apply … to all slots</em> button, now named after the selected family, sweeps everything over when that is wanted.</li>
</ul>
<p><em>Model Lists</em></p>
<ul>
<li>Gemini models are now hidden from the model dropdowns when no Gemini key is present, since they could only ever fail. Nothing already chosen is changed or lost.</li>
<li>Added <strong>Show Gemini models anyway</strong> to the Providers &amp; Keys page, right where they went missing.</li>
<li>Voice transcription is untouched and keeps the full list, since it needs a Gemini model to hear you.</li>
</ul>
<p><em>Models That Cannot See</em></p>
<p>Characters send their appearance pictures with every message. Until now only a local model could be spared them, so a text-only cloud model like GLM failed the turn with an error you had to decode.</p>
<ul>
<li>The app now reads vision support straight from the catalog when you press <strong>Fetch</strong> for Anthropic, OpenRouter, NanoGPT, and xAI.</li>
<li>For providers that publish nothing — Z.ai, custom endpoints, anything self-hosted — the app learns from the first <code>cannot process images error</code>: it strips the images, sends the message again on its own, and says so in the chat. There is no second failed turn.</li>
<li>Major models that are multimodal by nature — Gemini, Claude, GPT-4o and newer — are never in doubt, and are thus excluded from the self-learning blacklist.</li>
<li>When pictures are left out, the notes referring to them are removed as well, so a blind model is no longer told about a photo it never received and left to invent what was in it. The character&#39;s written <strong>Visual Appearance</strong> is used instead.</li>
<li>Settings → Providers &amp; Keys now lists every model treated as blind and why: reported by the provider, learned from a refusal, or set by you. Anything learned can be forgotten with one tap, and any model can be set by hand either way.</li>
<li>The crossed-eye mark now appears in the model list when models are fetched, not only after one has been picked.</li>
<li>The &quot;drop images for models that cannot see&quot; switch moved from Local AI to Providers &amp; Keys, as it now covers every provider. Existing choices carry over.</li>
<li>Fixed an issue where a character on a blind model would offer GIFs and memes — which means looking at candidates — and would stall reviewing a photo it could not see, holding up selfies.</li>
<li>Fixed an issue where the &quot;pictures were left out&quot; note was written into the conversation as a message from the character, saving it to your log and reading it back to the model on later turns. It now appears once per model as a transient notification and stays out of the chat.</li>
<li>Live Chat now reports when pictures were left out of a message. It had been doing it silently.</li>
<li>The game watcher now warns outright if its model cannot see images, rather than narrating a playthrough it never watched.</li>
<li>Fixed an issue where a message too large to send was re-sent without its images but kept the notes pointing at them.</li>
</ul>
<p><em>Temperature</em></p>
<ul>
<li>Fixed an issue where GLM refused every message when Temperature was above 1. Z.AI only allows 0–1, and routing through OpenRouter forwards the value rather than softening it. The app now knows each model&#39;s real ceiling, shows the slider only that far, and sends the highest value the model actually accepts instead of failing the turn.</li>
<li>The same fix covers Claude on its own API, which has always been limited to 1.</li>
<li>Saved Temperature belongs to the slot rather than the model, so switching a slot to a stricter model no longer breaks the very next message.</li>
</ul>
<p><em>Gemini</em></p>
<ul>
<li>Everything that used <strong>Gemini 3.5 Flash</strong> now uses <strong>Gemini 3.7 Flash</strong> — writing, memory, the knowledge graph, Live Chat, alarms, the game watcher. It is the current version of the same model at the same tier. Anything picked by hand stays exactly where it was put.</li>
<li>Added <strong>Gemini 3.7 Flash</strong>, <strong>Gemini Flash Latest</strong>, and <strong>Gemini Pro Latest</strong> to the model list. The floating options always point at Google&#39;s newest release, and are deliberately not the defaults: Google can swap them to a preview or experimental version with tighter rate limits on two weeks&#39; notice.</li>
<li>Fixed an issue, before anyone could hit it, where models from a future Gemini generation would have quietly lost their thinking settings and stopped reporting their reasoning, with the thinking controls simply vanishing from the settings page.</li>
</ul>
<p><strong>Memory &amp; Knowledge Graph</strong></p>
<ul>
<li>Improved embedding effectiveness of gemini-embedding-2 with new TaskTypes.</li>
<li>Fixed an issue where the indexer could merge two related entities into one — an ancestor and her descendant sharing a name, a title, and a bloodline were folded together despite the relationship between them already being recorded.<ul>
<li>Entities with any relationship at all, will never be merged automatically. Nothing is related to itself, so a recorded relationship is the graph stating outright that these are two beings.</li>
<li>This covers both the automatic cleanup and the AI auditor. Folds you perform yourself are untouched.</li>
<li>A refused merge is written to the debug log with the relationship that blocked it. Duplicates it declines to fold stay visible and can still be merged by hand — the reverse mistake could not be undone.</li>
</ul>
</li>
</ul>
<p><strong>Mobile</strong></p>
<p><em>Text Editing</em></p>
<p>Every writing surface was a popup dialog, which is unpleasant to write on.</p>
<ul>
<li>Text editors are full pages on phones now — editing a message, writing a redraw note, leaving instructions for the concept artist, renaming a timeline, writing a Narrator note, filling in a Life Profile, setting up lore research, interjecting mid-generation, and sending a crash report. The back gesture closes them like anything else.</li>
<li>The War Room is a real page rather than a window pretending to be one, so it sits below the status bar properly and the back gesture closes it instead of whatever was behind it.</li>
<li>Fixed an issue where several <strong>Save</strong> buttons silently ignored a press when a required field was empty. They are greyed out instead.</li>
<li>Wide windows are unchanged and keep the compact dialogs — there is no keyboard covering anything, and a full-screen takeover would hide the panes being written against.</li>
</ul>
<p><em>Prompt Editing</em></p>
<ul>
<li>Long-pressing any prompt on a phone opens a menu with its name at the top: edit it, copy its text, or restore just that one to default. Nothing else on the page moves.</li>
<li>Added a <strong>Restore</strong> button to the prompt editor&#39;s top bar, on phone and desktop alike. It appears only when the prompt differs from the default, and it does not save on its own — the default drops into the editor to be read, typed over, or backed out of.</li>
<li>Copy sits above Restore on purpose: once a prompt is restored, the version you wrote is gone.</li>
<li>The 9px dot beside an edited prompt&#39;s name stays, but only as a marker for &quot;edited&quot;. It was never a button worth hunting for.</li>
</ul>
<p><strong>Appearance</strong></p>
<ul>
<li>Light Academia&#39;s highlight color is terracotta now. The greens were unreadable, causing bad user experience.</li>
</ul>
<p><strong>Settings</strong></p>
<ul>
<li>Fixed the <strong>What&#39;s New</strong> page opening on &quot;No notes shipped with this build&quot; immediately after an update — the one moment the page exists for. Each release&#39;s notes ship inside the build they describe, and the page reads them there.</li>
<li>Every <strong>Upload .txt</strong> button — character card, persona, group chat primers, system instructions — now accepts <code>.txt</code>, <code>.md</code>, <code>.markdown</code>, and <code>.text</code>, and is labeled <strong>Upload text</strong>. The files were only ever read as plain text, so greying Markdown out in the file browser bought nothing and blocked the format most written lore arrives in.</li>
</ul>
<p><strong>Stability</strong></p>
<p><em>Android Background</em></p>
<ul>
<li>Fixed an issue where a fault during a background wake-up — a check for whether a character should text you, an alarm keeping time — took the entire app down with it while it was not on screen. Android would restart it a few seconds later, it would fail the same way, and go down again. A failure now costs that one wake-up. The alarm, timer, and background-messaging paths all survive a fault.</li>
<li>Fixed an issue where a timer finishing on a phone with a silent-ringtone profile or a wiped default alarm tone killed the app. Timers now ring silently and still show the timer screen.</li>
</ul>
<p><em>Ember Scorch</em></p>
<ul>
<li>Fixed an issue where changing almost any setting — mark strength, a theme, a font size — while an <strong>Ember Scorch</strong> misspelling mark was burning killed the app to a red error screen.</li>
<li>Fixed an issue where switching marker style away from Ember Scorch while a word was burning left the sparks frozen on screen until restart. They now go out immediately.</li>
<li>Fixed an issue where sparks lingered over a screen you had left — switching characters, opening a timeline, or closing a pane mid-burn.</li>
<li>Fixed an issue on multi-monitor desktops where dragging the window to a display with different scaling left the embers rendering at the old resolution.</li>
</ul>]]></content>
  </entry>
  <entry>
    <title>Version 1.21.1</title>
    <link rel="alternate" type="text/html" href="https://loupfreres.com/changelog#v1.21.1"/>
    <id>https://loupfreres.com/changelog#v1.21.1</id>
    <updated>2026-08-19T00:00:00Z</updated>
    <content type="html"><![CDATA[<p><strong>New Feature: Bring Your Own Embeddings</strong></p>
<p>Memory no longer requires a Google key. The knowledge graph, memory recall, and the Constellation star-map all run on embeddings, so playing on OpenRouter, NanoGPT, or your own endpoint used to mean keeping a Google key around for this alone.</p>
<ul>
<li>Added an <strong>Embeddings</strong> section to Settings → Providers &amp; Keys, where you choose who provides them. Google is still the default, and nothing changes if you leave it alone.</li>
<li>OpenRouter and NanoGPT both offer the same embedding model the app already used, so switching to your own key there is just a switch. Your existing memories stay exactly as valid as they were. You can also point it at a custom endpoint of your own.</li>
<li>Press <strong>Fetch</strong> next to a provider and it lists only the models that will actually work here, or type the name in yourself. It is the same Gemini embedding model either way — you are choosing who bills you for it, not swapping it for a different one. Anything else is refused, because your stored memories would become unfindable.</li>
<li>Roleplay, images, and embeddings are now three separate choices. They can run on three different providers, on three different keys.</li>
</ul>
<p><em>Embedding Health</em></p>
<ul>
<li>The Embeddings section now shows the real state — <strong>Working</strong>, <strong>Not set up</strong>, <strong>Unreachable</strong>, <strong>Not a Gemini model</strong> or <strong>Wrong size</strong> — along with which provider and model answered, and how fast. You can tell at a glance that your characters are actually remembering.</li>
<li>Press <strong>Test</strong> to check it whenever you want. It also checks itself once after you change the key or the model.</li>
<li>A model that is not Gemini&#39;s, or one that answers in a shape this app cannot store, is refused outright rather than saved as something that would never match anything again.</li>
<li>Messages that used to say &quot;set your Gemini embedding key&quot; now name whichever provider you actually chose.</li>
<li>Indexing progress now survives syncing with a device that has not indexed anything yet.</li>
</ul>
<p><em>Terms</em></p>
<ul>
<li>You will be asked to accept the terms again. The licence and the privacy policy said embeddings always go to Google and that a Google key was required. Both now state that you choose the provider, and that embeddings always leave your device and cannot be generated locally, even when your chat is running on a local model. Also, privacy policy now mentions optional collection of device specs when submitting a bug report.</li>
</ul>
<p><strong>Performance, Memory &amp; Battery</strong></p>
<p><em>Idle Cost</em></p>
<ul>
<li>Background work is now driven strictly by what you actually use. With no alarms and Reaching Out switched off, nothing runs while the app is closed — not a smaller amount, none. Turning on your first alarm brings the background check back; deleting your last one retires it again.</li>
<li>Background wake-ups are consolidated into a single check that can tell there is nothing to do before doing any real work, which makes idle days considerably cheaper.</li>
<li>Ambient &quot;hey, what are you up to&quot; texts now hold off while your battery is low and arrive once you have charged up. Alarms, replies you are already owed, and your favorite&#39;s good morning and goodnight are never delayed by this.</li>
<li>Added <strong>Battery Saver</strong> under Settings → Interface. Every decorative animation stops — the glowing banners, the shimmering frames, the drifting gradients — and the app checks in less often while closed. Your characters still text just as often overall; only the timing gets less precise.</li>
</ul>
<p><em>Work In Your Pocket</em></p>
<ul>
<li>Work that only makes sense while you are looking now pauses when you leave and picks straight back up when you return: settings synchronization, the character-presence check, the alarm re-check, and a video left playing behind the home screen.</li>
<li>Drastically improved battery efficiency while your settings are kept in sync with your other devices, both in the background and while you are using the app.</li>
<li>Your characters live on a schedule — asleep at 3am, phone locked away during a shift, drifting online in the evening. The app <em>builds</em> that schedule, so it already knows they are asleep until 7:14, or that they will put the phone down in forty minutes. It now waits for that moment instead of checking on a timer. A character asleep for five hours is one quiet wait, and the status dot still flips the instant anything actually happens.</li>
<li>Looping animations throughout the app now settle when you are not looking, when your system is set to reduce motion, and under Battery Saver — on PC as well as on the phone.</li>
<li>The pinned-persona label in your timeline list is considerably cheaper to draw, especially in long lists.</li>
<li>The screen now stays awake until an Overseer story has finished being written, even when a chat message you sent finishes first.</li>
<li>The locks the app uses to keep working while your screen is off are now always handed back to the system.</li>
</ul>
<p><em>Memory Use</em></p>
<ul>
<li>Picking which past moments to recall now reads the conversation in small batches and fully loads only the handful it chose. On a long story that is a substantial saving on every single reply, and the memories you get back are the same ones.</li>
<li>The app now reads Android&#39;s memory-pressure signal by level. A mild warning drops a few unused pictures; only a genuine emergency releases loaded conversations. Once it has given memory back, it waits before doing it again — so the conversation you are reading stays put while other apps come and go.</li>
<li>Syncing now builds its comparison list from names and fingerprints alone, fetching contents one at a time and only for what your other device turns out to be missing. Far lighter on memory on a big save, and nothing about what gets synced has changed.</li>
<li>The app now hands memory back the moment the system asks for it. Conversations you are not currently reading are released, along with pictures it had kept ready, and everything comes back when you open it again.</li>
<li>Only the conversation you are reading is kept loaded. Ones you had moved on from hours ago are released.</li>
<li>The store of recently shown pictures is much smaller, and the memory set aside for searching your characters&#39; memories is now sized to what is actually used.</li>
<li>Custom backgrounds now keep a single copy in memory at startup.</li>
</ul>
<p><strong>Custom Themes</strong></p>
<p><em>New Feature: Reposition</em></p>
<p>Added a <strong>Reposition</strong> button to every panel in the custom theme list. A background image almost never has the same shape as the panel it goes behind, so you now choose which part of it shows instead of taking whatever falls in the middle.</p>
<ul>
<li>Press it and the app takes you to that panel where it really lives, dims and grays out everything else, and lets you drag anywhere on the screen to slide the image until it frames what you want.</li>
<li>On PC you can also nudge it a pixel at a time with the arrow keys, hold <strong>Shift</strong> for bigger steps, <strong>Enter</strong> to keep it, and <strong>Esc</strong> to throw it away.</li>
<li>The <strong>Fit</strong> setting is right there in the editor, because Fit decides whether there is anything to slide at all. A panel that cannot move tells you why.</li>
<li>Panels that appear in more than one place — the action bar is both the chat header and the timeline header on PC — light up together.</li>
<li>You are moving the real panel, not a stand-in. Your messages, the composer, the character rail, and the timeline header all stay where they are and sit on top of the image as you slide it.</li>
<li>Repositioning the input bar or the paper texture opens a real timeline for you, since neither exists on screen until one is open, and moves the controls out of the way.</li>
<li>The input bar and the paper texture slide up and down through the whole picture, not just the sliver the strip happens to show. Both are drawn from a tall image kept behind a short window.</li>
<li>Framing travels with the theme. A <code>.louptheme</code> file you bake now carries how you positioned each image. Themes made before this update still import perfectly.</li>
<li>Nothing you have already installed moves. Every panel starts exactly where it has always been.</li>
</ul>
<p><em>WebP</em></p>
<ul>
<li><strong>Best (WebP)</strong> now produces real WebP on PC and Linux. The app carries its own WebP encoder on every platform.<ul>
<li>On real backgrounds the same image lands four to six times smaller than the PNG equivalent, with nothing visible lost.</li>
<li>Backgrounds with transparency benefit most, as they could never use the smaller JPEG option. A transparent panel that took 425 KB now takes 106 KB.</li>
<li>Themes you export shrink by the same amount, so a theme built on a PC is far less likely to trip the &quot;this might be too big&quot; warning when a phone imports it.</li>
</ul>
</li>
<li><strong>Best</strong> now encodes each image two ways and keeps whichever comes out smaller, so a crisp, flat, or text-heavy picture is never softened just to save space.</li>
<li><strong>The encoding options are renamed around what they actually do.</strong> JPEG was called <em>Performance</em> and PNG <em>Quality</em>, and WebP now beats both on the very thing each was named for: <strong>Lossless (WebP)</strong> is the exact same picture as PNG in about a quarter less space, and <strong>Smaller (WebP)</strong> matches JPEG&#39;s look at roughly 40% less while also keeping transparency, which JPEG cannot. The list now reads <strong>Best (WebP)</strong>, <strong>Smaller (WebP)</strong>, <strong>Lossless (WebP)</strong>, then <strong>PNG</strong> and <strong>JPEG</strong> — the last two kept for when you want a file another program will open, and labelled as such.</li>
<li><strong>Smaller (WebP)</strong> and <strong>Lossless (WebP)</strong> come with a <strong>Quality</strong> slider and an <strong>Effort</strong> slider. Effort only changes how hard the encoder works and how long the install takes, never how the picture looks. Picking one of these installs quicker than Best, which has to try both.</li>
<li><strong>PNG</strong> still saves PNG if that is what you want, and nothing you have already installed changes.</li>
<li>GIFs are now saved as animated WebP, which stores the difference between frames instead of a whole picture every time — typically several times smaller for the same animation, playing for exactly as long as it did before. Picking <strong>PNG</strong> or <strong>JPEG</strong> keeps them as GIFs.</li>
</ul>
<p><em>Animated Backgrounds</em></p>
<ul>
<li>Animated WebP backgrounds can now be resized and frame-trimmed the way a GIF is, on every platform, and the loop still runs for exactly as long as it did.</li>
<li>Oversized GIFs are now resized once, when you install them, to something a phone can actually play, and the app tells you what it did. A GIF too enormous to resize safely is still installed, with a heads-up that it may stutter.</li>
<li>Frost now blurs every frame of an animated background instead of holding it on the first one, and looks exactly the same at the same slider setting.<ul>
<li>The <strong>Settings background</strong> and the theme list&#39;s preview thumbnails still hold a single blurred frame, and now say so under the slider.</li>
</ul>
</li>
<li>A panel with an animated image is now labelled <strong>&quot;Custom image · animated&quot;</strong> in the theme list, so you can tell at a glance which ones move.</li>
<li>⚠️ <strong>Disable memory-safety warnings</strong> (under the custom theme settings, now on PC as well) also turns off the resizing, not just the warnings. If your animated backgrounds are not shrinking at all, check it — a huge GIF will be stored exactly as you gave it.</li>
</ul>
<p><strong>Sync &amp; Deletion</strong></p>
<ul>
<li>Banishing a character is now permanent, whether or not your other device is switched on at the time. Their world graph and everything the app knows about them goes with them and stays gone — which also keeps storage from holding on to data belonging to characters you have gotten rid of.</li>
<li>A deletion arriving from your PC now clears the rest on the phone too: their lore and its memory vectors, their settings, their pictures, their notifications, and their shortcut.</li>
<li>Background clean-up now sticks across a sync instead of being undone by your other device: the knowledge graph&#39;s merge of duplicate entities, <code>/nodeclean</code>, lore re-indexing, and the Narrator&#39;s note limit. Duplicates merged once stay merged, and the database stops growing on repeat work.</li>
<li><code>/narratorpurge</code>, the Overseer&#39;s Purge button, and deleting a single Narrator note are now durable.</li>
<li><strong>Find orphaned data</strong> now matches alarm ringtones by the real file, so a tone you are still using is never removed and tones you have stopped using finally are.</li>
<li>Generated images are now deleted along with the messages that owned them.<ul>
<li>Regenerating a reply no longer leaves the discarded attempts on disk — the largest single source of reclaimable space.</li>
<li>Editing one of your own messages and letting the story re-run from there now clears what it replaced.</li>
<li>Deleting a message on one device now removes its pictures on your other device too.</li>
<li>Finishing a <strong>Game Watcher</strong> session now cleans up the play-by-play&#39;s pictures, the persona portrait, and the session&#39;s settings.</li>
<li>An image-only reply with no text is kept, rather than treated as a failed turn.</li>
</ul>
</li>
</ul>
<p><strong>Local AI</strong></p>
<ul>
<li>Local models that cannot see are no longer sent pictures. Your characters&#39; appearance pictures ride along with every message, and handed to a vision-less local model that meant either a rejected turn or a model reading a note about images it never actually received — and then describing them to you anyway.<ul>
<li>The app now asks your local server which of its models can actually see. Ollama, KoboldCpp, and LM Studio each report it, and the ones that cannot are marked with a <strong>crossed-out eye</strong> in every model picker.</li>
<li>Pick one of those and the pictures are removed before the message is sent, along with the notes that pointed at them, and you are told in the chat that it happened. The turn goes through instead of failing.</li>
<li>Reference IDs for the camera tool survive the removal, so a character can still take a photo of someone it cannot look at.</li>
<li>If the app cannot tell whether a model can see — an older server, or one that does not report it — images are still sent, exactly as before.</li>
<li><strong>Transcribe Appearance</strong> and <strong>Lazy Mode</strong> are never touched, since reading the picture is the entire point of them.</li>
<li>Added <strong>Settings → Local AI → Image Handling</strong>, which turns the whole thing off.</li>
</ul>
</li>
<li>Local models whose name begins with &quot;gemma&quot; now stay on your own server when a character reaches out to you while the app is closed.</li>
</ul>
<p><strong>Reliability</strong></p>
<ul>
<li>All API requests now survive leaving the app on Android. Switching away, or just locking your screen, no longer interrupts whatever was being written. This existed before on all but few instances.<ul>
<li>Every request the app makes now holds the phone open until it finishes: chat, character creation, images, video, and memory.</li>
<li>The lazy character creator benefits most. It asks you to pick from four concepts, and the minutes you spend reading them are exactly when you put the phone down. It now survives being backgrounded, reports honestly if something does go wrong, and retries by itself if the connection drops.</li>
<li>Also applies to proactive messages you asked for by hand, character life profiles, timeline summaries, the refiner, auto-naming, image descriptions, and imported characters.</li>
<li>The &quot;working&quot; notification now covers all of this, not just knowledge-graph indexing, and stays one steady entry instead of flickering on and off between steps.</li>
</ul>
</li>
</ul>
<p><strong>Clearer Labeling For Visual References</strong></p>
<p>The appearance pictures you upload are shown to the model at the start of every conversation. The character card now says so, in the places you would look — easy to miss when the &quot;make the character for me&quot; button sits under the same image slot. They do both jobs.</p>
<ul>
<li>The character card labels the carousel <strong>Visual References (Sent to AI)</strong> and explains underneath that the AI is shown them at the start of every conversation, and that Lazy Mode reads them. If your model has no vision, it says so in orange and points you at the field to write in instead.</li>
<li>Added a <strong>?</strong> covering the whole picture: when your own images are sent and when they are not, that Backstage and Live Chat send them whenever a character can take photos, and that your Profile Picture is never sent to anything.</li>
<li><strong>Settings → Chat &amp; Memory</strong> carries the same explanation beside your model choice, including that these pictures also reach your image provider when a character takes a photo.</li>
<li>Renamed <strong>Visual Description</strong> to <strong>Visual Appearance</strong>, matching the Transcribe Appearance button beside it. Only the label changed; everything you have written in it is untouched.</li>
</ul>
<p><strong>Diagnostics</strong></p>
<ul>
<li>Added Settings → Report a Bug → <strong>Capture a memory reading</strong>. Take one whenever the app feels heavy — several readings from different moments say far more than one, and they are all sent together when you attach the debug log.<ul>
<li>A reading is also taken automatically whenever you leave the app, the moment just before the system decides whether to close it.</li>
<li>Each report now carries a short summary of how much memory the app was using and what was holding it: open conversations, pictures, logs. Sizes and counts only — no message text, no names, no file names.</li>
</ul>
</li>
<li>Crash reports now carry a short description of your device: model, chipset, memory, storage, screen, and system version. It separates &quot;the app is too heavy&quot; from &quot;this device is small&quot; — the same report means opposite things on each.<ul>
<li>No serial numbers, no account or device IDs, and memory and storage are rounded. Nothing is sent unless you press Send.</li>
<li>Added an optional <strong>contact email</strong>, so the developer can come back to you with a question instead of guessing. It starts empty, is only ever used to answer the report you sent, and one tap clears it.</li>
<li><strong>View what will be sent</strong> shows the exact text first, and switches either of them off. Switching the readings off also stops them being kept on your device.</li>
<li>Both are also on the &quot;the app closed unexpectedly&quot; prompt.</li>
</ul>
</li>
<li>The crash log no longer re-records history it has already kept, so it holds a longer and cleaner run of real crashes instead of filling up with repeats.</li>
<li>Crash log entries now record how much memory the app was using when the system closed it.</li>
</ul>
<p><strong>Fixes</strong></p>
<ul>
<li>Fixed the app&#39;s notification housekeeping failing on Android. Clearing away a deleted character&#39;s notifications, and scheduling new ones, now go through cleanly instead of erroring out into the crash log.</li>
<li>Fixed a crash when opening a character whose portrait file had gone missing. Changing a portrait no longer deletes the old image until the character is actually saved, so backing out of an edit cannot leave a character pointing at a picture that is not there. Anywhere a portrait is missing now shows a placeholder instead of failing.</li>
<li>Fixed characters, personas, and alarms left pointing at a picture that had been moved or deleted. Settings → Backup &amp; Sharing → <strong>Find Orphaned Data</strong> now reports these too: where the picture can be found again it is reconnected, and where it cannot the empty link is removed so a placeholder shows instead. This repair now runs every time you ask for it, so a picture lost later can still be recovered.</li>
<li>Fixed crashes when opening a file picker — choosing a character file, a lorebook, an alarm sound, a text file, or your Baldur&#39;s Gate 3 folder. A picker that fails to open now does nothing and lets you try again, instead of closing the app.</li>
<li>Fixed a crash from double-tapping the attach button, or a portrait, before the picker had opened. The second tap is now ignored.</li>
</ul>]]></content>
  </entry>
  <entry>
    <title>Version 1.21.0</title>
    <link rel="alternate" type="text/html" href="https://loupfreres.com/changelog#v1.21.0"/>
    <id>https://loupfreres.com/changelog#v1.21.0</id>
    <updated>2026-08-11T00:00:00Z</updated>
    <content type="html"><![CDATA[<p><strong>New Feature: Versions Of Your Own Messages</strong></p>
<p>Editing something you said no longer destroys everything after it. The chat forks instead.</p>
<ul>
<li>Tap <strong>Edit</strong> on one of your messages, change the wording, and press <strong>Save &amp; Regenerate</strong>. A <code>‹ 1/2 ›</code> appears under your bubble, exactly like the one under a regenerated reply.</li>
<li>Swiping between versions swaps the whole conversation, not only the bubble. Every reply a version led to returns with it: the character&#39;s answer, your next three turns, all of it. Nothing is deleted, and you can move between threads as often as you like.</li>
<li>You can fork again inside a version. Each branch remembers the sub-version you read.</li>
<li>Added <strong>Save only</strong> to the edit box, for a simple typo. It changes the wording and leaves every reply where it is, with no new version and no regeneration.</li>
<li>Long-press the <code>‹ 1/2 ›</code> to delete a version and everything under it. You are told how many messages that is first, and your other version is untouched.</li>
<li>The app does not rewind what a character <em>remembers</em>. The chat reads correctly, but facts they learned in a branch you swiped away stay in their memory. Use <strong>Branch Timeline</strong> for two truly separate stories.</li>
<li>Unavailable in group chats, Backstage, and Live Chat, where editing works as before.</li>
<li>Fixed an issue where a choice between two versions of a reply was a coin flip the next time two synced devices talked, sometimes reverting on its own. Both devices now agree on your choice.</li>
<li>Fixed an issue where deleting a message stranded its other versions in the database, invisible and unreachable.</li>
<li>You can clean up orphaned data under Settings -&gt; Backup &amp; Sharing -&gt; Find Orphaned Data.</li>
</ul>
<p><strong>Reaching Out</strong></p>
<p><em>New Feature: Favorite Character</em></p>
<p>Long-press a character in the rail (right-click on desktop) and pick <strong>Set as Favorite</strong>. You can have one at a time, and they wear a small heart in the rail.</p>
<ul>
<li>The Character is informed they are your special and treat you with particular care.</li>
<li>They send a guaranteed good morning and goodnight on their own life profile&#39;s schedule, not one you set. A night owl says goodnight at 3am. Each is moved by a few minutes, so a text never arrives at the same suspicious minute.</li>
<li>Added a text that asks about your day, returning to something you really mentioned — how the thing went, whether you ate, whether you slept — asked from inside their own day.</li>
<li>They text first more often than any other character, and a guaranteed text always wins against another character&#39;s random ping.</li>
<li>An unanswered good morning or goodnight never counts as leaving them on read, so they never guilt you about one. An ignored &quot;did you eat?&quot; still counts.</li>
<li>If they owe you a reply, that reply arrives first.</li>
<li>Added Settings → <strong>Reaching Out → Favorite Character</strong>: how much more they text, how often they ask about your day, how late is &quot;late&quot;, and all five prompts, plus buttons that send one of each immediately for tuning.</li>
</ul>
<p><em>One Engine For Texting First</em></p>
<p>AFK notifications and Live Chat self-texts were separate systems with separate rules. They are now one.</p>
<ul>
<li>Every text now has a reason: their own day, the story you write together, or a shared memory that returned. The mix shifts on its own — talk often and texts stay casual, stay away a few days and the story starts to call.</li>
<li>Go quiet for a day or two and a character you played with recently texts you more. Stay away for weeks and they take the hint and go quiet, instead of nagging.</li>
<li>Unanswered texts now come from the conversation itself, so a character sees exactly what you left on read.</li>
<li>Consecutive texts now grow one notification thread instead of a pile of separate ones.</li>
<li>Characters now text you first on Windows and Linux while the app is open, even behind another window, and the gold unread ring lights up. Desktop texts stay casual, with no pressure to come back and play.</li>
<li>Reach-out texts now use your Live Chat model, so the text that opens a conversation and the replies after it sound like the same person.</li>
<li>Everything now sits under Settings → <strong>Reaching Out</strong>, on desktop too: how often, the missing-you curve, what they text about, the task prompts, and Attitude.<ul>
<li>Attitude now quiets every kind of text when you never answer, not only some of them.</li>
<li>Your old switches are kept. If either kind of texting was on, the new one is on.</li>
<li>The missing-you and Attitude sections now show their combined day-by-day forecast — &quot;leave and never answer: day 1 ×1.8, day 3 ×1.0, a month ×0.1&quot; — updating live as you drag either set of sliders.</li>
</ul>
</li>
<li>Characters no longer send friend requests with no warning. Friendship still starts in the story.</li>
</ul>
<p><strong>Local AI</strong></p>
<p><em>New Feature: LM Studio</em></p>
<ul>
<li>Added LM Studio to Settings → Local AI, alongside Ollama and KoboldCpp. Give it the server address and every model you have downloaded appears in every model list in the app.</li>
<li>The app finds the server the same way LM Studio&#39;s own tools do, so it does not mistake something else on that port for a working connection. It also names the model loaded right now.</li>
<li>Model lists arrive complete, with quantization and file size next to each name so you can separate two builds of the same model. Embedding models are omitted, as they cannot hold a conversation.</li>
<li>Image attachments work with any vision model.</li>
<li>Added a button that starts the LM Studio server on Windows, Mac, and Linux, on the port you set.</li>
<li>Failures now report a sentence instead of a wall of code. &quot;No model loaded&quot; says exactly that, and a conversation too long for the model&#39;s context says so and names what to change.</li>
<li>The page names the two LM Studio settings that matter most. Turn <strong>Auto-Evict</strong> off if you use different models for chat, the Narrator, and the knowledge graph, or every one of them reloads from disk. The first message after a switch is slow because the model loads; the app is not frozen.</li>
</ul>
<p><em>New Feature: Local AI From Your Phone</em></p>
<ul>
<li>The Local AI page is no longer hidden on Android. The server still runs on your PC, and your phone talks to it over your home network.</li>
<li>Added an <strong>Access From Your Phone</strong> section to the PC page. One switch makes your server listen to the whole home network instead of only that computer, applying each server&#39;s own method for you.</li>
<li>If Windows blocks the connection, the page says so and offers a button that asks for permission once and opens the way through — the same single press Wifi Sync uses. It also repairs the common case of Windows treating your home Wi-Fi as a public network.</li>
<li>The switch states plainly that anyone on your network can then use your model, as none of these servers ask for a password.</li>
<li>Buttons that start a server remain desktop-only, as a phone cannot start one.</li>
<li>Fixed an issue where your local models disappeared from every model list when the app closed, until you opened the Local AI page again.</li>
<li>Fixed an issue where a local model with a name that starts like a Google name went to Google instead of your own server. LM Studio names some models that way.</li>
<li>Fixed an issue where switching local backends erased the address you typed. Each backend now remembers its own.</li>
<li>Fixed an issue where the page showed a green &quot;connected&quot; light above blank space when the server had no model that can hold a conversation. It now says what is missing.</li>
</ul>
<p><em>Notice</em></p>
<ul>
<li>Added a notice to the top of the Local AI page, for every backend: running a conversation on your own machine does not make the whole app self-contained. Memory embeddings are Gemini-only by design, and the knowledge graph, memory recall, relationship mapping, and the Constellation all depend on them. With no embedding key those systems run degraded and characters lose their long-term consistency. Nothing is blocked — you are simply told first.</li>
</ul>
<p><strong>New Feature: What&#39;s New</strong></p>
<p>Patch notes now live inside the app. They used to appear once, in the box that offered you the update, and then disappear forever.</p>
<ul>
<li>Added <strong>Settings → What&#39;s New</strong>, opening with everything your version added. A button there opens the complete patch history: every release the app has ever had, one tap each.</li>
<li>After an update, a card drifts down a few seconds after launch: <em>&quot;Updated to 1.20.7 — see what&#39;s new.&quot;</em> Tap it to read, swipe it away, or ignore it and it leaves by itself.<ul>
<li>It never asks twice, waits for a quiet moment, never lands inside a conversation, and never appears together with the Patreon card.</li>
</ul>
</li>
<li>If you run an old version, the page now lists every release published after yours, not only the newest, with a direct download link for your platform. This works with no license key, which is the point: with no key, the app could never tell you an update existed.</li>
<li>Notes for your own version are stored inside the app, so the page works with no internet connection. The check for newer releases runs once a day at most.</li>
</ul>
<p><strong>Providers &amp; Models</strong></p>
<ul>
<li>Fixed an issue where a custom endpoint reselling a Claude subscription failed every message with a wall of red text about &quot;image_url&quot;. Those channels want Claude&#39;s own request format and were sent the other one, so your characters&#39; appearance images were rejected before the message reached the model.<ul>
<li><strong>Add custom endpoint</strong> now asks which format the endpoint speaks: <strong>OpenAI-compatible</strong>, correct in almost every case, or <strong>Anthropic Messages</strong>, for a service that relays Claude. The endpoint&#39;s card shows your choice, and endpoints you already added work exactly as before.</li>
<li><strong>Anthropic Messages</strong> also gives you Claude&#39;s native thinking on that endpoint.</li>
<li>Picking the wrong format now produces an error naming the setting to change, instead of the raw reply from the server.</li>
</ul>
</li>
<li>Fixed an issue where attaching a picture for a model that cannot see pictures failed with &quot;check your API key&quot;, sending you after a problem that did not exist. The app now says the model cannot see images and suggests what to do. A model that should handle pictures and still says this is missing its vision component.</li>
<li>Fixed an issue where a failed Backstage reply guessed at your API key instead of giving the real reason.</li>
<li>Fixed an issue where a thinking model with a small reply limit could spend the whole limit on thought and write nothing, leaving you an empty message with no explanation. The app now says what happened and which setting to raise.</li>
</ul>
<p><strong>Media</strong></p>
<ul>
<li>Fixed an issue where a clip a character filmed did not appear until you left the chat and returned. The clip was never lost; nothing told the open chat to show it.</li>
<li>Fixed an issue where the message arriving with a clip could carry stray pieces of the character&#39;s own instructions.</li>
<li>Fixed an issue where a reference picture larger than the service accepts was discarded, leaving the character looking like someone else. Large pictures are now reduced to fit. This also covers a photo you ask a character to bring to life.</li>
<li>The debug console now records the size of the picture that arrived next to the shape the app requested, so a service that quietly ignores the requested shape is visible instead of guesswork.</li>
<li>Grok Imagine 2.0 is now in every picture picker. It is xAI&#39;s newest image model, it ranks above their previous one, and it costs less per picture.</li>
<li>Grok Imagine 2.0 alone has a <strong>Quality</strong> setting, low or medium, and the picker only appears while that model is chosen. Low is a quick draft, about ten seconds. Medium is the normal setting and takes longer for finer detail. Resolution is a separate choice: it enlarges the picture rather than adding detail, so detail comes from Quality.</li>
<li>Picking a Grok model now also offers the extra picture shapes only Grok can make, including tall phone-screen and ultrawide ones. Choose one, switch to a model that cannot make it, and the app keeps your choice and tells you it will fall back rather than quietly changing it behind your back.</li>
<li>Asking Grok for an ultrawide 21:9 picture quietly gave you an ordinary widescreen one. Grok accepts 21:9 directly now, so you get the shape you asked for.</li>
</ul>
<p><strong>Patreon</strong></p>
<ul>
<li>Added <strong>Settings → Patreon</strong>. Now you can support the development of TLFI!</li>
<li>If you have no license key, a small card slides in over the chat a few seconds after an update and asks whether you enjoy the app. Tap it to open the Patreon page, swipe it away, or ignore it and it fades. Either way it does not come back until the next version. It shows only ONCE per update.<ul>
<li>It waits for a clear screen, so it never lands on top of a dialog, and stands aside on a launch that has something more important to tell you.</li>
</ul>
</li>
<li>The card and the note at the top of Settings appear only without a license key, and both stop the moment you enter one. A brand-new install is left alone on its first launch.</li>
<li>Permanent license keys obtained during Open Beta shut down Patreon pop-up too.</li>
</ul>]]></content>
  </entry>
  <entry>
    <title>Version 1.20.7</title>
    <link rel="alternate" type="text/html" href="https://loupfreres.com/changelog#v1.20.7"/>
    <id>https://loupfreres.com/changelog#v1.20.7</id>
    <updated>2026-08-08T00:00:00Z</updated>
    <content type="html"><![CDATA[<p><strong>New: Characters Can Film You a Video</strong></p>
<p>In a Live Chat, a character can now record a short clip with sound and send it to you.</p>
<ul>
<li>The character tells you that the camera is on, and that message arrives at once. The clip follows a moment later, as its own message. If you close the app during a recording, you still get the clip. The app continues the recording the next time you open it.</li>
<li>The character decides when to film, the same way they decide to send a selfie. Settings → Media Tools → Video Generation holds two separate switches. The first lets the character film in a reply to you. The second lets a clip arrive with no message from you first. The first switch does not turn on the second.</li>
<li>Both switches are off after the update, and a pacing guard keeps clips rare. On a turn that does not offer the camera, the character never learns that the camera exists. Thus they cannot promise you a clip that they cannot record.</li>
<li>You set the length, the resolution, and the shape. The page shows the cost of one clip in plain numbers before you change a setting.</li>
<li>Clips play in the chat, in a real player. Read the next section. A clip stays on the device that recorded it, unless you turn on the setting that sends clips to your other devices. A video is much larger than a photo.</li>
</ul>
<p><strong>New: A Real Video Player - redesigned</strong></p>
<p>Every video in the app now has a real player behind it. This includes a clip that a character filmed and a video that you attached.</p>
<ul>
<li>A clip appears in the shape that the camera recorded, with a gold play button over it. Tall clips stay tall, wide clips stay wide, and the app never crops a clip to fit a box it was not shot for. If the device permits it, the app uses a still frame from the clip as the picture. If not, it uses a plain dark card. The corner shows the length.</li>
<li>Press the play button to watch the clip in the chat. You see only the picture, with no bar, no timer, and no buttons over it. Press anywhere else on the clip to open it fullscreen and start it. If you press a clip that already plays, it also goes fullscreen and continues from the same point.</li>
<li>Fullscreen repeats the clip, so a short one does not blink past you. It also gives you a scrub bar, skip buttons, and a volume control, all in the app&#39;s own gold. The old player borrowed a plain red bar. Swipe up or down to leave, or press Escape.</li>
<li>On Windows, the controls appear when you move the mouse, then hide again after three seconds, together with the cursor. Escape closes the player, the space bar plays and pauses, the arrow keys skip and change the volume, and M mutes the sound.</li>
<li>On a phone, fullscreen now turns with your phone, so a wide clip fills the screen. When you close the player, the app returns to portrait. Before this update, one video left the whole app rotating loosely until you restarted it.</li>
<li>You can now save a clip out of the app, to the gallery on your phone or to any folder on your PC. This was not possible before.</li>
<li>The chat scrolls smoothly past videos. A clip that you scrolled past does not load again from the start when you come back to it. A chat that is full of clips no longer slows the app.</li>
<li>If a clip is no longer on the device, the app says so and offers to try again, instead of loading forever.</li>
<li>The app now recognizes attached <code>.mov</code>, <code>.webm</code>, <code>.mkv</code>, and <code>.m4v</code> files as videos. Before, they appeared as a broken image.</li>
</ul>
<p><strong>New: xAI (Grok) Support</strong></p>
<p>Added xAI as a provider under Settings → Providers &amp; Keys. One key covers all three uses.</p>
<ul>
<li>You can now select Grok models anywhere you pick a chat model, for roleplay like any other provider.</li>
<li>You can now select Grok Imagine in every picture picker, in both quality tiers. It takes reference images the same way as the existing camera, up to three, to keep a character in one consistent look.</li>
<li>Grok Imagine also drives the new video feature.</li>
</ul>
<p><strong>New: The Content Refiner</strong></p>
<p>When a model refuses a picture or a clip, the app no longer only tells you that the camera failed.</p>
<ul>
<li>Turn it on, and a separate AI asks the character what they wanted, rewrites the request so that it gets through, and tries again. You see only the finished picture. None of that exchange reaches the chat, and no one remembers it.</li>
<li>The refiner knows the difference between two failures, and it treats each one differently. The model can refuse a request for its wording, or it can reject the finished picture. New wording never repairs the second failure, thus the refiner changes the framing instead.</li>
<li>The refiner is off by default. It has its own model and a limit on the number of retries, because each attempt costs another generation.</li>
</ul>]]></content>
  </entry>
  <entry>
    <title>Version 1.20.6</title>
    <link rel="alternate" type="text/html" href="https://loupfreres.com/changelog#v1.20.6"/>
    <id>https://loupfreres.com/changelog#v1.20.6</id>
    <updated>2026-07-30T00:00:00Z</updated>
    <content type="html"><![CDATA[<p><strong>New Feature: The Molten-Iron Spelling Mark</strong></p>
<p>Added the molten-iron mark, also known in settings as &quot;ember scorch&quot;. Misspell a word and its letters heat up from the inside, char at the edges, and throw embers.</p>
<ul>
<li>Rebuilt from the ground up to be performant on any and every device. Enjoy!</li>
</ul>
<p><strong>The Constellation</strong></p>
<p><em>Star Size &amp; Zoom</em></p>
<ul>
<li>Fixed an issue where the sky drew itself far too small whenever you were zoomed out at all, rendering stars and names at a fraction of their intended size. On a phone that was nearly all the time, which is why the constellation opened as unreadable specks.<ul>
<li>Stars and names now come out at their proper size at every zoom, on both Windows and phones.</li>
<li>Fixed the same fault capping how far you could pinch in. Zooming stopped well short of comfortable; the full range is now available.</li>
<li>Fixed the same fault letting a tap on a name in a star&#39;s relations fling you closer than pinching ever could, because that jump was not bound by the same broken limit.</li>
<li>Fixed the same fault freezing star sizes on the way back out, turning a zoomed-out constellation into a clump of same-sized blobs.</li>
</ul>
</li>
<li>Fixed an issue where every star drew at the minimum size, leaving the map with no shape to it. Well-tied characters and places now outshine less interconnected stars.</li>
<li>Constellation names, notable names, and every-star names now appear based on how far you have zoomed into <em>your</em> sky rather than a fixed number, so a thirty-star archive and a three-hundred-star one both name the right amount at the same point in the pinch.</li>
</ul>
<p><em>Mobile</em></p>
<ul>
<li>Redesigned the star map for phones. It was a desktop view squeezed onto a small screen and is now built for a thumb.</li>
<li>The sky no longer opens as a thumbnail of the entire archive. It opens on your protagonist, close enough to read and tap, and pinching out from there reaches the whole map.<ul>
<li>The whole map is now the widest view, so you can no longer shrink past it into a clump.</li>
</ul>
</li>
<li>The pinch range is now a couple of gestures wide instead of forty, so getting from an overview to a close read no longer means fighting the map.</li>
<li>Tapping a name in a star&#39;s relations no longer force-zooms the sky. If you can already read the stars the hop glides over; if you are too far out it rises only as far as it needs to.</li>
<li>Replaced the small star card with a proper sheet.<ul>
<li>It opens on who the star is and the start of its chronicle. Dragging it up reveals everything the desktop panel knows: full description, conditions, aliases, tags, and every tie with its story.</li>
<li>A star&#39;s strongest ties are now large tappable buttons that carry you there.</li>
<li>Swipe it down, tap the X, or tap empty sky to put it away.</li>
</ul>
</li>
<li>Buttons, chips, and the legend are now sized for fingers instead of a mouse cursor.</li>
<li>The page header now steps aside while you are in the sky. One slim bar holding close, search, and filters sits under the status bar, in place of a quarter of the screen of chrome.</li>
<li>RECENTER now returns to the opening view and puts your selection down.</li>
<li>Fixed an issue where selecting a star and zooming out turned the rest of the sky nearly black. The highlight now softens as you pull back, so the map stays legible.</li>
<li>Star glow now eases off at the overview, so a large archive no longer washes out into one bright smear.</li>
</ul>
<p><strong>The Archive</strong></p>
<p><em>Relationship Recall</em></p>
<ul>
<li>Fixed some issues where node-weight math could conclude incorrectly on Chronicler runs. The app now correctly counts how many edges connect to a node, improving pathfinding across datasets. </li>
<li>You can now control how hard the characters prefer to take convoluted paths of the knowledge tree instead of simple ones, surfacing more obscure lore that could otherwise fail to make the cut. You will find the setting inside Knowledge Graph → Recall &amp; Retrieval. Zero returns to the shortest link, whatever that is.</li>
</ul>
<p><em>Fill In</em></p>
<ul>
<li>Fixed an issue where <strong>FILL IN</strong> never worked again after being canceled. <ul>
<li>Canceling now hands the archive back immediately, so you can start another search the moment you change your mind.</li>
<li>Canceling now also stops the search where it stands instead of quietly finishing it. A canceled search that was mid-retry used to keep going for minutes.</li>
<li>The warning now clears by itself when the pass it refers to really does finish, whoever started it.</li>
</ul>
</li>
<li>Fixed an issue where an abandoned search could hijack a new one&#39;s progress text, or take away its Cancel button.</li>
<li>A search that fails outright now says so and gives you the entry back, instead of leaving Save grayed out for as long as the entry stays open.</li>
</ul>
<p><strong>Chat</strong></p>
<ul>
<li>Added right-click deletion for Canto title cards on PC. Press-and-hold was the only way, which is not how anything else on a desktop is deleted. Phones keep the long press.</li>
</ul>]]></content>
  </entry>
  <entry>
    <title>Version 1.20.5</title>
    <link rel="alternate" type="text/html" href="https://loupfreres.com/changelog#v1.20.5"/>
    <id>https://loupfreres.com/changelog#v1.20.5</id>
    <updated>2026-07-28T00:00:00Z</updated>
    <content type="html"><![CDATA[<p><strong>Personas</strong></p>
<ul>
<li>Fixed an issue where <strong>Roleplay As…</strong> did nothing on phones. Picking a persona for a timeline closed the picker and changed nothing at all: no mask on the tile, and reopening the picker showed you were still your usual self.<ul>
<li>Your choice now takes effect the moment you make it. Windows was never affected.</li>
</ul>
</li>
<li>Fixed an issue where the persona-switch warning named the wrong person. Playing a hundred messages as one persona, changing who you are in Settings, then handing that story to someone else reported that you had been playing it as your <em>current</em> persona — a name that had never once appeared in it.<ul>
<li>Timelines now remember who actually wrote them, and the warning names them correctly.</li>
<li>Stories written before you could have more than one persona are credited to the Persona in the first User slot. It happens only once after update.</li>
<li>Authorship travels between your devices with the timeline.</li>
</ul>
</li>
<li>The persona-switch warning no longer appears when nothing would change. Pinning the persona you are already playing as is not a change of name.</li>
</ul>
<p><strong>Timeline Menu (Mobile)</strong></p>
<ul>
<li>Fixed an issue where <strong>Export History to .json</strong> reported nothing on completion, and nothing on failure, so a lost export looked exactly like a saved one.</li>
<li>Fixed an issue where <strong>Branch Timeline</strong> never reported the name it branched into.</li>
<li>Fixed an issue where <strong>Share Kumu Graph</strong> could decline to open the share sheet with no indication at all.</li>
</ul>]]></content>
  </entry>
  <entry>
    <title>Version 1.20.4</title>
    <link rel="alternate" type="text/html" href="https://loupfreres.com/changelog#v1.20.4"/>
    <id>https://loupfreres.com/changelog#v1.20.4</id>
    <updated>2026-07-28T00:00:00Z</updated>
    <content type="html"><![CDATA[<ul>
<li>Removed <strong>Re-index All Lorebooks</strong> from Settings → Knowledge Graph. It was left over from a very early version of the app and should no longer be used. To rebuild one character&#39;s graph, open them in the creator and save; that is the safer, deliberate way to do it.</li>
<li>Removed <strong>Wipe Timeline Graph Memory</strong> from the same page. It was a leftover from 1.1.0 as well, predating the Archival Scholar and any sort of data management it brought into TLFI. It should not be used either.</li>
<li>Fixed the app closing itself when indexing finishes on Windows. Building a character&#39;s world graph tried to raise a notification at the end, and Windows has no notifications to raise.<ul>
<li>The same fault could take the app down after deleting a character.</li>
</ul>
</li>
<li>Fixed being told &quot;the app closed unexpectedly&quot; when it hadn&#39;t. Some errors are survivable, and the app kept running through them — but the next launch still opened with a crash report. It now waits to see whether the app actually goes down before claiming it did.</li>
</ul>]]></content>
  </entry>
  <entry>
    <title>Version 1.20.3</title>
    <link rel="alternate" type="text/html" href="https://loupfreres.com/changelog#v1.20.3"/>
    <id>https://loupfreres.com/changelog#v1.20.3</id>
    <updated>2026-07-28T00:00:00Z</updated>
    <content type="html"><![CDATA[<p><strong>New Feature: Be Someone Else</strong></p>
<p>Added support for multiple user personas. You are no longer one person.</p>
<ul>
<li>Added <strong>Add User Profile</strong> to Settings → User Profile, with arrows at the top that page through your personas by name.<ul>
<li>Each persona carries its own name, picture, appearance, personality, and lore, exactly as the single profile did.</li>
</ul>
</li>
<li>The persona showing on that page is who you are everywhere by default. Switch, and the character speaking to you uses the new name that same turn: in chat, in the Narrator&#39;s prose, in the Overseer&#39;s chapters, in alarms, and in texts you get while away.</li>
<li>Added <strong>Roleplay As…</strong> to a timeline&#39;s long-press menu (right-click on PC), which hands a single story to a persona. The rest of your chats carry on as your usual self.<ul>
<li>This also works on the Live Chat, which never had a menu of its own before.</li>
</ul>
</li>
<li>A timeline pinned to a persona now says so on its tile: a small mask and the name of who you are in it, over a slow shimmer.<ul>
<li>Very long names wrap rather than disappear, and the full name is always readable in the picker.</li>
</ul>
</li>
<li>A timeline&#39;s Backstage follows the story it belongs to, so the two never call you different things.</li>
<li>Changing persona in a story already underway now explains what it means before it happens: everything already written keeps the old name, and the archive may come to treat the two as different people. It then lets you proceed.</li>
<li>Deleting a persona now falls any timeline pinned to it back to your global persona, and reports how many are affected first.</li>
<li>Personas sync between your own devices, pictures included.</li>
</ul>
<p><strong>New Feature: The Entity Indexer</strong></p>
<p>Added <strong>Fill in</strong> to hand-written archive entries. Writing an entry by hand no longer means writing all of it by hand.</p>
<ul>
<li>Type only a name — <em>Cheesecake</em>, <em>The Battle of Blackwater Bay</em>, <em>Captain Vanya</em> — and press <strong>Fill in</strong>. The archive reads your chronicle for everything it can prove about that one thing, then fills out the entry.</li>
<li>The hunt searches the whole timeline, not the last few messages. The first mention is usually the one that mattered, and it is often hundreds of messages back.<ul>
<li>Passages that name the entity are read first, then passages that speak of it without naming it.</li>
</ul>
</li>
<li>Results include more than a description: every character, place, faction, and object found to be tied to your entry, and the ties themselves — <em>Aurelius → baked → Cheesecake</em>.</li>
<li>Nothing is written until you say so. Findings arrive as a list you can read, uncheck, and edit.<ul>
<li>Entries the archive already holds are marked as such and left alone.</li>
<li>Anything that cannot be stored reports why instead of vanishing.</li>
</ul>
</li>
<li>Your own words are never overwritten. A description you had already typed stays at the top, with the findings below it.</li>
<li>Added <strong>Undo fill in</strong>, which returns the whole form to its previous state.</li>
<li>Added <strong><code>/index &lt;name&gt;</code></strong>, which runs the same hunt from chat. <code>/index Captain Vanya 120</code> reads more of the timeline, and a bare <code>/index</code> opens a small form if you would rather not type arguments. Findings land in the same editor for review either way.</li>
<li>Added Settings → Knowledge Graph → <strong>The Entity Indexer</strong>, with its own model, its own prompt, and a slider for how many messages one hunt may read (40 by default).</li>
<li>Changed new entries to default to <strong>This timeline only</strong> instead of World lore. Most entries are written from something that happened in the chat you are looking at, and filing those as world lore quietly pushed one timeline&#39;s story into every other timeline of that character. It is also the safer direction: a timeline entry only shadows the world&#39;s version of the same name, and deleting it brings the original back. World lore remains one tap away.</li>
<li>An entity the archive already holds now says <strong>where</strong> it holds it — &quot;already recorded in world lore&quot; or &quot;in this timeline&quot;. A character can exist in both at once, with the timeline&#39;s version taking precedence, and the old wording made that look like a mistake.</li>
</ul>
<p><strong>New Feature: The Page Notices Your Spelling</strong></p>
<p>Added spell checking across the app. Misspelled words are now marked as you write. But they are marked pretty.</p>
<ul>
<li>Marking covers the message box, the fullscreen editor, lorebooks, character descriptions, and the prompt fields throughout Settings.<ul>
<li>Windows uses the dictionaries your system already has, Android uses your phone&#39;s. Neither sends a word anywhere. This happens on your device, like everything else here.</li>
</ul>
</li>
<li>The mark is not a red squiggle. A word processor&#39;s wavy line has no business in a manuscript, so the mark is a stylized, hard-angled stroke.<ul>
<li>More marks are being designed and are not in this build. They are functional but extremely unoptimized and cause Out-of-Memory errors even on high-end mobile devices. I will not ship them until they are performant, but the marking options include animated spilled ink and molten iron with embers.</li>
</ul>
</li>
<li>Right-click a marked word (long-press on your phone) for corrections, <strong>Add to dictionary</strong>, and <strong>Ignore once</strong>. Cut, copy, and paste are all still there.<ul>
<li>On Windows, a word you add is learned by the whole system, not just this app.</li>
</ul>
</li>
<li>Placeholders are never marked: <code>{{personaName}}</code>, <code>/commands</code>, <code>[brackets]</code>, <code>=== headers ===</code>, links, file paths, and code. Prompt fields do not turn into a field of complaints.<ul>
<li>Words the app itself uses — <em>lorebook</em>, <em>roleplay</em>, <em>worldbuilding</em> — are known already.</li>
</ul>
</li>
<li>A dictionary of 107,000 words ships with the app and takes over on any device with no spell checker of its own. It never goes online.</li>
<li>All of it can be turned off with one switch, and the whole thing stays quiet when your system&#39;s &quot;reduce animations&quot; setting is on.</li>
</ul>
<p><strong>Knowledge Graph</strong></p>
<ul>
<li>Added a <strong>Chronicler interval</strong> slider to Settings → Knowledge Graph, setting how often memory is written (1–100 messages, still 10 by default).<ul>
<li>The interval is also how much it reads: at 5 it wakes every 5 messages and takes in exactly those 5. A lower number means finer-grained memories more often, at a higher cost.</li>
</ul>
</li>
<li>Added a slider for the deep cleanup pass, the expensive one that merges duplicates, finds missing links, and tidies the whole graph (1–1000 messages, still 100 by default), with a box for typing an exact number.</li>
<li>Both sliders now carry a warning worth heeding: a very high Chronicler interval paired with a very low cleanup interval is the worst of both worlds — rare, coarse memories and a constantly running expensive pass.</li>
<li>Fixed an issue where the deep cleanup pass was often skipped entirely. It rode along with the Chronicler, so a rate limit, a timeout, or a refused response dropped the cleanup silently, and it would not try again for another hundred messages. The two now run independently.</li>
<li>Fixed an issue where the Chronicler read a ragged window, re-reading the tail of the previous batch and stretching past its own interval. Each pass now covers its own block, once.</li>
<li><code>/reindex</code> now rebuilds in chunks the size of your Chronicler interval, and <code>/nodeorganize</code> uses it for the stretch of chat it revisits.</li>
<li>Fixed an issue on phones where writing an archive entry by hand was impossible: the moment you tapped a field the entire form went blank behind the keyboard, so you were typing a name you could not see into a page that showed nothing at all. Every editor in the Archival Scholar was affected — entries, relations, communities, and the name pickers.</li>
</ul>
<p><strong>Miscellaneous</strong></p>
<ul>
<li>Fixed an issue where a message beginning with a word that merely <em>starts</em> with a command was swallowed. Opening a line with &quot;/friendship is magic&quot; or &quot;/indexing my feelings&quot; cleared your composer and sent nothing at all — no error, no message. Commands are now matched as whole words.</li>
</ul>]]></content>
  </entry>
  <entry>
    <title>Version 1.20.2</title>
    <link rel="alternate" type="text/html" href="https://loupfreres.com/changelog#v1.20.2"/>
    <id>https://loupfreres.com/changelog#v1.20.2</id>
    <updated>2026-07-27T00:00:00Z</updated>
    <content type="html"><![CDATA[<p><strong>New Feature: Write Your Own Memories</strong></p>
<ul>
<li>The Archival Scholar — the knowledge graph browser you reach by right-clicking a timeline — is no longer read-only. You can now put things into a character&#39;s memory by hand.</li>
<li>Press <strong>Inscribe a new entry</strong> at the top of the list, to record anything you want the character to know: a person, a place, an heirloom, an event that happened offscreen.<ul>
<li>Give it a name, a description and a classification, and it stands alongside everything the engine found for itself — including as a star in the Constellation.</li>
<li>You choose who remembers it. <strong>Global lore</strong> is known in every timeline of that character. <strong>This timeline only</strong> exists in one chat and quietly overrides the world&#39;s version of the same thing. World lore is the default.</li>
</ul>
</li>
</ul>
<p><strong>Knowledge Graph</strong></p>
<p><em>Relations</em></p>
<ul>
<li>Added <strong>Add relation</strong> to every entry&#39;s dossier, linking it to another entry — <em>Vanya → rules over → the Docklands</em> — with a note explaining what the tie signifies. The note is the line the story reads when the relation comes up, not decoration.</li>
<li>Direction is respected, so <em>she rules the docks</em> and <em>the docks resent her</em> are two separate truths rather than one blurry link.</li>
<li>Added <strong>Save &amp; reverse</strong>, which offers to write the opposite relation immediately after the first, with its own description.</li>
<li>Recording the same tie twic tells you it already exists and folds your note into it, instead of quietly keeping two copies.</li>
<li>Added a visible pencil to every relation for editing. They were interactable prior via long-press, it just wasn&#39;t obvious you can do that.</li>
<li>Deleting a relation, or an entry, is now possible.</li>
</ul>
<p><em>Communities</em></p>
<ul>
<li>You can now found a community yourself: name it, describe it, and put whichever entries you like in it.</li>
<li>Added a choice of who owns an entry&#39;s placement.<ul>
<li><strong>Committed to the mathematics</strong> lets the indexer re-sort the entry into whichever group its relations really belong to.</li>
<li><strong>Pin the placement</strong> keeps it exactly where you put it, no matter how its ties change.</li>
<li>Pinning an entry that belongs to no community is a valid choice — it stops the indexer from ever filing it anywhere.</li>
</ul>
</li>
<li><strong>Pin all members</strong> lets you freeze a whole grouping at once.</li>
</ul>
<p><em>Reindexing</em></p>
<ul>
<li><em>Index Lore as Graph</em> does not destroy hand-written entries and founded communities when it rebuilds a character&#39;s world knowledge.<ul>
<li>It counts what&#39;s at stake and asks: <strong>Preserve my entries</strong>, or <strong>Wipe it all</strong>. It only asks when you have something to lose.</li>
</ul>
</li>
</ul>
<p><em>Sync</em></p>
<ul>
<li>Fixed an issue where an entry or relation deleted while your other device was off would return on the next sync.</li>
<li>Fixed an issue where a hand-placed community could be quietly un-pinned by the other device.</li>
</ul>
<p><strong>Chat</strong></p>
<p><em>Editing Messages</em></p>
<ul>
<li>You can now edit what a character said. Long-press (or right-click) any message from a character or the Narrator and choose <strong>Edit</strong>.<ul>
<li>Nothing after it is touched and nothing is regenerated. The message is corrected and the scene carries on.</li>
<li><strong>Save</strong> is instant — the line reads correctly and their memory of it is left alone. Use it for minor typos.</li>
<li><strong>Save &amp; Revectorize</strong> also updates what they actually <em>remember</em> of that line. Use it when you changed the meaning rather than the spelling.</li>
</ul>
</li>
<li>Fixed an issue where an edit made on one device could be undone by the older copy on the other device at the next sync.</li>
</ul>
<p><em>Text Selection (PC)</em></p>
<ul>
<li>You can now highlight text on PC.<ul>
<li>The highlight is drawn in your theme&#39;s own colors, worked out from your accent and your chat background, so it reads on pale parchment and dark marble alike. It shimmers slowly and throws off small embers that drift up off the words and burn out.</li>
<li><strong>Settings → Interface → Animated text selection</strong> turns the motion off and leaves a plain tint behind. The slider under it sets how many embers you get.</li>
<li>Selecting and copying works the same either way.</li>
</ul>
</li>
</ul>
<p><em>Attachments (PC)</em></p>
<ul>
<li>You can now paste an image straight into the chat box. Copy a screenshot, an image from a browser, or a file in Explorer, then press Ctrl+V in the message box and it arrives as an attachment.</li>
<li>Pasting ordinary text still just pastes text.</li>
</ul>
<p><strong>Character Creation</strong></p>
<p><em>Lazy Character Creator</em></p>
<ul>
<li>Revamped. It no longer fires straight into a finished character with no way back short of wiping every field.</li>
<li>Added a prompt box to say what you&#39;re after — a role, a world, a tone, something you specifically don&#39;t want. You can skip it entirely and let your reference images do the talking.</li>
<li>It now draws <strong>four concepts</strong> first, each with a name, a one-line hook and a short paragraph on who they are. Pick one and it&#39;s built out into the full character exactly as before.<ul>
<li>Press a concept&#39;s <strong>×</strong> to redraw that one alone. The other three stay put.</li>
<li>Press <strong>Generate 4 more</strong> to replace the lot.</li>
<li>Everything you turn down is remembered for the rest of the session and handed back as a &quot;not this&quot; list, so it stops circling the same idea.</li>
</ul>
</li>
<li>Characters now arrive with a name.</li>
<li>Failures now tell you the actual reason. &quot;Generation failed&quot; used to be the answer whether your key had expired, the model had refused, or you&#39;d been asked to slow down.</li>
<li>Fixed an issue where a failure during concept selection closed everything and threw away what you&#39;d typed.</li>
<li><strong>Settings → Services → Lazy Character Creator</strong> now holds two prompts: the one that drafts the four concepts, and the one that expands your pick into the full character. They share the same model and settings as before.<ul>
<li>A prompt you&#39;ve customized yourself is left untouched. If you have one, add <code>&quot;name&quot;</code> to its output list to get named characters.</li>
</ul>
</li>
</ul>
<p><em>Character Editor</em></p>
<ul>
<li>Fixed an issue where pressing <strong>Save</strong> in the fullscreen lore editor saved nothing at all, losing everything you&#39;d written if you closed the card without also pressing <strong>Save Changes</strong>.<ul>
<li>Saving in the fullscreen editor, or in the Life Profile editor, now writes the whole character card immediately, confirmed by a brief &quot;Character saved.&quot; The card stays open so you can keep working.</li>
</ul>
</li>
<li>Closing a card with unsaved edits now asks first — Keep Editing, Discard, or Save — instead of silently discarding them.</li>
<li>Fixed an issue where choosing <strong>Edit Character</strong> on a different character while a card was open changed only the title, leaving the first character&#39;s form underneath — pressing Save could write the first character&#39;s entire card over the second one.<ul>
<li>Everything that takes you elsewhere — opening a timeline or Backstage, tapping another character, creating a timeline or group chat, tapping a notification — now properly closes the card first, with the same Keep Editing / Discard / Save prompt.</li>
</ul>
</li>
<li>Fixed an issue where creating a brand-new character and saving inside the fullscreen editor failed to create them, so <em>Index Lore as Graph</em> would answer &quot;Save character first!&quot;</li>
<li>Pressing <strong>Index Lore as Graph</strong> with unsaved lore now saves the card first, so what gets indexed is what you actually wrote.</li>
<li>Fixed an issue where importing or creating a character with a chat open replaced your chat&#39;s name at the top with the new card&#39;s. The editor now brings its own header.</li>
<li>Fixed an issue where the gold frame in the character rail vanished while editing an unsaved character. It now rests on the <strong>+</strong> slot.</li>
<li>Fixed an issue where a freshly created group chat deselected itself the moment it was made.</li>
</ul>
<p><strong>Sync &amp; Storage</strong></p>
<p><em>Timelines</em></p>
<ul>
<li>Fixed an issue where a deleted timeline returned on every single sync, forever.<ul>
<li>A deletion is now remembered properly on both devices, travels to a device that was switched off when it happened, and can&#39;t be undone by an older copy of the timeline on the other end.</li>
<li>The timeline&#39;s Backstage discussion now goes with it instead of lingering as an invisible leftover.</li>
</ul>
</li>
<li>Fixed an issue where <strong>Storage &amp; Cleanup</strong> never actually sent a cleanup to your other device, despite claiming to, so everything it removed came back on the next connection.</li>
<li>Routine syncing is now considerably quicker. Every reconnect used to redo a full comparison from scratch because of this bug.</li>
</ul>
<p><em>Portraits</em></p>
<ul>
<li>Fixed an issue where editing a character on one paired device could wipe that character&#39;s picture on <em>both</em>. The edit carried a note saying &quot;the photo is over there,&quot; which is meaningless once it arrives elsewhere.<ul>
<li>Character portraits, persona portraits and appearance references now travel <em>with</em> the change.</li>
</ul>
</li>
<li>Portraits already lost are restored on the next launch. The image files were never deleted, only misfiled, so the app finds them and reconnects them by itself — and the recovered picture syncs back to your other device.</li>
<li>A character whose picture truly can&#39;t be found now falls back to their initial letter instead of an empty circle.</li>
<li>Fixed an issue where appearance reference images went missing one by one across syncs.</li>
<li>Fixed an issue where the cleanup tool offered to delete a picture belonging to a character you still have.</li>
<li>Fixed an issue where removing a portrait in the character editor didn&#39;t remove it.</li>
</ul>
<p><strong>Miscellaneous</strong></p>
<ul>
<li>The app now tells you how to get updates. Without a key it used to stay quiet forever while new versions came and went.<ul>
<li>If you don&#39;t have a key, a note on startup points you at our Discord, where anyone who asks during the Open Beta gets one free. If you do, it takes you straight to the box to paste it in. Enter one and the note is gone for good.</li>
<li>The same invitation now sits at the top of <strong>Settings → License &amp; Updates</strong>, for when your key stops working or you&#39;re setting up a second device.</li>
</ul>
</li>
</ul>]]></content>
  </entry>
  <entry>
    <title>Version 1.20.1</title>
    <link rel="alternate" type="text/html" href="https://loupfreres.com/changelog#v1.20.1"/>
    <id>https://loupfreres.com/changelog#v1.20.1</id>
    <updated>2026-07-24T00:00:00Z</updated>
    <content type="html"><![CDATA[<ul>
<li><strong>HOTFIX: no more false &quot;the app closed unexpectedly&quot; reports after an update.</strong> Installing an update, swiping the app away, or the system reclaiming memory could make the next launch incorrectly offer to send a crash report. The app now tells a genuine crash apart from these ordinary shutdowns, so you&#39;ll only be asked to report when something actually went wrong. (Android.)</li>
</ul>]]></content>
  </entry>
  <entry>
    <title>Version 1.20.0</title>
    <link rel="alternate" type="text/html" href="https://loupfreres.com/changelog#v1.20.0"/>
    <id>https://loupfreres.com/changelog#v1.20.0</id>
    <updated>2026-07-24T00:00:00Z</updated>
    <content type="html"><![CDATA[<p>Hey! So you might be thinking, &quot;1.20.0&quot;? Why&#39;d we skip 1.18 and 1.19? It&#39;s my fault. One of my users sideloaded an experimental version of the android app I made specifically for them, built on an armx64-v8 architecture rather than the universal android apk. This caused the internal app version to, for whatever reason, sign itself with a +2000 byte offset, resulting in 1.19.4. Android would throw a &quot;could not update&quot; error due to attempted downgrade. To let them preserve appdata, I&#39;ve chosen to bump the version to a clean 1.20. This issue is now fixed and will not occur again. On top of it, we have more features requested by the lovely people coming from SillyTavern cooked and ready!</p>
<ul>
<li><strong>You can now use your own font!</strong> Prefer something plainer or easier to read than the manuscript typeface? Under <strong>Settings → Interface → Font</strong> you can change the font for the whole app. Chats, menus, headers, everything, in every theme. The easy way is <strong>Browse Google Fonts</strong>: a built-in browser with the whole catalog — search, filter by category, feeling, type or language, sort by popular/trending/newest, and see every font previewed in its own style (with your own sample text). Tap one and it&#39;s applied instantly, no files to hunt down.</li>
</ul>
<p>Prefer your own fonts? <strong>Install file</strong> takes a .ttf or .otf, or even the <strong>.zip</strong> you downloaded, which the app unpacks for you, so you never have to fiddle with unzipping on your phone before installing. One tap on <strong>Reset</strong> puts the original font back. Whatever you pick is also <strong>baked into any custom theme you share</strong>, so it travels to your friends with the theme in one go.</p>
<ul>
<li><strong>Get notified the moment a reply lands.</strong> If your provider is slow and you lock or leave the app right after sending, you no longer have to keep checking. A notification (with sound and vibration) now lets you know as soon as the bot replies. It stays quiet while the app is foregrounded so you don&#39;t get pinged to oblivion during regular roleplay, and you can turn it off under <strong>Settings → Interface → &quot;Notify me when a reply arrives.&quot;</strong> On by default. (Android.)</li>
</ul>]]></content>
  </entry>
  <entry>
    <title>Version 1.17.9</title>
    <link rel="alternate" type="text/html" href="https://loupfreres.com/changelog#v1.17.9"/>
    <id>https://loupfreres.com/changelog#v1.17.9</id>
    <updated>2026-07-24T00:00:00Z</updated>
    <content type="html"><![CDATA[<ul>
<li><p><strong>Fixed: a streaming reply now no longer fails when processing malformed bytes.</strong></p>
</li>
<li><p><strong>Fixed: the Game Watcher settings no longer close the app on PCs without a working microphone.</strong> Opening the Game Watcher settings could instantly close the app on machines where Windows had no usable mic.</p>
</li>
</ul>]]></content>
  </entry>
  <entry>
    <title>Version 1.17.8</title>
    <link rel="alternate" type="text/html" href="https://loupfreres.com/changelog#v1.17.8"/>
    <id>https://loupfreres.com/changelog#v1.17.8</id>
    <updated>2026-07-24T00:00:00Z</updated>
    <content type="html"><![CDATA[<ul>
<li><p><strong>New: the app now allows you to report crashes.</strong> If the app ever closes unexpectedly, the next time you open it you&#39;ll be asked whether to send a short crash report. It bundles the diagnostic logs and, where the system can capture one: a crash dump, a detailed snapshot of what the app was doing the instant it closed. This works on Windows, Linux, and Android. Nothing is ever sent without your permission, and your API keys are stripped out automatically. It&#39;s the biggest help for the kind of sudden close that leaves no other trace, on a machine that isn&#39;t mine.</p>
</li>
<li><p><strong>Settings pages are now self-recovering from crashes.</strong> If for whatever reason, entering a settings page causes your software to crash, the &quot;recent settings page&quot; key is wiped from prefs to prevent reopening the crashing page the second you open settings again.</p>
</li>
</ul>]]></content>
  </entry>
  <entry>
    <title>Version 1.17.7</title>
    <link rel="alternate" type="text/html" href="https://loupfreres.com/changelog#v1.17.7"/>
    <id>https://loupfreres.com/changelog#v1.17.7</id>
    <updated>2026-07-23T00:00:00Z</updated>
    <content type="html"><![CDATA[<ul>
<li><p><strong>New: change every model from one place — and set them all at once.</strong> <strong>Settings → Providers &amp; Keys</strong> now has an <strong>&quot;All models — quick edit&quot;</strong> list with every AI model field in a single spot, so you can retune the whole app without page-hopping. Pick one model and tap <strong>Apply to all</strong> to set it everywhere at once — text models and image-generation models stay separate, so your text choice never touches your image tools. Changed your mind? <strong>&quot;Clear all slot overrides&quot;</strong> resets everything back to defaults.</p>
</li>
<li><p><strong>Fixed: the character-creation tools now correctly run on any provider.</strong> The card translator, the lazy character creator, Auto-Generate Tags, Generate Baseline, Transcribe Appearance, and Overseer story-building should no longer experience &quot;API key not set&quot; errors.</p>
</li>
<li><p><strong>New: color the dialogue in your chats.</strong> Spoken lines -- anything inside &quot;double quotes&quot; -- can now show in their own color so speech stands out from the narration. Turn it on under <strong>Settings → Interface → &quot;Color quoted dialogue.&quot;</strong> Off by default; it picks a color that suits your theme automatically, or choose your own. Works in every chat, on phone and desktop.</p>
</li>
<li><p><strong>The app now stays upright on phones.</strong> A stray rotation can no longer stretch or scramble the mobile layout -- it stays in portrait. (Desktop windows still resize freely.) I have decided to (at least temporarily) restrict the app to a vertical layout because it has no landscape layout to fall back to. Should there be demand for landscape mode, I will develop a proper such.</p>
</li>
<li><p><strong>Easier to change pictures in Settings.</strong> Tapping your profile photo or a custom theme&#39;s background to swap it is more reliable now, and you can tap a theme&#39;s preview directly to replace it.</p>
</li>
<li><p><strong>Fixed: big memes no longer break the meme tool.</strong> Oversized meme candidates (usually chunky GIFs) are now shrunk or skipped instead of failing a character&#39;s turn, so the meme keeps sending no matter how hefty the pictures are.</p>
</li>
<li><p><strong>Fixed: Linux AppImages now start.</strong> Fixed an issue that made Linux AppImages misread their own directory and quit on launch. (Windows and Android were never affected.)</p>
</li>
</ul>]]></content>
  </entry>
  <entry>
    <title>Version 1.17.6</title>
    <link rel="alternate" type="text/html" href="https://loupfreres.com/changelog#v1.17.6"/>
    <id>https://loupfreres.com/changelog#v1.17.6</id>
    <updated>2026-07-22T00:00:00Z</updated>
    <content type="html"><![CDATA[<p>Minor fixes.</p>]]></content>
  </entry>
  <entry>
    <title>Version 1.17.5</title>
    <link rel="alternate" type="text/html" href="https://loupfreres.com/changelog#v1.17.5"/>
    <id>https://loupfreres.com/changelog#v1.17.5</id>
    <updated>2026-07-22T00:00:00Z</updated>
    <content type="html"><![CDATA[<ul>
<li><p><strong>You can now set your own request timeout — and slow replies aren&#39;t thrown away anymore.</strong> If your provider is having a slow day, the app used to give up after a fixed few minutes and show &quot;request timed out&quot; — while the provider quietly finished the reply and billed you for it. There&#39;s a new <strong>Connection &amp; Timeout</strong> panel under <strong>Settings → Providers &amp; Keys</strong> where you set how long to wait. It also <strong>streams</strong> the reply by default: the app keeps the connection alive as long as tokens are still coming, so a slow-but-working model is no longer abandoned, and a genuinely stuck one is dropped quickly (you set that &quot;stall&quot; cutoff too). When a reply does get cut off partway, whatever already arrived is now kept and shown instead of vanishing.</p>
</li>
<li><p><strong>Big images no longer make a character&#39;s reply fail with a &quot;413&quot; error.</strong> If a chat had image references or attachments, the character&#39;s reply could get rejected as &quot;too large&quot; even though the Narrator wrote its scene fine on the very same model — because only the character&#39;s turn carries the pictures. The app now shrinks large images once (and remembers the result, so it doesn&#39;t re-do the work every message) before sending them, which keeps requests under the limit without draining your battery. If a request is <em>still</em> too large, it automatically re-sends that turn without the images so you at least get the reply, and tells you it did. Prefer full-resolution images (e.g. on a big multimodal model that eats huge attachments)? Flip on <strong>&quot;Don&#39;t downscale images&quot;</strong> in the same panel.</p>
</li>
<li><p><strong>Optional: see how many tokens each chat actually used.</strong> A small readout above the message box can show the exact <strong>prompt, output and total token counts your provider reported</strong> for the last reply — the real numbers to check against your provider&#39;s dashboard if you suspect you&#39;re being overcharged. It&#39;s <strong>off by default</strong>; turn it on under <strong>Settings → Interface → &quot;Show token count above the message box.&quot;</strong> Works across Gemini, OpenAI-compatible providers, Anthropic and Claude Code. (The old Gemini token counts in the debug log were also wrong — they mislabeled the model&#39;s &quot;thinking&quot; tokens — and are now counted correctly.)</p>
</li>
<li><p><strong>Model names in the picker are readable now — even the long ones from OpenRouter and other proxies.</strong> Choosing a model routed through a third-party provider used to show something like <code>OpenRouter · anthropic/claude-opus-4.6</code>, and the part you actually care about — the model itself — got cut off the end of the box. The dropdown now shows the provider <strong>and</strong> a clean model name (<code>OpenRouter · Claude Opus 4.6</code>), so you can always see both which service you&#39;re going through and exactly which model you&#39;re on, no matter how long the raw name is. The provider is kept on purpose — the same model run through a proxy can behave differently from going direct — while redundant wording is trimmed (you&#39;ll see <code>Google Gemini · 2.5 Pro</code>, not <code>Google Gemini · Gemini 2.5 Pro</code>).</p>
</li>
<li><p><strong>Fixed: a friend request a character offers while you Continue their reply now actually arrives.</strong> If a character decided to add you <em>inside</em> a reply you extended with <strong>Continue</strong>, the request was silently dropped and a bit of raw tag text (<code>&lt;send_friend_request/&gt;</code>) was left stranded at the end of the message instead. Continuing a reply now runs the same tidy-up the normal path does: the friend request goes through, and stray tags never leak into the bubble. It&#39;s also hardened against the request getting chopped off mid-word by a truncated reply — the leftover fragment is cleaned away, and if you Continue, the finished request still fires.</p>
</li>
<li><p><strong>Fixed: the Constellation&#39;s nebula was invisible in Light Academia.</strong> The star-map&#39;s glowing gas clouds showed beautifully in Dark Academia and custom themes but flattened into a bare green field in Light Academia — you&#39;d see stars, but none of the nebula behind them. The brightness guard that keeps the backdrop from washing out was measuring against pure black, and Light Academia&#39;s deep-forest background is lighter than that, so it wound up erasing the entire cloud layer. It now measures against your actual theme background, so the nebula reads a clear step brighter than whatever ground your theme paints. Light Academia gets its sky back; Dark and custom themes look exactly as before. (Your first visit after updating regenerates the texture once.)</p>
</li>
</ul>]]></content>
  </entry>
  <entry>
    <title>Version 1.17.4</title>
    <link rel="alternate" type="text/html" href="https://loupfreres.com/changelog#v1.17.4"/>
    <id>https://loupfreres.com/changelog#v1.17.4</id>
    <updated>2026-07-21T00:00:00Z</updated>
    <content type="html"><![CDATA[<ul>
<li><p><strong>Your built story now tells you how to begin it.</strong> A gently glowing &quot;Your story is ready&quot; prompt appears above the message box the moment the Overseer finishes building a story. Tap it (or type <code>/narrator</code>) to begin; it fades once you&#39;re under way. If the Narrator&#39;s switched off, the prompt says so and takes you to its settings.</p>
</li>
<li><p><strong>The <code>/director</code> command is now <code>/narrator</code>.</strong> To match the &quot;Narrator&quot; name used everywhere else: <code>/narrator</code> wakes it now, and <code>/narratorpurge</code> wipes this Timeline&#39;s Narrator notes and plan. The old <code>/director</code> commands no longer do anything, and the last stray &quot;Director&quot; labels in the UI now read &quot;Narrator&quot; too.</p>
</li>
<li><p><strong>Reasoning models now think properly out of the box, on any provider.</strong> When your primary provider isn&#39;t Google, each job now ships with a sensible thinking depth built in instead of the provider&#39;s shallow default: light chores (auto-naming, the clock, triage) stay fast on Low, the everyday workhorse runs Medium, and the heavy creative and analytical jobs — your main replies, the Narrator, the Knowledge Graph — think hard. On a <strong>Claude Code</strong> subscription, where deeper thinking costs nothing per token, the flagships push harder still. Every slot&#39;s effort dial still wins if you change it, and Google/Gemini setups are unchanged.</p>
</li>
<li><p><strong>The built-in default prompts got a refresh.</strong> Several shipped prompts were rewritten — both Narrator World-Engine modes, the Live Chat persona and its texting voice, the multi-bubble style, the &quot;won&#39;t stop pinging&quot; reaction, the in-game action controller, and the story-gist distiller. Only fresh installs and Restore-to-Defaults are affected; prompts you&#39;ve customised yourself are left as you set them.</p>
</li>
<li><p><strong>&quot;Hub Sync&quot; is now &quot;Wifi Sync.&quot;</strong> Renamed everywhere — sidebar, page title, status line — and the host role that read &quot;Hub&quot; now reads &quot;Host.&quot; How syncing works is unchanged.</p>
</li>
<li><p><strong>Far better at recovering the AI&#39;s mangled data output.</strong> Half the app runs on the AI answering in strict JSON — Narrator verdicts, Sentinel readings, memory extraction, character generation, characters&#39; tool calls in DMs — and models flub the format constantly. A new reconstruction engine restores even severely garbled answers, and it&#39;s the same engine everywhere. In practice: fewer silent retries burning your API quota, fewer &quot;invalid JSON&quot; failsafes eating a perfectly good reading, and fewer tool calls that just quietly didn&#39;t happen.</p>
</li>
<li><p><strong>Three more settings pages got the tidy, collapsible redesign.</strong> <strong>Overseer Engine</strong>, <strong>Knowledge Graph</strong> and <strong>AFK Messaging</strong> are now labelled, collapsible cards instead of top-to-bottom walls of controls — open just the part you care about. Each page remembers what you left open, long prompts sit behind a preview-and-Edit tile, every section is findable from settings search, and on/off features lead with a clear enable switch. Nothing was reset.</p>
</li>
<li><p><strong>Dark and Custom themes now reach every corner of the app.</strong> Dozens of surfaces were stuck in the Light Academia look no matter your skin — the Narrator Control header, the &quot;is typing…&quot; bar, License and WiFi Sync pages, delete confirmations, menus, the prompt editor, the model switcher, the update popup and more. All follow your theme now, <strong>Custom</strong> themes included, and light-background Custom themes also fixed a batch of unreadable white-on-light text. Meaningful colors are untouched: success green, errors red, warnings amber, status dots keep their meaning.</p>
</li>
<li><p><strong>Character-rail folders are simpler now — just pick a color.</strong> The name and icon fields are gone (neither ever showed up on the rail); the folder editor is now a single color palette. Folders left on the default color follow your theme, while ones you deliberately recolored keep your color.</p>
</li>
<li><p><strong>Fixed: very long sender names no longer break the chat bubble.</strong> An extremely long character or Narrator name used to overlap its own profile picture, run off the edge, and push the &quot;Thought Process&quot; toggle out of reach. Now the full name is always shown — it flows onto as many lines as it needs instead of spilling off-screen — and the timestamp and &quot;Thought Process&quot; toggle simply ride along after it, staying on the first line when there&#39;s room and tucking underneath only when the name is long. Short names look exactly as they always did. Works in both normal and full-width layouts.</p>
</li>
<li><p><strong>Fixed: a dropped connection is no longer mistaken for a real answer.</strong> A network hiccup used to get read as a decision or a failure in several places, and the app would act on it:</p>
<ul>
<li>A pending <strong>friend request</strong> would show &quot;declined&quot;, get written into history, and start the cooldown — even though the character never decided. It now says &quot;Couldn&#39;t reach them, try again in a moment&quot;, records nothing, and leaves your request open.</li>
<li>The background work that keeps a character&#39;s private notes and story synopsis current, their spontaneous &quot;thought of you&quot; texts, and the first message of a new friendship used to give up on a blip; they now wait it out and retry on their own.</li>
<li>A <strong>SillyTavern</strong> card import used to silently fall through to the card&#39;s raw fields, producing a half-imported character; it now tells you the translation failed.</li>
<li>A character reviewing its own <strong>photo, GIF or meme</strong> used to count a failed turn as approval (and kept the empty reply); failed reviews are now treated as failures and dropped.</li>
<li>The <strong>debug log</strong> used to blame the AI (&quot;invalid JSON/envelope&quot;) for a reply that never arrived; every one now names the dropped connection, so bug logs point at the right thing.</li>
</ul>
</li>
<li><p><strong>New: characters stop texting you if you never text back.</strong> Ignore someone&#39;s messages and they go quiet, just like a real forgotten DM. Every unanswered message goes on a tab that throttles how often they reach out — two ignored and they text about half as much, four a quarter, eight and they&#39;ve all but stopped. It&#39;s per character, so the ones you actually talk to are unaffected. Replying clears part of the tab and time clears the rest, so someone who gave up months ago will eventually try once more. It&#39;s on by default and covers both plain &quot;thought of you&quot; texts and AFK story comments. Tune or disable it all under <strong>Settings → Backstage &amp; Live Chat → Attitude (Ignored Messages)</strong>, including whether talking to a character <em>anywhere</em> counts as answering or only their DM does.</p>
</li>
<li><p><strong>Live Chat now fully runs on its own Generation Engine.</strong> When the settings pages were split, Live Chat got its own model, sampling and thinking — but several corners kept quietly using <strong>Backstage&#39;s</strong> instead. The model name shown above your DM and in the dropdown both reported the wrong one, and three things generated on the wrong model outright: a character <strong>deciding whether to accept your friend request</strong>, the <strong>first message</strong> they send, and their <strong>spontaneous texts</strong>. All of them now use the Live Chat model you picked, and your Live Chat temperature, top-P/top-K and thinking settings reach them too — so expect those moments to be more considered (and a little slower/costlier if you&#39;ve turned thinking up).</p>
</li>
<li><p><strong>You can now read the thinking behind a character&#39;s AFK text.</strong> When a character reaches out on its own — a first text, a spontaneous &quot;thought of you&quot;, or an AFK note about your story — its reasoning is kept with the message so you can expand the &quot;Thought Process&quot; block, same as any reply. It only shows inside the chat, never in the notification.</p>
</li>
<li><p><strong>Fixed: &quot;Let characters text you first&quot; could flip itself back.</strong> The toggle lives on both the Live Chat and AFK Messaging pages by design, but the AFK page could write its stale copy over a change you&#39;d just made. Change it on either page now and it sticks. (Both pages&#39; reasoning-effort dials are also findable in settings search now.)</p>
</li>
<li><p><strong>Fixed: the Narrator could speak as YOU.</strong> It was blocked from writing your companion but never your own character, so nothing stopped it posting a scene under your name. It&#39;s now blocked properly, and a caught attempt destroys the whole turn — message, ledger notes, watch conditions, the lot — instead of quietly keeping them. You choose how strict the check is under <strong>Settings → The Narrator → Identity → Anti-Puppeteering</strong>: <em>Default</em> catches it signing a message with your name; <em>Moderate</em> also kills turns that make you the subject of a sentence while still letting it write <em>about</em> you; <em>Extreme</em> kills any turn that mentions you at all; <em>Off</em> lets it puppeteer freely. Turns thrown out for puppeteering are now labelled in the wake log instead of looking like silence.</p>
</li>
<li><p><strong>The default &quot;extract appearance from image&quot; prompt is now much more thorough.</strong> Pulling a description from a reference photo (Character Creator / your own profile) used to skim past physical detail. The new default asks the AI to write in first person and be exhaustive about body, physique, species and coloring, treating clothing and pose as secondary. Only installs still on the built-in default pick up the change. Restore defaults to make it go in effect.</p>
</li>
<li><p><strong>The Narrator&#39;s wake log now lives in Narrator Control, with the rest of its business.</strong> The log answering &quot;why did the Narrator step in — or not — on that turn?&quot; used to hide inside your character&#39;s knowledge-graph dossier; it&#39;s now folded under the note ledger in <strong>Narrator Control</strong> (long-press a timeline, right-click on PC). Scene state, previously shown read-only in two places, now appears once here where you can actually edit it.</p>
</li>
<li><p><strong>The manuscript typeface is now everywhere.</strong> Scattered corners still rendered in your device&#39;s default sans-serif — most Archival Scholar and Narrator Control dialogs, the entity inspector rows, the Game Watcher overlay chat log, the reasoning-model tooltip, the Patreon verify button, and several dropdowns. All match the rest of the app now, and even the Android full-screen alarm takeover uses the typeface. Genuinely fixed-width text (code blocks, your license key and device ID, the trace log) stays fixed-width.</p>
</li>
<li><p><strong>Fixed: searching a long prompt jumped to the wrong line.</strong> Ctrl+F in the prompt editor measured the text in a different typeface than it displayed in, so the jump drifted further from the match the deeper it was. It now lands on the match.</p>
</li>
</ul>
<h1>🧹 Deletion upgrades</h1>
<ul>
<li><p><strong>App deletes its own files better now.</strong> Syncing could produce issues.</p>
</li>
<li><p><strong>New: &quot;Find orphaned data&quot; cleanup, under Settings → Backup &amp; Sharing.</strong> Characters and timelines deleted in older versions could leave data stranded. This scans for all of it and shows you exactly what it found first, named where possible — &quot;Isla — 1 timeline, 47 messages, 12 graph links, 3 images (2.1 MB)&quot;. Nothing is removed until you agree, and a paired device gets the cleanup too.</p>
</li>
<li><p><strong>The sync image cache no longer grows forever.</strong> The app keeps transfer copies of chat images for your other device, and they were never cleaned up — 225 MB on the test phone. The cleanup button now clears them (your real images are untouched, and copies are remade if ever needed), they expire on their own, and the app stops making them at all with no second device set up.</p>
</li>
<li><p><strong>Deleting a character now cleans up after it properly.</strong> A banished character used to leave behind its indexed lorebook, its listing as an alarm voice, unread AFK notifications still pointing at a dead chat, its avatar in the Android share sheet, and leftover unread counters and cooldowns. All handled now — and if an alarm was voiced <em>only</em> by that character, the app tells you instead of quietly changing it.</p>
</li>
<li><p><strong>Fixed: purging Overseer or Narrator data no longer silently comes back.</strong> With a second device paired, the Overseer &quot;Purge&quot; button and <code>/narratorpurge</code> removed data locally but never told the other device, which pushed it all straight back on the next connect. Both propagate properly now, and <code>/narratorpurge</code> also clears the Narrator&#39;s secret knowledge, which it always skipped.</p>
</li>
<li><p><strong>Fixed: ending a Game Watcher session left the whole play-by-play in the database.</strong> Once the recap was delivered the session was hidden, but its messages incorrectly stayed on disk.</p>
</li>
<li><p><strong>Fixed: deletions now reach a device that was switched off.</strong> Deleting a character or timeline was only announced to a device connected at that exact moment; one that was off or asleep never learned and pushed it back on the next sync. Deletions are now recorded so they survive until your other device reappears.</p>
</li>
<li><p><strong>Group chats stay readable after you delete one of the cast.</strong> Lines from a deleted character are kept on purpose (removing them would tear holes in a scene the others still own) but used to show as &quot;Unknown&quot;. The name is now preserved on the messages themselves.</p>
</li>
<li><p><strong>Leftover images and sounds get cleaned up too.</strong> Every theme import, portrait change and crop left the old file behind, and imported alarm tones were never deleted. The cleanup button now finds anything on disk the app no longer points at, and deleting an alarm takes its imported sound with it.</p>
</li>
</ul>
<h1>🧠 Every Model Slot Now Knows Its Model</h1>
<ul>
<li><p><strong>Thinking &amp; reasoning controls everywhere, for every provider.</strong> Every model picker — Knowledge Graph, Clock AI, Character Alarms, AFK, Game Watcher, Narrator, Overseer, Story Synopses, DM Memory, Life Profiles, Urgency Triage, BG3 Dialogue and the rest — now shows the RIGHT controls for what you selected: Claude&#39;s Extended Thinking toggle and effort ladder, Gemini&#39;s thinking budget, or a reasoning-effort selector for DeepSeek/GLM/Kimi/OpenRouter/NanoGPT. Previously most pages only showed thinking options for Gemini and hid everything else.</p>
</li>
<li><p><strong>Obscure and custom-endpoint models get a manual effort dial.</strong> Even a model the app has never heard of now offers Low/Medium/High effort. Leave it on &quot;(provider default)&quot; and nothing changes.</p>
</li>
<li><p><strong>Model capabilities sync from your providers automatically.</strong> On startup (and on &quot;Fetch models&quot;) the app asks each provider what each model supports, so brand-new models get correct controls without an app update.</p>
</li>
<li><p><strong>Knowledge Graph thinking settings actually work now.</strong> The KG thinking budgets were never being sent to the model — indexing ran without reasoning whatever you configured. They now apply for real (plus a new config for the Deep Character pass), so expect smarter, somewhat slower indexing at the default High. Tune passes down for speed.</p>
</li>
<li><p><strong>Character Alarm settings cleaned up.</strong> The alarm page no longer shows Gemini-style sliders for models that can&#39;t use them (or calls every model a &quot;Gemini model&quot;) — it adapts to your pick like everywhere else.</p>
</li>
<li><p><strong>Live Chat and the Deep Character indexing pass now switch providers with everyone else.</strong> &quot;Apply equivalents to all slots&quot; (and clearing slots back to defaults) in Providers &amp; Keys used to leave these two pickers behind — now they move with the rest and preview in the apply dialog. Under the hood, all slots share one self-contained selector, so future providers appear across the whole app at once.</p>
</li>
<li><p><strong>You can finally rename an entity in the Archival Scholar.</strong> <strong>EDIT ENTITY</strong> now opens with a <strong>TRUE NAME</strong> field. Rename it and the whole archive follows — every relationship, community roster and per-timeline record. The old name is kept as an alias by default (untick if it was simply wrong). If the name&#39;s already taken or is another entity&#39;s alias, the app warns that the two will fold into one at the next indexing pass and lets you proceed — a legitimate way to merge entities you never wanted apart.</p>
</li>
<li><p><strong>Your <code>{{userName}}</code> / <code>{{personaName}}</code> variables now work everywhere you type them.</strong> They used to resolve in only a couple of fields. Now they fill in with the real names in a character&#39;s <strong>Personality, Visual Description, Physical Capabilities, Static Lore and Lorebooks</strong>, in your <strong>own persona</strong>, and throughout the <strong>Knowledge Graph</strong> (node names, descriptions, aliases and relationships) — both in the Archival Scholar and in what the AI reads. Indexing stores the real names too, so the graph no longer spawns a separate <code>{{userName}}</code> entity, and lorebook retrieval searches with the real names (re-index once to refresh). The shorter <code>{{user}}</code> / <code>{{char}}</code> spellings now work too, and matching is forgiving about capitalisation and spare spaces.</p>
</li>
<li><p><strong>Your characters now bring their lorebook into Live Chat.</strong> Live Chat DMs can finally draw on a character&#39;s full lorebook on every reply, not just the always-on Static Lore. A control under <strong>Live Chat → Generation Engine</strong> switches it on or off and sets how much rides along (1,000–100,000 chars, 10,000 by default). Entries are added whole, in the order you wrote them, until the budget fills.</p>
</li>
<li><p><strong>Fixed: your character rail keeps its order when your phone dies.</strong> A battery death or Android background-kill could leave the rail reshuffled into its default order — permanently — because the order file was rewritten in place and a bad-moment shutdown left it half-written. It&#39;s now written safely with a kept backup, self-repairs from that backup if damaged, and flushes pending changes when you minimise or close. Your character list file gets the same protection. If your order was already lost, your <strong>folders</strong> survived and reappear in the rail.</p>
</li>
<li><p><strong>Your character rail now syncs between your devices.</strong> Reorder characters or folders on one device and the other follows over your existing WiFi sync — no cloud. Folder <em>positions</em> never synced before, so a folder could arrive with nowhere to appear. Changes now show up <strong>live</strong> while both are connected, and a character created on one device drops into the other&#39;s rail straight away. If they disagree, the most recently edited device wins; a device you&#39;ve never rearranged defers to one you have. Older-version devices are handled gracefully.</p>
</li>
<li><p><strong>Fixed: your Windows app is no longer empty — all your data is back.</strong> The last update&#39;s proper accented app name accidentally pointed Windows at a new, empty data folder, so the app looked wiped. Nothing was lost — it was on disk the whole time. This update points the app back at it and pulls across anything you made while it looked empty. Just open it.</p>
</li>
<li><p><strong>Fixed: the app icon no longer stays stale after a PC update.</strong> The desktop/Start-Menu shortcut sometimes kept the old icon (a Windows icon-cache quirk). The installer now refreshes the cache automatically.</p>
</li>
<li><p><strong><code>/nodeclean</code> now truly merges duplicate entities.</strong> If your archive showed the same person twice — two copies of your character, or a short-name/full-name split — <code>/nodeclean</code> used to only tidy relationships and never remove the duplicate&#39;s base-lore copy, so the twins kept coming back. It now folds duplicates together (same-name, alias, and template-variable twins alike), keeps the name you see as the survivor, carries the rest over as aliases and merged lore, and repoints relationships across all timelines. One run collapses the doubles for good.</p>
</li>
<li><p><strong>Fixed: Knowledge Graph organization no longer crashes on cross-timeline ties.</strong> <code>/nodeorganize</code> (and the automatic consolidation as your chat grows) could die with &quot;Bad state: No element&quot; when a relationship pointed at an entity that only exists in a sibling timeline. Those ties are now set aside for the pass (they stay valid in their own timeline) and the job finishes.</p>
</li>
<li><p><strong>Fixed: The Sentinel occasionally ignored a perfectly good reading.</strong> A doubled closing brace on its JSON reply used to get the whole thing thrown away and fall back to &quot;nothing happened here&quot;, silently losing that turn&#39;s importance/tension scoring and wake check. It&#39;s now parsed correctly. We built an extremely robust json restoration util. Expect a lot less failures across the app now.</p>
</li>
<li><p><strong>Fixed (Baldur&#39;s Gate 3): your companion can loot big monsters and reach for named objects again.</strong> The barrel-smashing/lockpicking update accidentally made her refuse to loot large creatures like a <strong>minotaur</strong> (&quot;can&#39;t loot: target not there&quot;) and grab the wrong thing when you named an object like <strong>Phalar Aluve</strong>. Both fixed: she loots any corpse she can walk to, and goes for exactly the item you named.</p>
</li>
<li><p><strong>Fixed (Baldur&#39;s Gate 3): your companion runs instead of strolling.</strong> Moving to a spot — closing in, repositioning, kiting, retreating — she used to amble at a walk, which felt sluggish in a fight. She now moves at a proper run.</p>
</li>
<li><p><strong>Macro-story generation is a little leaner.</strong> The Overseer used to run an extra semantic memory search on every writing step, but its ground-truth summary and your top-importance memories already cover it. Dropped, so campaigns generate with fewer background calls and no change to the result. The lorebook-trimming lore search is untouched.</p>
</li>
</ul>]]></content>
  </entry>
  <entry>
    <title>Version 1.17.3</title>
    <link rel="alternate" type="text/html" href="https://loupfreres.com/changelog#v1.17.3"/>
    <id>https://loupfreres.com/changelog#v1.17.3</id>
    <updated>2026-07-18T00:00:00Z</updated>
    <content type="html"><![CDATA[<h1>🌌 A New Way To View Data</h1>
<p>Up to this point, KG data was only available via list or external visualizers. Now, I have cooked up for you a beautiful Constellation viewer - a fourth way to view your nodes. Every nebula is algorythmically generated from the theme - meaning your custom themes get custom looks.</p>
<p>I also moved more relevant options in the session context menu (longpress Timeline) up and less relevant ones down. Renamed &quot;Inspect KG Entities&quot; to Archival Scholar.</p>
<h1>Baldur&#39;s Gate 3 Improvements</h1>
<p>The LoupCompanion mod (that comes with the app on PC) now resolves way more actions through the ingame resolver. The AI is capable of complex actions and can follow complex commands, including but not limited to lockpicking, looting corpses, traveling through zones, interacting with levers, finding objects, sending items, and general capabilities, including native dialogue controls (no more image recongnition.)</p>]]></content>
  </entry>
  <entry>
    <title>Version 1.17.2</title>
    <link rel="alternate" type="text/html" href="https://loupfreres.com/changelog#v1.17.2"/>
    <id>https://loupfreres.com/changelog#v1.17.2</id>
    <updated>2026-07-17T00:00:00Z</updated>
    <content type="html"><![CDATA[<h1>My Artist Woke Up from Stasis</h1>
<p>Finally, after a long time, TLFI has something more than a generic icon! Icons, icons, banners, loading screens, notification outlines - we made it all, for PC, for mobile, and now the app is looking a notch prettier.</p>
<h1>🎨 New App Icon &amp; Loading Screen</h1>
<ul>
<li><strong>A new app icon, everywhere.</strong> The Loup Frères Island has a new icon across the board — app launcher on your phone, and the desktop shortcut and taskbar on PC.</li>
<li><strong>A painted loading screen.</strong> Opening the app now greets you with a full illustrated scene while it loads.</li>
<li><strong>Sharper on Windows.</strong> The old Windows icon was badly blurred. Now it isn&#39;t.</li>
<li><strong>Notifications get a clean outline mark.</strong> Push notifications now show a simple outline version of the new icon in the status bar!</li>
<li><strong>The app goes by its proper name on Windows now.</strong> A few Windows corners still showed the internal codename <code>the_loup_freres_island</code>. Fixed.</li>
</ul>
<h1>⚙️ Settings, Redesigned — find anything, fast, smoother, and more pleasant-looking</h1>
<ul>
<li><strong>Search your settings.</strong> There&#39;s a search bar helping you find everything faster.</li>
<li><strong>Live Chat has its own page model and settings now, separate from Backstage.</strong> For easier navigation between these two similar-yet-distinct features.</li>
<li><strong>Settings match your theme.</strong> If you use a custom theme, the settings cards and prompt fields now take on your theme&#39;s color instead of a flat generic panel — while staying readable whatever background you picked.</li>
<li><strong>Every media tool lives in one place.</strong> Image generation, GIF reactions and memes used to be scattered across three different pages with three separate copies of the same controls. The new <strong>Media Tools</strong> page gathers all of it - you toggle them per feature set.</li>
<li><strong>Prompts don&#39;t bury the page anymore.</strong> Long editable prompts used to be giant text boxes stacked one after another, so a page was mostly empty prose you had to scroll past. Each prompt is now a single tidy row showing its name. You also see which are edited and which are stock.</li>
<li><strong>Sections collapse.</strong> The big pages are now made of collapsible cards, so you can fold away the parts you&#39;re not touching and the page remembers what you left open. Sections with an on/off master (memes, timeline peeking, the friendship gate…) show a switch right in their header.</li>
<li><strong>Cleaner, consistent names.</strong> &quot;System Directives&quot; and &quot;System Instructions&quot; were the same page under two names — now it&#39;s just <strong>System Instructions</strong> everywhere. Same for <strong>Narrative Director</strong>, <strong>Hub Sync</strong>, <strong>Overseer Engine</strong> and <strong>Knowledge Graph</strong>. The per-story Overseer console is now <strong>Overseer Console</strong> so it stops clashing with the settings page of the same name. And the whole settings list is regrouped into clearer sections: Conversation, Story Engines, Companion, Providers &amp; Models, Sync &amp; Backup.</li>
<li><strong>Your existing setup is untouched.</strong> Every setting keeps its value, and old backup/config files you exported still import in full — the pages just point at the same settings from tidier homes.</li>
</ul>
<h1>🎬 The Narrator, The Sentinel &amp; the Overseer — clearer, connected</h1>
<ul>
<li><strong>&quot;Narrative Director&quot; is now just &quot;the Narrator&quot;</strong> everywhere you see it, and its settings page got the same section makeover as the rest — Identity, Model &amp; Generation, Wake Rules, and System Prompts, each collapsible, with the prompts as compact edit-fields.</li>
<li><strong>&quot;Heavy Pass&quot; is now &quot;The Sentinel.&quot;</strong> It&#39;s the part that reads every turn to score how important/tense it is (for memory) and to decide when to wake the Narrator — the new name says what it does.</li>
<li><strong>The Sentinel now tells you if the Narrator is on.</strong> Right at the top of the Sentinel section it shows Narrator: ON or OFF — because when the Narrator is off, the Sentinel&#39;s wake-ups do nothing (it still scores memory). A tap takes you straight to the Narrator&#39;s Wake Rules.</li>
<li><strong>The Overseer warns you when the Narrator is off.</strong> The Overseer only writes the story plan; the Narrator is what performs it. If the Narrator is disabled, the Overseer page now shows a clear banner — &quot;The Narrator needs to be enabled to utilize this module&quot; — with a one-tap way to turn it on.</li>
</ul>
<h1>🎤 Game voice — no more phantom &quot;you&quot;</h1>
<ul>
<li><strong>Push-to-talk no longer types a stray &quot;you&quot; (or &quot;thank you&quot;) when it hears nothing.</strong> If your mic captures silence — usually because the wrong input device is selected — the offline voice model used to invent a random word and drop it into game chat. Now a silent clip is detected and discarded before it&#39;s ever transcribed, and you get a &quot;Heard nothing — check your mic in Game Watcher → Voice settings&quot; nudge instead. Shouting-to-uppercase also got more reliable on Windows in the process.</li>
</ul>
<h1>🧠 Deep Character Pass — a stronger memory for your character</h1>
<ul>
<li><strong>An optional deep dive on your main character when building their memory.</strong> Turn on <strong>Deep Character Pass</strong> in Knowledge Graph settings (it&#39;s off by default) and, while indexing, the app does one dedicated read of the whole lore focused entirely on your character — hunting down every name, title, nickname and epithet they go by and writing the richest possible profile of who they are. It then makes sure the character ends up as a <em>single</em>, correctly-named entry, wired into everyone and everything they&#39;re connected to — and creates that entry even if the normal sweep somehow missed them entirely. The result is a far more complete, better-connected character than the normal one-pass sweep produces. Roughly doubles indexing time (and cost).</li>
</ul>
<h1>🎬 Director Fixes</h1>
<ul>
<li><strong>The Director&#39;s thinking controls now show up for Claude and GPT models.</strong> If you pointed the Director at anything other than a Gemini model, the entire Thinking Config section vanished — no thinking toggle, no reasoning depth, nothing. The Director silently ran with whatever the provider felt like doing. Now the page reads what your chosen model can actually do and shows the right controls for it: an <strong>Extended Thinking</strong> switch for Claude, an <strong>Effort</strong> ladder (low through max) for Claude, GPT and Claude Code, the budget slider for Gemini 2.5, the level dropdown for Gemini 3. Pick a model, get its knobs.</li>
<li><strong>&quot;Delete Timeline&quot; is reachable again on your phone.</strong> The long-press timeline menu had grown past what fits on a phone screen, and because it couldn&#39;t scroll it just cut off the bottom — taking Branch Timeline and Delete Timeline with it. The menu now scrolls, so every option is reachable no matter how many the timeline has.</li>
</ul>
<h1>A Small Appearance Tweak</h1>
<ul>
<li><strong>Dark Academia Settings Background</strong> is now swapped for something more legible.</li>
</ul>]]></content>
  </entry>
</feed>
