Rin Chat Update Notes - Version: 0.7.6
4 October 2026
๐ Safety
Card and model text can no longer draw a working form, or cover the chat. Text from a card is shown with its formatting, and two things were getting through that have no place in a message. One was a real form, with a password box and a button that sent what you typed to another website. The other was a block pinned over the whole chat, which could hide everything under it. Together those could imitate the app's own lock screen. Forms, text boxes and buttons written into a card or a reply are now shown as plain text, a pinned block stays inside its message, and a clickable image map opens in your browser like any other link instead of replacing the app. A card's own choices, questions and pickers are unaffected: those are drawn by the app.
A card can no longer crash a chat with a runaway variable. A variable can be set from its own value, and one that doubles itself a few dozen times is larger than a program is allowed to hold. Reaching that limit took a second and a half and then failed in a way that brought up the app's error page, each time the message was drawn. Since cards are downloaded, that was a card that could make its own chat unusable. A variable now holds at most 100,000 characters, and a macro that goes wrong for any reason is shown as written instead of taking the screen with it.
A card with a broken character note no longer breaks its chat. A card file can carry a note with a depth that is not a number or a role the model's API has never heard of. The first put the note above the system prompt, the second made every message in that chat fail. Both are now read as the defaults when the card is opened.
๐ง Thinking models
A short answer from a thinking model no longer disappears. With "trim incomplete sentences" on, a reply that did not end in punctuation, a single word, a name, a number, a plain "Yes", was being erased whenever the model had thought first. The trim looks for the last period and cuts after it, and it was looking through the thinking as well as the reply, so with no period in the answer it found one in the thinking and cut there, taking the answer with it. What was left showed as a "Thinkingโฆ" that never finished, and auto-swipe then rerolled it several times for being empty. The trim only reads the reply now.
Continue no longer prints the model's thinking into the reply. A thinking model thinks again before it continues, and that second round of thinking was being stored in the middle of the message. Only the thinking a reply opens with is folded away, so the second lot was shown as part of the answer: the model's own deliberation, read out mid-reply. The same happened when a reply cut off by the length limit was continued automatically. A continuation is now kept without its thinking, nothing appears while it is still thinking, and the two halves are joined with a space where the model, having stopped to think, picked up without one. Chats that already have this in them are cleaned up on screen as well, without changing what is stored.
Long-term memory, pins and the context meter stop counting the model's thinking. Three things read a reply with its thinking still attached. Memory indexed and summarized the thinking and then recalled it into later prompts. Pinning a reply pinned its first 300 characters, which on a thinking model is the thinking, not the reply. And the context meter counted thinking that is never sent, so it reported older messages as out of context sooner than they were. All three read the reply alone now, and so do the Markdown and plain text exports. One thing to expect: in a chat that uses the memory tree with a thinking model, the affected parts of the memory rebuild once, the next time the chat is open.
A character that messages you first no longer rereads its own thinking. When a character reaches out on its own, the earlier messages were sent to the model with their thinking still attached, which the chat screen never does. It also carries over a short excerpt of your last conversation, the first 300 characters of each message, and on a thinking model those 300 characters were the thinking: the reply that had actually been said never made it in. Both now use the reply alone.
A generator no longer fires from the model's thinking. A thinking model plans out loud, and a plan that mentions a generator tag, "I should use [Create Outcome] here", is the same text as the tag itself. It was being run: a generator rolled that nobody had asked for, and if it kept its result as chat variables, those were written too. Generators now fire only from the reply.
{{lastMessage}}and{{lastCharMessage}}no longer include the model's thinking. They returned the stored message whole, thinking block and all, so a quick reply or a generator built on one handed the model its own scratchpad back as if it had been said aloud. They now give the reply as it reads in the chat.Searching a character's chats searches what was said. The search box above a character's chat list was matching words the model had only thought, and showing a line of that thinking as the result.
Copy copies the reply, and chat statistics count it. Copying a message from a thinking model put its thinking and the markers around it on the clipboard along with the reply, in a character chat and in Direct Chat alike. The statistics counted the same way, so the word totals were mostly words nobody had read and the "longest reply" was the longest stretch of thinking.
Text in a code block wraps. Some models put their thinking, or whole paragraphs, in a code block, and a code block kept every line whole and scrolled sideways, so each paragraph was one line too long to read. Long lines in a code block now wrap. A block with no language, or one marked as plain text, always wraps; turn off "Wrap long lines in code blocks" in Chat Display to keep real code on one line and scrolling.
๐ฑ Phones and narrow windows
Editing a provider, a voice or a generation config on a phone gives you the screen. Open one of these in Settings and its title, description and buttons stayed fixed at the top, on top of the settings header and the row of section chips. On a phone that left about 250 pixels to scroll the actual settings in. The whole pane scrolls now, so the heading moves out of the way and the buttons are one flick back up.
The card editor no longer scrolls sideways on a phone. The bar at the top holds the card's name and token count on one row and its buttons on the next. On a phone neither row would shrink: the name never shortened, the buttons never wrapped, the token count and the Chats button ran off the right edge, and the whole editor slid sideways to reach them. It got worse as a card collected chats, since "Chats (54)" is wider than "Chats (5)".
Direct Chat keeps the message box on screen. The conversation was given a fixed share of the window's height, under the heading and the model picker. On a phone, and in a desktop window that was not tall, that left no room for the box you type in: it sat below the bottom edge and you scrolled the page down to reach it, then back up to read the reply. The conversation now takes whatever space is left, so the message box is always at the bottom of the window.
Settings, Search and dialogs fill a narrow window at any UI scale. With the window narrower than about 770 pixels and the UI scale set to anything but 100%, these stopped short or ran long: at 90% the sheet ended a tenth of the way up from the bottom with the page behind showing through under it, and above 100% the bottom of the sheet was off the screen. They were sized with a unit that ignores the UI scale, on the assumption that only a phone is ever that narrow.
A section title in Settings no longer breaks in the middle of a word on a phone. Where a section has a button beside its title, the title was squeezed into whatever the button left, which in German split "Generierungskonfigurationen" across two lines mid-word. The button now drops below the title when both do not fit.
The Adventure Mode character builder fits a phone. Its title and the Complete sheet for me button each broke onto two lines, the class field shrank to a sliver beside the name, and on any screen the button ran under the window's expand and close buttons. Each field now has its own line on a phone, and nothing in the header wraps or overlaps.
The Rin (3D) page fits a phone. The page was wider than the screen and scrolled sideways, with the character's stage running off the right edge.
โฟ Accessibility
Fields have names a screen reader can read. In Settings and in the card editor, a field's label sat beside it without being attached to it, so a screen reader announced the field as an unnamed text box or list and left you to guess which one. Every field in the card editor and every control in Settings now announces its own label.
Dialogs say what they are, and Settings takes the keyboard. A screen reader announced every dialog as just "dialog"; each now reads its own heading. Opening Settings also left the keyboard on the page underneath, so Tab moved through the chat behind it. Settings now takes focus when it opens, keeps Tab inside itself while it is open, and returns focus to where you were when it closes.
๐ Languages
More of the app is translated. Several labels were English whatever language you had chosen: "Thinking" on every reply from a thinking model, the Card Forge's starter chips (Deepen, Add a flaw, Tighten greeting and the rest), the function-key list in Settings, the section headings on the Adventure Mode character sheet, and "Unknown device" under Remote Access. A chip you have renamed yourself is left as you wrote it.
The lorebook audit stops flagging Chinese and Japanese keys as too short. A key of one or two letters is flagged because it turns up inside ordinary words. That rule was counting characters, so a single character such as ้พ was reported as firing on almost everything, with advice to tick "Whole words only". One such character is a whole word. A lone kana or Hangul syllable is still flagged, since that really is in everything.
๐ฒ Making and sharing games
A game card can bring its own character sheet. The character builder made every character the D&D way: six D&D abilities, then 4d6 or a 27-point buy. A game master card can now describe its own sheet in a new Character sheet box under the ruleset: the abilities' names, a heading for them, and a fixed set of scores to deal, such as d12, d8, d6, d6, d4 and d4, which the player places one to an ability by clicking or dragging. It can add more groups beside the first, each dealt on its own (Cortex's Values beside its Attributes), say the game has no HP or give a fixed starting HP, say it has no levels or XP, and list headings for the written parts of a sheet, which a new character's "Who they are" starts with and Complete sheet for me writes under. The game master is then told about the character in the game's own terms every turn, a d12 as a d12, rather than on D&D's 3 to 18 scale with D&D's ability modifiers. A character built this way keeps the game's sheet on its persona card, and a persona card made by hand can pick a game in the card editor. In DM mode the party is statted on it too. It travels with the card, and the Guide's new "Building your own game" walks through making a game from start to finish, with examples for Fate, Powered by the Apocalypse, Cortex Prime and percentile games.
The character builder stops putting D&D's range over other games' numbers. The ability heading read "Abilities (3โ18, 10 = average)" whatever the sheet held, including a Fate character's 2, 1 and 0. The range now shows only while you are rolling or buying scores.
Name a bundle when you export it. The export window has a Name field now. It names the file, and for a bundle of several cards it is also the folder they go into when someone imports it. A multi-card bundle used to be saved as "bundle.aicc" and import into a folder called after its first card with "+1" on the end, and renaming the file did not change that.
In DM mode the roll box rolls the way your game does. When you run the game yourself, the box under a party member's attempt only knew D&D: a d20 plus a D&D modifier against a DC, which made a Cortex d12 worth +1 and a Fate +2 worth -4. A game card's character sheet can now say how its checks roll: Fate's 4dF plus the skill, a Cortex pool where you pick an Attribute and a Value and add other dice by hand, keeping the best two, or rolling under a percentile skill. Without that it picks one from the sheet, and a card with no sheet of its own still rolls the d20. Every roll box also takes any dice you type. A pool follows Cortex's rules, in DM mode and when the game master rolls one in ordinary Adventure Mode: a 1 is a hitch and does not count, the largest die left over is the effect die, and all 1s is a botch, each shown on the dice card. And a game that is not D&D reads Target on its dice card instead of DC.
A bundle of several cards shows its creator notes after you import it. The main card's Public Creator Notes open in an "About" window once the cards are in, so how to play a game reaches the player instead of waiting to be found in the card editor.
๐ง Fixes
{{roll}}understands Fate dice and keeping the best of a pool.{{roll::4dF}}and{{roll::3d6kh1}}both answered 0. For Fate that is an ordinary result, so a card rolling Fate dice in a macro looked like it was working while it rolled nothing at all. The macro now reads the same dice the Adventure Mode roll button does:4dF,3d6kh1,2d20kl1, with modifiers.Chat titles, summaries and the story director read the chat the way you do. A greeting is stored with its placeholders in it,
{{user}},{{char}}, any variables it sets, and filled in when it is shown. The helpers that read the chat on the side were handed the stored version: the AI chat title, the scene note, the running summary, the story director, the suggested replies and the pick of who speaks next in a group. So they saw the placeholders rather than the names, and several also saw a game master's bookkeeping lines. They now read each message as it appears in the chat.The dice record only shows what applies to your game. On a card whose rolls are judged by the game master, or that never rolls a d20, the record sat showing "Success 0/0" and "Nat 20 ยท Nat 1: 0 ยท 0" for the whole campaign. Each line now appears once there is something to put on it.
A generator's number range rolls the whole range. Two ways it did not. A range with a decimal step, 0 to 0.3 in steps of 0.1, never rolled its own maximum. And a range entered backwards, Min 10 and Max 1, rolled 10 every time instead of something between the two.
Deleting a Direct Chat conversation asks first. Delete sits beside Clear in the header. Clear asked before it emptied a conversation; Delete removed the whole conversation on one click, with no way back.
Image Studio corrects an impossible size. Width and Height took anything typed into them, a negative number, a fraction, nothing at all, and sent it to the image provider as written, which answered with whatever error it had for that. A size is now brought back inside 64 to 4096 whole pixels when you leave the field, and again when you press Generate. Steps and CFG are held to their own ranges the same way, there and in an image provider's own settings.
A regex script that is blocked now says so. A pattern that repeats a group which already repeats, such as
(a+)+, is refused because it can take hours to run. It was reported as an invalid pattern, which sends you looking for a typo that is not there.A button that fills in your message no longer acts before you use it. A choice can put text in the message box instead of sending, and that text can set variables when you send it. The variables in every such button were being set anyway, when the chat opened and again on every turn, whether or not anyone clicked it. A greeting offering several of them ended up with all of their values, the last one winning. Only what you actually send sets anything now.
An exported card can always be imported again. Export as Rin Chat JSON copied the card's stored format tag into the file. A card that reached the library some way other than the importer could carry a tag the importer does not know, and the file it exported was then refused with "Unrecognized character card" on every other copy of the app. The export now always writes the right tag.
The Guide catches up with the Card Forge. It still said the Forge does not write lorebooks. It does: a new session asks what you are making, a character, a user persona, a lorebook, a generator or a document style, and a character session can write its own lorebook entries. The Guide now says how to get to each.
A wrong password on the lock screen is selected, ready to retype. It stayed in the box after the error, so typing again added to the end of it. Now it is selected, and the first key you press replaces it.
A provider's error message no longer ends in two periods. Small, and on every failed request where the provider punctuates its own message.
Personas stay out of Not in Folder. Personas have their own row in the library sidebar, but every one without a folder was also listed, and counted, under Not in Folder, so that view never emptied however carefully you filed your characters. Not in Folder, its count and the Library statistics now leave personas out. They still show under All cards and in any folder you put them in.
Selected items and chat tabs have their own colors. "Your messages & tabs" in Theme & Colors also colored every selected toggle, tab and chip, which nothing on the screen said, so a theme with a black message bubble on black panels hid which option was picked, such as Replace, New or Skip when importing cards that are already in your library. It is now three colors: Your messages, Selected items and Chat tabs. A theme you already made looks the same, since both new colors start from the one you picked. A selected toggle or chip is also outlined in your text color now, so the choice shows whatever colors a theme uses.
A slow local model can take longer than two minutes to start. A request was given up after two minutes with nothing from the model, and a local model reading a long prompt sends nothing until it has read all of it, so a big chat on a slow GPU was cancelled just before the reply would have started. Each provider now has a Response timeout in its settings: 120 seconds unless you change it, up to an hour, or 0 to wait as long as it takes.
Rin Chat Update Notes - Version: 0.7.5
3 October 2026
๐ฒ Adventure Mode
Adventure Mode can be taught a different tabletop system. It has always refereed a game of roughly D&D's shape, because the rules it teaches the game master were written into the app. Those rules are now three layers you can see and two you can replace. The core is the contract the app's own parsers read, the directives behind the sheet, the buttons, the trackers and undo, so it is always sent and cannot be edited. The ruleset is the system the dice are read by, and the GM style is how the game is run, and either can be rewritten for Fate, Powered by the Apocalypse, Cortex, Forged in the Dark or something of your own. Because the core is never editable, a rewrite cannot break the sheet or the buttons, which is what made this safe to open up.
An adventure card can carry its own rules. In the card's Features it can replace the ruleset, the GM style, or both, and add guidance of its own on top. A card's rules win over the ones in Settings, so a game you share is self-contained: whoever opens it plays your system without changing a setting.
The dice understand other systems now. The roller only knew the
NdM+Kshape, which quietly decided which games were playable. It now reads Fate and Fudge dice (4dF), pools scored on their best or worst dice (3d6kh1), and mixed pools added together (d8+d6+d10), and the roll button carries them. Rolls that drop dice show you the ones they dropped.A roll the app cannot read no longer becomes a dead button. If the game master wrote dice with a typo in them, the Roll button still appeared, looked perfectly normal, and did nothing whatsoever when clicked, in a reply that hides the choices as well. The roll is simply left out now, so the reply reads as ordinary narration you can answer however you like.
The app can apply a stat from the sheet in any system, not just D&D's. A roll could already say
mod strengthand have the app look the number up, work out the modifier and show you where it came from, but the modifier it worked out was always D&D's, so no other system could use it and had to ask the model to read its own sheet and type the number in. Watching that fail is what prompted this: told the character had Cool +1, the model rolled without it.bonus <stat>is the same lookup for a sheet that already holds the modifier, as Fate, Cortex and Powered by the Apocalypse sheets do. The lookup also works with pool and Fate dice now, where it used to do nothing at all without saying so.A character sheet can hold ratings that are not D&D's. The score box refused anything below 3, which is where rolling 4d6 and dropping the lowest bottoms out and where point buy starts. That is a rule about building a D&D character, not about what a number on a sheet may be, and it meant a Fate skill at Average +1, a Powered by the Apocalypse stat of -1 and a Forged in the Dark action rating of 0 could not be typed in at all, while the dice that read them worked fine. Typed scores now go as low as a system needs. Rolling and point buy are untouched, so a D&D character is built exactly as before.
Pools that keep their best dice across different die sizes. Some systems build a pool out of differently rated traits, a d8 from one and a d10 from another, and score the best two of them. Write that as
(d8+d6+d10)kh2and the app rolls all three, totals the best two, and lists every die with the size it came from, so the ones it left out are still there to read.klkeeps the worst instead.The Guide explains how to write one. Writing an adventure card now ends with a section on teaching it another tabletop system: which box does what, which dice the app can roll, the two systems it cannot resolve for you and what to do instead, and the handful of things that decide whether a model actually follows your rules rather than falling back on d20 habits. Every one of those came from watching a real game go wrong.
The prompt meter breaks the layers out. Each layer is its own row, so an edit's cost in context is visible rather than folded into one total.
๐ A lorebook that belongs to the chat
Every chat can now keep its own lorebook. Open it from the book button beside the character sheet and the variables panel. It holds lore that belongs to THIS chat and dies with it, and like any lorebook its entries come back when their keywords are mentioned, so a cast of forty costs nothing in context until one of them is actually relevant. It is not an Adventure Mode feature: any chat can have one, the same way any card can keep variables. The card's own lorebook is never touched, and nothing is written to your library unless you press Save as a shared lorebook.
The story can write into it as you play. This is what it is for: a town of people who did not exist when the chat started. A generator writes the roll straight in with
as.entry=NAMEbeside the usualas=NAME, and rolling a roster of five gives five entries rather than one overwritten five times. The character can write one itself with[[lore: NAME | what to remember]], on a line of its own, which you never see in the reply, and add to one it already wrote with[[lore+: NAME | one more thing]]. The plus matters more than it looks: learning one new fact about someone is most of what a scene does, and restating a whole entry to record it is where a detail written three turns ago quietly goes missing. A card opts into that by using the line in its own text, so every other card pays nothing for it.A card can start a chat with a cast already in it. Put a generator tag in the card's own text and it rolls once, when a chat begins, instead of on every turn:
as.entry="Harbormaster"for an entry the story can revise later, oras.entry.static="Harbormaster"for one it can never touch. Seeded entries sayfrom the cardso you can tell them from your own, a name with a space needs quotes, and deleting one makes it stay deleted rather than coming back next turn. Every new chat rolls its own, so the cast is different each playthrough.What the story wrote belongs to the message that wrote it. Delete that message, reroll it, or branch away from before it, and the entries go with it, exactly as a variable or a stat already does. They are listed apart from your own entries for that reason, and keeping one moves it into your book, where the story can no longer take it back. A write can add or revise an entry but never empty one, and there are limits on how long an entry is, how many a turn can write, and how many a chat can hold.
๐ง Fixes
System Prompts is usable on a phone again. The page puts Response language above the prompt configs, and that block held its ground while everything else gave way: on a short screen the config list was squeezed to a few pixels at the very bottom, a line too thin to read or tap, with the heading above it still looking perfectly normal. Only one other page was built the same way, and it is the next entry. The page now scrolls as one on a phone, so Response language simply scrolls out of the way and the configs, and the editor behind them, get the whole screen. Nothing changes on a desktop, where the list and the editor keep their own side-by-side panes.
Theme & Colors is usable on a phone too. Checking for the same mistake elsewhere turned it up on the one page nobody had reported: the title block and the little live preview were both holding their ground, which left the swatches a 47 pixel window onto a list more than twenty times that tall. Every color was in there, you just could not get to one. That page now scrolls as one on a phone as well. The preview still sits pinned beside the swatches on a desktop, which is the point of it there.
Right-clicking no longer opens a menu of options that do nothing. On an image it offered Open Image in New Window, Save Image As and Copy Image Address, and anywhere else it offered Back, Forward, Stop and Reload. None of those could ever work: they are the webview's own browser controls, and this is a single page with no history to go back through and nothing behind the download items. They are gone now. A typing field keeps its menu, where cut, copy, paste and the spellcheck suggestions are real, and selected text keeps Copy.
The thinking block no longer scrolls sideways. It had a horizontal scrollbar nobody asked for, and it could not be used anyway: the block is redrawn as each word arrives, so dragging it sideways snapped back to the start of the line on the next one. It was a side effect of capping the block's height, which quietly turns on sideways scrolling as well. Long unbroken text now wraps instead, and a code block inside the thinking still scrolls on its own as before.
Comparing against a value in quotes works.
{{if .location == forge}}matched and{{if .location == "forge"}}did not, because the quote marks were being read as part of the value. It looks right to anyone who has written code before, it did nothing, and it said nothing. Straight and curly quotes both work now, which also means you can finally compare against a value with a space in it, the one thing that was impossible without them.A lorebook entry that renders to nothing no longer takes up a slot. An entry whose text sits behind a condition still fires when the condition is shut, it just has nothing to say. One at a depth was being sent as an empty message in the middle of the conversation, which the model then has to read past. Entries that come out blank are now left out, and nothing changes about when they fire, so timers, cooldowns and chained entries behave exactly as before.
The prompt inspector says what each injected block is. Everything the app splices into the chat history at a depth, an Author's Note, a character's note, a lorebook entry set to a position, a recalled memory, an auto-fired generator event, arrived in the inspector as an unnamed
SYSTEMmessage. You could see that something had been injected and where, but not which of them it was. Each one now carries its name and its depth beside the role,SYSTEM ยท Author's Note @4, in the captured exchanges as well as the preview. A lorebook entry is named by its own name, an event by its generator's.Direct Chat stops dragging you back down while the model is still writing. Scrolling up to re-read something, a thinking block from earlier in the reply for instance, pulled the view straight back to the bottom on the next word that arrived. Every other transcript already let you scroll away and resumed following when you returned to the bottom; Direct Chat shared that code but never received the scroll events, because it draws a loading line until its session opens and the transcript it was watching for did not exist yet at that moment. It never started watching, so it treated you as being at the bottom for as long as the view stayed open.
๐ฅ Group chats
A character can now carry a standing note in one chat. Open a member from their chip in the group bar and the first thing there is "Note for this chat": a line that is sent on every turn they take, in that chat only. Three one-click presets cover the usual cases, including off-scene, where the character is not in the room and can only reach it by text or a phone call, so their replies arrive as one. Until now the choices were a one-turn direction that vanished, or the card's own depth prompt, which follows the card into every chat. Members with a note carry a small dot on their chip.
The directions box can keep what you typed. Shift-click a member for directions and there is a "Keep this for the chat" box: the same text becomes their note instead of steering one reply and disappearing.
โฐ Order takes instructions for the one chat. The group prompt in Settings is shared by every chat using that prompt preset, so a rule about this scene had nowhere to go. The box at the top of โฐ Order is added to that prompt rather than replacing it, which matters: the group prompt is what tells the model to write one character at a time.
Macros work in the group prompt. It used to resolve only the two tokens it documents, so
{{user}},{{persona}}, a variable or a{{pick}}sat there as text. Everything the rest of the prompt understands now works there, and in the two new boxes above, resolved for whoever is replying. The prompt inspector shows both of them with the macros already resolved.
Rin Chat Update Notes - Version: 0.7.4
2 October 2026
๐จ Card Forge
A lorebook, generator or style session is no longer told it is building a character card. Only the rules at the end of the guide's prompt knew which of the four a session was on. Everything above them still described card work: the guide's own job, the scene it thinks it is in, three worked examples of building a character, the interview notes, and the rule about never writing card fields in chat. A large model reads past all that and follows the rules; a smaller one copies the examples, which is why a lorebook session would keep asking for greetings and a personality, and kept bringing up a knight who lives in one of those examples. Each mode now brings its own, and nothing about character cards goes out in the other three. A lorebook session's prompt is also less than half the size it was, which is worth a lot on a smaller model.
It no longer sends you to a button that is not there. The guide's advice for a user who had gone quiet was to hit Generate character, which only exists while you are building a card. In the other three session types that was the most likely suggestion to be given and the one guaranteed not to work.
Ask the forge for a persona and it builds you one. A user persona is an ordinary character card with its type switched, so the forge gave it the full character interview: a hooky first greeting, a scenario, dialogue examples teaching it how to behave. None of those apply to a card that describes the person playing, which is never greeted and never speaks first.
"What are you making?" offers it directly now, next to Character card, so the forge knows before you have typed anything. Saying so in the chat is enough too, from the first message and before any card exists. The guide asks about you rather than about an NPC, the card is written in that shape, and its type is set when it is built, so it turns up in the persona picker without a trip to the sidebar. Switching an existing card's type mid-session works too. This is the same thing the forge already did for Adventure Mode cards asked for by name.
The preset buttons belong to the session they are under. "Add a flaw" and "Tighten greeting" are questions about a character, and they were the buttons sitting under a document style session too. Each kind of session now has its own set, seeded the first time you open one: entries and keys for a lorebook, fields and variety for generators, dark mode and CSS for a style. Your card presets are untouched, and editing one kind leaves the others alone.
Generator and style sessions reopen as what they are. The session list only recognized cards and lorebooks when reading them back, so a generator or style session came back from storage as a character card session and the guide started asking about greetings for a randomizer. The mode was stored correctly the whole time, it was being discarded on load.
๐ง Reasoning
The reasoning card asks you two questions instead of seven. Effort, and whether the thinking is shown as a collapsible block. The rest was protocol: which field name your gateway reads, a vendor tag, a chat-template flag and the thinking markers. Those are questions about the app's own request, and the app answers them now. They are still there under Advanced for the times a provider needs something unusual.
The switch at the top of that card said the wrong thing. It sat in the title row as a bare On and Off, which reads as the switch for the whole feature. It never was: turning it off does not stop the model thinking, it stops the app recognizing the thinking, so a reasoning model's raw markers end up in the middle of the reply. It is a labelled row now and says so, and Effort explains that None is the one that actually stops the thinking.
"Don't think" now works on more of the models that decide thinking by chat template. Several families ignore the usual reasoning field entirely, so the app has to set a flag in the request instead. That flag has two different names depending on the family, and the app only ever sent one of them, so on the models that read the other name the setting was quietly ignored and the thinking showed up anyway. Both names are sent now, and Gemma and Granite are recognized alongside GLM and Qwen.
Maximum is reachable on models whose top setting has another name. When a model refuses the level you asked for it usually replies with the levels it does take, and the app retries with the closest one. A level above our own top was treated as the furthest thing from every request instead of the nearest, so a model offering only "low" or "max" answered a request for the most thinking with the least. It now lands on the right end.
Maximum now reaches Grok again. The app folded the top effort tier down to High on every xAI model but one, because when that was written xAI did not document the tier. They do now, on Grok 4.6 and later, and they downgrade it themselves on the models that lack it. So picking Maximum had been quietly giving you High, with nothing on screen to say so.
Titles and image prompts stop failing on the newest OpenAI models. The app asks for no thinking at all when it writes something for itself: a chat title, an image prompt, picking who speaks next. Some newer models reject that outright, which failed those features with an error about a setting you never touched. They are now asked for the least thinking they will accept instead.
Rin Chat Update Notes - Version: 0.7.3
1 October 2026
๐จ Card Forge
The guide can work on a lorebook, a generator or a document style, with no character card involved. Until now the forge only ever edited a card, so improving a standalone book meant attaching it to a throwaway character, editing it there and detaching it again. A new session now asks what you are making, and each of the four gets its own opener and its own rules. There is a wand button on every row of the Lorebooks and Generators screens, and beside a style of your own in Settings, so you can also start from something you already have.
A session is scoped to the one thing it edits. A lorebook session will not wander off into inventing a character, and it cannot edit one even if asked: the card fields are not writable there, the switches about a card's own generators and lorebook are not shown, and Generate character is refused rather than quietly building a character into the thing you were editing. Opening the same subject twice returns to the session already on it instead of starting a second one that would overwrite the first.
A style is checked before it is offered, not after it is accepted. Styles are HTML and CSS that the app renders, so a style that reaches the network or leaves the text nowhere to go is refused while it is still a proposal. Undoing one that has already repainted the screen is a worse way to find out.
Your old sessions stop disappearing. The forge kept the 30 most recent and quietly dropped the rest: no warning, no record, and the conversation went with its undo history. That limit existed because every session shared one stored blob, so the whole thing was rewritten each time you typed, and it grew with every character you had in progress. Each session is now stored on its own, so there is no limit, and saving no longer gets slower the more of them you keep. The ones you still have are carried over on first launch.
๐ Read-aloud
The bundled voice shows a real percentage while it downloads. The first use fetches the voice model, and the status sat on "Preparing" with nothing else to say for the whole wait, which looks exactly like a hang on a slow connection. It was also wrong about why: the engine does report progress, the app just never asked for it. It now counts up, and only shows dots for the short silent part after the download.
A voice that never starts now recovers instead of hanging. Speech is built on a background thread, and the app already knew to fall back to the main one if that failed. It only did so when the background thread reported an error, so when it simply never finished, nothing happened at all and "Preparing" stayed on screen until the app was closed. It now gives it a limit and takes over, so the voice speaks either way.
๐ฑ On a phone
The actions that needed a Shift key can be reached by holding a button. Send with directions, impersonate, continue with instructions, regenerate with directions, having a specific character answer, and deleting every newer message were all Shift-click only. On a phone they did not exist, and nothing on screen said they were there, because the tooltip that would have said so cannot be shown on a touch screen. Holding a button now does what Shift-clicking it does. A mouse is untouched: the modifier still works and nothing on the desktop changes.
The message menu says what each thing does. Tapping the three dots opened a small grid of unlabeled icons, so the only way to find out what one of them was for was to tap it and see. It is now a sheet along the bottom of the screen with a named row per action, sized for a thumb, and it carries the actions that have no button of their own, like regenerating with directions or deleting every newer message.
Two buttons could not be tapped at all. Small controls carry an invisible margin so they are easier to hit, and in two places that margin was wider than the gap to the next control, so the neighbour's margin covered the smaller button completely and took every tap meant for it. Copy in Direct Chat went to the read-aloud button beside it whenever a message had both, and Edit with AI in the card editor went to the expand button. Both are sized against their neighbours now, and every other small control in the app has been measured the same way and given a hit area it was missing.
Things stopped sitting on top of each other. The three dots button sat on the last line of a reply, or on the last choice in it, because only messages with a swipe row left space for it. A choice too long for its line dropped underneath its own arrow instead of wrapping beside it. A dialog's title ran under its close button, which had been true on every screen for as long as the rule meant to prevent it had been written the wrong way round. The prompt inspector's tabs made the whole dialog wider than the screen instead of scrolling by themselves.
Dialogs fill the screen, and the full screen editor has a way out. A phone was given the desktop's centred panel with a corner handle for resizing it, which is not a gesture a phone has. Panels open filled now, with no handle and no maximize button. The full screen message editor had a purple Done next to a purple Send, and the one under your thumb was Send, so leaving a text box sent the message. It closes with an X, and keeps what you typed.
Turning read-aloud on no longer asks your computer for permission. The toggle saved the entire chat in order to remember one setting, and saving from a phone takes the editing lock, which your computer keeps for a minute and a half after it was last touched. Picking up your phone after locking the screen landed inside that window, and put a dialog about another device editing in front of what is only a playback switch. The setting travels with the next save instead.
Lists and pickers fit the screen. One of your own lorebooks showed about four characters of its name, because its row spent almost all its width on buttons. The group chat picker gave its folders a block that still hid most of them while leaving the characters underneath almost no room; the folders are one swipeable line now and the characters come in two columns. The greeting row keeps Choose and New together on one line.
๐ Translations
- Wrong text in the five translated languages is fixed. A batch that had been translated by a local model reached users with sentences that said the opposite of the English, with the clause that was the whole point of the line missing, and in a few cases with fragments of an unrelated language left in the middle of a sentence. Those are corrected, and translation no longer goes through that model.
โ๏ธ Settings
- The debug log is in Diagnostics. It sat under Data & Backup, beside the backup and restore tools it has nothing to do with, while everything else for working out what went wrong was already together under Diagnostics.
Rin Chat Update Notes - Version: 0.7.2
29 September 2026
๐ Prompt inspector
A Playground tab, for trying things against the chat you are actually in. Paste any text and see both ends of it side by side: what the model would be sent, and what the chat would show. Macros resolve against the real card, persona, group and variables, so
{{char}},{{group}}and{{getvar}}answer properly instead of sitting there unresolved the way they do in the Settings playground. Generators roll, with a seed you can pin so the same roll repeats, and your regex scripts run on both sides. Nothing is sent or saved: a{{setvar}}is listed as a change it WOULD have made rather than applied. In a group you pick who is replying, because that decides the scripts, the routing keys and the name each turn is labelled with.The preview shows what is actually sent. It stopped at the chat history, so it was missing every instruction the app adds after it: the group roster, the note that tells a character to write a new message rather than continue the last one, the impersonation note, the rules a player gets at a DM's table, and the length directive. It also showed the DM's hidden
[h]notes in a preview of a prompt the party never receives. The preview and the real request now come from the same code, so they cannot disagree again.Exchange rows stay put. Every request in the list was numbered from a counter that restarts when the app does, so once a chat had history from an earlier session two rows could carry the same number, and the list was free to drop or duplicate a row while you scrolled it.
๐ Lorebooks
- A character's lorebook can be copied to your library. It only worked one way before: a shared book could be attached to a character, but a book you had revised on a card had nowhere to go, so reusing it elsewhere meant retyping it. There is a Save a copy to library button in the card's lorebook editor now, beside Audit and Test. It makes an independent copy, so the card keeps its own and the two can be edited apart. Copying twice gives you two books rather than quietly overwriting one, since a book in your library may already be in use by another character.
๐ Providers
A limit on how many requests a provider runs at once. Parallel requests are free speed on a hosted API. On a local model they are the opposite, because the server splits the same tokens per second across everything open at the time, so a reply crawls while a summary and a scene note run alongside it. Set Max parallel requests on the endpoint in Settings, Providers. Anything over the limit waits its turn rather than failing, and a reply always goes ahead of background work like summaries, scene notes and chat titles. Leave it empty for hosted APIs.
The Text Generation WebUI preset tells you the flags that actually work. It said to start oobabooga with
--api, which is enough for the server to run and not enough for the app to reach it: every request came back "Failed to fetch". The full set is--api --listen --listen-host 127.0.0.1, and the preset, the Guide and the CORS hint on a failed Test all say so now.
๐ฌ Chat
The greeting arrows wrap around. At the last greeting the next arrow greyed out, so getting back to the first meant clicking back through every one of them. Both arrows carry on round now. The count still tells you where you are.
Import and Export is quicker to read. Each format's two files sit side by side under their heading instead of stacked in a list, PNG first since that is the one people share, and every row is a real button.
๐ Read-aloud
- The bundled voice says whether it is downloading or already stored. The first use of a Piper voice downloads a few MB after the engine, and the status said only
Preparing <voice>with nothing else to show for it, so a working download looked exactly like a hang. It now says which of the two is happening.
๐จ Fixes
Long chats stop stuttering while anything else is going on. Opening the memory drawer, or almost any other change on screen, threw away and rebuilt every message you could see. Their pictures dropped back to a placeholder and fetched themselves again, and the transcript lost its place. This is the same fault as the card editor note above, in the chat itself: with fifteen messages on screen, opening that drawer rebuilt all fifteen.
A local Automatic1111 or Forge works without launch flags. Image generation against one always failed with "Failed to fetch", whatever the address, because the request went out from the app's own page and A1111 refuses anything from another origin unless you start it with
--cors-allow-origins. SwarmUI and ComfyUI never had this, which made A1111 look arbitrarily broken. Its requests now take the same route those two take, so it just works. Note that Stop can no longer interrupt a render that has already started: it drops the result instead, the same as ComfyUI.The library header says Personas when you are looking at personas. It read "All cards" over a list of five persona cards, because the header worked out what you were looking at from the folder and the favorites switch and never checked the personas one. A scan started from there labelled its findings "All cards" for the same reason.
The card editor beside a chat stays where you left it. With the editor open and a note shown as rendered HTML, the panel jumped on its own while a reply came in: the note was being thrown away and rebuilt several times per reply, so every picture in it dropped back to "Loading imageโฆ" and fetched itself again, and the panel's height changed underneath you each time. Worst on a card with long notes full of images, which is exactly where it was reported. The note is now rebuilt only when it actually changes, and the panel holds its place when something above the view does change height.
๐งน Under the hood
The chat screen is 1,500 lines smaller, and the work it used to duplicate is now shared. The file behind chat had grown past 12,000 lines, with prompt assembly, image generation and stream retry all written inline and some of it written twice. Those three live in their own files now and chat calls them. That is what made the preview fix above possible: there is one copy of the prompt path, so the inspector and the real request cannot drift apart again, and a fix to either is a fix to both. Nothing here changes what the app does, it changes how many places a fix has to be made.
Debug logs name the turn they came from. A group reply or a DM turn was filed under whatever request type happened to run last, so a log read back later could credit a line to the wrong character or the wrong table. Each turn carries its own label and speaker now.
Rin Chat Update Notes - Version: 0.7.1
28 September 2026
๐จ Card Forge
Proposed changes appear in the chat instead of a window over it. When the guide proposed an edit, a review window opened the instant the reply landed, so the first thing you saw of an answer was a checklist of changes to it, before you had read a word. The proposal now sits inside the reply that made it, the way it does on the website: every field it wants to change, with the full new text, and Apply. More than one field gets a tick box each, so you can take one and leave another. Review is still there for the per-field editing, regenerating and generator picking.
An applied proposal stays where it was. It greys out rather than vanishing, still showing what was proposed and marking each field as applied or not, so a reply that says "full rewrites below" still has them underneath it afterwards. Leaving one unanswered and carrying on now says so in the transcript instead of quietly dropping it. An applied one also carries its own Undo this, so you can put the card back without hunting for the change in Tools โธ History. Undoing says so on the block itself, which now reads โApplied, then undoneโ rather than going on claiming it was applied.
Applying several new lorebook entries adds all of them, not three copies of the first. Picking more than one new entry of the same kind gave you the first one repeated. The same went for any list the guide adds to at once: behavior rules, speech patterns, greetings and example dialogue. A proposal whose reply you regenerate, edit, delete or swipe away also clears straight away now, instead of sitting there offering changes to a message that no longer says that.
๐ฎ Interactive cards
A card can draw a bar.
[[bar: hunger / 10]]puts a small gauge wherever you write it, the one element that doesn't need a line of its own. Either side can be a number or the name of a chat variable, so both ends move as the story does.| 20sets the width, and the color comes from the fraction rather than the name: over 60% draws in the theme accent, 60% or under turns orange, 25% or under turns red. For a bar you want LOW, infection or suspicion or heat, add| invertand those bands read from the other end, so nine out of ten shows nine lit cells in red. It only flips the color; the fill still follows the value.A button that hands you the line instead of sending it.
[[choice: Ask him something | insert I catch up and ask about ]]puts its text in your message box, so you finish the sentence before you send. The button shows a pencil. It exists for the cards that track state by hand: the card hands you[once]{{.next_scene=1}}[/once], you add your own words, one send, rather than retyping a macro every time the scene turns.A macro in that button no longer fires before anyone clicks it. The payload is a line for YOU to send, so its macros belong to that send. They were running on any pass that touched the message: simply drawing the reply set the variable, and every repaint set it again, so a card that tracks its own state quietly disagreed with itself. The payload is now held out of every macro pass and handed over exactly as written.
Regex scripts can write into the saved message. A third destination beside Display and Prompt: Message runs once, as the reply is saved, and what it writes IS the message from then on. It shows in chat, you can edit it with the ordinary Edit action, and the macros in it are frozen to that turn's values, so scrolling back shows what the numbers were then and not what they are now. Two things to know: it can't be taken back by turning the script off, and it's exclusive with the other two, because a script that rewrote the message and then ran again on the way out would apply itself twice.
Imported SillyTavern scripts behave the way their authors meant. A script with neither "only format display" nor "only format prompt" ticked edits the stored message in SillyTavern. Rin treated it as display plus prompt instead, which looks the same in the chat and in the request but leaves nothing you can edit. It now lands on Message, and exports unchanged.
A status line under every reply, without writing the regex. The card editor's Regex section has Add text to every message. It builds the pattern, ends it with a
[co] โฆ [/co]pair and puts the cursor between the tags, so you type your line and that is the whole setup. Anything inside those tags stays in the chat and out of the model's view. Write a gauge's sides as macros,[[bar: {{.hunger}} / 10]], to freeze the numbers into that message rather than following the variable afterwards.
๐ฌ Chat
See and edit the variables a chat is tracking. A Variables button on the right edge of a chat opens a panel listing everything the card is keeping, with its value: change one, rename one, add one, delete one. Variables are invisible until something prints them, which made a card that tracks state by hand hard to follow. An edit here wins over the transcript, so deleting or regenerating an older message can't quietly undo it, and a locked choice re-checks its condition straight away rather than waiting for the next reply. Global variables are listed apart, since changing one changes it everywhere. The session inspector's Variables tab is the same panel now, so either route does the same things.
The dice only appears where it does something. Reroll is offered on the rows whose value the card rolled for itself, and nowhere else, instead of a dice on every row where most of them were no-ops.
๐ Providers
- Text Generation WebUI has a preset. oobabooga's OpenAI endpoint had none, so it went through the custom path and people reached for
--public-apito get a URL that looked like the ones the other presets show. That flag is for reaching it from another machine and the address it prints changes every launch. The preset fills inhttp://127.0.0.1:5000/v1, says no key is needed, and says to start it with plain--api.
๐ Library
- Recently chatted is gone from the sidebar. All chats covers it. If it was your default view, the library opens on All cards instead. The Recently chatted sort is untouched.
๐ช App
An edit you close the window on is kept. Editing a generator and closing the Generators library lost the edit, because the save was waiting on a timer that the closing window threw away. A card's own lorebook had the same hole on one of its two exits. Every panel that saves as you type now flushes what is pending before it goes.
Escape closes one thing at a time. With two overlays stacked it closed both, it fired while you were cancelling an IME composition, and it left the field you were editing still focused. It now closes the top one, leaves an IME cancel alone, and blurs first.
"5 msgs", not "5 msg". Two of the three chat lists got the plural wrong.
A wrong password no longer leaves a key in memory. The key derived from your password was wiped only after a successful unlock, so the one failure that always happens, a typo, returned early and left it behind. It is wiped on every path now.
๐ Guide
- The published guide reads as a document again. The copy at rin.chat lost every table to a single run-on line, printed one heading level as plain text, and opened with the same heading twice. A handful of places in the Guide itself also ran two words together where a line break in the source ate the space between them.
Rin Chat Update Notes - Version: 0.7.0
26 September 2026
๐จ Card Forge
The guide can change part of a generator instead of rewriting the whole thing. Adding one trade to a list of forty meant restating all forty, every other field, the template and the chains โ slow, expensive, and one forgotten key away from quietly shrinking a generator you spent an evening on. It now sends just the change: add or remove options, set one option's odds, rename or add or remove a field, retitle it, change the template. A rename carries the template and any dependency with it, and the app refuses an edit that would leave a field with nothing to roll โ and says so instead of doing it quietly. Asking for one trade now sends about a hundred characters instead of restating the whole generator, and the transcript says what it did โ โadded โMudlarkโ to Tradeโ โ rather than just naming the generator. New generators are still written out in full โ and if the guide rewrites an existing one wholesale anyway, that rewrite can now change anything but delete nothing: a field or an option it forgot to restate stays on the card instead of quietly disappearing. Removing something is still possible, it just has to be asked for.
Asking for a generator in the brief no longer goes quietly nowhere. A new forge session starts with the generator and lorebook switches off, so "/create โฆ give him a generator for what a customer brings him to open" built the card and dropped that half without a word. It now says which switch is off and where to find it.
Duplicate a card's generator. Making a variant โ the โFemale โฆโ / โMale โฆโ pairs a card ends up with โ meant retyping every option, because Duplicate only existed in the Generators library and the card side never opens that list. A card's Generators section has the button now: the copy is the card's own from the start, sits beside the original, and doesn't inherit its chains.
A generator tells you when a field can never show up. A generator with a layout line only prints the fields that line names, so a field added without one is rolled and then thrown away โ invisible in play, and nothing said so. The editor and the review now point it out, and the guide is told to extend the layout when it adds a field.
The guide can no longer claim a change it didn't make. Ask for something a generator hasn't got โ remove a trade that isn't there, rename a field by the wrong name โ and it would cheerfully say "done". The app now says what actually happened: "remove_option: Trade has none of Banker", naming the real fields so the next ask lands. A part of an edit that didn't apply no longer hides the parts that did.
Aim an edit at one part of one generator. The Edit character picker lists each generator's fields alongside the greetings and lorebook entries, so you can tick โVisitor โธ Moodโ and say what you want โ or tick its layout row to change the template, description or odds. Ticking a generator part asks the guide for operations rather than a rewrite, so it changes that one thing and leaves the rest of the generator alone.
Asking for "the greetings" counts as asking for the greetings. Tell the guide that the greetings need to call a generator and it would agree, write all six โ and then the app would throw them away with "left out โ not what was asked for". The filter that stops the guide quietly redoing old requests only recognized an entry named by NUMBER ("Greeting 3"), so naming the list outright looked like it had been asked for nothing. Naming a list now means the list; a number still means only that entry.
"Yes, do both" now gets both. Ask the guide for ideas, let it offer two โ a lorebook entry about a friend, or a line in the background โ and say yes to both, and only one of them arrived: the other was thrown away as "not what was asked for". An acceptance names no field, because the fields are in the offer it accepts, and the filter that stops the guide redoing old requests had nothing to match against. Worse, the note explaining the drop was the guide's context on the next turn, so asking again taught it to leave the same half out. Saying yes โ in words, or by clicking one of the buttons the guide offered โ now keeps everything it agreed to.
A change proposed before the card exists says so. Start a session, describe the character, and if the guide answered "set her appearance to โฆ" with a real proposal, nothing happened at all: there was no card for it to change, and the transcript read as though the edit had been made. The guide is now told plainly that there is nothing built yet, and if it proposes anyway the app says so and points at Generate character.
A generator's layout line can no longer reference a field that isn't there. A placeholder naming no field printed nothing, so a roll came out as "asks for a bowline, about ." โ a broken sentence handed to the model, on every roll, with nothing anywhere saying why. The editor and the review now name it.
Two more places report what the app quietly dropped. Sending with an empty box, and regenerating a reply, read a reply exactly as a normal turn does but had none of the notices a normal turn gets โ a proposal in Draft only mode, a generator asked for with the switch off, a reply that talked about a change and wrote none: all silent on both. They share one set of notices now, and a regenerated reply drops the notices belonging to the version it replaced.
A proposal aimed at a field that does not exist no longer pretends to apply. If the guide reached for a name the app cannot write โ โbackstoryโ instead of Background, say โ the change appeared in the review like any other, ticked, applied, and did nothing, and the transcript then said it had been applied. Those never reach the review now, and a proposal that mixes a real field with a wrong one keeps the real one.
๐ฌ Chat
The screen no longer flashes when a reply finishes. Every completed message made the whole transcript lay itself out twice in a row, which at a raised UI scale or font size read as the chat flickering or zooming for an instant. It happened on every reply, and the longer the chat, the worse it looked. The second pass is gone.
The side panel stays put while you scroll the chat. With the editor or character sheet open beside a chat, scrolling the conversation dragged the panel along with it once the panel's own content ran out, which made long creator notes almost unusable. The two scroll independently now, and only a real wheel or scrollbar moves either.
Side panel headers stay pinned, and get out of the way. Scroll an open side panel and its header now stays at the top instead of disappearing, shrinking as you go so it costs less room than it did standing still.
Impersonate treats what you type as direction, not as your line. Shift-click Impersonate, type "ask her about the money", and it would often reply to that, or hand it straight back as your message. What you type is instruction for the draft, so it now writes the message that carries out what you asked, in your character's voice.
Send an impersonation, then ask for another. Picking a draft and sending it used to be the end of it; wanting a different take meant typing the whole instruction again. There is a button on your message now that reopens Impersonate with what you asked for last time, and the draft you choose replaces that turn.
Choose which card fields this chat sends. A card's appearance, background, example dialogue and the rest are all-or-nothing in the prompt, which is expensive when a long chat has made half of them redundant. The chat's side panel now has Fields sent for this chat: untick a field and it stops being sent for this chat only, other chats on the same card are untouched, and the context meter updates as you go. Turning off the card's system prompt falls back to your global one, or to nothing if you have not set one.
Two things that made long chats redraw more than they had to. A regex script scoped to recent messages was redrawing the whole transcript, and the app was rewriting its own layout settings every time the window resized. Both are fixed; neither changes how anything looks.
๐ Prompt inspector
The sent prompt reads as a prompt again. Each exchange was one long line of escaped JSON, which is technically everything you asked for and practically unreadable. Requests are laid out properly now, each message in its own box, with a heading saying which part of the prompt it came from: system prompt, chat history, and what was added after it. Field names and labels are coloured so you can find things by eye.
Exchanges survive leaving the chat. Closing a chat, or the app, turned its recorded exchanges into flat text with the real request data gone, so an older chat could not be debugged properly. They are kept as they were, up to 10MB per chat, oldest dropped first. Each exchange also has its own search and a show raw toggle for the exact JSON that went out, and the tab says how many exchanges it is holding.
Long blocks can be dragged taller, and the window opens full size. A big system prompt in a short box meant scrolling a postage stamp. Anything taller than its box now has a drag handle at the bottom, and the whole inspector opens maximised, since it is a window you open to read a lot at once.
๐ช App
- Every window has an X. Dialogs could be closed with Escape, by clicking outside, or by whichever button happened to be there, but several had no visible close control at all. They all have one now, in the top right beside the expand button.
๐ Read-aloud
Speed works on the bundled Piper voices. Slowing a Piper voice down did nothing at all โ the setting was applied on the way out, to a voice that had already finished speaking at its own pace. The speed now goes into the voice itself before it says a word, so it genuinely speaks slower or faster instead of being stretched afterwards. It also takes effect on the next thing read aloud, rather than after a restart.
Three new dials for the bundled Piper voices. Pause between sentences puts a real beat between one sentence and the next, for a voice that was running them together. Expressiveness decides how much the delivery varies โ turn it down for a flat, even read, up for something more animated. Rhythm variation does the same for the timing, from metronomic to loose. Leave any of them blank and the voice's own trained value stands; clear one after trying it and you get that value back, not the last number you typed.
Finding and managing your trained voices. The voice list put the ones you trained yourself somewhere in the middle of 126 catalogue voices, sorted by name. Yours are now at the top under Your voices, with the catalogue below โ and adding or removing them has moved into Manage your trained voices, so the box you pick a voice from is no longer sitting next to a box that looked like a second voice picker.
๐ Cards & notes
- The notes swap stays where you put it. The card editor's side column always opened on your private notes, so if you keep your notes somewhere else and only want to read the creator's, you were hitting the swap button on every single card. It remembers now โ flip it once and every card opens that way, until you flip it back.
๐ผ Images
Adding an image provider finally offers image models. NanoGPT and OpenRouter keep their image models on a different list from their text ones, and the app was only ever reading the text list โ so setting up a new image provider showed you hundreds of chat models and none of the ones that can draw. It reads the right list now: NanoGPT offers all ~240 of its image models, OpenRouter the models that actually return a picture. Providers already set up were unaffected and keep working.
A base URL with the endpoint left on it no longer breaks generation. If you pasted
โฆ/v1/images/generationsinto the address field โ which is exactly what you'd try when the model list looked wrong โ the app added the endpoint a second time and every generation died with a bare "failed to fetch", no status, nothing pointing at the field. The address is now understood either way.Picking an image or voice model works like picking a text model. Both were a plain box with the browser's own autocomplete hanging off it โ no search, none of your own model groups, and with NanoGPT's 239 image models or 28 speech engines behind it, no way to find anything. They use the same picker the rest of the app does now: type to search, your groups as headings, the model's name with its id beside it, and you can still type an id no list mentions.
๐ง Thinking
- "None โ don't think" now actually stops GLM and Qwen thinking. Those models don't read the field every other provider uses to turn reasoning off, so setting it to None changed nothing and a Thinking block would still appear partway through a scene, seemingly at random. The app now sends the two things those models do read โ the right tag for the family, and the template switch โ whenever you ask for no thinking on one of them. The settings for both are still there if you need to override what it picks.
๐ฎ Interactive cards
Choice buttons no longer turn into raw code at random. A choice only became a button when its line held nothing else, so any time the model bolded it, italicized it, put it in a bulleted list or ended it with a full stop, you got the markup instead: the whole
[[choice: ... | if ... ]]line, conditions and stat effects on show. Models do that only some of the time, which is why it looked random. The decoration is now ignored and the button appears either way.A button can ask you something. Cards can write
[[choice: Make a guess | ask Who is it? | as my_guess]], and clicking it opens a text box right there for you to type into. Before this, a button that meant "now tell me something" had to spend a whole turn on it: the card offered the button, the app sent its label, and the model was supposed to come back with the question. Smaller models often skipped that step, which is how Twenty Questions in Rin's Arcade could congratulate you on a guess you never got to make. Rin's Arcade itself is updated to use it, so Twenty Questions now hands you the box to type your answer into.The cards that come with Rin Chat can be updated now. They used to be handed out once and never looked at again, so when a release fixed one, only people installing fresh ever got the fix. A fixed built-in card now shows up in Card updates in the library sidebar, next to updates for cards from the site. Nothing is overwritten behind your back: you get the same field-by-field review, every change ticked and yours to untick, and a rollback point saved first. If you deleted one of those cards it stays deleted and stays quiet, and Skip works the same as it does for site cards.
The guide no longer makes up answers about fields it can't see. Ask it to set a depth prompt, a group-only greeting or the image prompt prefixes and it would confidently tell you they don't exist, or send you to a tab that isn't there. Those fields are real; the guide simply was never shown them, so a weaker model filled the gap with a guess. It now knows they exist, knows their real names, and tells you which card editor section to open instead of inventing one.
Importing a card now brings its regex scripts and document styles with it. Both were missing from the field-by-field comparison, so they never showed as a difference and were quietly kept from your old copy: importing a card over itself, taking a site update, or taking a built-in update left the incoming scripts and styles behind. They appear as their own rows now, named rather than counted, so an edited pattern or restyled document block is visible before you accept it, and you can untick either to keep your own.
Rin Chat Update Notes - Version: 0.6.9
24 September 2026
๐ฌ Chat
Generating a picture no longer kills the choices above it. Asking for an image under a reply that offered choices retired those buttons โ the picture counted as the story moving on. It doesn't: the choices stay live under any pictures you generate, and go quiet only when you actually reply.
Picture and gallery are one button now. The two image buttons under the chat were separate pills that did related things; they're a single pill with two halves โ Image to make one, the icon beside it for everything this character has already generated.
Suggest moved into Impersonate, and now writes the whole message. Shift-click Impersonate and the window has an Ideas button: a few one-line things you could do next, from the scene so far. Click one and it doesn't just drop that line in the box โ it writes the message out in full, in your character's voice, ready to edit or send. The old Suggest button beside Undo is gone; its one-tap chips live on in the phone remote, where they fit. The ideas are better, too: they used to be the choices the reply already showed as buttons, read back to you.
Edit a message while a reply is being written. The edit button used to gray out until the character finished, so a typo in what you just sent had to wait. You can open any message and work on it now โ Save holds until the reply lands, and says so. The message being written into is the one exception; it's still being typed.
๐จ Card Forge
The guide can ask with buttons. Rin can end a reply with a few one-click answers โ offered where she'd otherwise leave you staring at an empty box, and again once a card has been generated, for the next thing worth doing to it (more greetings, a lorebook, a sharper voice). They're shortcuts past typing, never the question itself: she still asks in prose, and you can always answer with something she didn't think of. Only the newest reply's buttons are live.
Editing a field no longer gets refused when generating the card didn't. The forge writes whatever you ask it to โ it runs on your own provider, so nothing in the app polices content โ but only the full generation said so to the model. Rewriting one field, rewriting several, or asking the guide about the finished card went out without it, so the same model that wrote an explicit card happily would balk at touching it afterwards. Every pass carries it now.
๐ฑ Phone
- The message box grows as you type. On a phone it had a drag bar along its top edge, which is exactly where your thumb lands when you tap into what you just wrote โ so it got grabbed constantly by people not reaching for it. The bar is gone there. The box now sizes itself to what you have written, up to about a third of the screen, and scrolls past that. The drag bar stays on the desktop, where a mouse can actually aim at it.
๐ Cards & notes
- Render HTML in notes without being asked every time. Imported cards nearly all carry HTML notes, and each one asked before showing it. Settings โ Chat Display โ Card library has an Always render HTML in notes switch that answers it once for every card. It asks for confirmation when you turn it on, and says why: the HTML itself is stripped of scripts, but an image a note links to is fetched from whoever hosts it, which tells that server your IP address and that you opened the card โ a tracking pixel in all but name. A warning stays under the setting while it's on. Any single note still flips back to raw text with the ๐ button, and cards you already said no to stay as text.
๐ช App
Opening a screen shows that it's opening. Settings, a chat, the card editor and the search window each load on demand, and while that happened the app showed nothing at all โ so the click read as ignored and Settings got clicked five more times. There's a spinner now, and the screens you reach first are fetched quietly in the background once the app has settled, so the click usually has nothing to wait for.
No more trailing dots on buttons. Around sixty labels and field hints said "Importโฆ", "Manage tagsโฆ", "Search chatsโฆ". They say Import, Manage tags, Search chats. Spelling is American throughout now, too โ Organize, color, canceled.
The click that brings the app back doesn't do anything else. Alt-tab away with a window open, click back in, and a click that lands beside the window no longer throws it away โ that click asked for Rin Chat, not for your work to close. The same goes for the app's own Close button. The next click behaves normally.
Big windows resize, and stay how you leave them. Dialogs with room to use โ the character pickers, settings panels, the group window, memory, the prompt inspector โ have a maximize button in one corner and a drag grip in the other. Set one the way you like it and it opens that way from then on โ each window remembers its own size, so sizing the prompt inspector doesn't touch your settings window. Double-click the grip to go back to the default. Small confirmations stay small. (Windows narrower than about 600px โ the regenerate-with-directions box, the in-chat model picker โ did the resizing but forgot it on close; they remember now too.)
One character picker everywhere. Every "which character?" list in the app โ adding a member to a group chat, picking a card for a sprite pack, Image Studio's "use as card image" and "prompt from character", the reference card in Card Forge, putting a lorebook inside a character or copying one into it, and the new shared-lorebook link โ is now the same picker: search by name, creator or tag (
f:for every field), a folder rail where there's room, character pictures on every row, and a list that loads as you scroll. Several of these used to be a plain list of names with no pictures, and two of them couldn't search at all.
๐ Providers
The model picker is the same everywhere, groups and all. Changing model mid-chat, in Card Forge, for a group member or for chat memory used to be a bare text box with a browser autocomplete behind it โ no search, no groups, and a different control in each place. They're all the one picker now: type to search the provider's whole list, see your own groups as headings, and open the group manager right there instead of going to Settings. Card Forge in particular gets the chat's own chip and Model & generation window, still set per forge session โ leave it on Active config and it follows your chats.
Drag your presets into the order you want. Generation configs, system prompts, and your image and voice providers are lists you pick from constantly but couldn't rearrange โ new ones landed at the bottom forever. Drag any row up or down and the list stays that way. The list opens a gap where the row will land as you drag, so you can see the result before you let go.
Group a provider's models your own way. A list of 300 models sorted alphabetically is no way to choose one, so you can now make your own sections โ "Cheap & fast", "Uncensored", "The good one" โ and drop models into them. They show up as headings in the model dropdown, in your order, with everything else under Ungrouped. Organize them from the provider itself, or from the Model groups button beside any generation config's model picker. The groups belong to the provider, so every config that runs on it sees the same sections โ and a provider's image models are grouped separately from its text models.
๐ Lorebooks
- Give a character its own shared lorebooks. A card's Lorebook section has a new Shared lorebooks row: attach any book from your library and that character reads it in every chat it's in, without attaching it chat by chat. The lorebook editor has the same link from the other side โ a Characters button listing who reads this book. The book stays in your library โ one guild, faction or city book can be attached to several characters at once. In a group chat only the character that carries it reads it, so an organization's secrets don't land in everyone's prompt, and it's inserted as that character's own lore (the Lorebook Activation insertion strategy treats it like their embedded book).
๐ฒ Adventure mode
Right-click a choice to act it out โ your way. Shift-clicking a choice has always written your message performing it, in your character's voice, but nothing said so. Right-click any choice now and you get both: Act it out in your voice, and Act it out with directions โ where you say how first ("reluctantly, and keep it to one line") and the draft follows it.
Adventure mode leaves more of the window for the story. The rules the app pins to every single turn are about a fifth smaller: the scale the GM uses to grade what you say in a say-box is now sent only on the turn it's actually judging your words, and the turn-order rules only once a fight is being tracked. Nothing plays differently โ there's just more room for the adventure itself, which matters most on a small context window.
Rin Chat Update Notes - Version: 0.6.8
23 September 2026
๐ฅ Group chats
Auto mode stops when you leave the chat. Switching to another chat while a group was talking to itself let it keep going and write its replies into the chat you had just opened.
Group chats got a big reliability pass โ characters stop getting mixed up. The model is now told clearly, on every turn, who said what and who it's speaking as, so voices stop bleeding together and the wrong character stops answering. Each past turn in a group is labelled with its speaker (which also fixes providers that quietly ignored the old attribution and left the model guessing), and every reply ends with a plain "write this as
only" reminder. Address a character by name and they answer. In a group, just name who you mean โ "Kisa, what's the plan?", or "I wonder what Kisa would say" โ and Kisa replies. A normal send now goes to whoever you named instead of always taking strict turns. Say no name and the app picks whoever fits the moment.
Choosing who speaks next is instant, free and private. "AI picks" and auto-mode used to spend a whole model call to decide who talks; they now use the small model already built into the app for offline memory โ so the choice adds no cost and no latency, works with every provider (even ones with no cheap model to spare), and never repeats the character who just spoke.
Choose who answers in a group chat. โฐ Order now has a reply order: Smart (the default โ name two or more members and each answers in turn), Natural (SillyTavern's: whoever you name plus a talkativeness roll per member, so one message can get several replies; talkativeness is read from imported SillyTavern cards and adjustable per member), List, Pooled (everyone once before anyone twice) and Manual (only who you click). Auto mode waits 5 seconds between turns (adjustable there), and stops when you start typing.
Mute a group member. In a group chat's โฐ Order, Mute keeps a character in the group but skips them whenever the app picks who speaks โ the rotation, AI picks, Auto mode and the Director. Their chip in the group bar dims, and clicking it still has them speak.
{{groupNotMuted}}now leaves muted members out, as in SillyTavern.New chat with this group. A button in the group window starts a fresh chat with the same members, mutes, turn order and per-member models. Characters' group-only greetings are used now: they open that chat, and a member added before your first message greets with one.
A reply that drifts into someone else's lines is trimmed. If a character's reply starts scripting the others ("โฆKisa: hi. Syl: โฆ"), the extra lines are cut so each turn stays one character โ and the trimmed version is what's saved, so the slip doesn't teach itself back to the model.
The group bar sits with the composer, not over the chat. The member chips and the context meter now share the composer's panel at the bottom instead of hovering in the message area, and the context meter's bar reads clearly against it.
๐ผ๏ธ Card images
Re-importing a card keeps its images. Choosing Merge when importing a card you already have deleted every sprite, picture and background that card held โ the files, not just the links. They're kept now.
Animated card art stopped losing its motion. Setting an animated PNG as a card's picture saved a single frame โ the crop step flattened it on the way in. Animated art is now stored exactly as it arrives, so it moves in the library and in chat; it has to be 2:3 already (300ร450, say), because it can't be cropped here. Animated WebP counts as animated too now: a card downloaded from aicharactercards.com, which re-encodes every image to WebP, showed a still picture where the original moved.
Cards can carry their own images. The card editor has a new Images section with three kinds, and they travel with the card in a bundle:
- Expressions โ sprites named by feeling (
joy,anger,neutralโฆ;joy-2is a secondjoy). In chat, the character's expression changes with what they say โ in a panel beside the chat, or visual-novel style on a stage above it. - Pictures โ images the card shows inside a message by name:
[[img: map]]. - Backgrounds โ chat backgrounds the card switches to by name:
[[background: tavern]].
- Expressions โ sprites named by feeling (
Four ways to add them. Add images from files, Add from link (downloads it into the card โ or paste an image), Generate with your image provider in the card's own style, or Import sprite pack (a zip of
joy.png,anger.pngโฆ). Export sprite pack saves one back out, and a sprite pack dropped on the library asks which card it's for. Every image is converted to WebP and scaled down, so a card with dozens of sprites stays light.How the expression is picked. From each reply, by the small built-in model that chat memory, group chats and Card Forge already use โ free, private, and no extra download if you've used any of those. Or switch to an emotion classifier (a one-time download) in Settings โ Chat display, where you also choose side panel or visual novel (a chat can switch with the buttons under the sprites). A
[[expression: joy]]line in a reply or greeting always wins.Call them by name.
[[img: map]]shows a picture ([[img: map | caption]]adds a caption),[[background: tavern]]switches the chat background and[[expression: joy]]sets the sprite โ in a reply, a greeting or a lorebook entry. Tick Tell the AI about these images and the AI writes them on its own. The macros{{img::map}},{{background::tavern}}and{{expression::joy}}do the same, for places where macros are easier to write.Pictures in lorebooks, choices and reveals. A lorebook entry can carry a picture that opens the reply whenever the entry fires; a choice can be a picture tile (
[[choice: Play the tarot | img tarot]]); and a picture inside a[[reveal:]]stays hidden until it's opened.Images from websites ask first. An imported card whose images are links to a website shows a button instead of loading them, then saves them into the card โ nothing is loaded from that site again.
๐ฆ Card bundles
Bundles are a work in progress. The format is still settling and will likely change over the next week or two, so treat a bundle you export now as a file to re-export later rather than something to archive. aicharactercards.com will start taking bundle uploads in a few days; until then, bundles are for sharing files directly.
Open a bundle from the site. Once listings go live, a bundle's page on aicharactercards.com gets an Open in Rin Chat button: the app fetches it and imports it like any bundle you opened yourself, with the same review of what's inside and the same choices when something clashes with what you already have. Nothing is added without you. Wherever a bundle comes from, the import now says so if any of its files were changed after it was exported.
Bundles save as
.aicconly. A one-card bundle could also be saved as.charx, on the promise that SillyTavern and RisuAI would open it. In practice they don't import it, so the option is gone rather than misleading..charxfiles from other apps still open in Rin Chat as before.A bundle no longer carries your private notes. Your own notes on a card, its folder, favourite and collections were written into the bundle and landed on whoever imported it. Bundles now carry only the card itself.
"Import as new" keeps the art and images. Importing a bundle and choosing New for a card that matched an existing one produced a card with no picture and none of its images.
Share a card with everything that comes with it. Export a card as a bundle โ one
.aiccfile with its art and, if you tick them, the document styles it uses and your shared lorebooks (the ones used in its recent chats are ticked for you). Select several cards and Export bundle to send a whole cast as one file; importing it puts them in a new folder named after it. Double-click an.aiccfile to import it, and Open with โ Rin Chat works on.charxfiles from other apps. Chats are never included, and a bundle can be up to 25 MB.
๐งฉ Macros
Macro mistakes are pointed out as you write. The macro playground, the card health check, and a note right above a card field or lorebook entry (when you click away from it) now flag an
{{if}}missing its{{/if}}(or the reverse), a stray{{else}},=where==was meant, a macro name that doesn't exist,{{trim}}with text inside it, and a{{that never closes โ each of these used to fail silently.Macro autocomplete in card fields and lorebook entries. Typing
{{in any card field, greeting, example or lorebook entry now lists the macros to pick from, as it already did in the message box โ and the list now covers every macro that works, each with a short description in your language, followed by your own custom macros. Ctrl+Space opens it anywhere, as in SillyTavern. The Guide has a new Macro reference: every macro in a table, with what it does and an example.Lists for inventories, clues and party members.
{{.inv push rope}}adds an item,{{.inv remove rope}}takes one out,{{count: inv}}says how many there are, and{{each: inv | - {{item}}}}writes a line per item โ with{{index}}for its number, and room for an{{if {{item}} == rope}}inside. A list is ordinary text (rope, torch), so{{.inv}}prints it and{{if .inv contains rope}}checks it, as before. See the Guide's Variables section.Easier macros for game cards.
{{.hp > 0 ? alive : dead}}picks text by a condition in one line โ and, like{{if}}, only the chosen side runs.{{weighted::common:5::rare:1}}is a random pick where each option can be made more or less likely โ handy for loot and encounter tables.{{if .hp == .hp_max}}compares two variables.{{calc: .hp + $coins}},{{switch: .mood | โฆ}},{{repeat: โฅ | .hp}}and{{bar: .hp / .max}}accept the./$you'd write anywhere else ({{calc: $coins = โฆ}}stores to a global). Variable names can contain dots and hyphens ({{.guard.hair}}),{{endif}}closes an{{if}}, andFalsecounts as false in any case.{{silent}}โฆ{{/silent}}runs a section without showing it. Everything inside still works โ variables are set, dice rolled, lists updated โ but none of its text appears. Build and debug a section with its output visible, then wrap it once it's right, instead of rewriting its macros.SillyTavern cards' macros work as written.
{{description}},{{personality}},{{scenario}},{{mesExamples}},{{charPrompt}},{{charInstruction}}and{{charDepthPrompt}}now fill in from the card (they printed nothing) โ with exactly what the card would carry exported to SillyTavern, so an imported card reads its original text. Macro names work in any capitals ({{Appearance}}). Also accepted now:{{getvar hp}}/{{roll 1d20}}(a space instead of::),{{if::โฆ}},offandnoas false in a condition,\{\{โฆ\}\}to show braces literally, and{{ // }} โฆ {{ /// }}comments spanning several lines.Blocks work like SillyTavern's. Any macro that takes an argument can wrap text:
{{setvar backstory}}โฆ{{/setvar}}stores everything in between,{{reverse}}โฆ{{/reverse}}reverses it,{{each: inv}}โฆ{{/each}}repeats it per item, and{{trim}}โฆ{{/trim}}keeps a section but trims its edges (as in SillyTavern 1.19 โ where text inside a single{{trim โฆ}}is dropped, so it is here too). What's inside a block โ including an{{if}}/{{else}}โ is now trimmed and un-indented, as in SillyTavern, so blocks can be laid out on their own lines without adding blank lines; write{{#if โฆ}}(or{{# setvar โฆ}}) to keep the spacing exactly as typed. This changes spacing in existing cards where an{{if}}started or ended with a space or line break on purpose. Card and chat macros ({{description}},{{lastMessage}}โฆ) now also work in greetings, messages you type and quick replies, not only in the prompt.More of SillyTavern's macros.
{{group}},{{groupNotMuted}}and{{notChar}}name who's in the chat (they printed nothing), and{{charIfNotGroup}}matches{{group}}(as in SillyTavern's current engine).{{charDescription}},{{charPersonality}},{{charScenario}},{{greeting}}and{{version}}work as SillyTavern's other names for the card fields;{{isMobile}}and{{hasExtension::โฆ}}answerfalse, and SillyTavern-only macros (the instruct and reasoning ones,{{outlet}},{{allChatRange}}, creator notes) are pointed out by the macro checker as having nothing to do here rather than flagged as unknown. New:{{summary}},{{authorsNote}},{{defaultAuthorsNote}},{{charAuthorsNote}}(the card's Character's Note),{{systemPrompt}},{{defaultSystemPrompt}}and{{original}}(in a card's own system prompt, the app's prompt it replaced);{{model}},{{maxContextTokens}},{{maxResponseTokens}},{{maxPrompt}}and{{lastGenerationType}};{{currentSwipeId}},{{lastSwipeId}},{{firstIncludedMessageId}},{{idleDuration}}and{{input}};{{time::UTC+2}}and{{timeDiff::a::b}}; and{{charPrefix}}/{{charNegativePrefix}}for the card's image prompt prefixes. The card's list fields can hand over one item:{{behaviorRules::0}},{{speechPatterns::1}}(new),{{dialogueExamples::2}}โ counted from 0, like{{charFirstMessage::0}}and SillyTavern.&&and||work in a plain macro.{{.a==1 && .b==1}}and{{.a==1 || .b==1}}printed the wrong answer โ everything after the first comparison was read as the value being compared against, so==always came out false and!=always true. They now give the same answer as inside{{if โฆ}}. A||with no comparison is still the fallback:{{.title || none}}works as before, and so does a fallback or a value that just contains&&or||({{.x = salt && pepper}}).Conditions can be grouped and negated, and take a macro on either side.
{{if .ready && (.hunger > 0 || .thirst > 0)}}and{{if !.met}}now work. A comparison with a macro in braces โ{{if {{getvar::hp}} > 3}},{{if .name == {{user}}}}, or a grouped{{โฆ}}that printsfalseโ was always true; it now compares the values. Against a number, an unset variable counts as 0, so{{if .hp <= 0}}no longer depends on text ordering.Variable shortcuts print exactly what they do in SillyTavern, so an imported card reads the same in both apps.
{{.hp = 10}},{{.hp += 5}}and{{.hp -= 5}}now print nothing, like{{setvar}}โ a greeting that sets up a game no longer shows a row of stray numbers.++and--print the new value, and??=/||=print the value the variable ends up with. To set a value and show it, write both:{{.hp = 10}}{{.hp}}.Smaller macro fixes.
{{IF}},{{ else }},{{ /if }}and{{else if โฆ}}are recognised in any case and spacing. A{{// comment}}no longer runs the macros inside it. A variable holding macro text prints it as written instead of running it. Adding decimals no longer leaves float noise:{{.x += 0.2}}on 0.1 stores0.3, not0.30000000000000004.-=,--and{{decvar}}leave a text variable alone instead of turning it into -1.{{setvar::time::12::30}}keeps the whole value. Nested{{repeat}}s no longer crash the message.{{roll::2d6 + 1}}and{{ trim }}accept spaces, and dice add together:{{roll::1d6+1d4}}(it answered 0).{{calc: -2 ** 2}}is -4, as in maths, and a large result prints in full instead of as1.18e+21. Spaces around{{pick}}/{{random}}options and{{setvar}}values are trimmed, as in SillyTavern.{{hasvar::a && hasvar::b}}works outside an{{if}}too.
๐ฌ Chat
A reply that ends on choices or a document keeps them. With "trim incomplete sentences" on, a reply ending on a bolded choice menu, or on a document the model forgot to close, was cut back to the last sentence and the buttons or document were lost for good.
A reply that only thinks no longer sticks on "Thinkingโฆ". When a model opened its thinking block and stopped without closing it, the message showed a thinking spinner forever with the text hidden inside it.
Design your own document styles. A
[[doc: name]]style is now a small template: HTML with placeholders for where the text goes ({{title}},{{content}},{{raw}}), an optional line template that turns each "Name: message" line into whatever you like (that's how sms draws bubbles), and CSS for the style alone. Settings โ Chat Display โ Document styles has one picker for the built-ins and yours. The built-ins can't be changed, but duplicating one gives you its full template to rework, so a copy of sms really is an sms thread in your own colours. Styles you made before convert automatically.A card that shows what all of this does. Rin's Arcade arrives in your library on update: six little games run from Rin's bedroom โ room escape, commission night, stream night, tarot, twenty questions and a date planner. It's built out of the pieces above โ choices that remember and unlock, picks, text boxes, timed choices, folded clues, a lorebook entry per game that loads only while that game is running, and a neon arcade document style the card carries with it. Delete it if it's not for you; it won't come back.
Cards can bring their own document styles. A card's new Document styles section holds styles that travel with it and work in its chats without anyone adding them first. A phone, a case file, a spellbook page: the AI is told they exist and uses them. A style of your own with the same name still wins.
Cards' own regex scripts now work. Many imported cards come with find/replace scripts that turn tagged text into things like a phone's text-message thread or a status panel. Those scripts used to be kept only inside the original file: they never ran, and exporting as an AICC card or uploading dropped them. Now they're part of the card, travel with every export, and run in chat after your own regex scripts. The first time you chat with such a card, the app asks before running them. Edit them, or switch them off, in the card editor's new Regex scripts section. Replacements can use macros like
{{char}}, and a script can put macros in its Find pattern too.Laid-out HTML in a message shows as intended. A block of neatly indented HTML โ a card's phone mockup, for one โ was cut apart at its blank lines and shown as raw code. It now renders as the layout it describes.
Send with directions. Shift-click Send (or press Ctrl+Shift+Enter) to tell the model what its next reply should do โ "keep it under three sentences", "have her finally admit the truth". The directions ride along for that one reply only (they aren't saved to the chat), and Regenerate on that reply reuses them. Works on an empty send too, to steer the next reply without writing a message. Directions now go at the very end of what the model reads โ after the card's post-history instructions โ so a card's own instructions can't override them; this also makes Regenerate's directions and a group member's Shift-click directions stick better.
Choice buttons at the end of a reply no longer disappear with "Trim incomplete sentences" on. A reply ending on
[[choice: โฆ]]lines had them cut off as if they were a half-finished sentence.A reply ending on a list no longer loses its last item. With "trim incomplete sentences" on, a reply that ended on a list item or heading โ "3. Card Tarot" โ was cut back to "3.", because the list number's full stop looked like the end of a sentence. A final list item or heading now counts as a complete ending.
A document the model forgets to close no longer swallows the rest of the reply. When a card shows a styled block โ [[doc: terminal]], an SMS thread, a newspaper โ and the model leaves off the closing tag, or wraps the marker in bold, the block used to eat everything after it, including the reply's choice buttons. It's now repaired automatically: the block closes in the right place, the buttons come back, and the cleaned-up text is what's saved, so the model stops repeating the mistake.
Forking a chat no longer drags in the other branch's future. Going back to an earlier point and branching used to copy the whole parent chat's memory and its current scene and summary into the new fork โ so the model could "remember" things that only happened down the path you left. A branch now carries only the memory that belongs to it, and starts its scene and running summary fresh. (Chats you branched before this heal on their own as memory rebuilds.)
๐ช App
UI scale no longer throws off sizes. Above or below 100%, some windows, lists and menus came out the wrong size โ the Settings pop-out stopped short of its window, and at a large scale a few dialogs ran past the edge of the screen. Every one of them now follows the scale.
Edit with AI opens in front of the full-screen editor. Clicking it from the full-screen editor opened its window behind the editor, where it couldn't be seen until the editor was closed. Messages like "Saved image into the card" or "JSON copied" also showed behind the window they came from โ they now appear on top.
Settings pops out again. Clicking Pop out closed Settings without opening its window.
The window reopens the way you left it. Rin Chat now remembers its size, its place and whether it was maximized, instead of reopening at the default size in the middle of the screen. It also works across monitors with different scaling. (On Linux under Wayland, the system decides where windows open, so only the size and maximized state come back.)
Importing opens the folder you last imported from. The card import dialog โ and the folder import โ now start where you left off instead of in your home folder every time (it always started at Home on Linux).
Rin Chat Update Notes - Version: 0.6.7
20 September 2026
โจ New
Do real maths in a macro.
{{calc: hp + armor * 2}}evaluates a whole expression, so you no longer have to build a sum one+=at a time. It handles+ - * / %,**(power), parentheses, your variables by name (a missing one counts as 0) and the functionsfloor,ceil,round,abs,sqrt,min,maxandclamp(x, low, high)โ e.g.{{.health = {{calc: hp + armor}}}}or{{calc: min(hp, hp_max)}}. A malformed expression prints nothing rather than an error. The Guide's Variables section has the details.More macro tools for building games. Alongside
{{calc}}:{{switch: mood | 0-3=Tense | 4-6=Calm | *=Content}}maps a value to text in one line (instead of a stack of{{if}}s);{{repeat: โฅ | hp}}and{{bar: hp / hp_max | 10}}draw pips and HUD meters;{{if}}now takes{{elseif}}branches; conditions understandcontains({{if .inventory contains rope}}, and the same in a locked choice:[[choice: Tie it down | if inventory contains rope]]);{{calc}}gainedrandint(1, 6)/rand(0, 1)and an assign-and-store form ({{calc: hp = hp + armor}}, silent). All covered in the Guide's Variables and Conditionals sections.
๐ฉน Fixes
A variable set earlier in a message is now visible to a
{{if}}later in the same message. Conditionals used to be resolved in a pass before variable assignments, so{{.flag=1}}{{if .flag}}โฆ{{/if}}(and the same with{{setvar}}) read the variable as still unset and took the wrong branch. Macros and{{if}}/{{elseif}}/{{else}}blocks now resolve together, left to right, in the order they're written โ only the branch that's taken runs, so a skipped branch's macros and rolls still don't fire.The fullscreen note editor fits the window at any UI scale. With Sizing & Layout โ UI scale above 100%, the expanded editor was sized from the unzoomed window, so it grew past the edges and its buttons ran off-screen. It now measures the window the way the rest of the app does. Pictures in a note keep their shape there too: one laid out beside another could come out stretched.
The card drawer in a chat can swap its notes. The notes box beside a chat now has the same โ button as the full editor, switching between Card Notes (private) and Public Creator Notes in place.
Chat Memory no longer has a blind spot just past the context edge. Memory held back the four messages that had most recently scrolled out of context, so those were neither in the prompt nor in memory โ the model couldn't see them at all. Every message that has left context is now in memory straight away. Only the model-written section summaries still wait a few messages, so regenerating a reply (which nudges how much history fits) doesn't cost extra summary calls; until then those messages reach the model word for word.
"Recent messages to skip" says what it does. It's now Never recall the newest in Settings โ Memory & Context โ Recall past messages, and its description explains it only matters when no context budget is set and never changes what gets indexed.
Adventure Personas keep a starting inventory written in any language. Item names in Chinese (or any script other than Latin) were all reduced to the same internal name, so a whole starting inventory collapsed into a single entry and seemed to vanish from the character sheet. Each item now keeps its own name on the sheet, and the GM can add, spend and remove it like any other. Ability names in other scripts are fixed the same way. English names are unchanged, so existing chats keep working.
Rin Chat Update Notes - Version: 0.6.6
19 September 2026
โจ New
Clickable choices on any card. Choice buttons aren't just for Adventure Mode any more: any card can offer them. A line holding only
[[choice: โฆ]]becomes a button right where it's written, and clicking it sends that text as your message. Choices can now sit anywhere in a reply, so a card can group them under headings like a menu (Explore, Talk) โ in Adventure Mode too. Only the latest reply's buttons work; older ones stay visible, greyed out, as a record of what was offered. A choice can roll one of the card's generators ([[choice: Draw a card | gen Tarot]]); stats and dice still need Adventure Mode. Card Forge knows how to write them, and the Guide has a section on it.More ways for a reply to be interactive. Any card can now also use:
- Ask โ
[[ask: What do you name the dragon? | as dragon]]shows a text box; your answer is sent as your message, and withasit's saved for the card to use ({{getvar::dragon}}). - Pick several โ
[[pick 2: Sword | Shield | Bow | Lantern]]lets you tick two, then Confirm. - Timed choices โ
[[choice: Freeze | timer 15]]counts down under the reply and sends that choice if you don't pick in time. The clock starts only once you reach the choices, adds time for how long the reply is to read, pauses while you type, and has a Pause button. Settings โ Chat Display โ Timed choices turns them off. - Reveal โ
[[reveal: Read the letter]] โฆ [[/reveal]]is folded until you click it open; nothing is sent. - Choices that remember โ
[[choice: Take the key | set has_key = true]]saves a story variable when picked (+=/-=count up and down). - Locked choices โ
[[choice: Open the chest | if has_key | hint You need a key]]shows locked until the condition holds, then opens by itself. Conditions can compare (coins >= 5,door == open) and combine with&&/||;| hidekeeps a choice secret until then. - The story can change variables โ a reply line
[[set: door = open]]is applied and never shown. Regenerating, swiping, deleting or undoing a message puts its variables back, whether a choice, an answer or the reply set them. - Documents โ
[[doc: paper]] โฆ [[/doc]]shows text as a letter, a newspaper, a terminal or text messages (sms, your own on the right). Add your own document styles, or restyle the built-ins, in Settings โ Chat Display โ Document styles.
- Ask โ
Choose where the memory tree goes. With the memory tree on, Settings โ Memory & Context โ Recall past messages โ Where to inject was locked to the system block. It's now unlocked, with its own setting kept separately from plain recall's, so you can move the tree's block into the recent history (at a depth) โ which caches better โ and switch back without losing either choice.
Export the Guide. Export guide at the top of the Guide saves the whole thing, and each section has its own Export button: Markdown, plain text (both saved to Downloads) or PDF (through the print dialog's Save as PDF). Handy for reading it elsewhere, translating it, or giving it to an AI to ask questions. The whole guide is also online at https://rin.chat/updates/guide.md, updated with every release, so an AI with web access can read it directly.
Health bars on your character sheet. In Adventure Mode, a stat with a matching maximum (
hpwithhp_max, ormanawithmana_max) now shows a bar under it on the character sheet, turning orange then red as it drops, like the bars enemies get in a fight.Token counts that match what a chat actually sends. A card's token count used to add up every field, so a card with a big lorebook looked like it cost tens of thousands of tokens on every turn. The card editor now shows what the card costs on every turn, followed by a lighter +N at times for the parts that come and go:
- the opening greeting, which is one chat message and drops out as the chat grows;
- dialogue examples, which are only sent while a chat has fewer than 8 messages;
- keyword lorebook entries, each sent only while its keywords are in recent messages. Hover the number for the breakdown. The section list on the left shows the same split, so Dialogue and Lorebook now read as "+N". Lorebook keywords, alternate greetings, group greetings and notes are never sent, so they no longer count at all. Preview prompt now labels its total as the cost at the start of a chat. Library tiles and the Largest (tokens) sort use the every-turn number, and Card Forge's "A new chat carries" panel uses the same count, with a new Lorebook, when triggered row.
My listings. A new screen (โฐ menu โ My listings) showing every card you've posted to aicharactercards.com and where each one stands: waiting on a moderator, published, or sent back needing changes โ with the moderator's reason when they've shared it. A published card you've since edited is marked as an update in review, so it doesn't look like a new submission.
Upload a card to aicharactercards.com from the app. With your account linked, the card editor's Import / Export โ Upload sends the card to the site and opens the site's submit form with it already attached โ no exporting a file and hunting for it again in a browser. You write the title, summary and description on the form as usual and submit it there; nothing is posted until you do. Do it again with the same card later and the app opens the edit form for the listing you already have, so you update that card instead of posting a second one, and can revise its text at the same time โ ratings, reviews and downloads carry over. The app tells you which form it's about to open, and warns you that submitting an edit takes a live card off the site until a moderator approves the new version.
Default persona, easy to find. The persona every new chat starts with now has its own Settings โ Personas section (it used to be tucked under Memory & Context). You can also set it by right-clicking a persona card in the library or from a persona card's Tools menu (Set as default persona), or with the star beside a persona in a chat's persona picker. The default wears a default badge in the library.
Replace older versions of cards in one go. Imported updated copies of cards you already had as new cards, and ended up with pairs? Find duplicate cards now offers Replace older versions: in every pair, the card you added first takes the newer copy's content and image, keeps its chats, folder and notes, and the newer copy is deleted. When importing, the choice that does this for you is now called Replace (it was Merge, which didn't say that it overwrites the existing card).
Merging duplicates keeps every chat. Merging two cards from Compare used to delete the other card's chats; they now move to the card you keep. You can also choose which card's image the merged card keeps, and each duplicate shows when it was added and how many chats it has, in place of the "keep" label that only marked whichever card was listed first.
Spoiler mode for story and game cards. A card whose fields give the plot away can turn on Spoiler mode under its Metadata section. Anyone who opens it finds every section folded, and is asked before one is opened. The name, image, tags and notes stay visible, and the model still receives the card as normal.
Card type in Card Forge. The forge sidebar now has the same Card type choice as the card editor, under Display name, so you can make a card an Adventure Mode Game Master without leaving the forge.
Lorebook entries that load only when picked. A card whose choice buttons name lorebook entries (a menu, a list of places) used to load every listed entry as soon as the list was shown. In Card Forge an entry can now carry the line
MATCH: newest message only, which sets its scan depth to 1, so it loads only when the player's own message names it. The guide knows when to use it.Lorebook activation settings, matching SillyTavern's. A new Settings โ Lorebook Activation section holds the settings that apply to every lorebook: Scan depth, Min activations and Max depth, Recursive scan with Max recursion steps, Include names, the case-sensitive / whole-word / group-scoring defaults an entry falls back to, Context share and Budget cap (one budget spent across all books at once), Insertion order for the character's own lorebook vs the shared ones, and a warning when the budget had to leave entries out. Recursive scan is on, so a book built for SillyTavern chains the way it did there: the text of an entry that fires is checked for other entries' keywords and those fire too. An entry that sets one of these for itself still wins. The Lorebooks page links straight to it.
๐ฉน Fixes
A reply's last choice, ask or document is no longer cut off. With "trim incomplete sentences" on, a reply that ended in a choice, a question box, a pick or a document lost it when the reply was saved โ the line doesn't end in a full stop, so it was treated as an unfinished sentence. Adventure Mode was already exempt; now every card is.
Card Forge no longer duplicates behavior rules and speech patterns. When the guide rewrote an existing rule (turning a card to first person, say), it was added beside the old one instead of replacing it, so a card could end up with several copies of the same rule. A proposal that closely matches an existing rule or speech pattern now replaces it (the review shows which one), and one that's already on the card word for word is skipped. A reply that packed several rules into one box, labelled
behavior_rules[0]: โฆ,behavior_rules[1]: โฆ, is now split into separate rules too. The guide is also told much more clearly that rewording a rule changes that rule rather than adding a new one.Card Forge writes the change it talks about. Deep into a long session, the guide would sometimes say "Here are the updated rules" and include nothing, leaving you to ask again. It now notices and fetches the missing change itself, so it arrives in the review as usual.
Linux uses the desktop layout. On some Linux systems the app's web view reports that there's no mouse, so Rin Chat used its touchscreen layout: message actions sat inside the message behind a "โฆ", covering the image buttons, and controls were oversized. The app now switches to the desktop layout as soon as it sees a mouse move. Phones and touchscreens are unchanged.
Chat Memory and in-app voices start on more networks. On some networks, notably in China, the engine Chat Memory and the Kokoro and Piper voices run on couldn't be downloaded from inside the app, and Chat Memory failed with "no available backend found". The app now falls back to a second download source for the engine, and to a mirror for the embedding model when Hugging Face can't be reached. If both fail, it says to check your connection, VPN or proxy instead of showing a raw error, and the debug log records which download failed. If the app can't download at all but your browser can, Settings โ Memory & Context โ Recall past messages โ Install from files lists the five files to download in your browser and imports them.
A generator you save to the library shows up in Attach right away. After Save a copy to library (or adding one on the Generators page), a card's Attach from libraryโฆ list kept the old list until you reopened the card.
Card Forge's guide turns on "No repeats in a batch" when you ask. Asked in chat for a generator whose names never repeat, it wrote the generator without the setting: the guide's chat instructions never mentioned it. It now sets it, and names new generators with spaces instead of underscores.
Card Forge and file overwrites leave your Generators library alone. When the guide revised a generator you had attached from your library, or a file overwrite changed one, the change was also written into your library's copy. The card now keeps the changed version as its own, and your library stays as it was, the same as Edit in 0.6.5.
Card Forge builds working Adventure Mode cards. Asked for an Adventure Mode or game-master card,
/createand Generate wrote an ordinary character: no choice buttons, generator rolls described instead of written as tags, and the card type left on Character, so Adventure Mode never switched on. Card building now gets the adventure instructions, ends each greeting with choices, writes the tags that roll generators, and sets the card type to Adventure Mode Game Master when you ask for one by name, including when Regenerate character turns an existing card into one (the review says so).Card Forge's Auto format can be reset. Once a model's card came back in simple tags, Auto kept using simple tags for that model forever, and choosing Auto again changed nothing. Choosing Auto in the card output menu now starts again from strict JSON.
The chat's context meter counts the card correctly. Its Character share included your private card notes, which are never sent, and left out the name, the depth prompt, post-history instructions, always-on lorebook entries and, early in a chat, the dialogue examples. The meter, and the line it draws where older messages stop being read, now match what is sent.
Regenerating a
/createcard keeps what you asked for. The one-line brief you give/createwasn't kept anywhere, so Regenerate character later had nothing but the guide's greeting to work from and could build a completely different character. The brief is now saved with the session and used on every regeneration.Card Forge flags lorebook keywords that fire on everything. A proposed lorebook entry with an everyday keyword ("woman", "it") or a one- or two-letter one now gets a note in the review, the same check the lorebook's Audit runs, so you can swap it for something specific before applying.
Card Forge warns when a rewrite drops an adventure card's choice buttons. On an Adventure Mode card, a proposed greeting or example that loses its choice lines is now flagged and left unticked, since without them the player has nothing to click.
Backing out of Create new leaves no empty generator. Clicking Create new in a card's Generators section, or + New generator on the Generators page, and going straight back used to leave an empty "New generator" behind. Now nothing is added unless you changed it.
Card Forge keeps lorebook entries with an indented label. A proposed entry whose
CONTENT:line started with a space was rejected as invalid and would have been lost.Card Forge keeps the parts of a request you named. Asked for a generator and a tag in Greeting 1 in one message, the forge dropped the greeting change as "not what was asked for". A field you name in your message, like Greeting 1, is now always kept for review.
A forged generator can't roll the character. When the guide put the character's own name in a generator's list (a patron named after them), it was turned into
{{char}}, so a roll could produce the character as a stranger. That option is now left out.The lorebook editor says "scan depth". An entry's collapsed Triggering summary said "depth 1" for its scan depth, the same words Placement uses for insertion depth.
Card Forge writes generator templates that read right. The guide's own example generators rolled lines like "34 years years old", and the guide copied that pattern, along with "a" before a value that might start with a vowel ("a Ex-Adventurer"). The examples are fixed, the guide is told to avoid both, and the review names the value when a proposed template still reads wrong.
Rolls that name a missing generator are flagged. A proposed
[Create โฆ]tag or choice| gen โฆwhose name matches none of the card's generators (or your library's) never rolls in chat, and nothing said so. The review now names it, and leaves the change unticked when it's new. The Generators section of a card (card editor, chat drawer, forge sidebar) lists any such roll already on the card.Choice buttons show names. A choice written as "Ask {{char}} for directions" showed the braces on the button, while the message above it showed the character's name. Buttons now show names as the message does.
Importing an AICC card file with no id works. A card file without an
id(hand-written or trimmed) failed to import with "card has no id". It now gets a new id and imports.Card Forge names fields the way the editor does. The guide sometimes wrote internal names like "behavior_rules[2]" in its replies; they now show as "Behavior rule 3". Field names in the review, the history and the plan chips were also always in English; they now follow your interface language.
Generator template problems show on the card too. A generator template that puts "a" before a value starting with a vowel, or repeats a unit, is flagged on the card's Generators list and in the generator editor, and the list's Revise with your guide button starts with that problem filled in.
Card Forge keeps example dialogues whole on Adventure Mode cards. A generated example whose reply ran on past its first line (a second paragraph, or its choice buttons) wasn't recognized as one turn, so a split exchange stayed split: four examples came back as eight, each flagged as not written in turns. They're joined back into whole exchanges now.
Card Forge keeps a new rule that uses a generator. When the conversation was about a generator, a proposed new rule telling the model when to roll it was left out as "not what was asked for". It now goes to the review with the generator.
Card Forge reads more broken generator blocks. A generator whose JSON had a key written as
"name="Specific Event"couldn't be read and was lost. That typo is now repaired.Escape no longer throws away a Card Forge review. Pressing Escape on the review of proposed changes discarded them, including a whole regenerated card. Only Discard does that now.
Asking the guide finds specific answers more often. A question like "can I put a [Create โฆ] tag in a behavior rule?" was treated as a general one, so the guide was sent only a short excerpt of each section and answered that it didn't cover it. Questions that name a topic now get the full sections that match. The Guide also now explains which parts of a card roll a generator tag and which don't.
Draft only says when the guide tried to change the card anyway. With Draft only on, a guide that still wrote a change showed "proposed changes โ see the review" with no review to see, and a generator it wrote still went to a review. Nothing is proposed in Draft only now, and a note says the guide wrote a change and how to get it reviewed.
Card Forge catches a character's name in cards with a subtitle. For names like "Lighthouse Keeper (Game Master)" or "ToRiicat โ the Streamer", the name in the text wasn't recognized as the character's (or only its first word was), so it wasn't swapped for
{{char}}. The part before the subtitle now counts, and a review that also renames the card checks the other fields against the new name.Card Forge's quick buttons aren't mistaken for lorebook requests. Right after the guide talked about the lorebook, a request like More voice was treated as "go ahead with the lorebook", and the speech-pattern changes it asked for were left out. Only short go-aheads ("yes, add those") carry on a lorebook conversation now.
Card Forge doesn't mistake card edits for generator talk. After the guide had talked about a generator, a request to change another part of the card (the description, a new rule) could be treated as being about the generator and left out. Only short follow-ups carry on a generator conversation now.
The built-in HumanNPC generator reads right. Its template began "A {Build}", so it rolled lines like "A Average, 5'2" tall Female". It now rolls "Female, 5'2" tall, Average build, with Red hair." If you never edited your copy, it's updated for you; an edited copy keeps your changes and shows a note in the generator editor.
A choice whose extras spill past its brackets still becomes a button. A model sometimes closed a choice too early โ
[[choice: Ask again]] | hint Past Rin was insistentโ and the whole line showed as raw text. Anything after the]]that starts with|(a hint, a condition, aset, a timer) is now read as part of the choice.A choice written at the end of a sentence still becomes a button. A choice line glued to the text before it (
โฆwhat'll it be?[[choice: Noodles]]) wasn't shown as a button and appeared as raw text instead. It's now split onto its own line, in greetings and in replies. A choice in the middle of a sentence is still left as text.Card Forge makes picked menu entries load only when picked. When a new card's greeting offers choices and the lorebook has an entry with the same name as a choice, that entry is now set to load only from the newest message (the player's pick), even if the guide forgot to ask for it.
Card Forge's Tighten greeting keeps choice buttons. The quick button asked for a greeting that ends "on something the user can answer", and on Adventure Mode cards the rewrite often replaced the choice buttons with a question. It now asks to keep them. If you never edited that button, it's updated for you.
Card Forge says when generators are switched off. Asked for a generator while Let the guide write generators was off, the guide could describe one as if it had been added. A note now says nothing was added and where the switch is, and the guide is pointed to the right place for it (the top of the sidebar).
F6 no longer blanks the window. Pressing F6 moved focus out of the app, and the window went black until it was closed with Alt+F4. F6 now does nothing.
The lorebook Audit understands entries loaded by name. An entry with a title but no keywords was reported as "can never fire", even though
[recursion: title]or a routing token loads it. It's now a note saying how it gets loaded. The Guide also explains routing tokens with an example. The card editor's Card health check had the same blind spot and no longer counts those entries as "can never activate".HTML comments reach the model again. Any one-word comment such as
<!--SCENE_DOCKS-->was removed from messages and card text before sending, because it looked like a lorebook routing token. Now a comment is removed only when it names an entry in a lorebook that's in use, so cards that use HTML comments for their own markers keep them.
Rin Chat Update Notes - Version: 0.6.5
17 September 2026
โจ New
Rin Chat in French. Settings โ Sizing & Layout โ Language now offers Franรงais alongside ็ฎไฝไธญๆ, ๆฅๆฌ่ช, Espaรฑol and Deutsch, and a system set to French picks it on its own.
Tray mode โ keep serving your phone with no window in the way. Rin Chat now has a system tray icon: Show Rin Chat, Hide to tray and Quit. Hiding puts the window away and nothing else changes โ the vault stays open and your phone keeps chatting, because the desktop is still the machine doing the work. Quit from the tray is a real quit: it closes the vault and your phone loses access. New settings in Settings โ Remote Access โ Tray: Closing the window hides it to the tray (off by default, so close still quits), Start Rin Chat when I sign in, and Start hidden in the tray. The lock screen has a Hide to tray button too, and reopening comes back to it still locked. For serving your phone unattended, turn on Remember me on this device โ without it Rin Chat starts at the login screen and answers your phone with "unlock your desktop", and biometric unlock always stops to ask.
Automatic tags for cards you edit. Settings โ Chat Display โ Automatic tags can tag a card you imported when you change its content (edited) and when you replace its art (new art), so the library's tag filter finds the cards you've reworked. Both are off by default and the tag names are yours to change. Cards you made in Rin Chat are never tagged. Turning on the edit tag also tags the imported cards you'd already edited; art you changed before that can't be detected.
Import log. The Library's import menu has an Import log that records every import: when it ran, where the cards came from, and what happened to each one โ imported, merged, imported as new, skipped or failed, with the reason. Open jumps to the card, and Clear log empties it.
Card Forge: pick every field at once. The Edit character window had an All for each section but nothing for the whole card, so selecting everything took a click per section. There is now an All fields row at the top with All and None. Past a dozen fields it notes that one pass over that many can thin out the detail, in case you would rather split it.
Your name on cards you make. Settings โ Chat Display โ New cards takes a creator name, and Rin Chat fills it into the Creator field of anything you make here โ a new character, or one Card Forge writes. Imported cards keep their own author, and so does any card you have already filled in.
Card Forge: edits that keep their shape. Every rewrite the guide proposes is now checked before you see it. An example dialogue that lost its
{{user}}:/{{char}}:turns, a greeting that opens with a speaker label, the character's real name where{{char}}belongs, speech in single quotes, a broken lorebook entry, or a field quietly cut to a fraction of its length is flagged in the review and left unticked; the two that can be fixed mechanically (the speaker label, the literal name) are fixed for you and say so. Retry, keeping the format asks again with the exact rules the last answer broke. Behind the scenes the guide no longer sees its own earlier proposals, which is where wrong greeting numbers came from, and when you say "greeting 2" it is told outright that means the second one. The guide also gets a plain map of what you call things (opener, backstory, loreโฆ) to the fields they are, and a list of what it can and cannot do in the app.Card Forge: smart commands. Before the guide answers, a quick pre-review reads your message and turns "make example 3 spicier" into an edit of exactly that field. When it is sure, it just does it. When it isn't, nothing waits on you: the message goes to the guide as ordinary chat, and with Suggest (the default) the plan is offered under the reply โ Did you mean an edit? with the fields as chips you can remove or add to, and Go; keep typing to ignore it. Automatic skips the offer; Off restores the old behaviour. Talk about generators is never read as an edit of the card's own fields (a generator's Appearance or Personality field is not the card's). The switch is in Settings โ Chat Display โ Card Forge, and the pre-review can run in one of two ways, set by How it reads your message:
- A model. Your AI provider does the pre-review, which costs one extra request per message. Model for smart commands picks which one: left on Same as the forge (default) it uses the forge's own provider and model, or pick any provider and model you have set up โ a small, fast, cheap one is plenty for this job.
- Built-in (the default). No provider and no request. The app does the pre-review itself: rules catch a numbered entry ("greeting 2", "example 3") and the words the guide already knows for each field ("backstory", "opener", "lore"), and a small local model settles the rest. That model is all-MiniLM-L6-v2, the same one local vector memory uses. It isn't a chatbot and writes nothing: it turns your message into numbers that measure meaning and compares them with a description of each field, so it can still find a field you described in your own words. It's a one-time 23 MB download (shared with local vector memory, so no second download if you use that) and it runs on the CPU inside the app, taking milliseconds per message. It works offline, and your message never leaves your computer for this step. The trade-off: it only picks fields โ your message goes to the guide word for word as the instruction โ and when a rule didn't settle the choice it is unsure, so the message goes to the guide as chat and Suggest offers the edit afterwards instead of guessing.
- To switch back to a provider, set How it reads your message to A model and choose one under Model for smart commands.
Card Forge: fewer ways for a generation or an edit to go quietly wrong. Found by driving the forge end to end: an added greeting that copied an existing one is flagged as a near-duplicate; an example whose action beats drifted out of asterisks gets a note; stray characters from another script (a known glitch of some models โ
็็พ็in the middle of an English greeting) are removed, from a freshly generated card, from generators the guide writes, and from a proposal in the review, which says so; a generator whose JSON came back with one missing bracket is repaired instead of thrown away; a reply that contains only a generator or a proposal no longer shows an empty bubble; /create with a one-line brief works on a fresh session (it used to do nothing); the guide no longer re-does requests it already handled (its earlier proposals, and what you applied or discarded, are now visible to it); a lorebook request only ever produces lorebook proposals, and asking for a lorebook entry and a generator in one breath keeps both (the lorebook half used to be dropped as "not what was asked for"); a card the forge generates has the character's literal name swapped for {{char}} everywhere but the name field, the way the rules always said; example dialogues keep one turn per line and get their{{char}}:label even when the model runs the turns together or leaves the reply bare (which used to fold every example into one); and speech the model wrote in 'single quotes' comes out in double quotes, at generation and in the review. Also: with Let the guide write generators or a lorebook on, a model that answers in strict JSON used to drop both (it was told to write them after the JSON, which a JSON-only reply cannot do) โ they are now asked for inside the card object; a Regenerate that comes back with generators puts them in the review beside the text instead of losing them, and every generator the guide writes โ in chat or that way โ goes through the same review as a text change: its own row with what it holds, marked new generator, updates the one on the card or replaces โฆ with the current version beside it, ticked by default, and once applied the same Undo this on its note; and the guide can no longer pass off an "[app: โฆ]" line as something the app did โ those notes were reaching the model as its own earlier turns and some models started imitating them. When the guide answers a Revise with your guide request with a question of its own, your answer still lands on the generator being revised (the link used to be lost after one reply), and the smart-commands pre-review is told what the guide just asked, so an answer like "barrels, salt cod, lamp oil โ go ahead" is treated as an answer, not as a request to add something. A connection that drops mid-reply now says so in a sentence instead of the browser's own "TypeError: network error". And asked to roll a generator in the chat, the guide now explains the[fire][Create โฆ][/fire]block instead of rewriting the generator. Undo this and Undo to here now also take the "Applied โฆ changes" lines of what they undid out of the chat โ they stayed behind as if the changes were still on the card, and the guide read them that way too. Lines left behind by earlier undos are cleared when the session opens. Undoing a change that added several entries at once (two lorebook entries, two greetings) now removes all of them โ it used to remove only the last and leave the rest on the card with nothing left to undo them. On a long run of requests (lorebook entries two at a time, say) the guide could start answering "here are the next two proposals" with a list of names and no proposals at all: it was copying its own earlier replies, which it is shown with the proposal blocks taken out and blank space where they were. The blank space is gone, its two most recent replies that only added entries or wrote generators now keep those blocks so it has the format in front of it, Regenerate this reply keeps the "write it out" instruction the original message carried (re-rolls went out without it and came back as announcements), and a reply that talks about proposals โ or about a generator you asked for โ without containing any now says so in the chat, so you know to ask again and the guide knows nothing was made. And a go-ahead like "yes, write those two entries" or "yep, add those" while the guide is working through lorebook entries is now read as a lorebook request, which tells the guide to write each entry out in full. Lorebook keywords a model writes with dots or underscores ("Old.Mill.Road", "night_market") never match anything anyone types; they are turned into words, in the review (which says so) and in a freshly generated card. A reply that adds several lorebook entries (or greetings, examples, rules) in one go now brings every one of them to the review โ only the first used to make it. A card whose name starts with "The" (The Gilded Lantern) no longer has every "the" in a proposal turned into {{char}}, a two-word name whose first word is also an ordinary word (Lantern Warden) no longer turns "the lantern flame" into "the {{char}} flame" โ the first word alone now only counts as the name when it's capitalised and not after "the" โ and the name fix leaves a lorebook entry's keywords alone, where {{char}} would never trigger. With several forge tabs open, a review that finishes in another tab no longer pops up over the one you are looking at โ it waits on its own tab. Regenerate this reply on a reply that proposed changes now opens the review for the new version (the re-rolled proposals used to be saved but never shown, so they could not be applied), and adds any generators it wrote. Asked to change one numbered entry ("make greeting 2 end on a riddle"), the guide sometimes rewrote the entry next to it; it's now shown the opening of the entry it's meant to change. While the guide is still writing a proposal, its half-finished text no longer shows raw in the chat. Generated cards and proposals are tidied on arrival:\nwritten as text becomes a real line break (a greeting used to show "\n\n" on screen), a rule or speech pattern holding several lines becomes several, a generator option of "none" becomes an empty choice instead of printing the word, and a lorebook keyword that lost its apostrophe or ampersand also gets the entry title's spelling. The guide now knows how lorebook entries reach the model (by keywords in recent messages โ nothing "pulls" them), how to build a generator suite a parent chains into, and โ when you're making an Adventure Mode card โ the choice, generator and stat directives and that the card type must be set. For reporting a forge problem, the gear menu beside the model picker has Export this session's debug log: the raw requests and replies of that session only, not your whole log.Roll a generator several times, and keep the results.
[Create NPC x3]rolls three separate NPCs in one go (up to 10). Addas=guardand the results are kept as chat variables the card and later messages can use:{{getvar::guard}}is the whole result and{{getvar::guard.Name}}one field โ with a count,{{getvar::guard.2.Name}}and{{getvar::guard.count}}. They live in the message that rolled them, so deleting that message removes them too. Works anywhere[Create โฆ]does: greetings, your messages, quick replies, lorebook entries and the model's replies. Tick No repeats in a batch on an options field (a name, say) so onex4roll never gives two people the same name. It also applies to generators chained from the one you rolled. Card Forge knows the setting and can turn it on.Adventure choices that roll a generator. A
[[choice:]]can now fire one of the card's generators when picked:[[choice: Look for recruits | gen Mercenary x3 Class=Archer, as=recruits]]. The choice is sent with the generator rolled into it โ the same as the[[gen:]]button, but as one of the options โ and stat effects still work beside it ([[choice: Hire a guide (10 gold) | gold -10 | gen Guide]]). The GM is taught the form whenever the story has generators.Conditional chained generators. A chained generator can now run only when this generator rolled a particular value: in the Generators editor, each ticked chain has Only if [field] is one of [values] โ so a Villager generator can roll Species and then run Elf Names only on Elf and Dwarf Names only on Dwarf. The Card Forge guide can write these conditions too, and renaming the field keeps them working. (A card using this, opened in an older Rin Chat, runs the chains without the condition.)
Card Forge: your generators, visible and editable. The sidebar has a Generators section, at the end after the lorebook โ see each one, attach from the library, remove, edit the card's own copy in the Generators editor (it opens over the forge and closes back to it), and Revise with your guide to have the guide rework one in chat. Generators that fire on their own or stay hidden are called out, since they act without being asked. The guide can now read them: the card's generators are part of what it is shown (it used to "improve" generators it had never seen, from memory), and a reference card's generators and lorebook are included in full, with the instruction to match their structure and depth โ how many fields, how many options, how they chain โ when you ask for ones like the reference's. And a generator the guide names "Create Merchant" is saved as "Merchant" โ the "Create" is the invocation, so it was being called as
[Create Create Merchant]; an update still finds a generator saved under the old name.Open cards in Rin Chat from outside the app. Right-click a card file (.png or .json) โ Open with โ Rin Chat and it's imported, the same as dragging it onto the library โ Rin Chat is only added to the Open with list, so your pictures still open in your image viewer. And aicharactercards.com can now send a card straight to the app: an Open in Rin Chat link starts Rin Chat (or brings it forward), downloads the card with your linked account, and imports it. If the app is locked, the card waits until you sign in. Card downloads from the site โ these and card updates โ now go out with your linked account, so cards the site only serves to signed-in, age-verified accounts come through as well.
Group chat: a real card picker, and a primary you can change. The Group chat window now uses the whole screen and picks characters from a slim copy of the library โ the folder tree on the left (All cards, Unfiled, your folders) narrows a grid of cards with art, name and creator on the right, with the search on top of that. And every member row has Make primary: the chat moves under that card (it shows in that card's Chats), the old primary becomes an ordinary member you can remove, and the lines each character already spoke stay theirs.
Merge duplicates from Compare. Compare cards has a Merge into one cardโฆ button: pick the card to keep, then for each field that differs choose which version goes into it (identical fields need no choice). The kept card keeps its image, tags, folder and chats and gets the fields you picked; the other card โ and every chat with it โ is deleted, which the confirmation spells out before it happens. Both Compare and Duplicate cards now use the whole window, show each card's art (Compare beside the column headers, Duplicate cards on every row) and put the shared creator on its own line under the group's title instead of crammed into it.
๐ฉน Fixes
[Create Name, โฆ]with a comma straight after the name now fires.[Create Traveling Merchant, as=trader]was left as plain text because the tag only recognised the generator when a space followed its name. A comma now works too, in chat, in choices that roll a generator, and anywhere else[Create โฆ]is used.- Editing a card's generator no longer changes your Generators library. Before, Edit in a card's Generators section (in the card editor or Card Forge) quietly added the generator to your library and edited it there. Library copies then showed up that you never added, and they could overwrite the card's version later. Edit and Create new now open the editor on top of the card and change only the card's own copy. Going back saves the change to the card. Save a copy to library adds a separate copy when you want one. A copy you attached from your library becomes the card's own the first time you edit it, so a later library change can't undo your edit.
- Adventure choices that roll a generator keep the result out of your message. Choosing a line like "Look for recruits" used to add every rolled profile to your own message. The roll now goes in a hidden block, so the model still gets the result and your message shows only the line you chose.
- See which card an import matched. When an imported card shares a name and creator with one in your library, the prompt now lists each match next to the card it matched, with its art and folder. Open or Compare them, choose Merge, New or Skip for each card, then Apply. Large imports get the same list. A placeholder creator such as "anonymous" or "unknown" no longer counts as a match โ identical content is still skipped โ and the duplicate finder no longer groups those cards as versions.
- The Author's Note in System Prompts can reach your existing chats. It was only copied into a chat when the chat was created, so filling it in afterwards changed nothing in chats you already had. Turn on Use in chats without their own note (same Settings section, off by default) and every chat whose own note is empty uses the prompt config's note; the chat's note window says which note applies. A chat's own note still takes priority, and No Author's Note in this chat turns it off for one chat.
- A request the provider never answers now times out. The "model stopped responding" guard counted any bytes as progress, and a proxy that queues a request sends keep-alive pings the whole time โ so Card Forge could sit on "Almost thereโฆ" for five minutes with Stop as the only way out. Pings no longer count; after two minutes with no real data you get the error and can retry. Also, when Card Forge's JSON attempts fail because the provider is overloaded (a 503, "try again in a minute"), it no longer concludes the model can't write JSON and pins the simple-tag format for it.
- A card made with /create in a fresh Card Forge session is kept. A new session only joined the saved list with your first ordinary message, and a slash command isn't one โ so a session holding nothing but a freshly generated card and the guide's welcome was still an unsaved draft, and the next restart or reload threw the card away. A session is saved as soon as it has a card.
- Card Forge's guide can add generators in chat. With Let the guide write generators on, asking the guide for a generator on a card you'd already made did nothing โ it was only allowed to write them during a full Generate, so it improvised a change the app couldn't read. It now proposes the generator right from the chat โ in the review, where you apply it (a same-named one is updated) โ with a line in the transcript and an entry in Card history to undo it.
- Reply suggestions take the message box's place. On a phone the suggestion chips sat beside the message box and squeezed it into a column one letter wide. While suggestions are showing they now use the whole row; tap one to put it in the box, or โ to go back to typing โ anything you had already written is still there.
- Formatting under a picture. A greeting that starts with an image on its own line and the text right below it (the usual shape of greetings with art) showed that text unformatted โ literal *asterisks* and no speech colour โ because the line after an HTML image line was passed through as raw HTML. It's formatted now, in chat and in card notes.
- Ability scores you can type. In the adventure persona sheet, typing an 11 into an ability was impossible: the box rejected each keystroke that fell under the minimum of 3, so the first "1" never landed. The score, HP, level, XP and inventory quantity boxes now take what you type and settle it when you leave the box โ clamped to the allowed range, and left as it was if you typed nothing.
- A phone page can't get stuck refreshing itself. When a screen's file was missing after an update, Rin Chat reloaded once to pick up the new one โ but any other screen loading successfully reset that, so a page could reload forever instead of ever telling you. It now reloads at most once a minute and shows the error after that.
- The locked screen can be moved, minimized and closed again. The lock covered the title bar, so the window was stuck in place with no buttons until you unlocked it. It now has its own strip at the top: drag it anywhere, and minimize, maximize or close from the right.
- The chat's persona picker opens under its button at any UI scale. With UI scale set above 100%, the list was placed too far right โ the wider the window, the further off the edge, until in a maximized window it was off-screen entirely and the button looked dead. It now opens under the button and stays inside the window. The same mix-up also put the library's keyboard card menu (Menu key / Shift+F10) in the wrong spot and left the scroll after a reply finishes short of where it should stop; both are fixed.
- Jumping to a section lands on it at any UI scale. With Sizing & Layout โ UI scale set above or below 100%, clicking an entry in the Guide's contents stopped short of the section, and so did Settings' jump list and search, the card editor's section rail, Card Forge's field highlight and jumping to a chat message. They now scroll all the way to what you picked.
Rin Chat Update Notes - Version: 0.6.4
15 September 2026
โจ New
- Rin Chat speaks your language. Settings โ Sizing & Layout โ Language switches the whole interface to ็ฎไฝไธญๆ, ๆฅๆฌ่ช, Espaรฑol or Deutsch, and by default it follows your system's language on its own. Dates, times and numbers follow the language you pick, and searching Settings works in it too. The change applies when Rin Chat reloads. The AI follows you there: Response language (System Prompts) now writes in the interface language on its own, so you only fill it in to have the AI write in a different language than the app.
- Card updates, ratings and reviews from aicharactercards.com. With your aicharactercards.com account linked, Rin Chat checks the cards you got from the site once a day:
- Cards with a newer version show an Update badge, and Card updates at the bottom of the library sidebar lists them all, with Check now.
- Review update opens the card with the update ready: every field that changes, side by side, and you pick which to take. A checkpoint labelled "Before AICC update to vN" is saved first, so Tools โ History rolls it back.
- Skip stops reminding you about that version; a newer one still shows up. Tools โ Check for update asks about one card on the spot, skipped versions included.
- The card editor shows the card's rating โ click it to rate, read and write reviews, and reply.
- Cards downloaded before card IDs existed are matched to their site card once, after you say yes. Settings โ Account & Security turns the daily check on or off and can check or match again. Only card IDs and a fingerprint of each card's name, description, personality and scenario are sent โ never your chats or edits.
๐ง Improvements
- Hover the context bar for the whole breakdown. Pointing at the token bar above the chat box now lists every part filling the window at once โ character, system prompt, persona, pins, memory, history and the rest, each with a dot in its bar colour, its token count and its share โ instead of one tooltip per coloured band, which was hard to hit on the thin ones.
๐ฉน Fixes
- Right-clicking a field in the chat's character drawer or Card Forge shows Rin Chat's menu. Those fields opened the plain browser menu instead of the one the card editor uses, so spelling corrections, Add to dictionary, formatting and paste-from-history were missing there. The formatting shortcuts now work in those fields too.
- Typing in Chinese, Japanese or Korean no longer triggers actions mid-word. Pressing Enter to confirm a word in an input method also reached the field underneath, so confirming a word could add a half-typed tag, rename something to half a word, or run a search early. The chat, Card Forge and Direct Chat message boxes already ignored it; now every field in the app does.
- The card health check's warning about a single lorebook entry reads properly. It said "1 lorebook entry has no keys and aren't constant โ they can never activate", mixing singular and plural in one sentence.
- Whole-word lorebook keys trigger in Chinese, Japanese, Korean and Thai. These languages don't put spaces between words, so a key with Match whole words on never found a word boundary around it and never fired โ the same entry worked in SillyTavern. Keys now match inside that text, and so does a Latin name written straight into it. The same fix applies when renaming your persona across a chat, and to character names in chat memory.
Rin Chat Update Notes - Version: 0.6.3
14 September 2026
โจ New
- Choose the language the AI writes in. Settings โ System Prompts โ Response language sets one language for everything the AI writes: character replies, chat titles, summaries, scene notes, reply suggestions, Card Forge and lorebook entries โ keywords included, so they match a chat written in that language. Leave it blank to keep the prompts' own language. Turn off Character replies too to keep roleplay in the card's language while everything else follows the setting. Image prompts stay in English, since image models read English best.
๐ฉน Fixes
Cards keep their AICC card ID through import and export. A card downloaded from AICC carries an ID that lets the site recognise it wherever it travels โ groundwork for rating cards and spotting updates from inside Rin Chat. Rin Chat now reads it on import, keeps it with the card, and writes it back into every export, including SillyTavern PNGs. A duplicated card starts without one, since it's a new card.
Card Forge fits a narrow window again. In a window under about 900px wide โ half of a 1080p screen, say โ the forge laid itself out thousands of pixels wide: most of every message, the composer and the card panel were off the right edge, and what remained overlapped. It now stacks the transcript, composer and card panel down the page, the transcript scrolls inside a half-screen box so the composer stays near, and the page scrolls through the card fields below. Still not ready for mobile so left out of mobile remote access
Importing a card you already have is recognised as an exact duplicate again. The check compared a stored card with the incoming file in a way that depended on the order fields happened to be written in, and the two never agreed โ so an identical re-import was always offered as a mere "same name and creator" match with Merge / Import as new / Skip, instead of being skipped as the duplicate it is. The Find duplicates tool was not affected.
A new forge session keeps its greeting. Sending an empty message in a brand-new session (to get the guide talking) replaced its opening line with the reply instead of following it.
A new Card Forge tab no longer flashes "Untitled session" on its chip while its session loads.
Settings changes reach an open chat however you leave Settings. Regex scripts, quick replies, prompt configs, message colours and the provider list were only re-read by an open chat when Settings was closed with its ร or Back. Leaving through a header button, a keyboard shortcut, opening a chat, or a search result skipped that step, so the chat kept the old settings until the next close via ร. Every way out now counts.
Your messages sit on the side you chose again. After character messages started filling the full width, the Your messages setting (Right / Left) stopped having any visible effect โ your own messages stretched across the whole row and looked the same either way, especially with user avatars hidden. Your messages now sit as a bubble on the chosen side, while the character's keep the full-width layout.
Rin Chat Update Notes - Version: 0.6.2
13 September 2026
๐ฉน Fixes
- The response-length instruction no longer shows up in replies. Some models repeated the "[Length: keep this reply to roughly โฆ words]" line back โ as their reply or inside their thinking โ and it appeared in the chat. It's now removed from what the model sends before it's shown or saved.
- The card editor's notes column fits with UI scale above 100%. On a wide screen it sat beside the editor sized for the window's width before scaling, so with the interface zoomed in it ran off the right edge. The editor now measures the room it actually has โ and so does Find & replace, which overflowed the window the same way.
- Reroll gives more variety. Each regenerate now uses a new random seed, so alternate replies differ instead of coming back nearly the same. If your provider doesn't accept a seed, Rin Chat notices and quietly stops sending one there.
โจ Up to five Card Forges at once
- Open several forge sessions side by side. Each gets a tab in Card Forge's toolbar and an entry in the open-chats stack, and keeps working while you're in another โ a reply you started keeps generating. The + beside the tabs lists your saved sessions, with search โ pick one to open it in a new tab, or start a new one. Sessions already open in a tab are marked, and picking one takes you to its tab. Opening a sixth closes the one you used longest ago (never one that's mid-reply); its session stays saved in the list. A new session only joins that list once you send it a message, so opening tabs doesn't fill it with empty ones.
- A card is only ever open in one forge. Opening a card that's already in a tab โ from the library, the editor or the session list โ takes you to that tab, so two forges can't overwrite each other's edits to it.
- Card Forge's session list is easier to find your way around. It's wider, it has a search box at the top, and each session shows when it was last worked on under its name.
- A roomier Card Forge toolbar. The card output format (Auto / Strict JSON / Simple tags) is now a small gear โ lit when a mode is pinned โ the model picker is narrower, and the "Synced" badge is a compact chip.
๐๏ธ Animated cards come alive in the library
- Cards with animated art now move in the grid. A card whose picture is an animated PNG plays right there in the library โ and only while it's on screen, so scrolling stays smooth. It animates the same way anywhere its thumbnail shows, like the folder and card pickers. Your existing animated cards start moving on their own the next time you open the library; nothing to re-import.
๐ฒ Adventure Mode
- The story clock is now optional. A new Story clock toggle in the editor lets you switch it off for open-ended games โ a date, a hangout, a sandbox โ where a ticking countdown only invents urgency the story doesn't need. It stays on by default, so adventures that want a clock keep one.
- Fewer spoilers at a decision point. A choice button no longer reveals what it will do to the stats before you pick it, and the "Sheet: โฆ" summary of what changed after a turn stays hidden too. Both show only when you turn on Show DM stats.
๐งน Smaller things
- The generator inspector shows the opening rolls. A chat's Generators tab now lists the randomizer results that fire from a card's own fields when the chat loads โ a date's looks, personality and so on โ not only the ones a message sets off.
- A Community step in first-run setup. It links to the Rin Chat Discord โ discord.rin.chat โ for help, feature ideas, and swapping cards and prompts with other users. If a provider you want isn't in the list, the provider setup screen now points there too.
- "Reset vault" is clearer. The warning now spells out that it only erases the current account's library and leaves any other accounts on this device untouched.
- See a picture full size. Click the card's image in the editor to open it in a lightbox, sitting clear of the title bar with its corners intact. In a chat, shift-click an avatar to see the portrait on its own โ on a phone over remote access, just tap it โ centred over the chat with nothing dimmed behind it. Click outside it or press โ to close โ on a phone, just โ.
Rin Chat Update Notes - Version: 0.6.1
12 September 2026
๐ง Long chats remember what you told them better
Improved Index timing. This is the big one. The indexer that turns messages leaving the context window into the chat's memory was scheduled in a way that could only ever run when a chat was idle.
Recall now searches on the message you just sent. It was reading the conversation a moment too early โ before your new message had landed โ so every search was about the exchange before the one you were having. Ask what your cat is called and it went looking for whatever you'd talked about last. On a test chat, the same eight questions went from 2 answered correctly to 6, with this and the fixes below.
Your question isn't drowned out by the character's last reply. The search also reads the message before yours, and a long reply outweighed a short question several times over. Now only the end of it is included โ enough for a "yes" to still know what it's agreeing to.
The exact words you ask about are no longer the first thing thrown away. Passwords, names and dates found by matching their words were being dropped to make room for other results, because their scores were measured on a different scale. Asking for "the mod channel password" brought back neither message that contained those words; it now brings back the right one.
When two parts of the memory disagree, the newer one wins. The summary now tells the model that its parts are numbered in story order and that a higher-numbered part overrides a lower one. A sponsor's rate that changed from $340 to $420 used to come back as $340.
A correction now beats the thing it corrects. Search ranks by similarity, and the first, most emphatic statement of a fact always out-scores the later sentence that overturns it โ so "I paid that debt off" lost to three copies of "I owe him forty crowns". Recall now always keeps a place for the most recent matching moment, and every excerpt is labelled with where in the story it comes from.
What's happened most recently is no longer a blind spot. The summary is written in whole sections, so the last stretch to leave the context window belonged to no summary yet and could only be found by luck. It's now included word for word at the end, and the model is told plainly whether it's fresh or already older than the messages on screen.
๐ Better summaries, no fact list
The "Fact ledger" option is gone. It kept a list of "what's currently true" alongside the summary, and in long test chats it was behind nearly every confidently wrong answer: a debt that had been paid still listed as owed, four different passwords at once, two outdated versions of the story kept side by side. If you had it switched on, the setting has simply disappeared โ there's nothing to do.
The summaries do its job instead. Each part now records every event that matters later โ what was decided, agreed, paid, owed, given, lost or changed โ and the details people mention once and never repeat: a name or alias, family, where someone's from, an injury, an allergy, something they carry. Exact values like a password, a price or a date are copied character for character, and a change is written as "from X to Y", so it can be found by either the old value or the new one.
Summaries call you by your name. If your persona had a description, the summarizer was handed that whole description as your name, and sometimes named you after a word in it โ "Personality owes Halvard forty crowns". Fixed.
Upgrading an existing long chat: open its Memory โ Memory tree tab and press Clear index, then Vectorize all. New chats get the new summaries automatically; existing chats keep their old ones until they're rebuilt.
The opening of the chat is always in the summary. When the summary has to be trimmed to fit, it gives up the middle rather than the beginning, and every part it can't include in full gets a one-line headline, so nothing between the start and the recent past simply vanishes. Asked what he'd left in her cellar, a character had been inventing an answer; she now gives the right one.
Switching memory on for a long chat builds its overview in steps instead of asking the model to take in the whole story at once, which grew without limit on a very long chat.
๐ Recall finds the exact word now, not just the gist
- Memory is searched two ways and the results combined: by meaning, as before, and by the words a passage actually contains. Meaning alone cannot find a password, a price or a name โ nothing about "marigold seven" means anything โ so those were effectively unsearchable. On a 195-message test chat that query now brings back the scene where the password was agreed; before, it brought back an unrelated argument.
- Two versions of the same fact are no longer a coin toss. "I owe him forty crowns" and "I paid him the forty crowns" look nearly identical to a search engine, so the newer one now gets a small, capped edge โ enough to break the tie, never enough to drag in something irrelevant.
- You can ask for something in your own words. A recalled moment is matched on what was said in it and on what its part of the summary calls it โ so "the storage arrangement for my goods" finds the scene where you agreed the cellar and the password, even though nobody used the word "storage" at the time.
- A weak keyword match can't take a slot it doesn't deserve; if nothing really matches, the memory says so instead of offering its least-bad guess.
- You can turn the new ranking off in Settings โ Memory โ "Match on words as well as meaning" if you prefer the old behaviour. It costs no extra model calls and no extra storage.
๐งญ The memory panel is easier to read
- Wider, and in three plain sections: what the model is told, building the memory, and testing recall. The long explanations are folded into notes you can open when you want them.
- Test recall says what it found and for what. The result is labelled with the text it searched, scrolls into view when it's ready, and shows in one line how many parts of the summary are sent in full, how many as a one-line headline, and how many are skipped because they're still on screen. On a long chat that can be 7 of 70 in full โ the rest is covered by the overview and the headlines.
โก Building the memory is about twice as fast
- Summaries are written a few at a time instead of strictly one after another. Rebuilding a 30-section chat took 3m36s against a serial run of the same chat that was still going at five minutes. Each summary is still saved the moment it's written, so a rate limit costs one call, not the whole run.
๐งน Smaller things
Card fields grow to fit what's in them. In the card editor, the chat's card sidebar and Card Forge, a text box now sizes itself to its content instead of hiding four-fifths of a description inside a two-row window. The row count stays the minimum, a height you drag yourself still wins โ drag a field smaller and it stays that size until you forget it (below) โ and a colossal field stops growing at 90% of the window rather than burying everything under it. Turn it off in Settings โ Sizing & Layout โ "Grow text boxes to fit".
Forget the box sizes you've dragged. A height you drag is remembered for that card and overrides the setting above, so Settings โ Sizing & Layout โ Saved box sizes โ "Forget all" drops every one of them and hands the fields back to automatic sizing. Editors already open let go of their heights straight away, in every window. The one exception is the card editor's tall side column: the notes fill it whatever height you dragged them to elsewhere, since a height set in the narrow inline slot left them a two-line box in a full-height panel.
The card editor uses a wide screen. The editing column was a fixed 820px whatever the monitor, so at 2400px two thirds of the window was empty. It now grows with the window to a readable 1200px, and the section rail and the private-notes column follow it instead of being stranded โ they're all sized from one number now. Below about 1700px nothing changes: there isn't room for a wider column and both side columns at once.
"+ Add" sits on the list's own header row. Behavior rules, speech patterns, greetings and example dialogue put their add button below the list as a full-size button โ furthest from the label, and on an empty list it was the only thing in a section three rows tall. It's now a small button beside the label, matching the โจ and โคข controls. An empty list also shows one empty box to type in rather than a label with nothing under it; leave it untouched and the list still saves as empty. The row's delete button is white on the red now, and its icon is actually centred in it.
The card's picture no longer grows with the window. It's a thumbnail beside the name and tags, so it stops at a comfortable size instead of taking a third of a wide screen. Generate and Replace now sit on the picture itself, appearing across its bottom edge when you hover it, instead of a permanent button below it โ and replacing the image is that button now: the art itself is no longer a hidden click target, so a stray click on it can't open a file picker. On a touch screen they're always visible.
The notes fields no longer show a token count. Private Card Notes and Public Creator Notes are never sent to the model, so the count was quoting a cost the card doesn't pay. The card's total never included them, and still doesn't.
A rendered card note can be dragged taller. Switching a note to its rendered HTML swapped the text box for a rendered one that had no resize grip, so a long note was stuck in a fixed window. It resizes like the text box now, and a deliberate drag can go past the default height.
Expanding a rendered note stays rendered. The fullscreen editor always opened on the raw HTML, even when the note you expanded was being rendered โ which read as the button doing nothing. It now opens the way the note was, and a picture in one is sized to fit the window rather than filling it top to bottom and pushing the writing out of sight.
The message "โฆ" menu opens on phones. The row of per-message actions collapses behind one button on touch screens, and that button's menu was being clipped to nothing by the row's own sideways scrolling: tapping it appeared to do nothing at all. The button also sat outside the bubble whenever the action bar was set to any position other than top right, which pushed its menu off the side of the screen.
Adventure rules are coloured in the context meter. The one block that can take a fifth of the window was the one slice with no colour, drawn as empty track.
The adventure clock editor stays on screen. Clicking a clock near the panel's edge opened its number boxes half outside the sidebar, cutting off the first field.
Find & replace shows you every match. Each one is listed with the field it's in and the words around it, in a panel pinned to the top of the editor that leaves the card usable underneath. Click a match, or press Enter or F3, to jump to it: its section opens and the text is selected in its box โ or highlighted, in a note shown as rendered HTML. When the match is up in the card's header, the panel moves to the bottom of the window to get out of its way. Replace matches one at a time or all at once; either can be undone from Tools โ History.
Read the public creator notes in the side column. On a wide screen the card editor keeps a tall column for the private notes โ the only roomy place to actually read one โ while the public creator notes sat folded away under Metadata. A swap button in that column's header puts either note there, and swaps back. It only changes what's on screen: both notes keep their own home and their own text.
The โ tips wait for you to mean it. They opened the instant the pointer touched one, so crossing a row of labels trailed a string of popups for things you hadn't asked about. A tip now needs a moment's hover โ a click still opens it straight away. The โ beside Card type also sat too high next to its label.
Every message spans the full width of the chat. A bubble was only as wide as its text, so a one-line reply sat as a small island beside a long one. It now fills the row beside its avatar, however short โ in chats, Direct Chat and Card Forge alike.
Card Forge is desktop-only on phones reaching Rin over remote access. It's a multi-pane tool that never worked at phone size, so the ways in are gone there: the nav button, the editor's and library's Card Forge buttons, and the chat's Create character, which now says why. Remote access from a desktop browser keeps it.
Get Support now sits at the top of Settings, beside Pop out โ one click to the community Discord for bug reports, questions and feature requests.
Rin Chat Update Notes - Version: 0.6.0
10 September 2026
๐ Card Forge can write the card's lorebook
- New per-session switch: โLet the guide write a lorebook,โ its own row beside the generators one. With it on, Generate may give the card its own lorebook โ entries the model loads only when one of their keywords comes up in the conversation, so the tavern, the guild or the war twenty years ago cost you nothing until they're mentioned. THIS IS IN BETA, EXPECT IT TO BE BUGGY
- The switch is permission, not an order. An entry has to earn its place by being conditional: anything true of the character in every scene belongs in the card's own fields, where it already is. Plenty of characters need none, and the forge says so rather than padding the card.
- Ask for one in chat, any time. โAdd a lorebook entry for the innโ gets you a proper entry โ title, trigger keywords, content โ as a normal proposal you review before it lands. So does โrewrite that entry to cover her feud with the harbourmasterโ, and everything you set on an entry yourself โ whether it's always-on, where it inserts, its probability, its group โ survives the rewrite untouched.
- Nothing can be quietly broken. An entry with no keywords would never fire, so it's refused; a rewrite the guide mangles leaves the existing entry alone instead of blanking it; and an entry the guide writes when the switch is off is discarded rather than embedded. Edit or delete them afterwards in the card editor's Lorebook section.
- The lorebook is right there in the forge sidebar, the same editor the card editor gives you โ read, edit, reorder, add or delete entries without leaving the conversation. A one-line summary sits by the switch too, naming each entry and the words that fire it.
โ๏ธ Draft only
- A switch above the message box that keeps the chat a chat. With Draft only on, the guide brainstorms and nothing else โ no edit proposals, no review modal, no card changes. Ask it to rewrite the greeting and it will talk about how it would, instead of handing you a block to apply.
- It's belt and braces: the guide is told not to propose, and anything it proposes anyway is ignored rather than applied. Per session, so one card can be in draft while another isn't.
- Generate character still works, and so do the sidebar's own Improve buttons โ pressing those IS asking for a change. Draft only is about what the chat does on its own.
๐ Bug fixes
Card Forge follows the generation config you switch to. It read the provider list once when it opened, so switching configs anywhere else left it quoting the old context limit in its token line โ and, less visibly, still sending to the old configโs provider and model. Locking and unlocking the vault โfixedโ it because that rebuilt the screen. It now updates the moment the active config changes, wherever you change it from.
HTML comments in a message stay hidden.
<!-- a note for the model -->is meant to be invisible in chat, and it was โ right up until the note contained a numbered list, at which point the whole thing rendered, markers and all. Itโs hidden every time now, and still sent to the model. Comments inside code blocks are left visible, since there theyโre the point.The tour no longer restarts itself at step 10. The step that walks back to the library from Worldbooks re-armed the first-run auto-start, which fired 700ms later and dropped you back at step 1 โ every first run reached it, whatever your header looks like. Replaying the tour from Settings still restarts it, which is the one case that should.
The tour's highlight rings the right control at raised UI scale. The spotlight was placed in the wrong coordinate space, so above 100% it sat away from the button it was describing. Skip tour also stops looking disabled โ it was styled with muted text on a normal button, and it always worked.
Dragging a card to a folder works at raised UI scale. The chip that follows the cursor was placed in the wrong coordinate space, so at 150% it sat half the distance from the top-left corner away from the pointer โ further off the further you dragged. It tracks the cursor at every scale now. (The drop itself always landed correctly; it was the label that lied about where you were.)
A cardโs note no longer follows the buttons. Hovering Chat or Edit on a library tile popped up the cardโs whole note; it belongs to the artwork now, and shows when you hover that.
๐งน Smaller things
- The AI Restructure token warning says what it means. It read as โneeds roughly 3,890 more than your 3,000 settingโ, which sounds like a rewrite wants 6,890 tokens for a 4,000-token card. It doesnโt: it states the room the rewrite needs and the setting you have, as two plain numbers, and the tick box says it changes nothing but that one run. The cardโs own size is gone from the sentence โ with an Improve instruction it covered two passes while the requirement covered the larger one, so the two numbers never lined up.
- The example generator that ships with a new install is work-safe now.
HumanNPCis there to demonstrate how generators work โ weighted options, a numeric range, a field that only appears when another field rolled a particular value โ so it demonstrates that and nothing else. Existing libraries are untouched.
Rin Chat Update Notes - Version: 0.5.9
8 September 2026
๐งญ A tour of the app
- First run now walks you round the app, the way the first chat already walked you round the chat: what each part of the title bar does, how the library and its folders work, the three ways to get a character (make one, talk one into existence with Card Forge, import one), worldbooks, the โฐ menu, search โ and the one thing that trips everyone up, that you don't pick a provider, you pick a generation config and it brings its provider with it.
- Sixteen steps, skippable at any point with Esc, and it hands over to the chat's own tour at the end rather than repeating it. Its cards measure themselves, so they stay on screen at any UI scale.
- Both tours can be replayed โ from the top of the Guide, or Settings โ Diagnostics โ Guided tours. The chat one arms itself for the next chat you open, since it has to run inside one.
๐ฅ Imports from the site arrive as full AICC cards
- Pasting a card ID or link from aicharactercards.com used to fetch the SillyTavern version of that card, which folds everything into two big fields. It now fetches the AICC version, so appearance, behaviour rules, speech style and background land in their own fields โ the same card, properly laid out.
- Nothing changes for you: same
AICC/###/###id, same card page links, same bare card numbers. Any direct link you paste is still fetched exactly as typed, and if the site can't serve the full version the import falls back to the older one and tells you that's what arrived.
๐ฒ Card Forge can build generators
- New per-session switch: โLet the guide write generators.โ With it on, Generate may give the card its own
[Create โฆ]randomisers โ a patron at the bar, a loot roll, a mood wheel โ with weighted options, numeric ranges, fields that only appear when another field rolled a particular value, templates, chaining, and auto-fire. They're wired to be callable by the model, so they work the moment the card is saved. - The switch is permission, not an order. The guide adds one only where the character actually has something worth randomising โ a card with nothing variable about it gets none, and says so. Ask in the chat if you want one anyway.
- The guide can talk them through with you. With the switch on it knows what a generator is in Rin Chat, so โbrainstorm some generators for this cardโ gets you actual designs โ which recurring thing should differ each time, and which fields it varies by โ instead of a list of side characters.
- Off by default, and per card โ most characters need none, and a generator is the one part of a card that can act on its own. A guide that writes one anyway when the switch is off has it discarded.
- The sidebar lists what the card ended up with, and says outright when one fires on its own or is hidden. If the switch is on and none come back, it tells you why rather than leaving you guessing.
- Everything is checked on the way in: odds and ranges are clamped, a chain that points at a generator the card doesn't have is dropped, and a field can only depend on another field of the same generator. Edit or delete them afterwards in Generators.
๐ Bug fixes
- Card Forge no longer splits example dialogue into one entry per line. A card came back with
{{user}}:in one example and{{char}}:in the next, all the way down โ models were reading the numbering as โthe next turn goes in the next entryโ. The instructions are explicit now, and a card is repaired on the way in if a model still gets it wrong, so the examples land as whole exchanges. Existing cards aren't touched; re-generate or drag the turns together in the editor. - Pop-up menus no longer open off the bottom of the screen at a raised UI scale. A right-click menu, the clipboard picker, the library's own menus and the tooltips were all placed correctly but measured against the wrong screen: at 150% the app was told the window is 1013x676 when the space those menus actually live in is 676x451, so anything near the bottom was placed up to 225px below the edge. Everything that positions itself now measures the real space. Menus also re-place themselves when they grow โ spelling suggestions and โAdd to dictionaryโ arrive after the menu opens โ and scroll instead of spilling if they're taller than the window.
Rin Chat Update Notes - Version: 0.5.8
6 September 2026
๐ Bug fixes
- The title bar's โฐ menu is no longer cut off or buried. On a narrow window it was clipped at the bar's bottom edge (it looked like it was hiding behind the library sidebar), and with Settings open it opened behind the panel. It now opens over both.
- Right-click menus open where you clicked, and the library draws its cards, at any UI scale. Above 100% every pop-up menu was placed as if the screen were bigger than it is โ the further right or lower you clicked, the further off screen it went โ and the card grid's "which rows are visible" maths drifted as you scrolled, leaving blank space where tiles should be. Both were the same mistake in two places: a click position and an element's box are measured in different units than the ones used to place things, and only the zoom made the difference visible.
- The window paints its own background before anything loads, so a start-up or a sign-out reload no longer shows a pale frame around the app while the stylesheet arrives.
- No more size flash when the vault locks. Signing out passes through the loading screen, which drew the logo at 200px in a 460px column before the login screen redrew it at 150px in a 416px card โ the jump everyone saw. The loading screen now uses the login screen's own card and logo, so the two are the same picture with different text. Separately, the UI scale of the account you just left stayed applied to the login screen for a frame; it's dropped before that screen draws now (visible only above 100% scale).
๐ Bug fixes (cont.)
- Tooltips show every time now. Hovering a button gave you its tooltip maybe half the time โ you had to move off it and back to get one. That was the webview's own tooltip and nothing in the app could influence it, so the app draws its own now: same wording, same delay, and they can't be cancelled out from under you. Tooltips that only repeated the button's own label are gone โ a tooltip now has to say something the label doesn't.
- Saving a chat's temporary persona to your personas works again. It failed with a raw database message (โQuery returned no rowsโ) โ the app asks for the persona's card first and creates one when there isn't a card yet, but it couldn't tell โno such cardโ apart from a real failure, so it gave up instead of creating it.
- โAdd to dictionaryโ is in the app's own right-click menu, next to the spelling suggestions. It was left to the webview's Shift+right-click menu, which testers found didn't work at all. It teaches Windows the word, so it stops being underlined here and everywhere else โ and the box re-checks itself straight away.
- Spell-check underlines don't vanish any more. The app used to force the box to re-check itself after a pause in typing, which meant wiping every underline and asking the webview to redraw them โ and sometimes it didn't. That's gone: underlines stay put. (The trade: a typo a few words back may keep its clean look until you edit near it, which is the webview's own behaviour.)
๐ Bug fixes (cont.)
- A temporary persona saved to your library lands in the right fields. Its Personality went into the card's General description, leaving Core personality empty; it now goes where the editor shows it. (Chats read the two together, so nothing behaved differently โ it just looked wrong in the card editor.)
- The Copy button on a message says it copied. A silent copy is indistinguishable from a misclick; it now uses the same brief line as the rest of the chat (and says so if the clipboard refuses).
- A worldbook entry's keys can be cleared while โalways onโ is ticked. The field locked with the keys still in it, so the audit warned about keys that do nothing and the only way to act on it was to untick โalways onโ, clear them, and tick it again.
- The column headings in Text formatting shortcuts stopped floating. They hovered over the rows as you scrolled the list, which read as broken โ and no background is safe there, since a custom theme's panel colour can be see-through. They scroll with the list now.
- The persona icon in the chat header is part of the dropdown now โ it sat beside it looking like a button, with a hand cursor and nothing behind the click. It's inside the box ahead of the persona name instead, so it reads as the label it always was.
๐งช Card editor: Restructure
- New โTranslateโ mode. Type the language โ anything from
EnglishtoBrazilian Portugueseโ and the card is translated: description, appearance, personality, behavior rules, speech style, background, setting, greetings, example dialogue and prompts. The characterโs name comes too, written the way a reader of that language would (โYuki Tanakaโ โ โ็ฐไธญ้ชโ), with every mention of it in the card kept in step โ itโs a row of its own, so untick it to keep the original. Nothing is restructured or rewritten, macros and formatting are kept as they are, and you review every passage before it lands. - Improve now applies your instruction to the whole card. It only ever reached the five fields the split rewrites, so an ask like โmake her speech style more distinctโ silently skipped the greetings and example dialogue. A second pass carries the same instruction to them, listed for review beside the split.
- Both skip creator notes and worldbook entries โ either can be bigger than the rest of the card put together and would blow the token budget โ and never touch lorebook keywords or tags. Improve leaves the characterโs name alone as well; only Translate offers it. The screen says so.
๐งฐ Header
- Card Forge is on the title bar by default, and Generators moves into the โฐ menu โ building a character is something most people do, building a randomizer isn't. Only the default changes: if you've already set your own header buttons, they stay exactly as you left them (Settings โ Sizing & Layout โ Header buttons).
๐ Providers & generation configs
- โUse this oneโ is now on the provider page too. People go looking for a way to switch provider and there isnโt one โ you switch by making a generation config active, and it brings its provider with it. Each config listed on a provider now has that button, the provider holding the active config is marked Active in the list, and the provider page says up front that a provider is never made active on its own. The Guide explains it as well.
โจ๏ธ Function keys
- F1 Guide ยท F2 Settings (again to close) ยท F3 Characters ยท F4 Worldbooks ยท F5 Generators ยท F12 sign out (locks the vault). They go wherever you are, whether the button is on the title bar or in the โฐ menu, and they're on by default โ switch them off in Settings โ Shortcuts โ Function keys. Desktop only: on a phone those keys belong to the browser. Suggested by a tester.
Rin Chat Update Notes - Version: 0.5.7
4 September 2026
๐ญ Personas & folders
- The Personas view now shows every persona, hidden folders included โ it's a type filter, not a place. All cards keeps respecting hidden folders.
- Folder names can't collide anymore โ creating or renaming refuses a name that already exists or matches a built-in view (Personas, Favoritesโฆ), which could make cards seem to vanish.
- Cards shown outside their folder carry a ๐ folder chip that jumps to it; hidden folders are marked with a crossed-out eye; the editor's folder picker shows the full tree and can create folders inside any parent.
๐งฐ Composer & editor layout
- The attach button moved up to the quick-actions row โ stacked inside the composer with expand and the mic, it overflowed the box.
- The message box resizes from a grip on its top edge (it grows upward, so that's where the drag belongs).
- Import & overwrite joined the exports in a combined Import / Export menu instead of hiding halfway down Tools.
๐ป Platform fixes
- Linux: the persona dropdown works again โ an invisible touch-target helper sat exactly over it on systems that report no hover capability.
- Windows: the intermittent quarter-second typing lag in the chat composer is fixed โ a spellcheck refresh was re-scanning the whole draft right as you resumed typing; it now waits for true idle.
- The title bar can't overlap itself anymore. On a narrow window with UI scaling (or lots of pinned header buttons), nav labels could paint over the provider chip. The bar now measures its real space and drops to icon-only exactly when the buttons stop fitting โ labels come back when there's room.
- UI scale no longer flashes on big repaints. With scale above 100% on a 4K or mixed-DPI setup, finishing a reply could make everything zoom slightly bigger for a split second โ the old native zoom re-rasterized asynchronously. Scale now applies as CSS zoom, which paints at the final size in one frame; it also removes a multi-second native-zoom call from startup. The UI scale sliders (Settings, the quick Display size popover, onboarding) apply on release instead of mid-drag โ live rescaling moved the slider under your cursor.
๐ Beta-readiness hardening
- Full backup is actually full: chat pictures and attachments, Direct Chat and Card Forge transcripts, notes, custom macros, and card version history โ everything except this machine's secrets (a test enforces that). Backup and restore both report anything they had to skip instead of claiming success.
- Adding a provider can't silently fail โ presets fill in the label, and a blank one falls back to the hostname instead of discarding your setup.
- Sign-out waits for in-flight saves, so the last edit before signing out can't be lost.
- Snappier saves: heavy operations moved off the UI thread โ long chats no longer hiccup on every reply.
- Crashes leave a crash.log you can attach to a bug report; corrupt session stores are preserved for recovery instead of replaced.
- Attach-a-webpage only fetches public sites โ private/local addresses are refused, including through redirects.
- Terms of use & privacy now exist as a Guide section, alongside a LICENSE and third-party attribution file; the debug-log settings copy now says exactly what the log does.
๐ Light mode: readable contrast
Light mode's orange, green, warning and danger colors were failing the 4.5:1 readability floor and borders had all but vanished โ the palette is deepened to pass, and custom themes now pick white or dark button text by the same real standard. Dark mode's danger buttons switch to dark ink for the same reason.
๐ Bug fixes โ chat
- A message whose reply failed is saved and survives a reload while you retry; error banners with Retry stay until used or dismissed.
- Stopping a regenerate no longer leaves a blank swipe; Continue no longer drops the first characters of a cut-off reply.
- Two fast sidebar clicks can't write one chat's title or members into another; a Scene note edited in the Memory window saves on close.
- Greeting sync can no longer wipe a chat's opening message when the card refreshes โ only an untouched greeting is synced.
- Picture messages can't be regenerated/continued/swiped as text via keyboard or phone; a picture that finishes after you switch chats is discarded instead of landing in the wrong chat.
- A Ctrl+key formatting shortcut no longer also fires a chat shortcut on the same combo; chat shortcuts are disarmed while any dialog is open and under the screen lock.
- Proactive messaging can't overwrite a reply you sent while it was generating, its first outreach isn't blocked by other conversations, and converted Messaging chats keep their settings.
๐ Bug fixes โ chat (cont.)
- Provider errors surface the real message (JSON error or HTML behind a 200, out-of-credit 429s, timeouts in plain words); reasoning settings can't be silently rewritten by background utility calls anymore.
- A local server that's running but has CORS off (LM Studio's default) no longer shows a bare "Failed to fetch": the Test button now detects that case and tells you exactly which switch to flip, the LM Studio preset says it up front, and the Guide's troubleshooting covers it.
- Local models whose chat template only accepts one system message (some Qwen3-family templates) no longer 500 on every character chat while Direct Chat worked: the app detects the rejection, merges its system messages into one for that model, and remembers โ models and providers that accept the normal shape are untouched. What was learned is per endpoint + model (the same model through a gateway keeps the normal shape), and everything learned โ reasoning and prompt shape โ now lives in its own full-width "Learned fixes" card after the Reasoning section, each entry clearable. The notices about them queue instead of overwriting each other when several land at once, the handled first attempt no longer flashes a scary "chat failed: โฆJinja Exceptionโฆ" banner over a turn that succeeded, and when a template error genuinely is shown it reads as one plain sentence instead of nested JSON. The Learned fixes card also only lists a fix under the provider it actually applies to.
๐ Bug fixes โ adventure, groups & memory
- Sheet effects are computed in one place, fixing a family of drifts: swiping or deleting a swipe no longer gives a free turn on timed conditions and clocks; a failed Regenerate re-applies the old reply's effects with the original guards; Continue applies its own
[[stat:]]lines; retried empty replies don't tick conditions per attempt. - Ending the Story Director mid-review discards the unaccepted beat's effects; a choice clicked while the app is busy can't charge the sheet for a message that never sends; levelling up raises your live hp maximum instead of re-seeding it from the builder.
- Groups: the rolling summary names the member who actually spoke; mid-chat edits to the main character reach its group replies immediately; each member's lorebook keeps its own sticky/cooldown timers.
- Memory: recall no longer re-injects text the model is already reading, and the context estimate counts the adventure rules note, closing a hole at the seam.
- Dice/choice buttons stay locked during the director's reading pause; a freshly auto-read reply starts unpaused.
๐ Bug fixes โ Card Forge, images & voice
- Forge: switching sessions mid-reply is refused (the reply could draw into the other session); no double-send on fast double Enter; a failed image attachment stops the send and keeps your pictures and text; edited regenerated replies stick across โน โบ; the full-screen editor can't delete a reply that streamed in while you typed.
- Images: OpenAI's endpoint works with both suggested models; a deleted image provider stays deleted (key included); Image Studio errors clear on their own; URL-answering providers keep the real image type; batch results can't swap the wrong picture on removal.
- Voice: Pause actually pauses API/Windows speech; NanoGPT async voices work from the phone; cancelling dictation as it starts can't leave the mic hot or double-insert later utterances; failed voice downloads report the real error.
- SillyTavern compatibility: single-colon macros (
{{roll:20}},{{random:a,b,c}}โฆ) work; lorebooks with unset scan depth/probability match;/slashes/keys are regex while bare keys stay literal โ and the audit, editor and scanner all teach the same rule now.
๐ Bug fixes โ library, import/export & backup
- Merging an imported card no longer wipes your private notes and tags on the next save; "Import & overwrite" covers the persona sheet, image prefixes and assets.
- CJK/Cyrillic card names export with real filenames instead of
_.png; bulk export never overwrites same-named cards; restored version history keeps its order. - Bulk ops: Select all includes the nested-folders section; switching folders clears the selection (it could delete cards you couldn't see); move/delete/clear-art report failures; deleting a folder from inside a subfolder no longer strands the view.
- Tags can't contain commas (they split in the index and became undeletable); tag colors survive renames; the stats dashboard and library scans respect hidden folders like the views do.
- Card editor errors show as a dismissable notice instead of replacing the editor (and your edits) with a red box; HTML creator notes render as text in tile previews; the duplicate finder no longer groups unrelated unnamed cards.
- Pinning a chat from one surface no longer erases a pin made from another; deleted characters' chats no longer linger in All chats.
๐ Bug fixes โ settings & input
- Memory's summary prompt, recall template and chunk boundaries actually save now; comma-separated fields (lorebook keys, trim stringsโฆ) can be typed into again; the auto-swipe blacklist accepts spaces and newlines.
- Number boxes clamp to their ranges (a typed temperature of 50 never reaches the provider) and commit on blur/Enter; text fields no longer fire an encrypted save per keystroke.
- A new formatting-shortcut row survives tabbing between its fields; the clipboard-history shortcut requires Ctrl or Alt and stays off password boxes.
- Enter to confirm a Japanese/Chinese/Korean IME conversion no longer sends the half-composed message (all composers); Enter in the search palette can't open the previous search's result.
- Settings search jumps go through the back chain (Alt+โ returns), and the dropdown no longer shows garbled copy; "Reset this config" keeps context size, fallback model and tools.
- Every dialog traps Tab and returns focus on close; tiles, folders and chat rows work by keyboard; Escape closes one layer at a time; animations stop under reduced motion.
- The notes scratchpad saves its last keystrokes even on quit; a failed chat rename says so; the full-screen editor stays open when Send is refused mid-reply.
๐ Bug fixes โ phone remote, accounts & security
- Security: a batch settings read can no longer hand a phone the desktop's API keys; provider-key relaying matches the exact origin; a revoked/expired device's live stream ends immediately; after a lockdown nothing outlives the closed vault; theme imports can't smuggle a network fetch through CSS escapes.
- Phone: opening the page no longer pops a false "take over?" prompt; an expired PIN re-shows the PIN screen; the phone keyboard no longer drops mid-word; a save refused while the desktop holds the lease is retried on take-over instead of lost; hover-only controls (chat row pin/delete, swipe pagerโฆ) are visible on touch; keyless local providers work remotely; "Lock screen" is desktop-only (it trapped the phone).
- Accounts: renaming an account can't strand the vault mid-move; a second account no longer inherits the first's cached settings (keys included); an unreadable account list is never mistaken for empty and overwritten; recovery accepts phrases typed with capitals or extra spaces and refuses usernames already in use; failed unlocks say why instead of sticking on "Unlockingโฆ".
- Pop-out Settings no longer runs duplicate background jobs, and closes on lock/sign-out.
- Telemetry copy now names everything actually sent, and each statistic sits under the switch that describes it.
๐ Guide & polish
The Guide caught up with the app: every Settings path names the current leaves, the persona/adventure instructions match the editor, the backup section says what a backup really holds, the remote and privacy sections describe today's behavior, and the new Lock screen home, lorebook regex rule, telemetry lists and Import / Export menu are all covered. Plus a LICENSE, third-party attributions, and Get help links to the community Discord from Settings and the crash screen.
Rin Chat Update Notes - Version: 0.5.6
2 September 2026
๐ Worldbook scope field could eat all your RAM
Fixed the alpha's nastiest bug: typing in the "Only for these characters" scope field of a Worldbook or Character Lorebook entry made the text double itself on every keystroke โ a few keys in, the app was chewing through gigabytes of memory and had to be killed from Task Manager. The field now behaves like a normal text box, and a regression test makes sure it stays that way.
โฉ Continue, rebuilt
Two layers of fixes for the Continue button:
- It now truly resumes the reply on models that support it: the model picks up its own message mid-stream instead of being asked to "please continue", so the continuation flows seamlessly โ including when you've edited the reply first and want the AI to carry on from your edit. Models that can't resume are detected automatically on their first try and quietly switch to the classic method, remembered per model.
- No more duplicated text at the seam. If the model restates the last sentence before continuing (or rewrites the whole reply from the top), the repeated part is trimmed automatically instead of being stored twice.
Using /continue <instructions> or Shift-click still works exactly as before.
๐ Locked out? The app now offers the way back in
When an unlock fails โ wrong password, or a vault moved to a new computer where the saved key didn't come along โ the error now offers "Restore access with your recovery phrase" right there, instead of leaving you to spot the small link at the bottom.
๐ Card Forge: greetings stop leading with the name
Forge-generated cards had an overwhelming share of greetings opening with the character's name โ and since greetings are the chat's opening messages, the AI then started every reply with its own name too. The forge now varies greeting openings (action, dialogue, sceneโฆ), and any stray {{char}}: speaker label on a generated greeting is stripped automatically.
โ๏ธ Generator edits reach open chats โ even card-attached ones
Editing a generator in the library already updated open chats live (since 0.5.4), but if a card carried its own copy of that generator, the chat kept using the card's old version until you reopened the card editor. Open chats now apply library edits to card-attached generators immediately too.
๐ Character's Note no longer vanishes from some cards
Cards whose depth prompt was stored under the SillyTavern key name (prompt instead of text โ common in hand-written or converted AICC JSON) showed an empty Character's Note everywhere and exported it as an empty field. The note is now picked up on load, and saving the card stores it under the proper key.
โจ Card Forge keeps up with the card editor
Two fixes for working on the same card in both places:
- Editing a card in the full editor and returning to its Card Forge session now shows your edits immediately โ before, the forge kept the copy it loaded first (and could even write it back over your changes).
- The session menu has a new "New session for this card" option: start a clean forge conversation about a card without deleting the session you already have.
๐ผ๏ธ New character + image first = no more error
Picking an image as the very first thing you do on a brand-new character no longer fails with "card no longer exists" โ the card is saved first, so the image (and the card) stick even if you hit Back right after.
๐ฑ Remote: spell-check corrections work again
Right-clicking a misspelled word in the message box (or a reply you're editing) from a browser now opens the browser's own menu with its spelling suggestions. The app's formatting menu still appears when you right-click with text selected.
โก No more warning flash when opening a chat
The "Connect an AI to start chatting" callout no longer blinks on for a split second while a chat loads โ it now waits until the provider settings have actually been read before deciding whether to show.
๐ท๏ธ Tag merge suggestions stop overreaching
The "find more" merge pass was happy to call clearly different tags the same thing (magic/tragic, yandere/tsundere). Its typo tolerance now scales with tag length, so it still catches real misspellings and plurals without inventing matches.
โ๏ธ Crop when changing a card's image
Uploading a new image onto an existing character now opens the same crop tool the AI image generator uses โ drag to reposition, zoom to fit โ instead of stamping the file on as-is.
๐งฐ The "Be the DM" sidebar can close again
Opening the DM sidebar in a regular chat left you stuck with it โ the only collapse button lived in the adventure-mode character sheet, which that sidebar doesn't show. It now has its own collapse button, whether DM mode is on or off.
๐ Attach images and files โ everywhere
The paperclip is here โ in regular chats, Direct Chat, and the Card Forge. Images go to the model as real vision input (auto-downscaled โ pick a vision-capable model; a text-only one tells you clearly instead of failing silently). Documents โ PDF, Word (docx), OpenDocument (odt), even EPUB novels โ are converted to text entirely on your machine, and plain text files (md, txt, json, csv, code) attach directly. Attachments stay with the conversation and are re-sent with the history, so the model can keep answering questions about them turn after turn. In the forge, attach a reference picture or a story excerpt and ask for a card built from it. If your model turns out to be text-only, character chats automatically resend the turn without images and say so.
The forge goes one further: the ๐ button attaches a webpage. Paste a link โ a Wikipedia article, a fandom wiki character page โ and the app downloads it and boils it down to just the readable article: menus, tables of contents, citation markers, and navboxes are all stripped before it reaches your guide. Then ask for that character as a card.
๐ Make it canon
Two ways to turn what happens in chat into permanent lore:
- From a message โ select the text that matters (or take the whole message) and hit the new ๐ button in the message's hover actions. A review window lets you edit the entry, set its keywords, and save it into the character's built-in lorebook โ so it's canon in every chat with them, not just this one.
- Story so far โ its own tab in the Memory window: the AI summarizes the recent chat into up to 5 lorebook entries (your choice โ one per distinct fact or event, each with its own keywords). All drafts show together so you can check they work as a set, accept or reject each, and save the keepers in one go.
The review window also has โจ Restructure with AI: it rewrites raw chat prose into clean, past-tense lore and suggests a title plus up to 5 keywords โ everything stays editable.
โฐ Proactive messaging runs on a real clock
Characters who message you first now know what time it actually is. Every outreach โ and every reply in the Messaging chat โ carries the real date and time plus how long it's really been since each of you last spoke. Tell her "I'll be home after 6" and she can actually wait for 6; a 20-minute pause and a 3-day silence finally read differently. Regular roleplay chats are untouched โ no real-world dates leaking into your fantasy scenes.
๐งฉ Custom macros
Define your own {{macros}} in Settings โ Macros & Regex: a name and the text it expands to, usable anywhere macros work โ card fields, prompts, messages. Values can nest other macros ({{char}}, {{roll::1d20}}, even your other custom macros), built-in names can't be overridden, and the macro playground resolves them live while you edit.
โจ Small features from your requests
- All chats โ a new entry in the Characters sidebar lists every chat across all of your characters, newest first. Search filters it by chat title or character name; one click opens the chat.
- Duplicate a generator โ a copy button on each row in the Generators library; the copy opens ready to edit.
- "Not duplicates" โ the duplicate finder can now be told a group is a false positive; it stays hidden on future scans (and comes back if the group's cards change).
- Remove all worldbook entries from a character in one click (with confirmation) โ no more deleting them one by one.
- The community Discord link is now in the guide's Getting started section.
๐งโ๐คโ๐ง Card Forge: reference cards
Bring a second character into a forge session. Pick any library card โ including your persona โ as a Reference card in the forge sidebar, add a note on how the two relate, and your guide treats it as read-only context: the two are never blended, and the card you're forging is written to be compatible with the reference (a persona reference even lets greetings address you as that person). Loaded fresh every turn; its token cost shows next to the card's.
๐ฒ Adventure mode: bring your own character
Ability scores now have a third option next to Roll dice and Point buy: Manual โ type each score in directly, honor system. Made for carrying a real tabletop character into adventure mode as-is. Available when creating an Adventure Persona and in the card editor's Character sheet section.
๐ฑ Graduate an NPC into a full character
That throwaway NPC who keeps showing up? The Memory window has a new Create character tab: say who to extract ("the angry rival goalkeeper"), pick the message range they appear in โ the first and last message are previewed so you know you grabbed the right scene โ and a new Card Forge session opens seeded with that excerpt. Your guide builds the character from how they actually behaved and spoke, asks about the gaps, and the normal forge flow takes it from there. The chat's own characters are explicitly off-limits, so nothing gets duplicated.
๐ฒ Adventure mode holds the dice, even against stubborn models
Small local models sometimes skip the roll system entirely and just declare an outcome in prose โ Result: 18 vs DC 16 โ FAILURE on its own line, no roll button, no real dice. Those invented verdict lines are now stripped from the reply the same way forged ๐ฒ lines always were: the app's dice stay the only dice.
Heads-up: models below ~8B still struggle to drive adventure mode well (directives, checks, sheet discipline) โ that part is model capability, not a bug. The Alpha Tester API models handle it fully.
๐ง Small fixes & polish
- Note images enlarge on top now โ double-clicking an image in a card's private notes opened the big view behind the editor's toolbar and fields. It now overlays everything, like a lightbox should.
- The forge's model dropdown no longer blows up the toolbar when a provider has one long model name in its list, and the toolbar's labels got shorter so everything fits on a line.
- Attaching an empty file now says so instead of silently attaching nothing โ a model given zero content will happily invent an entire character from the filename alone.
Rin Chat Update Notes - Version: 0.5.5
1 September 2026
๐จ Colors that do what they say
A follow-up pass on the new Theme & Colors screen, fixing everything that didn't quite land in 0.5.4:
- Every color option now changes exactly what its label says, everywhere in the app. Status colors, badges and dropdown menus were quietly stuck on default colors before โ dropdowns now theme too, including in dark mode.
- Text stays readable on any color you pick. Buttons and chips automatically switch between light and dark text depending on how bright you make their background, so an all-pastel or all-neon theme no longer produces white-on-white labels.
- New: chat bubble transparency โ set how much of your background shows through message bubbles.
- Fixed a crash when dragging quickly around the color picker.
- The message-style preview now follows the quoted / italic / bold body-text options while you change them.
๐ช Settings polish
- Mouse back button works in Settings โ it walks back through the sections you visited, like a browser.
- Pop-out Settings opens at the section you were on, instead of jumping back to the top of the list.
- Changes made in a pop-out (colors included) now apply to the main window immediately โ no reload needed.
๐ฑ Remote access: your phone and desktop finally agree
- Changes made on your phone show up on the desktop immediately. Messages, edited chats, card and folder changes, favorites โ the desktop used to keep showing its old copy until you restarted the app. Now the open chat and the library refresh live as the phone writes (without clobbering a reply mid-stream, and without losing a draft you're typing on the desktop).
- Settings and theme changes sync across too, in both directions.
- Fixed buttons on the phone remote that didn't respond or were unreadable.
๐ค Default persona
New setting: a global default user persona. Chats that don't pick their own persona use it automatically.
Rin Chat Update Notes - Version: 0.5.4
๐งญ Settings, rebuilt end to end
The whole settings window is redesigned. A grouped sidebar (Connections / Chat / Customization / System) with a search box replaces the old flat list โ type a word and the sidebar filters to the panels that mention it, and opening a result scrolls straight to the matching card and highlights it. Every panel now uses the same layout: setting on the left with a one-line explanation of what it affects, control on the right.
Save buttons are gone. Everything saves on change or click-away, with a small "Saved." toast.
Also new here:
- โง Pop out โ open settings in its own window and keep chatting while you tune.
- Provider-style panels are now two-pane: your list on the left, the selected item's settings on the right.
- Samplers are dials โ slider + number box, blank = "don't send it, let the server decide", โ to clear.
- Renames: AI Providers โ LLM Providers, Voice โ Voice Providers, Quick Replies & Dials โ Quick Actions (dials are now prompts); its four lists share one format, each entry with reorder arrows.
- Remote Access, Data & Backup, Shortcuts, Quick Replies and the rest restyled to match โ with proper tables for formatting shortcuts and edit-with-AI presets.
๐ One provider, many model setups
Providers and model settings are now separate things. A provider is just the endpoint โ URL and key. A Generation Config owns everything model-shaped: model, fallback model, reasoning, tool calling, context and response caps, and its own samplers. One NanoGPT account can back a fast config, a long-context config and a thinking config, and you switch between them from the chat header. Your existing setup should migrate automatically.
Reasoning settings (effort, wire format, thinking markers, the "don't think" tag) moved with the model into the config, since they're properties of the model rather than the endpoint.
๐จ Theme & Colors, on one screen
The theme panel used to be four stacked sections and a lot of scrolling, with the preview 900px away from the colours you were editing. Now it's one screen: every colour as a round swatch in an aligned grid, and a live preview pane pinned beside them โ a miniature app with a real message, chips for every accent and status colour, and the Send button โ that repaints as you drag a colour.
- Swatch labels now say what a colour actually paints โ "Buttons & accents", "Links & hover text", "Selected items" โ instead of "Purple" and "Orange", which stop being true the moment you retheme.
- A changed colour wears a ring; alt-click it to reset just that one, or use the "reset n changed" link for all of them.
- Editing a saved theme shows a quiet auto-saved status; built-ins show "built-in ยท read-only" with a one-click Duplicate to edit.
- Import/Export .rctheme are visible buttons now, not just menu items.
๐ฒ You can be the DM (experimental)
Very rough so far, probably won't work well.
In an adventure chat with other characters in the party, the sheet sidebar gains an "I'm the DM" toggle. Flip it and the roles invert: you run the game, and the AI characters become your players. Each of them only ever states what they attempt โ you pick the ability it leans on, set the DC, grant advantage or disadvantage, and roll from the new party panel. The campaign card stops taking turns while it's on; turn the toggle off and the chat goes back to normal.
Experimental โ expect rough edges, and tell us where it breaks.
๐ Card Forge
- Preset messages above the forge composer โ your own reusable prompts to the guide. Click inserts into the box to edit; Shift-click sends immediately.
- A field being rewritten by the AI now shows the work on the field itself in the sidebar, where you're actually watching the result land.
- A card's private notes are editable inside the forge, and edits go to the real card.
- Notes โ a named scratchpad for the snippets you keep retyping โ a tone brief, a formatting rule, the setting you build every character in. One app-wide list, first available in Card Forge, insert-into-brief with a click. They're yours rather than any card's, so the same list follows you everywhere the panel appears.
Character Editor
- The editor's Restructure action grew options: choose between squeezing hard (for a bloated import) and maximum preservation (for a hand-written card), give the Improve pass instructions, and let one restructure exceed your response-token cap so it can write the whole card back โ with a warning when the cap looks too small.
- The Improve pass has one-tap preset chips (Tighten, Distinct voice, Deepen backstory, Plainer prose) โ your own list, separate from the per-field Edit-with-AI presets, with the same โ Manage editor.
๐ Lorebooks into characters
A character's embedded lorebook (the one that exports with the card) can now be filled from outside:
- Card editor โ Worldbook: Import lorebook JSONโฆ (SillyTavern World Info too) or Copy from libraryโฆ โ the entries become part of the card, as if it was imported with them.
- Worldbooks grew a Character lorebooks section listing every character that carries an embedded book โ edit any of them right there โ plus a copy into character button on each standalone book. + New worldbook now asks whether the book lives standalone or inside a character.
- A card that already has entries asks: Add to existing or Replace.
๐ฆ Generator imports that collide
Importing a generator whose id you already have now asks what it is instead of guessing: Merge (it's a newer version of yours), Import as new (it's someone's copy), or Skip โ with the actual differences shown so you can tell which.
๐ฑ Smaller fixes
- Selecting a provider or config in Settings now just opens it for editing โ the checkbox on each row (or Use this one) is what makes it the default. Browsing your configs no longer switches what chats run.
- Long pickers (add a character, attach a worldbook) now load more as you scroll instead of stopping at 60 and telling you to refine your search. A 700-card library is a normal library.
- ๐ฑ On a phone, per-message actions sit behind one button instead of nine tiny always-visible icons on every message.
- ๐ฑ Remote access fixes: the provider settings tabs no longer crash the page โ API-key stores can only be edited on the desktop, so remotely they're view-only now (generation configs still save). The settings sheet no longer scroll-fights the page behind it, and the persona picker actually opens โ an invisible tap-target overlay was eating the tap.
- ๐ฑ On a phone, the composer's mic and expand buttons moved from the chat header down to the quick-action row just above the message box.
- ๐ง On Linux, the window finally has real resize edges โ grab any edge or corner, with proper resize cursors. (Windows always had this via the OS.)
Rin Chat Update Notes - Version: 0.5.2
๐ท The tags box is resizable
A heavily-tagged card showed about two rows of chips and scrolled the rest, with no way to open it up.
Grab the bottom-right corner of the tags box and drag it taller. It still opens at two rows, so a card with three tags doesn't get a big empty panel โ but the two-row limit is now a starting size rather than a ceiling. Works everywhere tags are edited, including bulk tagging and the tag assign dialog.
The tag suggestions no longer vanish on a second click. Clicking inside the tags box once opened the list; clicking again closed it, and it would not come back until you clicked somewhere else and back in.
๐ The editor remembers how big you made a field
Drag a field taller in the card editor and it opens that size next time you edit that card. Sizes are remembered per character, not globally โ a card with a 900-word greeting can keep that box open without every other card inheriting a giant one. The tags box is included.
Nothing to turn on: resize a field and it sticks. Drag it back to its normal size and it stops being remembered. Deleting a card forgets its sizes too.
Resizable fields show a grip now. There was no sign a field could be dragged at all โ the corner handle had been hidden because the browser's own version is a pale box that looks like a rendering glitch on a dark theme. It's drawn in the app's own colours instead, and brightens when you hover the field. Every field that actually resizes has one; nothing that doesn't, gets one.
๐ One "Card type" instead of three switches
The card editor's Features section had three separate True/False dropdowns โ Adventure mode, Persona, Adventure persona โ which is eight combinations for five meanings, several of them contradictory. They're now a single Card type, sitting beside the Display name at the top of the editor:
- Character (the default)
- User Persona
- Adventure Persona
- Adventure and User Persona
- Adventure Mode Game Master
Every existing card already has the right type โ it's worked out from the old switches, so nothing needs re-saving and no card is rewritten just by being opened. Picking a type still writes the old switches alongside the new field, so a card you share with someone on an older version keeps working, and a card they send you is understood here.
๐ชช Switching persona mid-chat
Change persona partway through โ the dropdown in the top bar, an edited temporary persona, or an adventure persona โ and the app now offers to rewrite the rest of the chat to match. {{user}} follows a rename on its own; everything the model already typed does not โ a hundred replies naming the old character, a sheet whose stats are keyed to it, the turn order, the campaign plan. Those used to stay behind, so you ended up with two half-sheets and a story about a stranger.
The offer lists exactly what it would touch and you can decline it. Matching is whole-word and case-sensitive, and the prompt says so โ if the old name is also an ordinary word in your story, skip it and the sheet keeps working under the old labels.
๐งฉ Card Forge never overwrites your card without asking
Regenerating a character is a proposal now, not a write. It used to replace every field the instant the model replied โ no preview, no undo, and on an imported card that was somebody else's work gone. You now get the same field-by-field review the guide's chat edits use: tick the ones you want, take all, or throw the lot away.
A field with content is never replaced by an empty one. If a regeneration drops a field it wasn't thinking about, that field is left exactly as it was and isn't even offered as a checkbox. Same for list entries it didn't reach โ regenerating with five greetings against your eight leaves the last three alone.
Card history. Every change the forge makes to a card is recorded, and a new button beside the card opens the list. Two ways out of a change:
- Undo this โ puts back just that one, leaving everything done since it untouched. If a later change has since rewritten one of the same fields, it tells you and leaves that field alone rather than quietly reverting the newer work too.
- Undo to here โ rolls the card back past that point, landing exactly where it stood before.
Each entry opens up to show the actual text of every field it touched โ what was there before, what the change wrote, and if something has been rewritten since, what the card holds now. Fields in that last state are flagged, because those are exactly the ones Undo this will leave alone.
๐ฑ Remote access fixes
Enter is a line break on a phone again. With Enter-to-send on, a soft keyboard had no way to type one at all โ there's no Shift+Enter on a touch keyboard, so every attempt at a new paragraph sent the message. On a touchscreen Enter now always inserts a line break and the Send button sends. Devices with a real keyboard are unaffected and still follow your Enter-to-send setting.
Spellcheck corrections work in a browser. Remoting in from a PC, misspelled words were underlined but right-clicking them opened the app's own menu instead of the browser's, so there was no way to accept a correction. A right-click with nothing selected now falls through to the browser. Select text first and the formatting / AI-edit menu still appears as before.
Phone chat header, rebuilt. The chat list button, New chat and the chat name have moved up into the app's own header bar โ they were a whole row of their own before, on a screen that can't spare one. The provider chip is now just its icon (name and model are still in its tooltip and in Settings), and the persona picker is a purple icon button like everything else in that row rather than a wide dropdown. Tapping it still opens the usual list.
Two things that fell out of that move are fixed too: there is no longer a second New chat button below the header, and the empty strip the chat name left behind is gone โ its hover-only rename tools were still taking up the row on a screen with no hover.
๐ฑ Remote access fixes (continued)
The mic and expand buttons moved out of the message box into the toolbar row, at its far left. Inside the input they had to stay small enough not to cover your text, which made them the two hardest things in the app to tap โ and at some sizes they overlapped each other outright. The message box gets its full width back. Desktop keeps them in the input, unchanged.
A feature the desktop won't run remotely now says so. Those calls were refused in silence, so the only symptom was a control that did nothing. You get a short message instead โ the desktop's own wording, naming what it turned down. Settings the desktop deliberately keeps to itself stay quiet, as before: that is the design working, not something worth interrupting you for.
Rin Chat Update Notes - Version: 0.5.1
A follow-up to 0.5.0's phone release: remote sign-in is simpler and stricter, phones size themselves properly, card notes can hold pictures, and adventure mode hands a lot of bookkeeping back to the app instead of trusting the GM to remember it.
๐ Remote sign-in is a PIN, and it bites
Pairing is gone. No codes to exchange, no device list to curate โ a phone connects with your PIN, and that is the whole flow.
It is stricter in exchange: ten wrong PINs locks the vault. Not the session, the vault โ the desktop goes back to the password screen and everything encrypted stays that way. Something guessing at your PIN over your network gets ten tries, ever.
Signing out on the phone now ends the remote session, rather than running the desktop's sign-out flow at it and leaving the connection half-alive.
๐ Your phone is not a small desktop
- The desktop's UI zoom no longer applies on a phone. If you had scaled the desktop UI up, your phone inherited that on top of its own scaling and everything was enormous. Phones have their own font size setting now.
- The forge sessions menu fits the screen instead of running off the edge.
- After an update, the phone heals itself. It could get stuck holding half of the old build and half of the new one, which showed up as blank panels or a screen that simply never loaded. It now notices and reloads.
- Cards with no art show a proper placeholder over remote instead of a broken image.
๐ผ Notes can hold pictures
Card notes render as formatted text with images now, and double-clicking an image opens it full size.
Images that live on the web used to sit at "Loading imageโฆ" forever in some cases. They load.
๐ฒ Adventure mode: the app referees, the GM narrates
The pattern behind most of this: the ways adventure mode went wrong were almost never the GM making a bad call โ they were the GM forgetting to make one at all. Fifteen messages with no dice. A meter created and then never moved again. Those are now the app's job.
Clocks
- Click a dial to edit it, drag it to fill it. They used to be editable only as a text row in the stat list, under a truncated label.
- They no longer appear twice โ once as a dial and again as a stat row showing the same number.
- The same clock could get created twice, so you had two "Satisfaction" dials with different values. Fixed on both sides: the duplicate is dropped, and existing chats stop drawing it immediately.
- Clocks can drift on their own. A crowd's attention, a disguise holding, an alarm cooling off โ set it once and it slides every turn the GM doesn't touch it. A pursuit can mount the same way.
The GM's own honesty
- It cannot rewrite your ability scores. A GM that wanted a scene to work would quietly raise your Charisma from 8 to 16 โ which deletes the character you built. Refused now, and it is told why: give you advantage, an item or a condition instead. A flat sheet is a choice, and an 8 is a person who fumbles.
- It gets shown what it has actually been doing โ how many rolls, stat changes and choices its last five replies contained, and any meter it has never once moved. A model can't notice what it forgot, but it can read a count.
- Broken meters repair themselves. Writing a bar as
9/10when it should be a plain number next to its maximum used to draw nothing at all. - Wheels and generators can record their own result, instead of asking the GM to remember what it just dealt.
The campaign plan is a storyboard now, not an essay: the premise, who's in it and what they want, what happens if you do nothing, scenes to reach for, and where it can end. It reads as a menu the GM steers by. Works for a dungeon crawl, a game show, or whatever else you point it at.
Creator notes never reach the model. A card's notes field is for whoever downloads the card โ changelogs, build notes, mechanics that were removed. It was reachable as a macro, so a stale changelog could land in the model's context and read as live instructions.
๐ Card Forge: guides are just their voice
A guide used to be one big editable blob that mixed who the guide is with the format rules the app itself reads. Two problems fell out of that, and both are fixed:
- Editing a guide could quietly break card generation โ trim the wrong paragraph and its suggested edits would show up in the diff view and then apply nothing.
- Duplicating a guide froze those rules forever. Improvements shipped with the app could never reach a copy you made.
Now a guide is only what taste owns: personality, scenario, example dialogue, opening lines, Session style (how hard it pushes back, how many questions at a time) and Card writing style. The format rules come from the app and stay current.
Card writing style is the one to know about โ a plain line like "3rd person pov, present tense, sparse prose" applies to every field of every card that guide builds. That used to require editing the spec by hand.
Your existing guides carry over automatically, with your own edits kept. If a guide had changes the app can't place, they're preserved in an Advanced additions box with a note โ worth tidying, since it costs tokens every message.
๐ง Also
- The crash panel no longer blames the app for someone else's code. A browser extension throwing an error in the page put up our "something went wrong" screen.
- Long chats render faster โ messages without variables in them stop re-rendering every time any variable changes.
Rin Chat Update Notes - Version: 0.5.0
If you are on 0.4.8, this brings you 0.4.9 as well. That release was announced but never reached the update server, so everything in those notes โ your abilities moving the dice, levelling up, the GM's hidden campaign plan, the character builder work โ arrives with this build too.
And then 0.5.0 on top, which earns the jump: your phone now runs the real app.
๐ฑ The whole app, on your phone
The slim phone client is no longer what you get. Remote access now serves the actual desktop UI, with a phone layout built on top of it โ not a cut-down copy of three screens.
That means the library, the card editor, chats, adventure mode, worldbooks and personas, on a phone, laid out for a phone:
- Cards โ browse, search, create, edit, tag, file into folders, delete
- Chats โ the full transcript, swipes, per-message actions, adventure widgets
- Speech plays on the phone, rather than out of a computer in another room
- Everything is rebuilt for a narrow screen: the title bar folds into a slide-out menu, the library toolbar collapses to a single row, card tiles are reshaped, and the full-screen field editor is finally actually full screen
Your desktop is still in charge. It holds your vault key and your provider keys, and neither ever reaches the phone. Generation, encryption and disk access all stay on the machine running the app โ the phone is a window, not a copy.
One device writes at a time, with a handoff prompt from either end. /lite still serves the old lightweight client if you prefer it, and /app forces the full UI.
๐ What a phone is allowed to touch is now a written list
Every command the desktop exposes is blocked from remote until it is explicitly classified โ 54 of 128 are reachable today, and adding a new one fails the build until someone decides which side of the line it sits on. Your vault and identity, the host filesystem, the host network, and the remote server's own administration are permanently desktop-only.
Provider settings reach the phone with the keys stripped โ enough to show you a model picker, useless to anyone who intercepts it. And image and blob commands no longer take a path from the caller at all, so a remote client cannot aim a destructive command at an arbitrary folder.
๐ฒ The GM has to roll
A fight, a persuasion attempt, a climb, a stealth check โ the game master can no longer tell you how it turned out without asking for the dice first.
The rule now names the categories out loud, and more usefully it names the five ways it used to slip past, because each one reads as ordinary narration in the moment rather than as breaking a rule:
- resolving it inside a sentence โ "you swing and the bandit crumples"
- summarising a whole fight in one clause โ "you cut your way through the guards"
- doing it for the NPC's side, where an enemy strikes or lies or grabs you unopposed
- taking your own claim as the result โ "I convince the guard" is an attempt, not an outcome
- opening a reply with the check already settled offscreen
If something is genuinely trivial there is no roll and no drama โ difficulty belongs in the DC, not in skipping the check.
๐ฃ Words weigh in โ properly
A spoken roll is graded โ6 to +6 now, up from ยฑ2, against a real rubric: counterproductive, generic, unremarkable, fitted, or this should work. At ยฑ2 a good line could never close a real gap, so the say-box was decorative. It isn't any more โ a strong pitch can carry a bad roll, and a lazy one can sink a good one.
Grading judges what you said to this listener, using only what your character could know. It rewards naming their motive, their fear, or something you actually learned in play โ not prose polish, not length, and rudeness that fits your character is not a penalty.
And the scorecard is gone from the story. The GM used to write out its whole appraisal โ "I judge these wordsโฆ 7, pitch +4 โ 13 vs DC 12 โ success" โ before getting to the scene. It still does the arithmetic, you just never see it. You get the narration.
Your words also render properly now, in their own panel above the dice card, with the same markdown as any other message instead of raw asterisks.
Placing ability scores no longer needs a drag, either โ click a score, click an ability.
๐ง Linux: drag and drop actually works
Dragging a card onto a folder, re-parenting a folder, reordering card fields, placing ability scores โ none of it did anything on Linux. Not a bug in any one screen: WebKitGTK, the browser engine behind every Linux build, does not deliver HTML5 drag and drop at all. The cursor showed "no", the drop never fired, the thing snapped back.
Every in-app drag now runs on pointer events instead, which every engine supports. Dragging a file into the window to import it was never affected and still works.
๐ง DeepSeek and other thinking models
If you use DeepSeek you will have seen this: the model appears to dump its own instructions into the chat, and then choices and dice rolls stop appearing at all.
That text was never the system prompt โ it was the model's thinking, rendered as the message. DeepSeek's template writes the opening <think> tag into the prompt itself, so the model only ever sends the closing one, and we were looking for the pair. Now handled: the thought goes to the thinking block where it belongs and the reply is the reply.
It compounded, too: a leaked reply gets saved to the chat, so every later turn has an example to copy.
โ ๏ธ Raise your max response tokens on reasoning models. They spend that budget thinking before they write anything. At 400 a reply can be entirely thought and get cut off with no narration, no choices and no dice โ nothing can recover that one.
Chats already full of leaked replies mostly sort themselves out โ only replies cut off mid-thought need deleting.
๐ง Also
- Nothing on a phone can push the page wider than the screen. One long unbroken string in a card field โ a URL, an ID โ stretched the editor to four times the screen width.
- Modals fit the screen. Several rendered at their desktop design width โ up to 1100px โ on a 360px phone, most of the panel off the edge. They also stop hiding their buttons behind the keyboard.
- One tap opens a chat from the card editor's Chats menu, instead of two. Pin and delete were revealed on hover, which a touchscreen cannot do, so the first tap was spent on that. Long-press a chat for pin and delete.
- A new chat's greeting bar no longer overflows. "Choose greeting" and "Generate New First Message" were wider than the message bubble.
- The library toolbar collapses on a phone: import, saved views, statistics, bulk organise, manage tags and the library scans are one menu, and New folder moved into the folder strip.
Rin Chat Update Notes - Version: 0.4.9
๐ฒ Your abilities now move the dice
The GM tags each roll with the ability it leans on, and the app applies your character's modifier itself โ looked up from the live sheet, folded into the formula, and shown right on the dice card ("Stealth (dexterity +2)"), so a forgetful model can no longer ignore your strength 18, and an overeager one can't count it twice. Formula bonuses stay reserved for everything else: weapon quality, blessings, a situational edge.
The GM can't fake dice either. The ๐ฒ line has always been the app's signature for a roll it made, and the model was told only those count โ but that only ever stopped you forging one. Caught in testing: a game master opening its reply with "๐ฒ Melee check: 1d20+0 โ 6 โ FAILURE" and a damage roll to match, numbers no dice ever produced, indistinguishable from the real thing on screen. Those lines are now deleted before the reply is ever saved.
โฌ Levelling up, properly
Levelling is the app's job now, not something the GM has to notice. Every 100 XP earns a level, and you get a dialog announcing it, the HP it adds (from Constitution, the same formula the builder uses), and two points to raise abilities, D&D-style โ spend them or skip them. Cross two thresholds at once and you get both levels and all four points in one go. Current HP rises by exactly what the maximum did, so levelling is never a free heal, and the GM is told to mark the moment in the story instead of doing the bookkeeping itself.
๐บ The GM now has a plan
The moment you take your first action, the app quietly writes the campaign plan behind the scenes โ the true situation under the opening, who wants what, how things escalate if you sit still, and where it could all land. Your first reply is generated with that arc already in hand, and every turn after carries it, so long adventures stop drifting once the opening scrolls out of memory. You never see it in the story; it's spoiler-gated in the sheet sidebar under Show DM stats, next to the GM's other hidden bookkeeping โ and there it's fully editable, right-click-a-selection-and-rewrite-with-AI included, so you can steer where the story is heading. Derail it in play and the GM adapts the intent rather than dragging you back to the script. Delete your way back to the start of the chat and the plan clears itself, so your next opening gets a fresh one. Stop cancels the write if you'd rather not wait, and the plan box stays there empty and writable either way โ so a cancelled or failed one can simply be typed in.
The plan also opens the game with the GM's own side already populated โ a few starting stats for the people, creatures and clocks that matter (npc_warden_status = dormant, dm_turns_until_patrol = 4). This matters more than it sounds: game masters are reliable about maintaining stats that already exist and unreliable about inventing them, so without a starting set they'd narrate named enemies and ticking clocks for a dozen turns while tracking nothing โ and then contradict themselves. It costs no extra call; the planner was running anyway. And the GM is now told, every turn it has stats, that those values are its to move โ so distances close as you advance, clocks count down, and alertness rises when you're spotted, instead of the sheet quietly going stale behind the story.
๐ A sheet that stays honest
The GM gained a second private namespace for the things it tracks that aren't people: npc_ stays for creatures and characters (hp, whether the guard is alerted), and dm_ now holds world state, hidden clocks and secrets โ the storm three turns out, whether the alarm has gone up. Both hide behind the same Show DM stats toggle, and adding one from the sheet turns that toggle on for you instead of filing it somewhere invisible.
The GM can also drop stats that are finished โ a slain enemy's hp, a clock that has run out, an item used up โ so a long adventure's sheet stays about the story happening now instead of growing forever. It can only clear its own side of the screen and consumables; your character's stats are yours alone, and deleting a message puts anything it dropped back. Gear that's confiscated rather than destroyed now moves to whoever took it instead of vanishing, so the count survives captivity and comes back intact when you get your pack off the warden.
Stats you delete stay deleted. Every message carries a snapshot of the sheet from before it ran, so deleting or rerolling it can undo its changes โ but those snapshots were frozen at generation time and knew nothing about your later edits, so tidying the sheet by hand and then touching an older message quietly put the old values back. A hand edit now outranks the transcript. You can also rename or move any stat between sections from its right-click menu.
๐ง Character builder, polished
- Your character can have a face โ upload a portrait or generate one with AI (same generator the card art uses, so styles and model overrides all apply), right from the character builder. It shows at the top of the character sheet sidebar, and saved Adventure Personas keep it.
- "Complete sheet for me" shows its work โ a proper overlay with a spinner while the AI writes, and a Cancel that actually aborts the request mid-flight. Shift-click the button to tell it what you want first ("a disgraced ship's surgeon", "cheerful, superstitious, owes someone money"). Backstories run up to two paragraphs now instead of a couple of lines.
- The persona library updates instead of duplicating โ loading a saved persona, editing, and saving again used to mint a copy every time, with no way to delete any of them. The button now reads Update in library for a loaded persona, and Remove from library finally shows up. Status notes dismiss themselves, and the footer buttons stopped being five different sizes.
- A character can't start with unassigned abilities โ the builder let you hit Use for this chat while still on the roll-or-buy chooser, quietly creating a hero with 8s across the board. The button now waits until you've rolled or bought, and says why.
- Opening the builder mid-game no longer costs you progress โ re-applying a persona (to change a portrait, fix a typo, rename an ability) used to re-seed the whole sheet from the builder's copy, resetting your XP to zero and healing you back to your starting HP. The builder owns the character โ abilities, class, level โ and play keeps what play earned.
๐ Card Forge chats like a chat
Every message in a forge session now carries the controls the main chat has: edit either side's text in place (the bubble keeps its full width, Ctrl+Enter saves, Esc cancels), regenerate any of the guide's replies โ it re-rolls from the turns before it and streams into that spot rather than at the bottom โ and send an empty box to get another reply to the last message without typing anything.
๐ฑ Remote access: the phone stops asking to pair
Fixed: some phones were asked to pair every single time. The device's identity is a cookie, and it was marked SameSite=Strict โ which means the browser withholds it whenever you arrive from another app: a link you messaged yourself, a note, a QR scan, a home-screen shortcut. Android Chrome sent nothing, the desktop saw an unknown browser, and asked you to pair again. It's now Lax, which still stops other sites making your phone fetch or change anything in the background.
Send with an empty box works on the phone now, the way it always has on the desktop โ it asks the character for another message with nothing of your own attached. The phone was refusing the tap, and the server was rejecting an empty body as a mistake; it isn't one. (Not the same as Continue in the send menu, which extends the reply that's already there.)
Long messages no longer get clipped when sent from a phone. Anything over 8000 characters was silently truncated on the way in โ the same paste worked from the desktop and quietly lost its tail from the phone, with nothing saying so. Worse on an edit, which replaces a stored message: editing a long one from your phone could delete the end of it. Both clamps are gone; phone and desktop now accept the same lengths.
And when a device does ask to pair, the prompt says why. It now distinguishes a browser that sent no device ID (new โ or not keeping the one it was given, which points at a changed address, private browsing, or "clear cookies on exit") from one that sent an ID this computer doesn't have (paired before and removed, or the device list was lost here). Those two have completely different fixes and used to look identical.
๐ง Also
- Write your next message while one is still arriving โ the composer no longer greys out mid-reply. Type, paste, edit freely; only sending waits for the reply to finish (the button is still Stop until then). Nothing you type touches the streaming message.
- "Don't think" means don't think โ when a model once rejected the no-reasoning setting, the app permanently switched that model to low-effort thinking, which silently burned the entire token budget of small background calls (character completion, chat naming, image prompts) and returned nothing. A "none" request now keeps every off-switch regardless, with budget headroom as insurance โ and the learned per-model answers are finally visible and clearable under Settings โ Providers โ Learned reasoning fixes.
Rin Chat Update Notes - Version: 0.4.8
๐ฒ Adventure mode (experimental)
Turn any chat into a game-mastered adventure โ it's carried by the card: adventure-built cards switch it on for their own chats automatically, and you can flag any card yourself (card editor โ Metadata โ Features โ Adventure mode). Ordinary chats carry none of it. A ready-made Adventure Mode Narrator card ships with this update so you can try it immediately, and the Guide has a new section on playing โ plus one on writing your own adventure card. Choice buttons (Shift-click to act them out in your voice), dice rolls with stakes stated up front โ the app rolls, so the model can never fudge or be talked into "I rolled a 20" โ and a live character sheet it updates as the story goes. Rolls render as styled dice cards, and social checks can weigh what you actually say: your words (typed, or drafted by the mask button โ Shift-click it to give the draft instructions) tilt the roll ยฑ2, stated openly.
Build a proper character: the greeting's card (or the sheet's person icon) opens the builder โ name, abilities (roll 4d6-drop-lowest or point-buy; rename the set to fit any genre), hp, level & XP, inventory, notes to the GM โ saveable as reusable Adventure Personas. The sheet sidebar groups stats into sections (character, inventory, money in any currency, world), keeps a jump-to history of every change, and hides the GM's npc_ bookkeeping unless you flip "Show DM stats (spoilers)". Deleting, rerolling, or swiping a message reverses its stat changes, so the sheet always matches the story you kept.
New rules this round: max HP with an app-enforced heal cap, rests (short = fixed recovery, long = back to full), and two referee fixes โ stat changes glued mid-sentence are still caught, and edited or deleted stats no longer resurrect (chat memory used to feed old directives back to the GM, which re-applied them over your edits; memory now strips the mechanics out).
๐ผ ComfyUI, without the file dance
Build your workflow with the Rin Chat nodes and press Queue once โ that's the whole setup. Every generation uses the workflow you last queued; edit your graph and just Queue again. The app remembers the last known copy across ComfyUI restarts, and loading a Save (API Format) file pins that exact file. Your graph is never touched beyond the Rin Chat nodes' own values.
The Rin Chat ยท Input node grew batch_size (the Studio's batch renders in one run; chats always drive it to 1) and from_api outputs (true only when Rin Chat drives โ switch off preview/debug branches for API runs). The Studio adds a Project field passed to the node's project output for filename prefixes and routing.
โก Much faster in long chats
Typing no longer re-renders the whole chat (the composer is its own island), and streaming updates only the message being written instead of the entire transcript sixty times a second โ long chats stay smooth under both. Plus a pile of smaller waste gone: cached settings reads (opening Settings fired dozens of identical queries), cached timestamp formatting, no image-folder re-scan on every return to the library.
๐ง Also
Pick the image model per generation โ the card-image generator (Card Forge included) and Image Studio gained a Model picker: override the provider's default for one generation, from the provider's model list or typed. Empty = default; ComfyUI keeps its workflow's model.
Move cards by several tags at once โ Bulk Organize โ By tag is multi-select with removable chips; the move covers every card carrying any of them.
Card feature flags that actually travel โ the AICC format's
metadata.featuresbag (what carries Adventure mode) gets a proper editor control (Metadata โ Features, True/False per flag; False stores and exports nothing), survives ST-format exports (JSON and PNG, via a namespaced spot ST tools ignore), and shows up in Import & Overwrite's field diff โ all three used to silently drop it.Card editor quality-of-life โ Tools โ View JSON shows the card exactly as it stores (read-only, with Copy); status messages ("Exported toโฆ") are a proper auto-dismissing toast instead of a header note that pushed the buttons off screen; notes fields are labeled for what they are โ Private Card Notes (never sent to the model, never exported) vs Public Creator Notes (travel with the card) โ with a one-click copy from public into private and the standard โจ Edit-with-AI button on the private notes.
Choose which notes the library shows โ Settings โ Appearance โ Card library: card tiles can show your private notes (default) or the author's public creator notes, with an optional fallback to the other when the chosen one is empty.
Appearance settings, tidied โ jump links at the top of the section, header-button pinning in its own panel, chat appearance grouped into labeled subsections, the theme color grid flows to three columns when the window allows, and the UI scale / font size sliders take a typed value too.
Remote access knows its networks โ the address list drops useless virtual-machine adapters (WSL, Hyper-V, VirtualBoxโฆ), groups private-VPN addresses under their own header with the product named (Tailscale, ZeroTier, WireGuardโฆ), and tags the localhost address for what it is: this computer only. The panel now explains our recommended road-warrior setup โ Tailscale, free, with a download link โ and got a general tidy: troubleshooting right under the addresses, PIN settings in two columns, and a compact scrolling device list.
The impersonation model override works everywhere now โ the instructions modal and Story Director ignored it, and a fresh save could be invisible until restart. Thinking models also stop agonizing mid-draft: the request now says outright that ghost-writing your reply suspends the "never write the user's lines" rule.
Background failures aren't silent โ a failed scene-note update, auto-swipe attempt, or summary now surfaces its actual reason ("Your prompt exceeds the model's context lengthโฆ") instead of leaving no trace outside the debug log.
Auto-swipe judges only what you can read โ a blacklist word the model merely thought no longer triggers rerolls, and rejected attempts put the adventure sheet back instead of stacking their stat effects.
Spellcheck on both problem platforms โ Windows 11's lazy checker missed typos a few words back (hence the "add spaces at the end" workaround); the composer now forces a re-scan when you pause typing. And Linux gets spellcheck at all โ its webview leaves the checker off unless the app opts in, which it now does.
Linux in-app updates repaired โ the update
.debwent missing from a release (stale artifact staged; the build now pins the exact version), and installs that can't self-update are pointed at the download instead of failing after fetching 90MB.Image Studio, reworked โ compact self-scrolling form with Generate pinned at the bottom; Prefix + Suffix style slots (here and in the card-image generator); presets as a dropdown with in-place save and delete; collapsible style preview; the style editor reachable from the Studio; per-image ร and Clear all on results; expand buttons on the prompt boxes; and "Saved toโฆ" is a visible toast now.
A typing indicator the moment you hit send โ the character's bubble appears immediately and hands off to the reply as it streams.
Watch a model think, live โ the "Thinkingโฆ" block expands while streaming (following the newest lines) so you can stop a doomed reply early; expanding a finished block during another reply's stream no longer flickers.
Links can't hijack the app โ every link in chat opens in your default browser, protocol-less ones (
example.com) included, instead of replacing the app with the page.Fixes: the phone remote's server could fail to start after a dependency update (TLS conflict); a provider erroring at the tail of a complete reply no longer throws the reply away; picking from an autocomplete dropdown could crash the app; paging impersonation drafts in the fullscreen editor showed (and sent) a stale draft; the phone remote dated every chat January 1970 (seconds read as milliseconds).
Rin Chat Update Notes - Version: 0.4.7
๐ฑ The phone version grew up fast
Everything here landed since 0.4.6 shipped its first cut:
Jump back in โ the library opens with a row of your latest chats across every character; resuming last night's conversation is one tap.
Hold the Send button for the extras: suggested replies, Impersonate (an AI-drafted reply written for you โ whatever you've typed becomes its instructions), and continuing the last message.
Greetings count as swipes now โ browse a new chat's alternate greetings from the phone.
Group chats get a cast row: tap a member's face and they reply now.
Character fields, read-only โ a character's screen has a Fields tab beside its chat list, showing the card exactly as the desktop editor does.
A typing indicator while the reply (or a picture) is on its way, and the app's own status line โ a failed generation tells you what went wrong instead of silently going quiet.
Tap a chat picture to see it full screen.
Adjustable text size (the Aa button), a jump-to-latest button, a clear-filters button when a search, folder or tag is narrowing the library, and pull down to refresh.
It reopens where you left off instead of dumping you back at the library โ including after iOS kills the installed app โ and backing out of a chat returns to the character you came through.
Pairing fixed: two waiting devices made the approval code flip every second until nobody could pair; the desktop now pins one request at a time. A browser that refuses cookies gets told so instead of looping forever.
Desktop knows it's serving: a phone icon appears beside the settings gear while remote access is on, with a bubble counting connected devices โ and if the app is locked, the phone now gets a page saying to unlock the desktop, instead of a dead socket.
Lock the desktop, keep the phone. Hover that phone icon for a new option: lock the screen behind your vault password while phone access keeps working. Signing out cuts the phone off (the vault closes); this doesn't โ it's for walking away from the computer mid-chat without letting whoever sits down next read your cards and chats. Device approvals are blocked while it's locked, too.
๐ Ask the guide
The Guide has an ask box now: type a question โ "how do I change the system prompt?" โ and your AI provider answers in plain language from the guide's own text, with links to the sections it drew from. It's built not to make things up: the model only ever sees real guide sections, it's told to say so when the guide doesn't cover something, and the section links are picked by the app, never written by the model. Broad questions ("what's easy to miss?") work too โ those get a digest of the whole guide to summarize from.
It works from anywhere: in the search bar (Ctrl+K), start with ?: โ "?: how do macros work" โ press Enter, and the answer appears right in the search window.
And the guide itself caught up with the app: image generation, Image Studio, Card Forge, Direct Chat, the phone remote, generation presets, command tags, and the memory tree all have sections now โ organized under proper headings at last โ which also means Ask the guide can actually answer about them.
๐ง Also
- Drag a card in to import it. Drop
.json/.pngcard files anywhere on the library โ same import as the button, including whole batches.
Rin Chat Update Notes - Version: 0.4.6
๐ฑ Chat from your phone
Rin Chat can now serve its own chat page to your phone or tablet. Turn it on in Settings โ Remote access, open the address it gives you, and your computer asks you to approve the device โ it shows a 4-digit code, you check it matches, you tap Allow. Then pick a PIN on the phone and you're in.
Your computer does all the work and keeps everything: the API keys, your characters, your chats. The phone only sends what you type and shows what comes back, so there's no second copy of your library anywhere and nothing to sync.
What's there: your character library with search, folders and tags, starting a new chat or carrying on an old one, sending and receiving with live streaming, retry, swipe between alternatives, edit, delete, and pictures generated in the chat. Messages look the way they do in the app โ the same formatting, the same macros, the same character art โ because the desktop renders them and the phone just displays them.
Being straight about the state of it: this is a first release of a big feature, it will have rough edges, and it does far less than the app itself. No lorebook editing, no card editing, no image generation, no settings, no group-chat controls, and plenty of the smaller conveniences are missing. Expect bugs. It should be good enough for reading and replying to your chats from the sofa, and that's what it's for right now.
On security, since this puts your chats on your network:
- Only devices you approve at the computer can connect, and each one asks for your PIN โ again after 30 minutes of not using it (adjustable). Too many wrong PINs and the device is unpaired and needs approving again.
- It's HTTPS, with a certificate the app makes for itself. Your browser will warn that the connection isn't private, and that's expected: a trusted certificate needs a public web address, which your home network hasn't got. The traffic is still encrypted, and the certificate's fingerprint is shown in Settings if you want to check it.
- It only reaches your own network, and only while Rin Chat is open and unlocked. Everything is off until you turn it on.
- To use it from elsewhere, run something like Tailscale on both devices โ nothing in Rin Chat needs to change.
On iPhone, add it to your home screen (Share โ Add to Home Screen) โ it then opens without Safari's address bar and behaves like an app.
๐ง Models that refuse "don't think"
Some models reject the don't think setting outright, and every feature the app runs for you โ Rin's card edits, image prompts, chat titles, suggested replies โ asks for exactly that. On those models each one failed with a raw error while ordinary chat carried on working, which made it look like the feature was broken.
Rin Chat now reads what the model says it does accept, uses the cheapest of those instead, remembers it for that model, and tells you once. No setting to find, and it won't cost you a failed request twice.
๐ง Also
- Alpha Tester API: the model box is now a searchable list rather than free text. Typing an id the tester key can't use produced a flat "not in the subscription allowlist" error, which read as the app being broken.
- The chat's Model & generation menu can switch your generation preset too, alongside the model, reasoning effort and prompt config.
- Card Forge dialogs stay put. Clicking beside one no longer closes it โ missing the panel by an inch used to discard a set of proposed rewrites you'd waited on, with no undo. Escape and Discard still close them.
Rin Chat Update Notes - Version: 0.4.5
๐ Links and images in chat
Links in a message are now clickable and open in your normal browser. Before, nothing happened when you clicked one โ which was the safer of the two broken options: left alone, a link would have navigated the app window itself away from Rin Chat, with no way back.
Images written as markdown โ  โ now show up in the chat instead of a broken-image icon with the alt text underneath. The app window is locked down so the voice engines can run multi-threaded, and that same lockdown was refusing every remote image; they're now requested in a way that satisfies it. A host that sends no sharing headers at all is still refused, but those become a clickable link rather than a broken icon.
๐ฌ "Generate New First Message" no longer overwrites
Accepting a generated opening replaced the greeting on screen instead of adding one, so the counter never moved โ 13 greetings stayed 13, and the one that was there is gone. Every generated opening after the first was overwriting the last.
It now always adds a new variant. Accept adds it to this chat only; Accept & save as alt greeting also writes it to the character, so it's offered in future chats.
๐ท [once]
[once]โฆ[/once] in a message is sent for that turn only โ a dream, a noise outside, a private instruction. It now stays through rerolls, swipes and Continue of that turn, since those are all attempts at the same beat, and disappears the moment you send your next message. Documented in the Guide, under macros.
๐ Card Forge: Rin can see your whole card
"She keeps insisting my fields are incomplete when they are not โ it's like she stops reading half way through." She was. The copy of your card sent to her was cut at certain conext lengths, and a field cut off mid-sentence looks exactly like one somebody abandoned. The more you'd written, the more confidently she called it unfinished.
She now gets every field whole. Alongside that:
- Improve on a single field couldn't see past that same cut, so a rewrite of a long field quietly came back shorter than what it replaced. It now works from the complete text, and both edit paths are told not to shorten a field unless you asked.
- A per-reply token count sits above the composer โ what the next reply costs, split into card, guide and chat. Your card is sent in full on every single turn, so a big one is a fixed toll on every message. That was the number you couldn't see.
- Older brainstorm turns are dropped by us once a session outgrows your model's context, rather than leaving your provider to cut it. Some cut from the front, and the front is where the card sits.
- A cut-off rewrite now says so. A reply that stops mid-field can't be applied, and that read as "Rin didn't return anything usable" when the real cause is a response limit too low for a field that size.
โก Typing lag
Typing or pasting into a dialog's instruction box could stutter: the whole chat behind it was being redrawn on every keystroke, and in some dialogs the generated text was re-formatted from scratch each time as well. Fixed for Generate New First Message, shift-click Continue and Impersonate (including editing the draft before you send it), the group respond with directions box, Regenerate with directions, and the greeting picker.
Rin Chat Update Notes - Version: 0.4.4
๐ผ Grok image models
Adding Grok (xAI) as an image provider showed "Couldn't list models" and left the model field empty, so you had to guess an id that isn't guessable.
xAI's API documents no model-listing endpoint at all โ the one we were calling is an OpenAI-compatibility extra, and whether a key may use it depends on the permissions picked when that key was created. A key that generates images perfectly well can still be refused there, so that failure never meant the provider was broken.
Known model ids are now offered straight away for Grok, OpenAI and NanoGPT, and a failed lookup no longer clears them. If a provider does return a list, that's still used instead.
๐ Better crash reports
If you hit something odd, Export debug log and send the file โ it's worth doing now in a way it wasn't before. Errors are kept separately from API traffic and listed first (they used to be buried, and could be pushed out entirely by a busy session), and crashes now name real files and line numbers instead of minified gibberish.
Rin Chat Update Notes - Version: 0.4.3
๐ Anonymous usage statistics
Rin Chat now reports a small amount of aggregate data. Since you're testing an app that holds your private writing, here is exactly what it sends, exactly when, and why any of it is worth having.
Never collected โ not with any setting, not ever:
- Your characters, chats, prompts, personas or lorebooks. Not their text, and not their names, tags or creators.
- Your API keys, file paths, folder names, or the addresses of AI providers you connect to.
Always sent, when the app is installed and each time you unlock it:
- A random identifier generated on your device. It isn't derived from your hardware, means nothing anywhere else, and resets if you clear the app's data.
- App version, operating system and version, and which package you installed (installer,
.deb, AppImage).
That last one is the whole point: it tells us how many people actually use Rin Chat and on what. It's what decides whether the Linux build is worth maintaining, and when it's safe to drop a workaround for a system nobody runs any more.
Optional โ four separate switches, all on by default, all on the final onboarding screen and in Settings โ Data & Backup:
- Link reports to your aicharactercards.com account. So one person on a laptop and a desktop counts as one person. Off, the report carries only the random device identifier.
- Providers and models. The provider's name only โ never its address. A self-hosted endpoint reports just whether it's on your own machine or out on the internet, which is why a private URL or an embedded API key can't travel with it. This is so releases get tested against what people actually run.
- Library size. Six numbers: cards, favourites, unfiled, missing art, never chatted, distinct creators. Performance work is aimed at real libraries โ this is how we know whether a thousand cards is common or rare.
- Features you've set up. Counts of personas and lorebooks, and whether things like image generation are configured. It stops us polishing something nobody uses while a popular feature waits.
The reports are sent a few seconds after the app opens, never while you're waiting for it, and a failure is silent โ statistics are the least important thing the app does.
Full detail lives in the Guide โ Usage statistics.
๐ง Fixed
Response length was being ignored. The cap sent to the model was quietly raised by 1024 tokens to leave room for thinking โ but that applied to every provider, including the ones that don't think at all. "Short" was asking for 1204 tokens instead of 180, and a model with nothing to deliberate about simply filled it. The headroom now applies only when you've actually chosen a reasoning effort. If you use a reasoning model on Auto and replies start cutting off, pick a tier in that provider's settings.
Grok now works for anything the app writes for you. Image prompts, chat titles, suggested replies and speaker picking all ask the model not to think first, and xAI rejects the way we said it โ so every one of those failed with "This model does not support
reasoning_effortvaluenone". Grok's effort tiers are handled properly too: it accepts low/medium/high, and the app's extra tiers are mapped to the nearest one instead of erroring.Image models are listed for hosted providers. Grok, OpenAI and NanoGPT now suggest what's available instead of leaving you to guess
grok-2-image. Still a free-text field, since the list is filtered by name and could miss an unusually-named model.KoboldCpp is in the setup wizard. It was only offered once you were fully set up, so anyone running it had to guess โ and the nearest guess, Ollama, is a different program on a different port.
Skip stays available on the provider step after you've picked something. It was the same button relabelled, so choosing a provider and then changing your mind left no way past an optional step.
Signing in through the browser no longer strands you if your desktop can't open one. The app offers the sign-in link to copy, so you can paste it into any browser on that machine and finish normally. It's offered always rather than after a detected failure, because a desktop can report that it opened a browser while showing you an error instead.
The
.debdeclaresxdg-utils, which is what opens external links. It was assumed present.
Rin Chat Update Notes - Version: 0.4.2
๐ง Linux
Rin Chat runs on Linux now โ same app, same features, minus the Windows-only voice bits (system speech, dictation, spellcheck and clipboard history each say so rather than failing).
Two downloads, and the difference matters:
- AppImage โ no install, runs on any distro, and updates itself exactly like the Windows build. Recommended.
.debโ installs properly on Debian and Ubuntu, with a menu entry and icon. A package belongs to your system's package manager, so it can't replace itself; the app offers to install the update for you behind your desktop's usual password prompt.
AppImage โ download, make it executable, run it:
wget https://rin.chat/updates/linux-appimage-latest -O RinChat.AppImage
chmod +x RinChat.AppImage
./RinChat.AppImage
Debian / Ubuntu (.deb):
wget https://rin.chat/updates/linux-deb-latest -O rin-chat.deb
sudo apt install ./rin-chat.deb
The ./ matters โ without it apt looks for a package by that name instead of reading the file. Then launch Rin Chat from your applications menu, or rin-chat from a terminal. To remove it later: sudo apt remove rin-chat.
๐ Download links that never go stale
Three addresses now always point at the current release, so a link you save or share keeps working after every update:
rin.chat/updates/windows-latestrin.chat/updates/linux-deb-latestrin.chat/updates/linux-appimage-latest
Each hands you the real versioned file, so what lands in your downloads folder is still named for the version you got.
๐ผ Prompt style for image generation
Image models don't read prompts the same way. Flux, Chroma and SD3 are trained on sentences; SDXL, Pony and Illustrious descend from tag lists and read a sentence poorly โ the same scene needs different wording depending on where it's rendered.
Settings โ Generation โ Images in chat โ Prompt style instruction is a box you write yourself: the actual instruction the app follows when it writes a prompt for you. Use tag style fills in a Danbooru-style one to start from, Load default to edit brings back the built-in wording, and blank means the default. It's free text rather than a menu because the next model family will want something neither option covered.
Existing setups are untouched: leave it blank and prompts read exactly as they always did. A prompt you type yourself is still sent as written.
Also in this section:
- Pictures asked for in the story just appear. "Send me a picture of yourself" no longer opens the prompt editor first โ being handed a text box is what broke the moment. The Image button still shows it.
- The seed setting is gone. Pinning one only forced every picture in a chat to share a composition. Image Studio keeps its seed, where iterating on one picture is the point.
- Images in chat has moved to Generation, with the other settings that shape what the app produces, instead of sitting under Providers with the API keys. Where generation runs is still under Providers.
๐ง Fixed
- A picture could vanish when the next reply arrived. Generating an image doesn't block the chat, so one finishing mid-reply was erased the moment that reply landed โ the turn saved the message list it started from. Also fixed for Regenerate and Continue, which had the same flaw.
Rin Chat Update Notes - Version: 0.4.0
๐ผ Images in your chats
Image generation used to make card art and nothing else. Now it draws the story as you play it.
Image below the composer (or /image) offers seven subjects โ the character, their face, your persona, the whole story, the last message, the last message verbatim, and the background. Each reads the conversation, writes a prompt with your text model, and renders it with your image provider. Pick a shape for the picture, or let each subject use the one that suits it.
Steer the prompt with a line of instructions โ "wide shot, keep the jacket on, night time" โ or hand it over entirely: My own prompt sends your text as written, with no AI rewriting. /image a red bicycle does the same from the message box.
You see the prompt before it renders, and can edit it, or Rewrite it with a note about what was wrong. Fixing a word costs nothing; rerolling a wrong picture costs a generation. Turn the check off in settings once you trust it.
Rerolls sit beside each other, like message swipes โ same prompt, new seed, every attempt kept, because the good one is usually not the first. Any picture can become the character's card art, cropped to fit, and the gallery lists everything in the chat โ click one to jump to where it was drawn.
Pictures are hidden from the model by default: the eye icon on the message toggles that, the same as any other message.
The whole story has a small tuning button: how many messages to read, and whether to include the chat's summary and memory. Every other subject reads the last 12 โ they describe the present, and reaching further back would pull them away from it.
๐ Image studio
A generator on its own, with no character and no chat โ under the header's โฐ menu, and only there if you have an image provider set up. Prompt, negative, size, steps, CFG, seed, and up to eight at a time.
Save a set-up as a preset and it comes back whole: the prompt and every dial. They only mean anything together โ the same prompt at 8 steps and CFG 1 versus 30 and 7 is a different picture. Reuse any result's seed to iterate on one you liked, and save the keepers to your Downloads folder. Your last set-up is remembered, so it reopens where you left it.
๐จ Getting the look you want
- A prompt prefix on the character card โ "female, green eyes, brown hair", or a LoRA tag. This is what makes two pictures look like the same person, and it travels with the card when you export it. There's a matching negative for what their pictures must never contain.
- A common prefix and a global negative in settings โ your house style, applied to every prompt the app writes. A prompt you type yourself is left exactly as you wrote it; the negative still applies, because it says what's unacceptable.
- Styles now carry a negative too. "Photograph" wants "anime, illustration" excluded as much as it wants "photo" included. Prefixes are de-duplicated when combined, so a style and a card both saying "anime" don't say it twice.
- A seed, fixed to compare settings on the same picture. Rerolling always uses a new one regardless.
๐ฌ Ask for a picture
Switch on Generate when a message asks for a picture and "send me a picture of yourself" draws one after the reply. It's deliberately narrow โ a request verb, an image noun just behind it, then a subject โ so a message that merely mentions a photograph won't spend a generation. Off by default.
Let the character read generated images puts the picture's prompt in context so they can react to it. The model reads the prompt, not the picture: actual vision input isn't wired up yet.
Rin Chat Update Notes - Version: 0.3.9
๐ผ Find cards still wearing a stock avatar
Imported cards often arrive on a site's default portrait โ SillyTavern's purple question-mark silhouette and its equivalents. They counted as "having artwork", so Missing art never listed them.
Library tools โ Find placeholder artwork scans the folder you're in and reports every picture more than one card is wearing, listing the likely stock avatars first. Tick what you agree with and clear it in a batch โ those cards fall back to Rin Chat's placeholder and join the Missing art filter, ready to generate something real.
It compares pictures rather than files, so it recognises a placeholder that's been resized, re-encoded or re-cropped, and it works from no list of known images โ a site's new default is caught the same way. Nothing is ticked for you: cards that share art on purpose are common, and clearing art can't be undone. Open a card to check it and the results are still there when you return.
Missing art also counts a card whose stored art is our placeholder, and right-clicking any card offers โจ New card image โ so it's find, generate, done, without opening a card. Find duplicate cards now lives under the same tools button, and both scans cover the current folder and anything nested in it.
๐จ Image generation
- Generate locally with SwarmUI. It runs ComfyUI underneath but takes a plain prompt/model/size API, so there's no workflow to wire up โ install it, add the provider (
http://localhost:7801), and generate on your own GPU for free. - Your models and saved presets are listed for you. A preset applies everything in it โ sampler, LoRAs, refiner โ and if its prompt contains
{prompt}, the card's prompt drops in there. - Steps and CFG scale can be set directly. A distilled turbo model wants about 8 steps at CFG 1; running one at a standard model's settings is why local results can look far worse than the same model in ComfyUI.
- Pick a default style in Edit styles, instead of every image starting on None.
๐ง Memory that mixes up who's who โ experimental
The summarizer read excerpts containing both {{user}} and your persona's real name, so one person appeared under two labels and it had to work out they were the same. Where a character and a persona each have a second identity โ an online handle, an alias โ it sometimes got that wrong, and the mistake became memory repeated on every later turn.
It's now told who the two people are, sees one name each, and is asked to record only what the excerpts say rather than fill gaps. Summaries still store {{user}}, so changing persona renames your memory as it renames the chat. This makes compounding a slip less likely; it can't prevent one, and summaries stay editable in the Memory drawer.
โจ Library
- The toolbar is icons now โ New, Forge, Import, Stats, Duplicates, Save view, Select โ so it stops wrapping on a narrow window. Hover any for its name.
- Save view sits beside the sort and view controls it saves. Clear filters is a small โ on the scope name, and neither appears on Favorites, Not in Folder or a plain folder until you actually search, sort or filter.
- Missing art only joins # Untagged only under Filter in the sort dropdown, and both now narrow the folder you're in instead of jumping to All cards.
- Coming back from a card returns you to where you were โ same folder, search, tags, sort and scroll position.
โก A library with hundreds of folders
Search, folder filtering and the folder dropdowns were slow once a library got big โ badly enough that typing lagged behind the keyboard.
- Typing is instant again. The search box reports your term once you stop typing, and searching costs one query instead of four.
- The sidebar appears straight away, remembered for the session rather than redrawn empty behind a query for every card you own.
- The folder tree is far cheaper to draw โ counts and children are worked out once for the whole screen instead of once per row.
- Opening a card and coming back is no longer a fresh start; cards you'd scrolled past aren't re-read and re-counted to draw the same tiles.
๐ง Fixed
- Regenerate this section failed on any selection containing a character or persona name. You highlight what you see; the message stores
{{char}}/{{user}}. It now reads through the macros, and a selection touching a name replaces the whole macro rather than splicing into the middle of it. - A generated first message saved as an alt greeting could be lost if you left the chat moments after accepting it โ the card write was on the same delay as ordinary typing. It's written immediately now, and says so if it can't be. Both Accept buttons explain themselves on hover.
- Error messages in a chat hung around forever. They clear themselves now; a chat or card that failed to load stays put, since that one has recovery buttons.
- Filters ignored the "in nested folders" section, so Untagged, Never chatted and Missing art appeared to do nothing to it.
- Right-click menus were cut off near the window edge โ each clamped against a hard-coded guess of its own height. They measure themselves now, and the card menu is two rows shorter.
- Settings reopens on the section you were last in, for the rest of the session.
Rin Chat Update Notes - Version: 0.3.8
๐ง Memory that actually remembers โ experimental
โ ๏ธ The whole memory system is experimental. It changes what the model is told on every turn, it costs model calls to build, and it defeats prompt caching. Expect it to keep changing, and expect to rebuild indexes between versions. Off by default.
Recall past messages now builds a memory tree instead of just searching for snippets. Older messages are grouped into excerpts, those are summarized into sections, and the sections into one overview โ and the summaries are sent every turn, whether or not they match what you're talking about.
That last part is the whole point. Search finds things by what they're about, so "what game did we play at the start?" could never work โ the question contains none of its own subject. Tested against a real chat, that question ranked the right message 6th of 7 across four different embedding models. A summary that's always present answers it; better search never could.
- Excerpts stay verbatim. Summaries are only ever an index โ what gets injected is the words that were actually written, never a paraphrase.
- Only messages that have scrolled out of context are indexed. Anything still on screen is skipped: summarizing it would cost twice to say less.
- Retrieved excerpts arrive with their section, so a fragment comes with the narrative around it instead of on its own.
- Summaries run on the model you picked for Chat memory โ point it at something cheap and fast.
- Switch it on in Settings and it applies to every chat; any chat can opt out from its own Memory drawer.
๐ง Fact ledger โ experimental
The tree records what happened. The ledger records what is currently true โ who someone is, what was decided, what changed, what someone now owes โ replacing each fact as it changes instead of stacking every version. A summary says a decision was made; the ledger says whether it still holds.
It costs no extra model calls. Facts are extracted by the section summaries and reconciled by the overview โ both calls you were already paying for. Each rebuild is handed the previous ledger, so it decides what to keep, merge, update or drop rather than starting over.
๐ Read and edit your chat's memory
The Memory drawer is now four tabs โ Summary ยท Memory tree ยท Pinned facts ยท Scene โ with the scene tracker moved in alongside the rest. A tab whose feature is switched off still opens and says why rather than vanishing.
The memory tree tab shows exactly what the model is told: the overview, every part in order, and the word-for-word excerpts each part was written from. It also reports what that costs per turn, and marks the parts that are back in context and no longer being sent.
- Edit any summary or fact, add and delete facts. Your edits survive rebuilds.
- Branching a chat carries its memory across instead of re-summarizing identical messages.
๐ What a chat actually costs
Chat statistics now counts every request a chat makes, not just the messages you can see โ regenerations you swiped away, continuations, impersonation drafts, auto-naming, the scene tracker and every memory summary all billed and left no trace.
Broken down by kind, with cost and cached tokens when your provider reports them, and it says plainly whether the figures are provider-reported or estimated. Counting starts from this version.
The context meter is now segmented: one band per thing filling the window โ character, persona, pinned facts, memory, chat history โ with a hover for each one's share. Every message also shows its number and whether the model can still read it, only remembers it, or has lost it.
๐ Blank requests
- Regenerate this section with no instructions returned the same text. Understandably โ it was asked to rewrite something so it "reads naturally and keeps the same intent", which it already did. A blank box now means give me a different version, and an unchanged reply is caught and retried.
- Retry now tells the model which version you rejected, so it doesn't offer it again.
- Sending an empty message gave you a one-line reply, or an "empty response" error. The prompt ended on the character's own last message, which providers read as continue this โ so it did, briefly. It now asks for a new message.
โจ Keep every attempt
Regenerating used to throw away what it replaced. Now everything keeps its versions, like message swipes:
- Impersonate โ every draft is kept, with โน 2 / 3 โบ to page back through them. Regenerate is told what you rejected so drafts actually differ.
- Regenerate this section โ Retry adds a version instead of overwriting. Edits apply to the version you're on.
- Continue โ now adds a swipe rather than replacing the message, so a continuation you didn't like hasn't destroyed the shorter version.
Rewrite part of an impersonation. Highlight any part of the drafted message and rewrite just that section, with the same instructions-and-retry flow.
๐ง Fixed
- Branches are numbered โ Chat Name (Branch #2#2) โ instead of stacking (branch) (branch) (branch) until the title was unreadable. Branching a branch counts from the original name.
- Exports looked like they did nothing. They were confirming all along, but the message appeared at the bottom of the transcript, off-screen. Confirmations are now a toast over the chat โ that also covers saved personas, memory updates and provider fallbacks.
- Summarize card wrote the summary twice โ the model finished, then started over in slightly different words, and both landed in Card Notes.
- Number fields in Settings clamped as you typed, so clearing one and entering a larger number snapped it to the minimum. They now settle when you leave the field.
- Info tooltips no longer stack up on screen as you move between them.
โจ Chat titles
Every control for a chat's name now lives on the name itself, appearing when you hover it: rename, name with AI, pin the name, and former names. Clicking the title still just renames it.
Rin Chat Update Notes - Version: 0.3.7
โจ The character editor, reorganised
Sections that fold
- Character, Personality, Background & world, Dialogue, Prompts, Metadata, Worldbook and Generators are each a section you can open and close. Character and Personality start open; the rest start closed, every time you open the editor.
- Picture, name, display name, notes, version, folder and tags stay where they are, always visible โ you shouldn't have to open anything to see whose card this is.
- A closed section still tells you what's in it: "2 greetings ยท 4 examples", "12 entries", "history ยท setting". Empty ones say so.
A jump bar for the rest
- On a wide window it sits out in the margin beside the card; on a narrow one it becomes a strip across the top. Either way it follows you as you scroll.
- Each row shows a section's token count, so what your card actually costs is visible without opening a thing. A dot marks the ones you haven't written yet.
- Clicking a row opens that section and takes you to it. Top appears once you've scrolled away from the top, and Expand all / Collapse all are at the bottom.
โจ Lorebooks
Send the character with your assists. In a card's own worldbook, โจ Directive now has an option to include that character's details โ description, appearance, personality, background and setting โ with every โจ assist in that book. Entries then get written around the character instead of beside them. Off by default, remembered per book, and the AI window shows you exactly what's being sent.
Greetings, example dialogue and prompts are deliberately left out: they describe how a character talks, not what's true about them, and sending them pushes entries toward narration.
๐ง Recall past messages (new)
Long chats forget. Settings โ Memory โ Recall past messages stores every message as a vector, then each turn searches that store for whatever is relevant right now and puts those messages back into the prompt โ so the model can recall turn 12 at turn 400 without paying for turns 13โ399. Switch it on per chat from that chat's Memory drawer.
- Embeddings from an in-app model โ free, private, works with every provider, about 23MB on first use โ or from your provider's
/v1/embeddings: no download, but it bills tokens and not every endpoint has one. - Tune chunk size and split points, how many recent messages form the search, the score threshold, how many results to inject, how many recent messages to skip, and where the block lands โ in the chat at a depth, or in the system block.
- Vectorize all, Clear index and View stats, per chat.
- Summarize before indexing (experimental) compresses each message before storing it, so rambling ones are easier to find. What gets injected is still the real text, never the summary.
Read this before turning it on: it defeats prompt caching. The injected block changes every turn, so every turn is a cache miss โ a long chat that currently gets cache hits will get slower and more expensive, not faster. It earns its keep on long chats and small context windows. Off by default, globally and per chat.
Rin Chat Update Notes - Version: 0.3.6
โจ Lorebooks
Write them with AI
- โจ Write with AI on any entry's content โ say what it should cover, edit the proposal, accept. Optionally send the rest of the book as context so entries stay consistent.
- โจ Suggest reads an entry's content and proposes the keys that should trigger it.
- โจ Directive describes the world once โ setting, tone, conventions โ and goes with every assist in that book. Kept in the app, never written into the worldbook, so it can't travel with an export.
Audit finds what you can't see by reading: keys that fire on everything, entries that can never fire, duplicate keys, oversized entries, and what your always-on entries cost every turn. Instant and free. โจ Check for contradictions asks the AI which entries disagree with each other.
Inclusion groups actually work ๐ โ "one entry per group activates" was never implemented, so all five of your weather entries went into the prompt. One now wins the slot, by weight, priority or match score.
SillyTavern parity. Every per-entry option ST has, now working โ and import/export carries them instead of silently dropping them:
- Whole words only and Case-sensitive keys. Keys have always matched as substrings, so
orquietly fired inside "for", "order", "north". - Scan depth per entry, Ignore budget, group weight / prioritize / scoring.
- Also match against the character description, personality, scenario, persona, or notes.
- Only for these characters / tags, and only on these actions.
A cleaner editor. Title, keys and content stay in front of you; everything else folds into sections that say what they're set to and highlight when they're not default. Order is editable straight from the collapsed row, there are 13 sort options, and Apply as order renumbers every entry to match the sort you're looking at.
โจ Chats
- Pin a chat's name so AI naming can't touch it. You can still rename it yourself.
- Former names are remembered โ open the history icon by the title to switch back to one. Last 20 kept.
๐ Security
- An imported card could permanently freeze the app. A crafted regex keyword could take hours of CPU to match, hanging the app with no way out but force-quitting โ and again on every restart. Those patterns are now refused, and the same protection covers regex scripts.
- A shared theme could phone home. An imported
.rcthemecould point a colour at a remote image and contact that server every time it was applied. Fetching values are stripped on import.
๐ง Fixed
- Settings โ Chat titles: auto-naming and the message count are one line instead of two.
- Branching a chat, or importing one from
.jsonl, no longer inherits the open chat's pinned name or name history.
Rin Chat Update Notes - Version: 0.3.5
โจ New
Read-aloud is much faster, and stoppable
- The built-in voices (Kokoro and Piper) now generate speech on a background thread. The window no longer freezes while a reply is being prepared, so the stop button actually responds mid-sentence.
- Speech starts after the first sentence instead of after the whole message, and the chunks grow as it goes โ a short opener so playback begins quickly, then larger ones so generation stays ahead of the audio and you don't hear a gap after the first line.
- "Preparing voice" now only appears when the voice genuinely has to load, instead of on every message.
Direct Chat: multiple conversations
- Direct Chat keeps as many separate conversations as you like, switchable from a dropdown. Your existing one carries over automatically.
Scene tracking on its own model
- The scene tracker can run on a provider and model of its own, separate from the chat โ it's a small job that a cheap fast model does well.
- Its prompt is editable, ships with a default, and has a reset button. Leave it blank to use the default.
๐ง Changed
Generators only fire for characters they're attached to
- Auto-fire and random-chance generators were firing in every chat, so one character's ambient events turned up in unrelated scenes. Automatic firing now only happens for generators attached to that card.
- Calling one by name with
[Create Name]still works for anything in your library.
The model can invoke a generator by writing it
- If a character writes
[Create Outcome]in its reply, it now resolves, exactly as if you'd typed it. Previously it sat there as dead text โ or vanished entirely.
[code] blocks are genuinely inert
- Text inside
[code][/code]was only protected in chat messages. In a character's description or a worldbook entry, macros and generators inside it still ran โ so a card telling the model to end every message with a literal command instead rolled that command into its own prompt every turn. - The tags themselves are no longer sent to the model. It sees the contents, unexecuted.
Persona handling
- Your persona is now always its own system message, so a custom context template can't duplicate or drop it.
- Persona example dialogue is only included where it's useful โ impersonation and director mode โ instead of every turn, where it encouraged the model to write your lines.
Image prompts and styles
- Image models have different prompt-length limits (Z-Image Turbo 1200 characters, HiDream 3000). Exceeding one returned an opaque error; the limit for the selected model is now shown as you type. Nothing is truncated for you.
- Each image style is now a name and delete button on one row with a resizable text area below it, and the list scrolls internally instead of running off the screen.
Memory settings reorganised
- Grouped, compacted, and moved behind info buttons. Labels renamed to "Summary prompt" and "Scene tracking prompt", and the refresh/injection intervals sit on one row. Auto-update now states plainly that with it off, scene tracking must be triggered manually.
๐ Fixed
Character profile images now update during an active chat โ no more closing and reopening the app.
A malformed or hand-edited card, chat, worldbook or persona could crash the app to a blank screen, every time you opened it. These are now repaired on load instead.
Auto-swipe was measuring the model's thinking rather than its reply, so a long deliberation ending in "Okay." passed a minimum-length check, and a blocked phrase the model only considered triggered a regeneration.
Read-aloud pronounced formatting tags out loud โ "code", "ooc", "colour equals red".
A generator field that depended on another field listed below it was silently dropped from every roll.
Hidden generator results (
[h]โฆ[/h]) stay visible when you edit a message, and their contents still reach the model.Automatic scene refresh stopped working for the rest of the session after deleting messages.
Narration could hang forever if a piece of audio failed to decode.
An error during regenerate, continue or impersonate could leave the chat unable to send anything until you restarted the app.
The pin icon on pinned chats stays put beside the delete button instead of shifting as the sidebar resizes.
The export buttons no longer overflow when the chat list is narrowed โ they're one dropdown now.
Removed the redundant "Back to character" button from the chat sidebar.
โก Performance
- The app starts faster: screens are loaded when opened rather than all at once.
- Long chats no longer leak memory after using chat search.
- The first launch after an upgrade is much faster on large libraries.