Important
Android APK notice: The APK is a Termux bootstrap + WebView shell, not a native Android server build. It opens an already-running local Marinara server, and on first launch it can download Termux from F-Droid, hand it to Android's installer, and start Marinara through Termux after Android permission prompts. Follow the Android wrapper guide if Android blocks the bootstrap handoff.
Before you update
-
If you reach Marinara through a tunnel or reverse proxy on the same computer, such as nginx, Caddy, Cloudflare Tunnel, Tailscale Serve or ngrok, its visitors now count as remote and see the setup page until you set Basic Auth. If the proxy has its own login, set
REQUIRE_AUTH_FOR_LOOPBACK_PROXY=falseinstead. Opening Marinara directly on that computer works as before (#7816). -
On Docker Desktop, OrbStack and rootless Docker, the browser on the computer running Docker now falls under Basic Auth and
IP_ALLOWLISTtoo. With Basic Auth it asks for the password once. With onlyIP_ALLOWLIST, it is refused unless you add the container's gateway address to the list or use Basic Auth instead. With neither set, nothing changes (#7816). -
Make a backup before you update. Going back to 2.5.0 later can lose data: 2.5.0 opens your chats, but when it saves a chat or a connection it drops what newer features added there, such as some connection settings, the details used to regenerate chat images and parts of game checkpoints, and updating again doesn't bring it back. Upgrading → Going back to 2.5.0 has the details (#7838).
Works differently now
-
Images from other websites in messages, greetings and card previews now wait behind a Load image button that names the site, so a message can't make Marinara contact a site you didn't choose. Click it once and that image shows from then on, on all your devices. Images stored in Marinara, such as avatars, sprites and gallery pictures, always show, and GIFs you send in Conversation show without asking, though GIFs in older messages ask once. To show every image straight away as before, turn on Load images from other websites in messages in Settings → General → Text Rules (#7829).
-
With that setting off, HTML cards and message styles can't load backgrounds or fonts from other websites either. Card CSS now stays inside the card's own box: rules nested inside other rules,
@property, and selectors that start by reaching the elements next to the box (~,+) no longer apply (#7829). -
Exported chats, settings profiles and full profiles no longer include your Discord Mirror webhook, DeepL API Key, DeepLX URL or Intiface URL, and importing one no longer sets them. After moving a chat or profile to another install, enter them again there. Restoring a full profile onto the same install keeps them, and every other chat setting carries over as before (#7818).
-
Multiplayer (work in progress): a returning guest gets their seat back only from the same Marinara that held it, not just by using the same names, so nobody else can take over a seat with its whispers, Game sheet and round submissions. Leaving and rejoining works as before. If a guest restarts their Marinara, the host has to remove the old seat before that player can use the same persona name again. A guest still on v2.5.0 can join a newer host, but can't take back their old seat by name after leaving (#7823).
2D and 3D Avatars
-
New 2D Avatars and 3D Avatars agents give characters and personas an animated avatar in Roleplay, Visual Novel and Game chats. Install either or both from Download Agents, set each avatar up in the Avatars section of the agent's page in Agents, and add the agent to a chat under Chat Settings → Agents. On that page you pick the character or persona, the avatar type and the Movement switches (Lip sync, Blinking and Idle motion), and Preview shows the result with Try a face and Talk. In chats, avatars stand where the full-body sprite would, at its size and on its side, with or without the Expression Engine (#7539, #7556).
-
Avatars are kept light: at most two draw at once on a phone and four on a computer, and they stop drawing while the tab is hidden, the chat is covered or the Appearance settings are open. Each avatar type's drawing code downloads only the first time one shows. With reduced motion on, faces and mouths still change but breathing and swaying stop (#7556).
-
Avatar files live in the data folder under
avatar-models, are included in backups and profile exports, and are deleted with their character or persona, including from the Danger Zone. Character card exports don't include them, and imports have no size limit below the normal upload limit (#7556). -
2D Avatars and 3D Avatars can be installed from Download Agents. They need this version of Marinara or newer and show under the Roleplay and Game filters (#7583, Marinara-Agents#1369, Marinara-Agents#1372, Marinara-Agents#1406, Marinara-Agents#1480).
-
2D Avatars shows two kinds of avatar. A PNGTuber sprites avatar uses the character's or persona's expression sprites as its faces. Add sprites ending in
_talkand_blink, such ashappy_talk, for an open mouth and closed eyes, and it talks, blinks and hops while it speaks. Import PNGTuber Plus save brings in a PNGTuber Plus.save, with one face per costume. A Mesh avatar is a drawing that moves its head, eyes and mouth smoothly, and Import .mavatar file adds one made in Mesh Avatar Studio. Imported files are checked first and refused with a short reason when they are damaged or too detailed to play smoothly. Without WebGL2, a mesh avatar shows the sprites instead (#7549). -
A character or persona with expression sprites shows them as a PNGTuber avatar in chats with 2D Avatars on, with nothing to save first. Show this avatar in chats turns it off, and it stays off even after you remove an avatar type. Each avatar type has its own import, face and remove controls on the setup page, and the mood reader downloads only once an avatar is on screen (#7578).
-
Make an avatar from a sprite on the 2D Avatars page fills in what your sprites are missing. Blink and talk pictures has your image connection draw an eyes-closed and a mouth-open picture for each face. Each one is shown with Keep and Try again, and your avatar stays the same until you select Save kept pictures. Mesh avatar turns one sprite into a moving mesh avatar: a chat model that can see pictures finds the face, Marinara Engine builds the avatar from your sprite, and you check the outlines before Save as mesh avatar. With Expose media prompts before sending on, you can read and change every prompt first (#7554).
-
On the 2D Avatars page, Make faces from the avatar at the top of Make an avatar from a sprite opens the sprite generator for the chosen character or persona, ready to draw expression faces from their avatar with Transparent sprite background on. The new faces are saved as their sprites and show in the panel at once, so a character with only an avatar can get a PNGTuber face, blinking and talking. Sprites you already have are used as they are (#7639, #7654).
-
Make faces from the avatar on the 2D Avatars page draws every face with open eyes and a closed mouth, and shows the feeling through the brows, eyes and cheeks. That way the blink and talk pictures made from each face always change something you can see, Happy, Angry and Surprised included. Sprite generation in the character and persona editors is unchanged (#7690).
-
Make faces from the avatar can draw all 29 faces: the six main feelings and the 23 more specific ones. Choose All faces, Main faces (the six, chosen by default) or any faces you like. It draws them in batches, main faces first, and with prompt review on you review the whole run once. Cancel keeps the faces already finished, and a batch that fails pauses with Retry. Each specific feeling comes with a short description of how it looks, such as very wide eyes for Fear, so the image model draws them differently (#7696).
-
2D avatars made from PNGTuber sprites can show 23 more specific feelings, such as Amusement, Embarrassment, Fear or Grief, each grouped under one of the six main feelings. Open Face for each feeling, then More feelings, to choose a face for any of them; until you do, a feeling uses its main feeling's face. A sprite named after a feeling, or after a common word for it such as
scaredorblushing, is used for it without any setup, and a PNGTuber Plus import matches costumes to feelings by their picture names. 3D and mesh avatars still show the six main feelings (#7692). -
On the 2D Avatars page, Blink and talk pictures shows one row for each face the talking head uses, with its Eyes closed and Mouth open pictures: ones you saved, ones you added as
_blinkand_talksprites, or new ones. You can make the missing pictures or redo any of them. While Try again redraws a picture, it stays dimmed with a spinner; if the redraw fails, the old picture stays and the error shows under it (#7682). -
Blink and talk pictures keep the same bust as their face. The image model gets the prompt as written, without your style profile, and sees the face on plain white, so dark hair and clothes stay apart from the background (#7682).
-
Blink and talk pictures for 2D avatars change only the eyes or the mouth. Marinara lines the image model's picture up with the face, then takes only the closed eyes or the open mouth from it, so hair, outline, clothes and edges stay exactly as they are in your sprite. If the model didn't close the eyes or open the mouth, the picture is refused with a short message, and Try again draws it again (#7854).
-
Image connections that can't edit pictures, such as DALL-E, Pollinations, Together AI, Horde or a ComfyUI workflow without a picture input, can make blink and talk pictures too. They draw a New face with its Eyes closed and Mouth open pictures in one go from the character's or persona's appearance, so the three match. Keeping them makes the new face that feeling's face in the PNGTuber avatar, and your sprite file stays as it is. A character or persona without an appearance or description gets a message asking for one (#7854).
-
In 2D Avatars, faces made with Make faces from the avatar become the faces for their feelings, even when the character already has a saved talking head, and replace earlier picks only for the feelings made in that run. A remade face starts without the older blink and talk pictures, which would no longer match it. Faces and every Face for each feeling list offer every sprite face, including ones added after the talking head was set up (#7813).
-
When the main image connection fails while editing an avatar picture, a fallback connection that can't edit pictures is skipped, so you see the main connection's error instead of paying for a new picture that ignores your sprite. SpicyAPI models that can only draw new pictures are refused for edits before a paid task starts (#7718).
-
In 2D Avatars, Make an avatar from a sprite → Mesh avatar picks the full-body neutral sprite for you, or the neutral portrait when there is no full-body one. You can still choose another sprite, and picking one never starts making the avatar (#7617).
-
A mesh avatar's mouth fits its drawing. On a small sprite it sits on the painted lip line instead of opening as a second, oversized mouth below it, and its corners reach the ends of the drawn line, even where the lips fade out. When the avatar talks, its mouth opens across the whole drawn mouth instead of only the middle, and when it talks from the text, the mouth closes between words instead of holding each vowel open. Mesh avatars made earlier open across the whole mouth and close between words right away. To give one the right size and place too, make it again with Make an avatar from a sprite → Mesh avatar and save it (#7880, #7889).
-
Cancel in Make an avatar from a sprite stops the work on the server as well, even when you reach Marinara through a proxy or tunnel, and the panel goes straight back to idle. Pictures already made are kept, and you can start again right away. This covers mesh avatars too (#7623).
-
3D Avatars shows VRM models, VRM 1.0 and 0.x, such as ones made in VRoid Studio or exported from Blender. Import VRM checks the file before it is stored and says why one can't be used, such as Draco or meshopt compression, KTX2 textures, a plain glTF model without VRM data, or missing skeleton bones. Setup shows The author's terms from the file, fills in each face, mouth shape and blink from the model's own expressions, and lets you change any of them. An optional
.vrmaIdle animation plays while the model waits. In chats the model breathes, sways, blinks, looks at you, tilts its head while it thinks and nods while it talks (#7557). -
On the 3D Avatars page, Get a 3D model under VRM model helps when a character or persona has no model yet. Read the guide walks through making one in VRoid Studio, a free app for Windows, macOS and iPad, and adding it with Import VRM; VRoid Studio models come with faces, mouth shapes and blinking ready to use. Copy prompt copies an English description of the character's look, taken from Appearance or the Image Appearance Override tags, for use in an image or 3D tool. It holds only the name and look, nothing else from the card and nothing from your chats (#7620, #7832).
-
In chat, a 3D avatar is framed to include hair, ears or a hat that rise well above the head, so they aren't cut off (#7622).
-
In 3D Avatars, a VRM expression that exists but changes nothing, as the VRM add-on for Blender writes when it exports a VRM 0.x model, is no longer filled in for a face, mouth shape or blink, so a face marked Set by the model really moves. Neutral can still use one, since it is the model at rest, and the import says when it skipped an empty expression. You can still pick one by hand (#7580).
-
The avatar guide has a new Make your own model section covering sprites, PNGTuber Plus, Mesh Avatar Studio, VRoid Studio and Blender, each ending with the import on the agent's page. It explains how to name expressions so they are found and what to turn off when exporting (#7580).
-
A 3D avatar without face shapes, so it can't blink or move its mouth, shows life through its body instead: it sways, breathes and turns more, and nods and tilts its head with each phrase it speaks (#7820).
-
Roleplay sprites without the Expression Engine, and the Expression Engine's guess for a character it skipped, now match whole mood words only, so words such as "yellow" or "terrific" no longer switch a sprite to angry or scared. They also know more mood words, including common ones in German, Spanish, French, Italian, Portuguese, Polish, Russian, Japanese, Chinese and Korean. When a character's text mentions both a mood and a blush, the happy sprite is now tried before the blush sprite (#7555).
-
Avatars react while a reply streams in. In Roleplay, each finished sentence is read for its mood, and the face changes only when the mood is clear and then stays for at least two seconds. Mouths move only for dialogue, at about the pace of speech. In Game Mode, the face follows the Game Master's expression for each line. When the Expression Engine is on, its pick is the final face for that reply. In group chats, only the character who is speaking moves their mouth (#7555).
-
The mood is read on your own server and never sent to your chat connection. On computers that can run it, a small emotion model that knows 36 languages (about 300 MB) downloads once, the first time you open a Roleplay chat with 2D Avatars or 3D Avatars turned on. The agent's page shows its progress, and it works offline after that. Lite installs, Android and computers with less than 3 GB of memory use a built-in word list instead (#7555).
-
When text to speech reads a Roleplay reply, the speaking character's avatar moves its mouth with the voice: it opens wider on loud sounds, shuts in pauses and rounds on "oo" sounds. It works with Auto-play and with the Speak button, and only the avatar of the character whose voice reads the line moves. Playback itself is unchanged, including in Safari and on iPhone and iPad (#7547).
-
With Text to Speech Auto-play on in Roleplay, avatars wait for the voice. While the reply appears, the avatar blinks and moves, but its mouth stays shut and its face doesn't change yet. When the voice starts, the mouth moves with it and the face changes as the voice reaches each sentence, then relaxes about four seconds after the voice ends. An Expression Engine pick shows once the reading is over. If the voice fails soon after the reply, the avatar plays the reply's faces and mouth from the text once instead, and after 30 seconds without a voice it stops waiting. Speak on a message also changes the face sentence by sentence, unless the Expression Engine already chose one for that reply. In Game Mode, avatars still follow the text (#7855).
-
Avatars follow Game Mode character voices too, change faces sentence by sentence when streaming is off, and start moving with the start of each voice clip. Choosing a
.vroidproject file on the 3D Avatars page explains how to export a.vrmfrom VRoid Studio (#7876). -
Move and resize avatars in Chat Settings → Agents → Avatars in Roleplay, Visual Novel and Game chats. Pick an avatar and use its size slider, or select Arrange to drag avatars anywhere in the chat with a mouse or a finger, or move a focused one with the arrow keys (hold Shift to move further). Done gives clicks back to the chat, and Reset puts the avatars back without moving your sprites. The layout is saved for that chat on this device (#7843, #7850, #7852).
-
3D avatars have a Framing choice in the same drawer: Portrait shows the head and shoulders, Half body shows down to the hips and Full body shows the whole model from hair to shoes. The avatar keeps its size, so a taller framing shows more of the model in the same space (#7852).
-
With 2D or 3D Avatars, only the avatar that is speaking draws at the talking frame rate. The others stay at the idle rate (20 frames a second on phones, 15 when the phone is struggling), so two avatars on screen cost a phone less. VRM avatars now blink every 3 to 6 seconds, like 2D avatars, instead of every 2 to 6. After you save, import or remove an avatar, its setup page shows the change at once, and a face picture you replace shows the new picture straight away. Make an avatar from a sprite no longer offers talking and blinking sprites as the starting picture (#7581).
-
The 2D Avatars and 3D Avatars agent pages now show only the settings that affect them. Pipeline Phase, Context Sources, Agent Budget, Add as Prompt Section, Prompt Template and Tools are gone from both, since avatars never used them, and 3D Avatars no longer shows Connection Override. 2D Avatars keeps Connection Override, which it uses when it makes avatar pictures. Saved settings are unchanged (#7597).
Video and images
-
Characters in Conversation can send video messages. Type
/video(or/video Namein a group), or select Video in the Conversation Gallery, and the character sends a short clip that plays in the chat. The clip shows what is happening in the conversation right now, written from the recent messages, and later replies know a video was sent. In Chat Settings, Video messages in the Illustrator section sets the Video Connection and the First frame the clip starts from: a new selfie, the avatar or sprite, or no picture. It needs the Illustrator agent and a video connection. Thanks to @JamesMowery (#7651, #7733). -
The Conversation Gallery has a Videos tab, and Animate illustration on a picture turns it into a clip under the newest reply. The prompt that writes video messages can be changed as Conversation Video Message under Settings → Generations → Video Generation Prompt Overrides (#7651).
-
Roleplay Gallery animations accept WebP and AVIF pictures, converting them instead of leaving them out (#7651).
-
A character's Gallery Videos tab lists a Conversation video message only when the clip shows that character: the character who sent it, any character it names, or everyone in the chat for a group photo or selfie. A persona's gallery lists a Conversation clip only when it names the persona. Older videos, and videos from Roleplay and Game chats, still list for everyone in their chat. Nothing is deleted; only what each gallery lists changes (#7695; thanks @JamesMowery).
-
In Roleplay, a scene video you make from the Gallery no longer opens in a floating window by itself. It now plays in the chat under the newest reply, as a generated image does, even when its picture came from an earlier message. To float a clip, use Pin video to chat under the Gallery's Videos tab. The X on a clip removes it from the message and keeps it in the Gallery. Conversation messages play video attachments in the chat too. Videos are never sent to the model, and Advanced Memory ignores them. Game Mode is unchanged. Thanks to @JamesMowery (#7565).
-
Video Generation connections have a Video Prompting Instructions field, like Image Prompting Instructions on image connections. Use it to tell the AI that writes your video prompts what your video model expects, such as how to describe camera moves, how long a prompt should be or which sound cues it understands. It is used when you animate a Roleplay gallery image and by Storyboard's Image-aware shot planning, and it is kept when you duplicate, export or import a connection. Game scene videos, call clips and animated sprites don't use it yet. Thanks to @JamesMowery (#7553).
-
In Conversation chats, Send Avatar References and Attach Card Appearance are now dropdowns with Off, Images only, Videos only and Images and videos. They sit below Video messages in Chat Settings, so you can set them while selfies are off. With videos on, a video message's prompt gets the appearance of each character it names, and yours when it names you, and a clip whose First frame is Prompt only starts from the character's avatar. In Roleplay, the Illustrator's Attach Card Appearance has the same choice, so a clip animated from a Gallery picture gets the appearance of the characters its motion direction names. Existing chats keep their picture settings, the video side starts Off, and settings profiles save the new choices (#7845). Thanks to @JamesMowery.
-
You can now draw an image again without regenerating the reply. Open an illustration, selfie, storyboard frame or Gallery image and click Regenerate image (the circular arrow next to the pin). Edit the prompt, the negative prompt and each character prompt, pick an Image connection, and click Generate image. The new picture replaces the old one in the message; the old one stays in the Gallery, so you can pin it back. Images made from now on remember their whole request, and their reference pictures are sent again from the characters' current avatars. Older images can be redrawn too, using the chat's current image connection, and the editor says when their negative and character prompts weren't saved (#7768).
-
Roleplay characters can now place their illustrations inside the message. Turn on Render in-line under Illustrations in Chat Settings → Agents → Roleplay Commands, and each image a character asks for with
[illustrate: ...]appears where the command was written, for example between two paragraphs, instead of all of them stacking up below the message. Click an image to see its prompt, or use the X to remove it. It is off by default and applies to new images only. Automatic Illustrator images and the Visual Novel layout are unchanged. On touch screens, the remove button on chat images now stays visible (#7750). -
Images that characters ask for with
[illustrate: ...]now get the same NovelAI character captions and card appearance as illustrations you request yourself. Naming characters in the command no longer sends their avatars as references while the chat's Send Avatar References switch is off. With it on, only the named characters' avatars are sent (#7752). -
Images pinned from the Gallery keep their place and size after a reload, and resizing the browser window, or a phone keyboard opening, no longer resets them. A new lock button next to Dismiss keeps a pinned image from being moved or resized until you unlock it, and the lock is saved too (#7719).
-
Style Profiles (Settings → Generations → Image Generation) no longer stop at 21. Past that point, Clone replaced your newest profile with a copy of itself named "… Custom", losing that profile's text and tags. Each copy now becomes a new profile, you can keep as many as you like, and if your settings ever get too big to save, Marinara tells you instead of quietly not saving them. Profiles that were already overwritten can't be brought back (#7828).
-
When a character's greetings show images from other websites, Dialogue & Greetings in the character editor now has a Save images locally button. It downloads those images into the character's Gallery and points the greetings at the saved copies, so they keep showing when a link breaks, the image changes or you're offline. Nothing downloads until you press it, and Restore web links puts the original links back. Compatible JSON and PNG exports keep the original links. Only PNG, JPEG, GIF and WebP images up to 10 MB are saved, and links to your own computer or home network are refused. Lorebook images aren't covered yet (#7346).
-
Conversation selfies now keep an Image Appearance Override exactly as written, so a LoRA trigger reaches the image prompt, and use the card's Appearance as background for details the override doesn't cover, such as build or clothing. Before, the override replaced the Appearance, and the prompt writer often dropped a trigger it couldn't make sense of. Custom selfie templates you saved before keep working as they did, and cards without an override are unchanged (#7256).
-
In Conversation chats,
/selfieand the gallery's selfie button now give the selfie prompt writer the character's Personality and Image generation instructions, as a selfie the character sends on its own already did. Before, both were left out, so these selfies came out blander (#7256). -
In Roleplay chats, the Gallery's Background button now shows whenever the Illustrator agent is installed, like Illustrate. You no longer need to add Illustrator to the chat or turn agents on to make a one-off scene background, and using the button doesn't start automatic Illustrator runs (#7301).
-
The Illustrator, its scene backgrounds and selfies now leave your image connection's Image Prompting Instructions and your style profile's Style text to the AI that writes the image prompt. If that AI copies a full sentence of them word for word, the sentence is removed, so it no longer shows up as plain text in the image prompt review or in ComfyUI; short phrases and tag lists stay. The Illustration button and
/illustratenow give the instructions next to the request, as the automatic Illustrator does, instead of above the whole chat. Scene backgrounds now get the instructions too, and selfies now get Style text you write into Auto or a copy of it (#7360). -
Images whose prompt no AI model writes, such as generated character avatars and character sheets, no longer get the Auto style profile's note "Infer a consistent visual style from the character, game, scene, and selected image model" pasted into the image prompt. That note is meant for the model that writes image prompts, and in tag prompts sent to ComfyUI and similar services it ended up as stray words. Style text from the other style profiles, and Style text you write into Auto or a copy of it, still applies (#7342).
-
Queue media generation requests now sends image and video requests one at a time for each provider account, from every feature: the Illustrator,
[illustrate], Character Tracker NPC avatars, agent packages such as Slurp, the gallery and Game assets. Before, only a few places followed it, so NovelAI still turned images away when two features drew at once. Different accounts and providers still run side by side. NovelAI also gets a short pause between requests and two retries when it says it's busy. The gallery's generate button no longer queues while the setting is off (#7664). -
A local ComfyUI that saves its workflow and reference images inside each picture can return files over 30 MiB, which used to fail with a bare byte count. Set
IMAGE_GEN_MAX_RESPONSE_BYTESin.envand restart to raise the limit. The default stays 30 MiB, and the error now names the setting (#7529).
Search and Professor Mari
-
Search is new: press Ctrl+K (⌘K on a Mac) anywhere in the app, even over another open window, to find anything, run a command or ask Professor Mari (#7312).
- It finds characters, personas, lorebooks and their entries, presets, connections, agents, chats, messages in any chat, settings and help pages. Results are grouped by type with their pictures, a setting shows where it lives, such as Appearance › Theme, and the words that matched are marked in your accent color.
- With nothing typed, it shows what needs you first, such as a failed reply or a change waiting for your answer, then a Continue row with your last chat, Professor Mari's last conversation and the last thing you edited, then your recent chats.
- You can act from it: flip many settings in place, add a character or lorebook to the open chat, type "add Eliza to Tavern Night", "chat with Shrek", "new character Bob" or "dark mode", or start a new Conversation, Roleplay or Game. A Fix row offers to retry a failed reply with another of the chat's connections.
- On a phone, pull down on the top bar: pull on the left to search, on the right to ask Professor Mari.
- Quick answers in Search (off by default) answer a question in up to three sentences from Marinara's own help pages and list the pages they used. They see only what you typed and change nothing. Continue with Prof. Mari takes the question and the answer to her. Choose which model answers in the settings, including Same as Prof. Mari.
- Press ? while you're not typing, or search Keyboard shortcuts, to see every keyboard shortcut in the app. Thanks to @SirAdoni, whose command palette proposal in #6649 shaped this list and Search's keyboard handling.
- Every Search and Professor Mari option is on one Search and Professor Mari settings page, and these settings are saved on the server, so they follow you to other browsers.
-
Professor Mari now works inside Search. Open her with Ctrl+J (⌘J on a Mac), the pull-down on a phone, or Ask Professor Mari on Home (#7312).
- She arrives knowing where you are. In a chat, an editor or Settings she shows a line about that screen and a few suggestions built from it, such as Fix the last reply or Why didn't an entry fire?. Nothing goes to a model until you pick one or type. She keeps a separate conversation for each chat or editor you open her from.
- Her steps show in her reply as short lines, such as "Read Swamp Lore · 3 entries". With her window closed, a small pill in the top bar says Working, Needs you, Done or Failed.
- What she changed shows on a card under her answer: every changed field with its old and new text, her reason, and Undo. Every change she applies can be undone, in every permissions mode. A change she holds for you reads Apply or Don't apply, and one that couldn't be saved says Not saved with Try again. The permissions mode menu has moved into her message box.
- She can now repair a broken reply (a cut-off ending, a stray out-of-character line, broken formatting); the fix is added as a new swipe, so the old reply is one swipe away. She can explain why a lorebook entry fired or didn't, using the same scan as the lorebook's own test, and work out why a reply got worse or a character forgot things from the numbers saved with that reply. From the agent editor she can improve an agent's prompt or description, and she knows which agents you have installed and how their recent runs went.
- When she ends on a question, she offers reply chips you can tap. Names in her answers open the record. She keeps her voice, sarcasm and the occasional kek included, while approvals and change cards stay literal.
- Press and hold her to pick her up. She swings as you move, bonks off the screen edges, and gets dizzy if you shake her. Reduced motion keeps her still.
- She opens faster, long conversations load and scroll faster, server replies are compressed, and her artwork went from about 41 MB to about 8 MB.
-
Professor Mari has appearance packs, chosen in Search and Professor Mari settings: Basic, Prof. Mari loves Dottore, Safari Prof. Mari and Golden Prof. Mari, which unlocks after 100 hours of play. The look you pick shows everywhere she appears, and only that look is downloaded (#7312).
-
The Home navigator, the small Professor Mari on Home who found pages by keyword, is removed along with its Professor Mari navigation setting. The pages she linked to (Discord, Credits, Tutorial, Home widgets and the Home tab of each installed app package, such as Noodle) are in Search now (#7312).
-
Search and Professor Mari's window can be resized on big screens. Professor Mari's window is a little taller on computers, and height and width sliders in Search and Professor Mari settings set how big each one is. Both keep their current size until you move a slider, and phones keep the full-screen window (#7398, #7501).
-
Professor Mari has a new, experimental Pi runtime, and she uses it by default, also after updating from 2.5.0. On Pi she keeps your connection's reasoning settings, can work through long tasks without the 12-round limit, and works with every connection, including the local model. Your permissions mode, change cards and Undo work the same in both, and in Manual mode Accept applies exactly the held changes without asking the model again. To go back to the original runtime, change Runtime (below Permissions mode) in Search and Professor Mari settings to Classic. Marinara keeps that choice (#7570, #7882).
-
If Pi fails three times in a row, Professor Mari's message box offers Switch to Classic, and while Classic is chosen it offers Try Pi again. Switching keeps the conversation and sends nothing again; it applies to your next question (#7882).
-
Professor Mari no longer says she changed or deleted something when she only looked at it. She can say she made a change only after actually making it in that answer (#7882).
-
The grey name suggestions in Search and Professor Mari's message box no longer stop at a space: after
Lady, the rest of Lady Celeste still appears (#7882). -
Professor Mari's words now show while she writes, and a step that created or changed several items lists their names on its row. Tool calls that DeepSeek, Kimi K2, GLM, Qwen3-Coder, MiniMax M2 and Mistral models write as text are now read correctly, and in Roleplay chats with function calling, the text a model writes beside such a call is kept (#7570).
-
Professor Mari's composer has the same connection and model picker as the chat input: your connections on one side and the chosen connection's models, with search and pins, on the other, so you can change her model without leaving her chat. On a phone it shows one step at a time. Retry with another model also works after you switch models on the same connection (#7656).
-
Professor Mari's change card now shows changes deeper inside an item instead of counting them as "1 more field changed". A character's onboarding, for example, gets its own row that reads On · 5 persona questions · 1 character question and names what changed, and a list inside a field, such as a preset's stop strings, shows its added, edited and removed entries (#7782).
-
An install with no Professor Mari skills yet gets one example skill, ask-before-building, switched off. Turn it on in her Skills list and she asks a few short questions with answers you can tap, or proposes one plan, before she builds something, instead of building first from her best guess. It's an ordinary skill: edit it, switch it off or delete it, and it doesn't come back (#7822).
-
When the server turns down a question to Professor Mari before saving it, the question and its attached files go back into the message box, ahead of anything you typed since, so you can change it and send it again. Before, the question disappeared. Retry on the error card sends what is in the message box, or the failed question when the box is empty (#7700).
-
When Professor Mari leaves out a required value in one of her app actions, the error now names the argument to pass and, for a missing id, tells her to list or search first. Models such as GLM now correct the call instead of repeating it until the run stops (#7577).
-
When Professor Mari changes one of a character's extra fields, such as the depth prompt, she no longer erases the card's other extra fields, like Appearance and Backstory. Her edits change only what she meant to change (#7764).
-
Professor Mari can now read every entry of a big lorebook. She reads the entry list one page at a time and asks for the next page. Before, she got the same first entries every time and couldn't review or edit the rest (#7413; thanks @bahaynes for the report and the script that reproduced it).
-
Professor Mari can now read every chat. About one chat in 4,096 has an ID that starts with two dashes, and for those her chat and message lookups failed with a usage error. Searching chats for text that starts with two dashes failed the same way, and listing the chats of a character whose ID starts with two dashes returned every chat (#7291).
-
Settings search, the settings results in Cmd+K / Ctrl+K search and Professor Mari's setting cards show setting names and descriptions in your app language when a translation exists. Before, most descriptions and some names always showed in English. Searching in English still finds them (#7683).
-
In Conversation and Roleplay chats, a reply that failed leaves a quiet Failed · Retry line under your message after the error toast fades. A reply that was cut off, or whose prompt dropped older messages or shrank the reply limit to fit, gets a line such as Cut off · Check. Check lists what happened, with a link to the setting that fixes it (Max output tokens, Max context window, the lorebook token budget or the character card). It uses the numbers saved with the reply and makes no model call (#7312).
-
Not now in the Agent updates available dialog now closes it at once and declines every listed update in one step. With many updates waiting it could stay locked for over a minute, and a reload could bring the updates back (#7312).
-
Quick answers and the bulk decline of agent updates now have request limits of their own, and the help viewer no longer serves Marinara's internal development notes (#7312).
Interactive onboarding and characters
-
Character cards can now offer interactive onboarding: the card asks the player a few questions and builds their persona from the answers. Card authors set it up in the Character Editor's new Onboarding tab, with free-text or multiple-choice questions, follow-up questions that appear only after certain answers, and persona fields that use the answers. When you start a Roleplay chat with such a card, the persona picker offers Create your persona: answer the questions and a normal persona is created and selected. Marinara and PNG exports keep the onboarding; Compatible JSON exports leave it out (#7308).
-
A character card can now ask Character Questions as well as persona questions. The answers are saved on the chat, not the card, so the same card can read differently in every chat you start with it: write the answer's name into a card field, such as
{{relationshipToUser}}, and each chat fills in its own answer. On the card's Onboarding tab the two lists are now Persona Questions and Character Questions, the persona fields sit under a Persona Template heading, and the card's own fields offer the answers as chips you can insert. A chat started outside the chat wizard uses each question's first option, so a field never shows a raw tag (#7439). -
While you answer a card's onboarding questions, the new Review persona button shows the persona your answers will create: its name and the five persona fields exactly as Create persona will save them, with the parts your answers filled in highlighted. It works before every question is answered, and nothing is saved until you click Create persona (#7778).
-
A card's questions can be answered after the chat has started, not only in the setup wizard. In a Roleplay chat's Chat Settings, the Persona picker offers Create your persona for each character whose card can build one, and sets the new persona on that chat. In Characters, the questions marker beside a card (Answer this card's questions) opens that card's questions with the answers the chat already holds, so you can change one and keep the rest. Add Character shows the same marker, so you can tell which cards ask questions before adding them (#7799).
-
Removing a character from a chat also removes the chat variables its questions created, unless another character still in the chat uses the same name (#7799).
-
Professor Mari can write a character's interactive onboarding for you. Ask her for one, with a template persona and a character question or two, and she writes the persona questions, the persona template and the character questions, turns onboarding on, and puts each character question's answer into the card's description, personality or scenario. Her onboarding is checked before it is saved, and every problem, such as a misspelled answer name, comes back to her at once, so she fixes it instead of saving something the editor can't read. You can undo it like her other edits (#7769).
-
The Card Browser has two new sources, PlotLight and PlotLight Personas. Search by name, sort by Popular, Recent or Top Rated, filter by tags, and import a result as a character or a persona, with no account needed. Each result shows its creator and links to its PlotLight page. Adult-tagged results carry the NSFW badge; PlotLight decides what visitors without an account can see. When PlotLight is busy, Marinara says how many seconds to wait (#7495).
-
In the Card Browser's source menu, every source name now lines up, and CharacterTavern's Unavailable label sits under its name instead of being cut off at the menu's edge on phones (#7530).
-
The tag box in the character editor's Metadata tab now suggests tags you already use as you type, most-used first, with how many characters have each. Tags the character already has are left out, the arrow keys, Enter and Escape work in the list, and you can still type a new tag (#7428; thanks @minikkeuen).
-
The character editor now says which chats use these card fields: only Roleplay chats start with the First Message or an Alternate Greeting and use the Message Box Color, and Conversation chats don't use the Dialogue Highlight Color. The character guides say the same and no longer claim that the message box color applies in Conversation chats (#7414).
-
The corner handles in Avatar Crop are now whole, a little larger and easy to grab when the crop reaches the edge of the picture, as it does by default for square avatars. Before, they were cut down to tiny slivers in the picture's corners (#7334).
Trackers and the State Editor
-
New State Editor for fixing tracker data by hand (#7737, #7739, #7780, #7790, #7793):
- Open it with the { } button (Open in State Editor) in the Tracker Panel's settings, in the title bar of the Trackers window and of every popped-out tracker, and next to lock and close on the phone World State and Player & Tracker sheets. It opens on that tracker's section, for example Present Characters for Present Characters and Scene for World State. From Agent Suite it opens on the section of the agent you're looking at.
- It shows the current turn's trackers as sections (Scene, Present Characters, Persona Stats, Inventory Tracker, Custom Tracker Fields and Active Quests), searches every key and value at once, and jumps to the result you pick.
- Each section opens as Fields: text, numbers and on/off values are boxes you type in, and each character, item or quest gets its own card, so fixing one mood or HP value no longer means editing JSON. An empty value offers Text, Number or On/off, the × beside a value sets it back to No value, lists have Add item and a × on each entry, and you can add a field to a section. A new entry copies the fields of the one above it. New present characters and quests still can't be added here. Switch to JSON to edit the raw data, colored in your theme's colors.
- Review changes shows line by line what changes in each section before Save changes writes it to the turn you are viewing. A line under the search box names the message and swipe you are editing. If a new reply, a swipe or a tracker agent changes that state while you edit, the save is refused with a Reload button instead of overwriting it. It works on phones too, and the HUD and Trackers guide has a new The State Editor section.
- Chat Settings → Chat Variables has a Search and edit all in the State Editor link that opens all of a chat's
{{name}}variables in one searchable list. Saving changes only the variables you edited, so a{{setvar}}that lands meanwhile under another name is kept. - In Agent Suite, JSON tracker blocks use the same editor field with line numbers, show errors while you type, and keep Save off until the JSON is valid. The Tracker Data header links to the State Editor.
-
A value you correct by hand in the Tracker Panel is now what the next reply starts from, also when you regenerate or swipe the reply you corrected. Before, a regeneration started from the previous reply's trackers, so the wrong value you had just fixed came back. The trackers can still change the value in the new reply. Each swipe keeps its own values, a correction goes away when you delete its swipe or reply, and a branch made from an earlier message doesn't get it. Clear Trackers now removes your corrections on every swipe of the chat, so a cleared correction can't come back on the next regeneration (#7288, #7290).
-
Present Characters field locks work again in the Trackers window and the Tracker Panel. In lock mode the lock button now looks pressed, and every field you can lock shows a padlock that closes when you lock it. A locked name also stays put: if you rename a character matched to a card and lock the name, the Character Tracker no longer changes it back to the card's name on the next turn (#7728).
-
A minimized World State tracker keeps the story's place, date and time in view again. On a computer, pop World State out of the Trackers window and close it: its button becomes a small banner with a location pin, calendar, clock, weather and temperature, like the World State banner before 2.5.0. Drag it anywhere, such as the top middle of the chat, and the chat remembers where. Click it to open the window again. On a phone, the World State button shows the same banner (#7340).
-
Character Tracker portraits now show the outfit the tracker noted, with every style profile. Several styles used to drop it, so portraits came out in the wrong clothes or none at all. Include the outfit in portraits, under Auto-Generate NPC Avatars, is on by default. When the Character Tracker has an image connection, a character's large tracker card also has two buttons to make a new portrait, from the look alone or from the look and outfit. The old portrait stays until the new one arrives, and stays if it fails (#7516).
-
The Manual Trackers switch is gone from Roleplay Chat Settings → Agents. Set trackers to manual one by one under Individual tracker schedule instead. Chats that had the switch on show every tracker switched to manual there and keep running them only when you ask. Agent Menus now sits right under Enable Agents, and Attach chat summaries, Attach Lorebooks to Trackers, Review Agent Outputs and Individual tracker schedule share one Trackers Control section that starts closed, so the drawer takes less room (#7303).
-
Tracker agents' own buttons, such as the one that opens Quartermaster's dock, are back at the top of the Tracker Panel on computers and phones, including a popped-out panel. Since the 2.5.0 chat window redesign they only showed in the Trackers window, so with the Tracker Panel on there was no way to open Quartermaster's portrait, settings or outfits (#7343).
-
Quartermaster works from other devices again. Opened from a phone, another computer on your network or remote access, its Tracker Panel section and dock failed with "Invalid or missing X-Admin-Secret header" even with the Admin Secret saved, and item pictures, outfit portraits and slot icons didn't load. If the secret is missing or wrong, the message now says how to fix it (Marinara-Agents#1299; thanks @newfiesledneck).
-
In Roleplay chats, the Agent activity icon now shows what your agents are doing. It turns into a spinner while they work, and a dot appears on it when an agent fails, until you open Agent activity. This works in Chat Settings, the Trackers window, the Tracker Panel and on a popped-out Agent activity button, on computers and phones (#7337).
-
On a computer, the Tracker Panel docked beside a Roleplay chat stays usable. The Chat Settings button now starts just left of a panel docked on the right instead of covering the panel's Help button. In a window too narrow for both, such as 1024 px wide or with the chats sidebar open, the messages narrow a little instead of the panel shrinking to a thin strip or vanishing. Switching between Roleplay chats no longer hides the docked panel, and a Chat Settings button you moved yourself stays where you put it (#7206).
-
In Roleplay on a computer, movable chat windows and buttons, such as the Trackers window and popped-out tracker windows, can be moved or stretched into the space left and right of the message box, down to the bottom of the chat. The ones beside the message box stay put when you type several lines, and nothing can cover the message box itself. Phones are unchanged (#7717).
Advanced Memory and summaries
-
Character recollections (Roleplay, off by default): turn it on in Chat Settings → Memory Recall → Advanced Memory, and each character who was in a scene gets a short memory of it in their own voice, shaped by their card. When the scene is recalled, a character replying alone sees only their own recollection under the scene's summary, a merged reply shows everyone's, and the Narrator sees none. A character only remembers what they could see: messages hidden from them stay out, and a recollection that copies something they couldn't know is thrown away. New scenes get their recollections from the same request that writes the scene summary, and turning the switch on in a prepared chat writes them for older scenes. Recollections count toward the Summary and recall budget, can be read and edited under Access memories for this chat, and go along with exports, imports and branches (#7605).
-
In Access memories for this chat, each character recollection has a Delete button next to Save correction. A deleted recollection stays deleted through later updates, Prepare and Resume, and you can write a new one in its place (#7644).
-
In Roleplay group chats where characters reply one by one, Advanced Memory can now decide who sees each new message. Turn on Decide who sees new messages in Chat Settings → Memory Recall → Advanced Memory Recall, and each new message is hidden with Hide from AI from characters who aren't in the scene, such as someone who has left the room. The Decision model decides when Use Decision model is on; otherwise the Helper model does, in the same request as its scene check when one is due. The narrator and the message's author always see the message, a character can be present without speaking, and if you change a message's Hide from AI yourself, your choice stays. It is off by default, isn't offered in merged group chats, and hides nothing if the model fails (#7199).
-
Decide who sees new messages now hides a message from a character only when the Decision model is confident they can't see or hear it, for example because they are elsewhere or have left. When the model is unsure, the character keeps the message, so a character standing in the scene no longer loses a reply. The Decision model is also told who wrote the message, the Helper model follows the same rule, and the first message of a new scene now comes with the last few messages before it instead of on its own (#7265).
-
In Roleplay group chats where characters reply one by one, Decide who sees new messages keeps hiding new messages from characters who are elsewhere, however long a scene runs. Before, once a scene had run for a few messages, it stopped hiding anyone and you had to hide messages by hand. A character now counts as away when every earlier message of the scene, at least four, was hidden from them, and the model is shown their last message so it knows where they are. A single step-out or a short cutaway doesn't make anyone away (#7391).
-
In Roleplay group chats where characters reply one by one, Decide who sees new messages now decides your own message as soon as you post it, and its crossed-eye Hide from AI marker shows before the first character replies. Before, a message posted without a reply (Manual response order, Post only or
/send) or written by Impersonate waited until the next reply was requested, and on a normal send the marker showed only after every character had replied. With the setting on, a message posted without a reply now appears once that decision is made, usually within a second or two (#7351). -
With Decide who sees new messages on, a message that carries a whisper to a character who isn't in the scene is hidden from that character like any other message, and the whisper still reaches them (#7211).
-
With Advanced Memory on in Roleplay, a new reply that changes scene or point of view at a break line such as
***or---is saved as one message per part, so each part can have its own audience. A part that follows one character alone is no longer shown to characters who were somewhere else. The break line stays at the top of the part after it, the character who wrote the reply still sees every part, and text-rewrite agents such as Prose Guardian, Continuity and Immersive HTML rewrite each part on its own. Swipes, Continue and Impersonate still give a single message, and regenerating an earlier part keeps only its own scene (#7497, #7507). -
In Roleplay chats, Advanced Memory now tells you when a chat's memory needs attention, even with Chat Settings closed. A steady dot appears on the Chat Settings button, and a notice says how many scenes have problems, once for each new problem. Press Fix to repair them in one run. It asks the Helper model again who was in scenes marked Check who was there, checks older scenes, writes new summaries for scenes whose messages, hidden messages or character names changed and for finished scenes that have none, and resumes memory work that stopped with an error. Pause processing and Resume processing work during a Fix. Fix never rewrites a summary you edited by hand, and when the Helper still can't tell who was there, no character gets more access than before. When it finishes, Chat Settings → Memory Recall lists the fixed scenes and the ones that need your review as scene numbers that open in Access memories for this chat. The notice that Advanced Memory stopped now also shows with Chat Settings closed. Before, these problems only showed in the server log or inside the memory menu, and each scene had to be fixed by hand (#7236, #7240).
-
Adding a character to a Roleplay group chat no longer holds back Advanced Memory scene summaries that had a message hidden from one of the characters. Before, each such summary dropped out of the prompt for the characters who saw only part of the scene until the Helper model wrote it again, at a cost, although nothing they knew had changed. Renaming a character the summary was written for, or changing which of its messages they can see, still holds it back as before. Summaries saved by earlier versions need one Fix after a character joins (#7247).
-
Advanced Memory no longer stops at "0 of 1 work unit completed" with "Chat Summaries changed while being combined; retry" when a chat's Chat Summaries are stored out of message order. A chat stuck this way only needs Resume after updating; its summaries are kept (#7876).
-
When Advanced Memory's constant Chat Summaries go over their share of Summary and recall budget, the Helper model now also combines and shortens the summaries it wrote with private parts for some characters, such as a secret only one character knows. It gets them with their character conditions and your Combine prompt, and each private part stays readable only by the characters who knew it. Before, these summaries were skipped, so in group chats most of them were never combined, a character could stay over budget, and later replies kept paying to shorten the other summaries again. A result that would change who can read a private part, or that isn't really shorter, isn't saved and isn't asked for again after every reply (#7275, #7284).
-
In Roleplay chats with Advanced Memory, constant Chat Summaries now stay within their share of Summary and recall budget in group chats too, and each character's private parts stay private. Before, in group chats they were shortened again on almost every reply but never combined, and the narrator missed summaries written for one character. Changed: summaries you wrote or edited yourself are now combined too when they're over the budget; the originals stay in Chat Summaries as inactive entries you can turn back on. The Advanced Memory narrator reads every summary, each once, and a character no longer sees the message range or date of a message hidden from them (#7458, #7463).
-
In merged Roleplay group chats, Advanced Memory now combines only the Chat Summaries that the same characters read, as it already did in one-by-one chats. A summary only some characters could read was combined with shared ones, so the other characters got the message range and story dates of messages hidden from them. The check that stops the Helper from copying a private sentence into text every character reads now also works in Chinese, Japanese and other languages written without spaces, and on text the Helper puts next to another macro (#7285).
-
In merged Roleplay group chats, adding a character partway through no longer makes Advanced Memory drop earlier scenes and Chat Summaries from the prompt. A memory is now recalled when at least one character in the chat remembers it, not counting the narrator, so memories only the narrator has stay out. Memories that not everyone present knows are marked with who does, such as "known only to Kaito", instead of character-specific summaries being read as one arbitrary character, sometimes the newcomer. A merged chat of the narrator and one character now reads its summaries as that character; before, narrator-only parts could reach the prompt and the character's own parts were left out. Group chats where characters reply one by one are unchanged (#7239).
-
In merged Roleplay group chats without Advanced Memory, a Chat Summary section written for certain characters with
{{#if char == "Name"}}now reaches every character in the chat it applies to, marked with who knows it, such as "known only to Kaito". Before, the whole summary was read as the first character in the chat, so only that character's private sections reached the prompt, and narrator-only sections did when the narrator came first. This covers summaries Advanced Memory wrote before you turned it off. Narrator-only sections now stay out, also when you pick which character replies, and Peek Prompt shows the summary the same way. Group chats where characters reply one by one, Impersonate and single-character chats are unchanged (#7254). -
Advanced Memory no longer adds an empty "Messages #…; source timeframe: unknown" line to the prompt for a Chat Summary that has nothing for the characters replying, such as one written only for another character or for the narrator. These lines no longer use up the memory budget, and Peek Prompt shows the same. When those messages have a known story date, the line stays for characters who saw part of that scene, so they still know when it happened, but a character who joined later no longer gets dated lines for scenes they never saw. Summaries written for other characters also no longer count toward a character's share of the budget, so they can't trigger a paid Helper call to shorten that character's summaries (#7255).
-
Advanced Memory recall now finds past scenes about something you mention by name, such as your persona's pet. With Use Decision model on, recall used to send every past scene and message chunk to the Decision model at once, so on long chats it ran out of time and fell back to text matching, which could pick a scene about cats at an inn over the scenes about your cat. Now ordinary recall first shortlists up to 24 scenes (more if Maximum recalled scenes is higher), the Decision model picks scenes from that list and then which of their messages to quote, and each step gets its own time limit. In text matching, names from your latest message count for more, except the replying characters' names, your persona's name and names found in most memories. Advanced Memory activity shows both steps (#7187).
-
With the Decision model on, Advanced Memory recall finds the right scene more often in long chats, especially for "what happened after X" questions, characters who appear in many scenes, and questions worded differently from the scene. The scenes the Decision model reads are now picked by meaning as well as by matching words, using every message you sent since the replying character last spoke, so in a group chat it also covers what you said to someone else first. Existing chats fill in what they need a little at a time after each reply; you don't need to reindex (#7701).
-
Decision recall gives slower Decision backends more time, up to 25 seconds per pass and 40 seconds in total. When the work doesn't fit in that time, it judges fewer scenes, best first, instead of falling back to ordinary recall. Word matching in recall also works better for Chinese and Japanese text (#7701).
-
Advanced Memory no longer drops a scene's participants when the Helper model shortens a name, such as "Kaito" for Kaito Nakamura. A name that could also be your persona's, or that fits two characters, gives the scene to no one; Advanced Memory warns about names it can't match, and you can check those scenes in Access memories for this chat with Edit character access. Older scene summaries get the same check, a few after each reply. A swipe now recalls again when a scene has been saved since the first reply, instead of reusing a recall that missed it, and when nothing is recalled, the memory receipt says why: nothing to recall yet, no room left, or nothing relevant (#7203).
-
In Advanced Memory group chats, a scene whose Helper model doesn't say who took part now goes to every character instead of only the narrator. It is marked Check who was there in Access memories for this chat, so you can remove anyone who wasn't there with Edit character access. A character hidden from every message of that scene still doesn't get it, and names that fit no character still give no access (#7224).
-
With Use Decision model on in Advanced Memory, recalled scenes now get the message excerpts the Decision model picked, up to Maximum messages per excerpt. Before, each excerpt held only Minimum messages per excerpt (at least one), and the model's other picks were dropped and shown as Not selected in Decision diagnostics. Every recalled scene now gets its minimum excerpt before any excerpt grows, so one long excerpt no longer leaves the next scene without one. When a recalled scene still has no excerpt, the memory receipt and Peek Prompt → Decision diagnostics say why: not enough memory space was left, or none of its messages can be quoted (#7277, #7278).
-
Advanced Memory recall now includes message excerpts from scenes whose summaries have parts meant only for some characters. Before, only the narrator got excerpts from those scenes, so in group chats, where most summaries have such parts, recall gave scene summaries but almost never message excerpts, even with plenty of room. An excerpt quotes only the messages that character saw in the chat, so messages hidden from them stay out and whispers never appear. In a merged group chat, it quotes only the messages every character who remembers the scene saw. Each character still gets only the parts of a summary meant for them. In a chat that switches point of view without hiding messages, a character's excerpt can now quote the other point of view's lines; hide those messages from the character to keep them out of their memory (#7279).
-
When Advanced Memory has to leave out recalled memories so the whole request fits the context limit, the memory receipt and Peek Prompt → Decision diagnostics no longer give reasons about message excerpts, such as that text matching chose them. No scene was recalled, so those reasons didn't apply and could suggest raising a budget that wouldn't help (#7281).
-
With Use Decision model on in Advanced Memory, recall no longer asks the Decision model to pick message excerpts when no excerpt could fit in the room the scene summaries left. Before, it still sent that second request, which a hosted connection may charge for and which could hold up the reply for up to 10 seconds, and then recalled no excerpt anyway (#7283).
-
In Roleplay group chats where characters reply one by one, Peek Prompt → Decision diagnostics now shows the inspected character's own Advanced Memory recall. Before, it showed the latest recall of whichever character had one, so a character who joined later seemed to have the Decision model judge scene summaries they could never see. The Decision model was never actually asked about those memories. This also holds when you open the prompt with
{{prompt}}, inspect a reply from a character who is now inactive or has left, or the group is down to one character. Preview inputs and Test decisions now preview the inspected reply's character instead of the first character in the chat (#7267, #7273, #7272). -
With Use Decision model on in Advanced Memory, scenes end again. A scene change had to score at least 0.8, which hosted Jev never reached, so the ongoing scene kept growing and nothing new was summarized while the status said Memory Ready. The Decision model now uses its own threshold, sees the three messages before each new one and who wrote them, and also catches scene-break lines such as
***and out-of-character POV notes. A scene can now end right where one check hands over to the next. Peek Prompt → Decision diagnostics lists these answers as Scene start (#7373). -
Re-scan scenes in Chat Settings → Memory Recall looks for scene changes again between two message numbers and summarizes the new scenes. Scenes outside those messages stay as they are, and it stops instead of changing a summary you edited by hand. It starts on the ongoing scene, so a scene that never ended can be split in one go (#7373).
-
Advanced Memory's scene check now reads every message since the last check, up to twice the Standalone scene check interval; for a longer backlog, use Re-scan scenes. Before, when your message and a reply arrived together, the oldest new message could be skipped. The Helper model now also sees who wrote each message and the message the last check ended on, so a scene can end right where one check hands over to the next. It also counts a switch to characters who are elsewhere, or a scene-break line such as
***, as a scene change (#7374). -
In Advanced Memory, Memory Decision connection now also lists your local models, such as the Primary local model, the same way the global Decision model does. Choosing one makes scene checks and recall ask that model. Before, only saved Decision connections were listed, so a local model that already answered lorebook decisions couldn't be picked here. A local model that is still loading doesn't hold up the reply: recall stops waiting after its usual 10 seconds, and cancelling a reply stops the wait (#7333).
-
Advanced Memory works with a Claude model as the Helper. Before, Marinara treated every finished Claude reply as unfinished, so preparing a chat stopped at the first scene with a did-not-complete error, and each try paid for the same requests again. Replies are now judged by what they contain; one that was cut off, refused or failed is still turned away (#7637).
-
Branching a Roleplay chat that uses Advanced Memory keeps the memory it already prepared, so the branch no longer has to prepare its whole history again. A branch made in the middle of a scene reopens that scene and drops only the memories that depended on the messages left out, and earlier scenes can be recalled straight away. Paused processing stays paused in the branch, and automatic Chat Summaries you deleted stay deleted. Branching also keeps the reply you had selected, even when its saved swipe was missing, instead of picking up an older reply (#7759).
-
Long Roleplay chats with Advanced Memory start replying much sooner. Getting memory ready for a reply used to check every stored memory against the whole chat, so the wait before the first word grew faster than the chat itself, to about 5 seconds at 800 finished scenes. Each message is now looked up once per reply instead of once per stored memory (#7730).
-
With Advanced Memory on, a dice roll or function call no longer moves the context start to the latest scene. Only the prompt sent for the narrator or a character counts, and it now cuts as soon as it reaches Maximum allowed context before compression, not only once it passes it. A roll or function-call follow-up that grows past that limit no longer fails the reply; only the model's own context window limits it (#7456).
-
While Advanced Memory prepares a chat, the progress counter counts scenes steadily (3/10, then 4/10) instead of jumping to 1/1 or 1/2 when a long scene is summarized in parts (#7653).
-
Parts of a summary written for one character (
{{#if}}sections) no longer leave empty lines in the prompt of characters who don't see them. This covers Chat Summaries in one-on-one and group chats, Peek Prompt, and Advanced Memory scene and constant summaries. Your saved summaries are not changed; the cleanup happens only when the prompt is built. After updating, the first swipe in an Advanced Memory chat prepares its memory once more so the prompt matches (#7593). -
In long chats, the newest manual summaries no longer drop out of the prompt. Prompt text over 200,000 characters was cut short while macros were filled in, even when it contained no macros, so a chat with 95 summaries sent only the first 73 although the model had room for all of them (#7756).
-
Advanced Memory now starts new chats with a Summary and recall budget of 10% of the default context, 6,500 tokens instead of 4,096. Chats that already have Advanced Memory settings keep their budget (#7601).
-
In Advanced Memory Recall, the two budget boxes now sit side by side in Chat Settings and the Roleplay setup wizard. The help under them explains how the budget is shared and recommends at least 10% of the context, the Helper model help says it also writes constant summaries, and Minimum / Maximum messages per excerpt now has its own help: set both to 0 to leave excerpts out. The Memory guide says the same (#7595).
-
In a Roleplay chat with Advanced Memory Recall on, Chat Settings → Advanced Parameters now says under Limit Context Messages that the limit isn't used there. Advanced Memory decides how much history to send with its Maximum allowed context before compression (tokens) setting, so lower that to send less. Before, the limit looked active while every message that fit Advanced Memory's cap was still sent. Conversation, Game and Roleplay chats without Advanced Memory keep using the limit (#7331).
-
Chat Summary can now switch many entries on or off at once. On a computer, tick an entry, then Shift-click another to select every visible entry between them, and use Enable selected or Disable selected to change only those. In a long Roleplay chat with hundreds of summaries, bringing back a few of the originals kept by Combine no longer means toggling them one by one. On phones, tap entries to select them as before (#7166; thanks @olegpro171).
-
In Chat Summary, a summary you Write while Summary Scope is Range now covers the selected messages, as Generate does: the entry shows its range, and with Hide summarised messages on, those messages are hidden. Before, it was saved as if no range was picked. With several ranges, it covers the first. If the range can't be used, Write or Save says why, and you can pick another range and save again without losing your text (#7416).
-
Applying a settings profile that turns Hide summarised messages on or off now hides or shows the summarised messages too, as the switch in the summary popover does. Before, the switch changed but the messages did not, so they were still sent to the AI beside their summary, or stayed hidden with the switch off (#7442).
Connections
-
Claude (Subscription) connections now use the Claude Code installed on your computer when it is at least as new as the copy that ships with Marinara, and the model list shows the models Claude Code lists for your account. New Claude models appear without waiting for a Marinara update, and models your account can't use are left out. Without an installed Claude Code, as in Docker, Marinara uses its own copy, now updated to Claude Code 2.1.293, which knows Claude Haiku 5.5; Haiku 5.5 and Claude Fable 5.1 are also on the built-in model list. To always use the copy that ships with Marinara, set
CLAUDE_SUBSCRIPTION_USE_INSTALLED_CLI=false(#7314, #7339; thanks @dariusjm290-code). -
On Android (Termux), Claude (Subscription) now uses the Claude Code you installed even when it is older than the copy Marinara bundles, since the bundled copy can't run on Android. Before, an older install stopped the connection from working at all. With more than one install, the newest one is preferred (#7460; thanks @qrewq5003-oss).
-
Claude (Subscription) no longer spends your subscription limits on a hidden extra request that Claude Code makes to name each new session. It used to run on every new chat, every summary, agent run and connection test, and on every message in fold mode. Marinara also removes the context Claude Code adds for coding work, such as your account email, the server's working folder and operating system, and an empty project-notes section, so it no longer goes out with your chats or changes how the model plays a character. Noodle, Slurp and Conversation Calls get the same fix in their own updates, and a connection's Custom Parameters can't switch these protections off there (#7448, Marinara-Agents#1356; thanks @JurijPietrowicz).
-
On a Claude (Subscription) connection with Extended token caching (1 hour) on, Claude now reuses the earlier chat history from its cache and only processes the newest part again. Before, each message wrote the whole history to the cache again, about 125k tokens per message in a 130k-token chat, which used up your plan faster on long chats. With the setting off, Claude reuses only the instructions at the start, as before (#7866). Thanks to @stonebystone.
-
The subscription usage meter now covers Claude (Subscription) and OpenAI (ChatGPT) connections as well as NanoGPT. Turn on Show subscription usage to see how much of your plan's 5-hour and weekly limits is used and when each resets, in the connection editor, the chat's connection settings and the Connections menu by the chat input, on computers and phones. Reading it sends no prompt and costs nothing. 5-hour window and Weekly window turn each bar on or off. The numbers cover your whole account, including use outside Marinara. NanoGPT's meter now also shows when its allowance resets (#7648).
-
DeepSeek is now a built-in connection type: pick it, paste your key, and its current models, such as
deepseek-flash, and its Reasoning Effort levels are ready to use. Its thinking shows in the reply like any other thinking model, and settings DeepSeek ignores are hidden instead of pretending to work. Before, an OpenAI connection pointed at DeepSeek hid Reasoning Effort and sent almost none of your settings. The model list dropsdeepseek-chat,deepseek-coderanddeepseek-reasoner, which DeepSeek has retired (#7402). -
Mistral connections now work with Mistral Large 4, which has a 1M-token context and reads images. Its thinking shows in the chat instead of arriving as raw data, also while streaming, and Reasoning Effort offers Off or high, the two levels Mistral's reasoning models accept. Refreshing the model list picks up each model's real context size, and the connection Test works with it. Requests no longer send settings Mistral rejects, and a system message after a reply is sent in a form Mistral accepts (#7169).
-
Gemini 4 Argon is in the model list for Google Gemini (AI Studio) and Google Vertex AI connections, with its 1M-token context and Low, Medium and High thinking. Argon can't turn thinking off, so a saved Off sends Medium, Google's default. Temperature, top-p, top-k and the penalties are hidden and not sent, since Argon ignores or rejects them; this also applies on OpenRouter and NanoGPT. On Vertex, Argon replies with thinking stream as they do on AI Studio, and Argon runs only in the
global,usandeulocations. Argon counts its thinking against Max Tokens, so raise it if replies come back empty. A reply cut off at Argon's output limit is now reported as cut off. New Google connections still start on Gemini 3.8 Flash (#7536, #7541). -
Gemini requests through Google AI Studio and Vertex AI now turn Google's adjustable safety filters off. Before, Marinara sent no safety settings, so newer models such as Gemini 4 Argon, whose default Google doesn't document, could block replies that Gemini 3 allowed. Google's core protections, such as child safety, still apply, and when Google does block a reply the error still gives its reason (#7544).
-
A safety setting you add yourself in Custom Parameters on a Google AI Studio or Vertex AI connection now changes only the category it names. The other categories stay off instead of going back to Google's defaults (#7552).
-
Frequency and presence penalties are no longer sent for Gemini 3.5 Flash-Lite and Gemini 3.6, 3.7 and 3.8 Flash on Google AI Studio, Vertex AI, OpenRouter and NanoGPT, and the panel hides them for these models, because Google rejects them. A custom connection still sends them (#7560).
-
Gemini 4 Argon, Gemini 3.5 Flash-Lite and Gemini 3.6 to 3.8 Flash no longer fail after a preset with an Assistant Prefill, or when you press Send with an empty box after a reply. Google refuses a request that ends on an AI turn for these models, so Marinara adds a short user turn asking the model to continue. Argon already had this on Google AI Studio and Vertex AI; it now works on OpenRouter, NanoGPT and custom connections too, and for the newer Flash models everywhere (#7560).
-
With Post-Processing: Don't Apply, Gemini models on OpenRouter, NanoGPT and custom connections now get system messages that come after the first turn as user messages, in the same place. Tool calls with Gemini on OpenRouter now send back the reasoning details OpenRouter asks for (#7560).
-
Temperature, Top P and Top K are hidden and no longer sent for Gemini 3.5 Flash-Lite and Gemini 3.6 to 3.8 Flash on Google AI Studio, Vertex AI, OpenRouter and NanoGPT, or for
google/gemini-4-argon:onlineon OpenRouter. Google ignores these values for these models, so replies should not change. A custom connection still sends them (#7569). -
Regenerating one of your own messages with a Gemini model on OpenRouter, NanoGPT or a custom connection now rewrites your message, as it already did on Google AI Studio and Vertex AI. Before, the model continued the AI's last reply and Marinara saved that as your swipe. With text in the input box, your guidance now comes before the rewrite instruction, and in a merged Conversation group the group reply format is left out of the rewrite (#7569).
-
Image connections have a new SpicyAPI service. Pick it in the connection editor, add your key (the editor links to SpicyAPI's key page) and use Fetch Models from API to list your account's image and edit models. Marinara sends each model only the settings it accepts, shrinks reference images to fit SpicyAPI's limits, and waits for slow images without paying twice if the connection drops. Test Connection costs nothing. An existing image connection with a
spicyapi.aiBase URL and no saved service now uses SpicyAPI on its own; one saved as OpenAI (DALL-E) needs its service switched to SpicyAPI. Images only for now, not video (#7489). -
Model IDs from proxies and gateways that add tags or endings to a model's name, such as
[次]claude-opus-4-6-thinkingon LinkAPI,claude-opus-4.6on OpenRouter or Poe, or names ending in-thinking,(high)or a date, are now recognized as the model they stand for. They get that model's reasoning effort, thinking, sampling settings and context limits instead of being treated as an unknown model. The ID sent to the provider is never changed. When the name itself tells the proxy to turn thinking on, Marinara leaves out temperature and the other settings the provider rejects while thinking (#7713). -
When a chat's connection fails and a fallback answers, the notice names the connection that failed and why, for example "Pool A (gpt-5) failed (rate limited)." Replies written by a fallback show a small Fallback marker, next to the time in Roleplay and under the reply in Conversation. Tap, hover or focus it to see which connection failed and which one answered. This makes a bad key, a retired model or a rate limit in a random connection pool easy to find (#7720).
-
Connections → Defaults has a new Embeddings row: one embedding model for memory and lorebook search, used by every connection that has no embedding model or Embedding Connection of its own. Before, such a connection quietly fell back to the built-in local model, so switching a chat to it made lorebook entries and memories you had already vectorized stop matching, with no error. A chat's or connection's own embedding settings still come first, a line under the row says how many connections use their own, and the lorebook Vectorize picker starts on the default. None (built-in local model) keeps things as they were. Re-vectorize your lorebooks and memories after changing it (#7627).
-
Lorebook Vectorize now goes through a connection's Embedding Connection when it has one, the same way chat-time semantic search does. Before, Vectorize used the chat connection's own address and key, so the vectorized entries didn't match what chats searched with and were skipped without an error. If you vectorized a lorebook through such a connection, vectorize it again. The picker also lists connections that embed only through an Embedding Connection, and one with no embedding model anywhere tells you where to set one (#7630).
-
Local models with a strict chat template, such as Mistral-family models on llama.cpp, no longer fail with "conversation roles must alternate" or "Cannot have 2 or more assistant messages at the end of the list" on Continue, swipes with an Assistant Prefill, Impersonate, agents or Professor Mari. Marinara retries once with back-to-back messages from the same role joined together; a request the server accepts is still sent exactly as before. If the retry is refused too, the error tells you to set Post-Processing Messages to Single User Message or serve the model with a less strict template. OpenRouter and other OpenAI-compatible hosts that use strict templates get the same retry (#7486).
-
Local backends at a
localhostaddress, such as llama.cpp athttp://localhost:8080, now connect on systems wherelocalhostpoints only to the IPv6 address::1while the backend listens on127.0.0.1. Before, the connection failed withECONNREFUSED ::1(#7698). -
If you reach your AI provider through an HTTP proxy (
HTTP_PROXYorHTTPS_PROXYwithNODE_USE_ENV_PROXY=1, for example v2rayN without TUN mode), test messages and replies now go through the proxy. Before, the model list loaded but every message failed with "fetch failed" after about 10 seconds. Image generation, embeddings and package downloads use the proxy too. Local backends onlocalhostand hosts listed inNO_PROXYare still reached directly, and withoutNODE_USE_ENV_PROXYnothing changes (#7729). -
Reasoning Effort levels now read Low, Medium, High, Extra high and Max instead of low, medium, high, xhigh and max, and Verbosity reads Low, Medium and High. This applies to connection settings, presets, a chat's Advanced Parameters, the setup wizards and Peek Prompt. What is saved and sent to the provider is unchanged (#7598).
Voice and Calls
-
The Text to Speech card in Connections can now use one of your Audio connections. Choose it in Source under Audio connections: speech, Preview, the voice list and the Character Editor's voice previews then use that connection's address, key and model, so you don't type them twice. Each Audio connection keeps its own voices and speech settings, even when two use the same service, and the four regular sources keep their settings as before. If the chosen connection is deleted, the card shows Missing Audio connection and speech stops instead of quietly using another connection. A game with its own audio connection still uses it for sound effects and music (#7851). Thanks to @ebev, who proposed this in #7848.
-
Text to Speech has a Request timeout (seconds) setting, from 10 to 3,600 seconds and 60 by default, for local voice servers that need longer for a long line. Set it on the Text to Speech card, or on each audio connection for that connection. When speech times out, the message says how long it waited and where to raise the limit (#7723).
-
With Enable emotion indicators on, text in square brackets now reaches the speech service even when Skip text inside square brackets is on, so voice directions such as
[Low, steady voice, restrained urgency]are no longer thrown away. This can let other bracketed notes through as well; turn emotion indicators off to filter brackets again. The Roleplay speaker extractor adds sparing, more descriptive directions without changing the dialogue's words, and a long line split for speech no longer cuts a direction in half. With Enable TTS, Game narration and emotion indicators on, Game scene, party and combat dialogue can carry these directions too. After you change these settings, playback uses them instead of audio saved from before (#7765). -
Calls can now send your voice to your own speech-to-text server, such as a self-hosted Whisper server or a provider, instead of Local Whisper. This helps when Local Whisper struggles with your language. Set it up in the new Speech to Text card in Connections, which appears once Calls is installed: enter the server's address, an API key if it needs one, the model and your language, then press Test. Calls 1.1.0 and newer use it. A server on the same computer works as is; one elsewhere on your home network needs
STT_LOCAL_URLS_ENABLED=true(#7353). -
On a phone, closing Connections while a Speech to Text change is still being saved no longer saves it twice (#7891).
-
Calls keeps what you say while it is still transcribing your last clip. Anything said in that time used to be thrown away with "Still processing your last voice message". Up to three clips now wait their turn and are answered in the order you spoke. Calls also uses the Speech to Text server set in Connections when there is one, and falls back to Local Whisper when there isn't or it fails. Speech that finishes transcribing after you hang up is no longer saved into the ended call or answered (Marinara-Agents#1281).
-
Calls no longer loses some voice clips with "Selected provider/model cannot receive provider-native audio input". A short pause between words no longer ends your clip mid-sentence when the tab is hidden or busy: a clip now ends after three seconds of quiet the microphone actually measured. In a hidden or covered tab, a real pause therefore takes longer to end the clip, about 13 seconds (Marinara-Agents#1288).
-
Characters can call you again. With Calls installed, a character's
[call]in a Conversation reply did nothing. Now it rings: the incoming-call banner or notification appears and an "Incoming call" line is added to the chat. It needs the chat in Conversation mode with character commands, the Calls command and Call Audio Pipeline on. In a group chat, a second character's[call]while a call is ringing no longer relabels the first one, and a call in progress is left alone (Marinara-Agents#1335). -
On phones, the Chat Settings bubble no longer covers Close call chat during a call in Calls. The call chat now behaves like the app's other dialogs: floating windows hide while it is open, keyboard focus moves into it, and focus returns to Open call chat when you close it (Marinara-Agents#1355).
-
Opening a call in Calls no longer changes the volume of, or mutes, a reply Marinara is reading aloud in another chat. The call's volume and mute apply only to the call's own voices. A call in a chat on the Local Model now answers through Marinara's Local Model, as the chat does, instead of staying silent with no error (Marinara-Agents#1497).
-
When a character changes their status during a call, such as going to study for an hour, the change now goes on their character card, as it does after a Conversation reply, so it shows in every chat with them and lasts for the time they gave. Before, the call changed only this chat's copy of their schedule, and the change was soon lost (Marinara-Agents#1499).
Install, updates and security
-
Marinara refuses HTTPS certificates from eight eMudhra certificate authorities whose private keys were stolen, so whoever holds those keys can't pose as your AI provider or any other site Marinara connects to. Browsers already block them, and Node.js will in a coming release (#7900).
-
On Windows, Marinara starts again after a crash or power cut instead of refusing to start because another copy seemed to be using your data, which used to mean deleting
data/storage/.writer-leaseby hand. This covers data on the computer's own drive. Data on a network drive or shared folder stays locked, so two computers never write to it at once (#7804, #7812). -
Building the app on a computer now needs about 2.5 GiB of memory for Node.js, where a 2048 MiB limit was enough for 2.5.0. If
NODE_OPTIONSsets a lower limit, the build still stops withJavaScript heap out of memory, but it now says how to raise or remove the limit instead of showing only Node.js's crash report. Marinara never raises a limit you set. Android (Termux) builds are not affected (#7838). -
On Android/Termux, updating in place from 2.4.6 could leave part of the image library uninstalled, and the server then shut down as soon as a browser opened Marinara. Updating now installs the missing part. If the image library still can't load, the server stays up and shows full-size images instead of thumbnails until dependencies are reinstalled (#7179).
-
The Troubleshooting guide has a new section, Termux: server stops when you open Engine, or Sharp cannot load, with repair steps for anyone who can't update first and a list of what stays off until the image library loads: thumbnails, sprite generation and background removal (#7183).
-
On Android/Termux, updating from Settings → Advanced → Updates no longer downloads builds for every other platform, about 1.7 GB the phone can't use and often has no room for. It now installs only what Android needs, the same way
start-termux.shdoes, and so does the manual command shown when an update fails. Builds that earlier updates already downloaded are removed later by pnpm's regular cleanup (#7215). -
On Android/Termux, the launcher no longer writes pnpm architecture settings into
.npmrc. pnpm never read them there, so installs already used the Android builds Termux needs, and existing installs need nothing done. Starting Marinara from the Android app no longer reinstalls dependencies and clears the package cache every time, so it starts faster (#7198). -
With Basic Auth on, an address that tries 10 different wrong passwords within 15 minutes is blocked until those 15 minutes are up, and the server log notes the first wrong password and the block. A browser that has already signed in can still get in with the right password during a block, so other people's guesses can't lock you out of your own devices. Retrying one old saved password counts only once (#7824).
-
Regex scripts, including ones that come with imported character cards, now run under a time limit on every prompt message, not only long ones, so a slow pattern can't hold up the server. Typical chats with regex scripts also build their prompt faster (#7824).
-
The server's downloads from web links refuse private and local network addresses in every setup, including when
TRUSTED_PRIVATE_NETWORKSis set (#7346). -
.charxcards,.marinarapackages, Agent packages and custom Agent repositories are now opened with a stricter archive reader. An archive whose own records disagree is refused with a plain message, and a.charxwhose card or icon unpacks to more than 256 MB can't be imported. Every other size limit is unchanged, and archives that imported before still import, including ones padded at the end by thetaron macOS and Windows. A.marinarafile that isn't a readable archive now says so instead of showing a server error (#7532, #7538). -
Troubleshooting has a new section for imports refused with The file is not a readable ZIP archive or Could not read .marinara package. It explains what the message means, that a partial download is the usual cause, how to make the archive again, and what the file-count limits for Agent packages and
.marinarafiles mean. These limits are not new (#7550). -
A client extension that sends messages to its sandbox faster than allowed is now stopped, with the usual Restart notice, instead of being able to freeze Marinara. Extensions that catch up after a pause, such as an open browser dialog or a sleeping computer, keep running (#7268).
-
Tightened how the server recognizes API requests, so its cross-site request check, rate limits and no-cache rules always apply (#7815).
-
Updated the MCP SDK used by Claude agents and the developer MCP tool to 1.32.1, which includes a security fix for its OAuth client (#7170).
Chats and messages
-
On a slow device, such as a phone, the Android app or Termux, tapping Conversation, Roleplay or Game on Home right after Marinara opens no longer asks you to choose a connection when you already have one. Home now waits for your connections to load, and a quick second tap doesn't start a second chat (#7837).
-
Peek Prompt has a Copy assembled prompt button beside Close. It copies the whole prompt as plain text, closed sections and chat history included, with each message under a
[system],[user]or[assistant]line, so you can paste it elsewhere. It copies what the window shows: a saved exact request is copied as it was sent, and nothing is sent to the model (#7807). -
Popped out of Chat Settings, Author's Notes has a text box that grows with its window instead of staying four lines tall, and on phones it fills the screen. Docked in Chat Settings, the box can be dragged taller on a computer (#7806).
-
New Add CYOA choices to the message box instead of sending them setting in Settings → General → Input & Editing. With it on, clicking a CYOA choice adds its text to your message box and the choices stay on screen, so you can combine several into one message and edit it before sending. It takes priority over Use CYOA as direction (#7317; thanks @stonebystone).
-
Settings → Advanced → Message Tools has a new Show "older messages not sent" note switch. Turn it off to hide that note under replies in long chats. A cut-off or empty reply still shows its own note, and Fix: Check the last reply in Search still opens the full checkup (#7395).
-
/sendnow saves your message the way Send does: your input regex scripts and input translation run, and macros such as{{user}}and{{random}}are filled in. Before,/sendsaved the macros as typed. A message with macros sent right after the page opens now waits for your personas and characters to load, so{{user}}and{{char}}are no longer saved as "User" and "Character" (#7600). -
/sendkeeps the files you attached and the message you were replying to, as Send does. Before, it posted only the text and the attachment was lost./sendwith a file and no text posts the file on its own./remindnow treats its text like a normal send, with your input regex, input translation and macros, so the reminder in the chat, its notice and the model all show the same text (#7619). -
An
{{include::…}}in a message you send is now filled in with the lorebook entry before the message is saved, along with any macros inside that entry, so the chat shows what the model reads. If the server doesn't answer within 10 seconds, the include is kept as typed and still works in the prompt (#7615). -
Names in Korean, Japanese, Chinese, Cyrillic and other non-Latin scripts now stay in the prompt's XML tags and Markdown headings, such as
<홍길동>, and Peek Prompt shows those sections by name. Before, such a name became an empty<>tag and accented names lost letters (Améliebecameamlie). A persona with such a name could also be left out of the prompt, and in a group chat set to Individual, other characters' cards could stay in each character's prompt (#7393; thanks @chungchandev). -
In a group chat set to Individual with a preset that uses the Markdown wrap format, other characters no longer see the card of a character whose name has a symbol or emoji between words, such as
Tom & Jerry(#7393; thanks @chungchandev). -
Saving a settings profile that other chats use now asks whether to update them too: Save to this profile only or Save and update N other chats. Updated chats get the profile's Chat Settings, such as generation options, agents, memory and summary settings, translation and the window layout. Each keeps its own connection, prompt preset, story, characters, lorebooks, background, notes and progress, and a setting you left at its default in the chat you saved from goes back to its default in the others. Multiplayer rooms are never updated. Profiles also stop copying one chat's own state, such as its macro variables, into other chats, and a profile that fails to save now says so instead of failing silently (#7422).
-
Exporting a very long chat no longer freezes the server. A 12,000-message chat now exports in under a second instead of about 20 seconds, and other tabs and replies keep working meanwhile. Branching a chat, importing a JSONL chat and copying a scene into its own chat are also much faster on long chats (#7446).
-
The Trash tab in Search messages no longer freezes the page when a chat has thousands of deleted messages. The list fills in 200 entries at a time, starting or finishing a restore or delete no longer redraws every entry, and the entries dim while it runs. A failed or partial restore warning now stays up for 15 seconds, so a slow device can't hide it before you read it (#7218).
-
While the message Trash is restoring or deleting, a short Restoring messages… or Deleting messages… note shows over the dimmed entries, and screen readers announce it, so it is clear why the entries don't respond (#7226).
-
On phones, opening a Chat Summary entry now shows its whole title and message range, with the token estimate, above the text instead of cutting them off. A summary's Delete button now has the same colors as Expand and Edit beside it instead of red, and it still asks before deleting (#7590).
-
Accepting a Grammarly suggestion, or clicking another browser extension's popup, no longer closes Chat Settings, a popped-out drawer or another chat window, and the fix lands in the text you are editing. Pressing Escape in such a popup closes only the popup, so the expanded summary editor, Edit Summaries and a preset variable's value editor stay open (#7591).
-
On phones, tapping a connection in the Connections menu by the chat input switches to it and closes the menu in one tap. The arrow at the end of the row opens that connection's models without switching. Professor Mari's connection menu works the same way on narrow screens (#7660).
-
Screens that scroll over an open chat, such as an agent package's own pages, scroll more smoothly: the chat checks for selected text while you scroll only when some text is selected (#7641).
-
With Apply preset colors on in Chat widget style, as with the Mari style, quoted dialogue in Roleplay and Game now keeps each character's and persona's own dialogue color, including italics inside the quote, instead of taking the style's text color. Game Mode speaker names keep their colors too. Dialogue from characters without a color of their own still follows the style (#7168).
-
With Apply preset colors on in Chat widget style, HTML in chat messages, such as an Immersive HTML card, keeps the text colors it sets itself. Before, that text took the preset text color or your Chat Chrome Text Color, so black text on a light card could turn white or green. Text without a color of its own still follows the preset and Chat Chrome Text Color (#7297).
-
With a chat widget style such as Mari or Dottore and its Apply preset font, Apply preset shape or Apply preset colors switches on, Load More, Show older, Show newer, Latest and the Game log buttons (Older, All and Show more older logs) now follow the style like the other chat buttons. With the switches off, Load More matches Show older beside it, and the Game log buttons use your theme colors, so Older and All are readable in light mode (#7562).
-
Load More, Show older, Show newer, Latest and the Game log buttons now show a clear focus ring when you reach them with the keyboard. It uses the full app accent, or the chat style's color while Apply preset colors is on (#7574).
-
On tablets, foldables and narrow windows, the chat's round buttons and windows no longer stay on top of other screens such as the Agents list, an agent editor, Characters, Settings or the Tracker Panel, where they covered buttons like Back, Save and the panel's close button. They come back in the same place when you return to the chat. The d20 Trackers button now also closes the Tracker Panel when pressed again, like the Chat Settings button, and when the panel opens over the chat, keyboard focus moves into it (#7181).
-
On phones, a notice at the top no longer covers header buttons such as Save, Close and the star, also in landscape, and the character editor keeps its header actions on one row. In Game Mode, unpinned Game controls close after you switch between a scene and the overworld, and the floating Game buttons no longer cover the tactical combat toolbar (Flee, Threat, Log) (#7876).
-
On phones, a notice at the top also stays clear of Close in the Game Mode Inventory, even after picking an item makes the panel taller. Pressing Escape while dragging a background cancels the drag and leaves Background Library open with your selection, and screen readers name the character editor's name field again (#7881).
-
New
{{reasoning}}macro: it gives the reasoning level the model is actually sent (lowup tomax), oroff. A preset can use{{#if reasoning}}…{{else}}…{{/if}}to keep a thinking section only when the model thinks, or{{#if reasoning == "max"}}for one level, so you no longer switch sections by hand when you change the reasoning level. A preset or chat variable that already uses the name keeps its own value. The macro and conditional prompt guides show examples, including model-specific ones with{{model}}(#7705). -
Fields that have the macro reference button now complete macros as you type: type
{{chandar}}appears in grey. Press Tab or tap the grey text to accept it; with nothing suggested, Tab indents as before. Tapping the grey suggestion also works in search and in Professor Mari's message box, so phones without a Tab key can accept it too (#7707). -
A
decision_choice:option in a conditional prompt can now say what it means, so the Decision model doesn't have to guess. Write it as"option":"what it means", for example{{#if decision_choice:"Kaelen's mood in the latest message" == "angry":"Kaelen raises his voice, makes threats or breaks something"}}. The model still answers with the option (angry), so comparisons work as before, and options without a meaning are asked exactly as before. Changing the meaning asks the question again instead of reusing the old answer (#7808). -
In a preset's choice window, an option no longer shows a value that only repeats its label, and a dropdown with nothing selected shows a blank row instead of the first option (#7308).
-
With a chat's Lorebook Token Budget and the lorebook's own Token Budget both at 0, Active Context no longer says matching entries were skipped by token budget. An entry whose text is blank, or that macros turn into nothing, was counted as skipped by the chat budget. An entry that only sets a variable with
{{setvar}}sets it again, so entries that check that variable get their text back. When entries really are skipped, the notice says which budget skipped them and where to change it: Lorebook Token Budget in Chat Settings → Lorebooks, the lorebook's Token Budget in the lorebook editor, or the fixed limit on lore attached to the current location. The notice uses your theme's accent color, held steady, instead of amber (#7329). -
In the lorebook entry editor, a keyword list longer than 10 shows the first 10 with Show N more and Collapse, separately for primary and secondary keywords. Adding a keyword opens the full list (#7522; thanks @minikkeuen).
-
Deleting a lorebook now removes it from its library folder, so the folder's count drops right away. Folder counts that still included deleted lorebooks are corrected the next time Marinara starts (#7435; thanks @minikkeuen).
Settings, appearance and library
-
Drag chats, characters, personas, lorebooks, presets, connections, backgrounds, agents and folders straight from their rows instead of a small handle. On phones, hold an item to pick it up (a normal swipe still scrolls), and tap more items with a second finger to carry them together, for example into a folder. While you drag, a gap opens where the item will land and folders light up when you're over them. The order you set is saved, and Alt+Up or Alt+Down moves a focused item (#7362).
-
The What's New widget on Home has a See what's new button, so you can open this version's What's New again after closing it. On phones, it sits on one line with Read release notes (#7810).
-
Buttons in Settings now look the same wherever they do the same job: a section's main action, smaller actions in a row, toggles, choice cards such as Visual Style and Chat widget style, icon buttons and delete buttons each have one style. Before, some actions, such as Save timeouts, looked like pressed toggles. The selected choice card has a clear accent outline, icon-only buttons have names for screen readers, and delete buttons across the app use your theme's delete color and no longer pulse with Accent Pulse or RGB Mode. The tracker Temperature unit is now a °C / °F choice, Create Theme and Import File are ordinary buttons, and in the background library a pin icon sets the default Roleplay background, so a card's buttons fit on one row and no longer cover the picture you click to select it (#7175).
-
Delete, remove, stop and recovery buttons use your theme's accent, held steady, instead of a fixed red or amber (#7876).
-
Changing Border & Buttons Color in Chat widget style no longer removes the thin inner ring from chat buttons. Professor Mari's arched round buttons, Dottore's buttons and every Cut corners button keep it, now drawn in your chosen border color (#7249).
-
Preset prompt fields and a character's Example Dialogue now use the font picked in Settings > Appearance > Text & Scale > Font, in their Expand editor window too. Typed quotes stay straight, so you can still see which quote is stored. With the default font they stay monospace, and code-like fields such as JSON, regex and variable names always do (#7514).
-
Profile exports (Export Profile) keep each agent's Max Output Tokens again. The export took any agent setting with "token" in its name for a password and blanked it, so restoring the profile on a new install quietly put every agent back on the default output limit. Other token counts, such as context and summary budgets, are kept too. API keys, passwords and connected-account tokens are still left out (#7727).
-
Importing a full profile on an install with agents such as Slurp no longer stops with "Profile table slurp2_account_subscriptions is not supported." A profile doesn't carry agent data, so the import now skips those tables, as the export already does (#7892).
-
Safari and other WebKit browsers no longer drop into Marinara hit a recoverable UI error. when they refuse to read the page color from a canvas, which can happen when the device is low on memory. The page backing and browser bar then keep the theme's background color (#7242).
-
The rare Chibi Professor Mari toast keeps her painted chibi, and she now turns up in other looks too: mirrored, upside down, Dottore, Gold, and a rarer shiny silver chibi with sparkles (#7450, #7451).
Roleplay
-
In Roleplay chats, agents now read whispers. Echo Chamber, trackers, Lorebook Keeper, Long-Term Memory and every other agent see each whisper where it was said, marked as private with the name of who it is for, and a reply that is only a whisper now goes through the agents too. In group chats, Smart response order reads them as well, so a whisper to a character can make that character reply next. Characters still get only the whispers meant for them, but what an agent writes, such as a lorebook entry or a rewritten reply, can now mention a whisper. In a hosted multiplayer room, agents get no whispers (#7437).
-
In Roleplay, Relationship Tracker's Update from History and Memory Nag's scans now read whispers, marked as private with the name of who they are for, like the other agents. A message that is only a whisper is read too. Who is present in a scene still comes from the public text, so a whisper that names two characters doesn't add their relationship to anyone else's prompt (Marinara-Agents#1354).
-
In Roleplay chats, a message that is only a whisper is now left out of every other character's context. Before, they saw it as [Private whisper], which told them you were there even when you were sneaking up on someone. The character it whispers to and the narrator still get it, and so does a character you shared a private note with on that message (#7389).
-
In Roleplay chats with Advanced Memory on, a message that is only a whisper, with no other text, now reaches the character it whispers to and the narrator. Before, Advanced Memory left it out of the prompt because it had no visible text, so the whisper never arrived. The same goes for a reply that is only a whisper, and regenerating a reply that missed one now includes it (#7381).
-
In Roleplay chats, a whisper stays where the model wrote it after you edit the reply. Before, it moved to the bottom of the message when the edit changed the text right before it, and saving any edit with the Typographic quote style did that to every whisper in the message. Rewrites by agents such as Prose Guardian and continued replies keep whispers in place too, undoing an edit puts a whisper back where it was, and whispers in replies you already edited return to their place when only the quote style had changed (#7387).
-
In Roleplay chats, a whisper to your persona that you type into a character's or the narrator's reply now shows in the message, for example when you fix a whisper the model wrote in the wrong format. Before, its text vanished behind a "used whisper command" notice. A typed whisper or note that still fails now shows that notice open, with the reason and your original text. A message this already happened to isn't repaired on its own: retype the whisper from Original command in the notice, or regenerate the message (#7412).
-
In Roleplay, hiding a message from a character no longer takes away a whisper addressed to that character. They still get the whisper at that point in the story, but none of the rest of the message. Hiding a message from everyone still removes its whispers. To take a whisper back, open Edit whisper, clear the text and save: the whisper is removed from the message (#7196).
-
In Roleplay group chats where characters reply one by one, Add Turn To Prompt now only reminds the model which character to reply as. It also used to invite the character to address others with @name, so replies could end with an out-of-place ping such as @yourpersona. Conversation chats keep their @name handoffs (#7327).
-
In Roleplay group chats set to Individual, each character's reply keeps its own Expression Engine expression. Before, the whole turn's expressions were saved on the last reply only, so earlier replies showed no expression, and deleting or retrying the last reply removed everyone's. This makes no extra model calls (#7715).
-
With Only show active sprites on, your persona's sprite no longer stays on screen after your persona leaves the scene. It now shows on the turn you wrote and otherwise only when the Expression Engine includes your persona, also when you retry the Expression Engine (#7379).
-
The Narrative Director's Secret Plot has an editable Secret Plot Prompt in the Agent Editor, so you can steer arcs away from the built-in mystery-to-uncover framing, for example in character-driven roleplay. Select Copy default to edit to change it and Reset to default to go back; keep the JSON reply format at the end, or the arc can't be read. Profile exports and backups now keep the Secret Plot switch and run interval, which they used to blank. Thanks to @stonebystone (#7657, #7733).
-
The Illustrator's Run Interval is now set per Roleplay chat. Its card in Chat Settings → Agents has a Run Interval field, so one chat can get an image every message, another every 5 messages and another only when you ask (0). Adding the Illustrator to a chat saves the value you pick to that chat instead of changing it for every chat. The Run Interval in the Agent Editor is the default for chats that don't set their own, and Use agent default brings a chat back to it. Game chats keep choosing illustrations by scene (#7304).
-
In group chats where characters reply one by one, with Prose Guardian, Continuity or Immersive HTML on, the last character's message no longer repeats every earlier reply from the same turn. The rewrite agents now get only that character's own reply (#7510).
Conversation
- In Conversation chats, a character now remembers the selfies they send. Their later replies see a short note saying what the photo shows, so they no longer answer "what photo?" when you react to it. With image captioning on, your captioning model describes each new selfie once and the description is kept; otherwise the note uses the selfie's image prompt. In group chats the note says who sent it. Illustrator images still stay out of the character's view (#7417).
…and 113 more changes. The complete list is in CHANGELOG.md.
Contributors
Thank you to everyone whose work is included in this release, across Marinara Engine and the Agents catalog that ships with it, including the authors of patches preserved in other pull requests:
@chungchandev, @dariusjm290-code, @Gunterlie, @JamesMowery, @JurijPietrowicz, @kolacheee, @minikkeuen, @newfiesledneck, @NoblezDomain, @olegpro171, @Promansis, @qrewq5003-oss, @SirAdoni, @SpicyMarinara, @stonebystone, @ylli-selmani.
Full changelog: v2.5.0...v2.5.1