github Pasta-Devs/Marinara-Engine v2.5.2

3 hours ago

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.

  • 2026-11-04

Before you update

  • Make a full backup before you update. This version saves your data in a newer storage format, for connection accounts and for MMD, GLB and FBX avatars, and once it has opened your data folder, 2.5.1 and older versions can't open it. The launcher and the in-app updater won't move you back to such a version: to go back, stop Marinara and restore the backup you made before updating. The chat-file conversion command from the Troubleshooting guide can't convert it, and the format number must not be changed by hand (#8456, #8481, #8656).

  • More proxy and tunnel setups now count as remote visitors, so their visitors see the setup page until you set a login: nginx on the same computer with its default settings, a proxy that passes on the visitor's domain or network address without forwarding headers, a proxy in front of Docker, and Tailscale Serve or Funnel. Opening Marinara on its own computer at localhost, 127.0.0.1 or the computer's own name, or straight over Tailscale, stays passwordless; a custom name for this computer in /etc/hosts now counts as a proxy too, so use a *.localhost name instead. Another container that reaches Marinara by its container name, such as http://marinara:7860, now needs the login too. If you can't get in after updating, open Marinara on the computer that runs it and follow Locked out after updating in the Remote Access guide (#7920, #7938, #7987).

  • Marinara skips the login for a Tailscale device only when the connection really arrives on a Tailscale network interface, not just from an address in Tailscale's range. On Linux with a renamed tunnel interface, set a login or BYPASS_AUTH_TAILSCALE=true. ALLOW_UNAUTHENTICATED_PRIVATE_NETWORK=true no longer lets in 100.64.0.0/10 addresses, which some internet providers give their customers; to trust that range anyway, add it to TRUSTED_PRIVATE_NETWORKS (#8003, #8046).

  • Long-Term Memory 1.5.0 and newer need this version of Marinara, which no longer runs its own memory recall in chats where Long-Term Memory is on. Such a chat now recalls only what Long-Term Memory has imported, so a chat with Long-Term Memory on and nothing imported in Sources has no memories until you import its messages or summaries there. Long-Term Memory also no longer switches itself on in chats that used Marinara's old built-in memory: to keep it there, turn it on in Chat Settings → Agents. An older Marinara keeps the 1.4 version you have (#8361, Marinara-Agents#1747).

  • Update Slurp to 0.4.9 or newer along with Marinara. This version of Marinara checks package settings with a newer library, and Slurp versions before 0.4.3 stop while loading on it; once Long-Term Memory is updated too, Slurp 0.4.8 and earlier also stop adding memories to Creator posts. From 0.4.3 Slurp starts, and saving part of its settings, a Garnish ad or a Creator's account no longer resets the fields you didn't change to their defaults (Marinara-Agents#1721, Marinara-Agents#1727, Marinara-Agents#1852).

Works differently now

  • Picking a model in a chat now changes only that chat. Before, the model you chose from the chat input or Chat Settings → Connection was saved to the connection, so every chat and agent using it switched too. Both now open Model for this chat, which shows whether the chat follows Main or has its own pick. After a pick, a message offers Make it my Main model and Undo, and Use default in the picker, or Follow Main again in Chat Settings → Connection, goes back to your Main model. Random is now Shuffle (#8456).

  • Presets no longer set context or output token limits. Set them on the connection (Max context window and Max output tokens override) or in the chat's Advanced Parameters. Older presets still load, but their limits are ignored, and with no other setting a reply gets up to 4,096 output tokens, where the bundled preset used to ask for 8,192. Editing one chat parameter no longer saves every inherited Send switch as a chat override, so reasoning and the other switches follow the connection you pick. Games made earlier may already hold such overrides: use Reset to Defaults in Advanced Parameters, then set again what you meant to change (#7940).

  • The built-in Marinara's Universal Preset now supplies only prompt text. Its saved sampling, reasoning, formatting and token settings, such as maximum reasoning effort, no longer apply, so chats on it use your connection's and chat's settings, with Marinara's defaults for the rest. To keep parameters in a preset, make an editable copy (#8021).

  • The Assistant Prefill now always ends the request, after everything else: depth 0 prompts, post-history instructions, the generation guide, @ mention and regeneration instructions, the turn hints in Individual group chats, notes and whispers. Before, these could land after it. Models that refuse a request ending on an AI turn, such as Claude Opus 5.5 and Sonnet 5.5, Gemini 4 Argon, Gemini 3.5 Flash-Lite and Gemini 3.6 to 3.8 Flash on any service, and every model on Claude (Subscription), get the prefill at the start of the last AI reply in the history instead, with no extra turn added after it. When the chat has no AI reply yet, the prefill is sent as a user message. In Game Mode, dice and tool results stay before the prefill. Peek prompt shows the new order (#8703, #8710).

  • With a login set, browsers now sign in on Marinara's own sign-in page, once per device, instead of the browser's password box, and Sign out works. Scripts and API clients can still send Basic Auth (#8102).

  • Generated Game music and sound effects now have their own connection type. When you update, each Audio connection with Game sound effects or Game music on gets a separate Music & Sound Effects connection, and older ElevenLabs Game settings can get one too, so you may see more than one. Speech connections, character voices, the connections your games saved and audio you already have stay as they are. Audio connections now handle only speech and voices, and the Connections Jobs box lists speech and Music & Sound Effects as separate jobs, so check the Music & Sound Effects job and its fallback there if several were made. A migrated connection you delete doesn't come back on restart (#8167).

  • Image generation now sends the whole prompt. Marinara no longer cuts image prompts to its own length limits or trims tag-style portrait and sprite prompts to 75 tokens, so a Character Tracker's full appearance and outfit, your whole style text and tags, Game image instructions and the Illustrator's prompts reach the image model as written, instead of losing details such as hair color or ears. A provider with a shorter limit of its own can now refuse a long prompt with an error (#8397).

  • GPT Image 2.5 (Flare and Sunburst) requests smaller than 1024×1536 pixels are now scaled up in their own shape, for example 768×1344 to 960×1664 and 1024×1024 to 1264×1264, so small figures in group scenes no longer come out with broken hands and limbs. These pictures cost about 1.5 times as much as before. Requests that are already that large are sent unchanged, and 2D Avatars blink and talk pictures still line up with the sprite (#8759).

  • Creator notes are never sent to a model. A preset whose Characters section names creator notes now leaves them out, and cards pulled in with {{<id>}} macros, agents such as Card Evolution Auditor, downloadable agents and Advanced Memory summaries no longer receive them. An ID macro written only in a card's creator notes no longer pulls another card into the prompt, and Card Evolution Auditor no longer offers to edit creator notes. Professor Mari still reads them when you ask her to read or edit a card (#8596, Marinara-Agents#1969).

  • {{characters}} now lists every character in the chat, including ones you turned off, so a scenario such as "The crew consists of {{characters}}" keeps its whole cast when someone is off-scene. A preset that used it for the active characters only should use {{char}} with {{group}}, which still lists only the other active characters. The macro adds names only, and renaming or removing a chat member updates it without editing your prompts (#8444).

  • Messages now fill in chat variables when shown, as the prompt already did. {{getvar::name}} in a message reads the chat's variables when the chat has any, so a name that exists only as a preset variable shows empty there instead of the preset's value (#8509).

  • With Long-Term Memory on, its notes go in the preset's memories slot in a Conversation chat whose preset has one. A regenerated reply still reuses the notes of the reply it replaces, and Marinara's own recall no longer adds to them, so it gets no memories when the original got none, for example when recall timed out or the turn is from before Long-Term Memory was installed (#8361).

  • Other packages now read Long-Term Memory only through its recall service, which keeps its sharing, mode, persona and chat limits, and with this version of Marinara they can no longer reach the internal service that only Marinara uses (Marinara-Agents#1852, Marinara-Agents#1935).

  • When a chat adds to a Long-Term Memory memory you shared with a character or persona, Review Queue now offers the change on that memory, with a note that accepting adds it everywhere the memory is shared. Before, extraction quietly made a private copy for that chat, so the chat recalled two versions and the character's other chats never saw the update. These changes are never applied automatically, and accepting writes only the rows you select plus the link and event they need. A chat that already has its own copy keeps updating it; delete the copy to get suggestions on the shared memory instead. Memories from other chats and global memories still get a private copy (Marinara-Agents#1537).

  • An agent call, including one from a downloadable agent, now times out only after AGENT_CALL_TIMEOUT_MS (5 minutes by default) passes with nothing arriving from the provider, instead of after 5 minutes in total. Text, thinking and keep-alive data all restart the count, so a long Gacha Forge chapter that is still streaming can finish. Quiet agent calls now ask the provider to stream too. An endpoint that refuses streaming is asked once more without it, and a reply is never generated twice. The Illustrator keeps at least its 30-minute allowance (#8249).

  • In Game chats, Finish rolled turns in one request in Chat Settings → Function Calling is now on by default, including chats that never set it, so a turn that rolls dice costs one request instead of two. A chat where you turned it off keeps having each rolled turn rewritten with the real numbers (#8278).

  • Professor Mari can no longer change models, connections or the Text to Speech and speech-to-text server settings with her database commands, and can no longer set a chat's Discord Mirror webhook, DeepLX URL, DeepL API Key or Intiface URL, also in settings profiles and the translation defaults for new chats. She points you to Connections, Settings or Chat Settings instead. This also stops small edits she could make before, such as a connection's prompt preset override. She can still clear those chat values, and her other chat settings edits work as before. On macOS her shell commands can no longer change, create, rename or delete .env files, the encryption key or Git's internal files in her workspace, or rename the workspace folder (#8770). Her mari commands read payload files only from her workspace, and a mari images source outside it, such as a picture in Downloads, is refused: upload the picture in the app or copy it into the workspace first (#8771, #8798).

  • Ask Professor Mari from Search is gone. The Professor button, the pull-down and Ctrl/Cmd+J always open Professor Mari. With that setting off, they used to open the plain search list, and Professor Mari couldn't be reached at all; installs that had it off get her back (#8379).

  • Characters and personas with only expression sprites no longer show as avatars in chats by themselves. To show one, turn on Show this avatar in chats on the 2D Avatars page, which saves its PNGTuber setup in the same step; without a usable setup the switch stays off (#7916).

  • A character's Sprites tab no longer uploads a whole folder, and its Upload Folder button is gone. Click Add sprites, then Upload images, and select the images inside your folder; selected or dropped images are added once you confirm their count with Import in Import images. Images in subfolders aren't included. A persona's Upload Folder still uploads a whole folder (#8851; thanks @DSBwizzard).

  • In Roleplay, the Gallery's Video button now makes a clip of the latest reply, as /video does, instead of animating the newest picture, which could be several messages old. To animate a particular picture, use Animate illustration on it. Thanks to @JamesMowery (#8001).

  • Coloring character names inside Roleplay messages is now set per chat, with Color Character Names in Text in Chat Settings → Characters. The global switch in Settings → General → Text Rules is gone: a chat you haven't changed follows what it was set to, so names look the same until you change a chat. Force Solid Colors for Inline Names stays global, and settings profiles carry the new switch. The Card Theming controls, with the Card CSS mode buttons (Disabled, Exclusive and Chat), moved into Chat Settings → Characters, or Party in Game, and show in every Roleplay chat, not only when a card has its own CSS (#8119, #8302).

  • Roleplay Messages Background Opacity in Settings → Appearance → Roleplay now decides how see-through every Roleplay message box is. Before, a character's or persona's partly transparent message box color, such as one taken from their avatar, and an applied preset's background kept their own transparency, so the slider couldn't make those messages readable over a scene. Preset gradients and cut corners follow the slider too. Saved colors are unchanged, and custom themes and card CSS that set the background still win (#8424).

  • Home bookmarks now show only on the Home tab, and the Other-tab bookmarks (desktop) and Other-tab bookmarks (mobile) switches are gone from Home Widgets → Browser chrome. On phones and tablets in either orientation, and in browser windows under 768 px wide, Home never shows the URL bar or the bookmarks strip; bookmarks open from the bookmark button left of the tabs (#8069).

  • Official agents, including downloadable agents you installed, no longer have Copy in the Agents list or its folders. A copy could only be a prompt-based custom agent without the official agent's built-in functions. Custom agents can still be copied. When you create a custom agent, a notice above Description explains that custom agents can have fewer features than official ones; its X closes it without losing your draft (#8150).

  • Reimport Embedded Lorebook no longer renames the linked lorebook or resets its category or max recursion depth. It replaces the entries, applies the card book's own settings and keeps everything else. Importing and reimporting an embedded lorebook now use the card book's own token budget, so a book that only carries the default of 512, such as one made in Marinara without a budget, imports at 512 instead of 2048 and fits fewer entries. A Marinara lorebook from another install that was global but limited to chats that don't exist here now imports as not global, for all chats, so it no longer joins every chat: add it to the chats you want (#8786).

  • Deleting an Advanced Memory summary saved before v2.0.3 no longer unhides the messages it covered. They stay hidden, as they were before v2.0.3, and you can unhide them by hand. Summaries saved since then still unhide exactly the messages they hid (#8794).

  • When the server runs in a terminal, such as from start.sh, start.bat, the Windows launcher window, Termux or pnpm dev, its console now prints readable lines instead of one JSON object per line, and debug prompts and replies keep their real line breaks instead of showing \n. Request bodies in Decision diagnostics keep their line breaks too. Output sent to a file, a pipe or docker logs stays JSON. To choose the format yourself, set LOG_FORMAT=json to get JSON in a terminal again, or LOG_FORMAT=pretty for readable lines everywhere, and restart Marinara (#8704).

  • In Gacha Forge, the elements now go the other way: Water beats Fire, Fire beats Earth, Earth beats Wind and Wind beats Water, in both kinds of combat, on the Home chart and in the help. Combat Power (CP) is now called Battle Power (BP) everywhere, including sort menus and Recommended BP; saved values don't change. In character chats, Enter adds a new line and only Send sends your message, so a stray Enter can't send a draft early (Marinara-Agents#1719, Marinara-Agents#1735, Marinara-Agents#1754).

  • Gacha Forge asks for at least 8,192 output tokens for everything it writes, including character messages and Formation kits, and for 16,384 plus room for reasoning for chapter plans, Character Story plans, story scenes and event chapters, so its writing is cut off less often. A connection whose context window or Max output tokens override leaves less than 8,192 now gets a clear error before any request is made, instead of quietly writing with a smaller limit (Marinara-Agents#1700, Marinara-Agents#1723).

  • Gacha Forge's pre-forge setting Story and key images is now Story and images. With Backgrounds on and an image connection, it also paints the places each pre-forged scene visits, in main chapters and Character Stories, so a scene no longer waits for its background. Worlds already on this setting with Backgrounds on start painting places ahead after updating, which uses more image requests; choose Story only or Off, or turn Backgrounds off, to stop that. The art paints alongside the text, so the chapter menu opens as soon as the text is written, and it stops before its next paid picture when you cancel, switch the setting or delete the world (Marinara-Agents#1725).

  • Quartermaster bag cards no longer have a × on their image. To remove an image, use the × in the item editor: Delete file removes the picture from every item that uses it, in any chat, and Unlink only detaches it from this chat's item. Image-pack files can't be deleted from Quartermaster (Marinara-Agents#2034; thanks @newfiesledneck).

  • A remote AI, image, voice, speech-to-text or RunPod service can no longer redirect Marinara's requests to your own computer or home network, even with local addresses allowed, as they are on Android. Requests sent straight to a local server you set up, and redirects between your own local servers or between remote services, work as before. The DataCat and JannyAI searches in the Card Browser now stay on their own sites and limit the size of their replies (#8772).

Otome Hearth

  • New Otome Hearth agent: a single-player otome game made from your own characters, in its own Home → Otome Hearth tab. Its love interests remember what you chose and change because of it, wait for you on Home, message you and go on dates with you, and Wish brings their side stories and looks, paid for only with Starlight you earn by playing: there is no real money, banners never expire and nothing runs on stamina. Install it from the Agent Organizer and restart Marinara when it asks. It needs this version of Marinara and one text connection; images, generated music and voices are optional. It installs and plays without Gacha Forge and never touches its saves. On the computer that runs Marinara it works as it is. A phone, a tablet or another computer that signed in with Marinara's login can play it too; installing or updating it there still needs the admin secret (Marinara-Agents#1790, Marinara-Agents#1812, Marinara-Agents#1844, #8829).

  • Setting up an Otome Hearth story takes six steps: a premise, or Surprise me, with the language and how it's written; the persona you play, with pronouns, traits and a goal of your own; two to five love interests of any gender, from your character cards or six original archetypes; content settings; connections; and a review of what forging will cost before Forge our story. Forging writes the world's central mystery and a hidden bible for each love interest, always 18 or over, with their wound, mask, flaws, red lines, voice and secrets that come out stage by stage. A card stays canon, and the bibles sit behind Show spoilers, where you can edit them. The world, and every arc and chapter planned in it, keeps your premise's genre, era and technology; only a mini AU extra story leaves them, on purpose. Each story has its own Heat (SFW by default, NSFW: Fade or NSFW: Explicit), Darkness (Gentle, Angst by default, or Dark romance), Lines & Veils and image rating, and NSFW Heat, Dark romance and image ratings above SFW unlock after a one-time 18+ confirmation (Marinara-Agents#1793, Marinara-Agents#2115).

  • Each Otome Hearth main chapter is led by one love interest, picked from two, and builds through six to nine scenes, each written when you reach it, to one climax: a Confrontation or a warm Closer. In a Closer, over three rounds the love interest offers something of themselves and you answer with Reassure, Tease, Mirror (share something of your own) or Ask. It ends with them letting you in (the first time is a first on your Love Timeline), Almost (nothing changes) or with them shutting you out, and after two main chapters end the same way, the next ends with the other. Your first choice in a scene is canon, and replaying shows the other branches without changing anything; Rewrite writes a scene again before you choose, and Ease off ends one at once, with no model call. Each love interest moves through six stages from Mask to Bond, and a free route chapter opens at set affection levels. A walkout can leave a rift that shuts their route until Make it right repairs it. Reading pays Starlight (Marinara-Agents#1800, Marinara-Agents#1808, Marinara-Agents#1943).

  • In Otome Hearth, Begin plays a prologue before chapter 1: one short scene of your protagonist's own life just before the story opens, with no love interest in it, and Skip goes straight Home. The story is then told in arcs. Each arc plans 8 to 12 chapters with a goal, a big event at its end and the mystery's reveals set in particular chapters, so the question the story opens with gets answered. The Story screen shows where you are, such as "Arc The drowned bell · chapter 4 of 10", and the chapter list groups chapters under their arc. When an arc closes you choose how the story goes on: Take a breath for a few quiet chapters away from the plot, marked A quiet stretch; Go on with the story for a new arc with a new threat and a new question; or Meet someone new, which brings one of your character cards, or someone invented for the story, into the cast, up to five love interests. Some chapters close on a judgment you may get wrong, such as solving the mystery, naming a traitor or deciding whom to believe: the true answer is always among the options, and what you pick is what happens (Marinara-Agents#1846, Marinara-Agents#1985, Marinara-Agents#1991, Marinara-Agents#2053).

  • Otome Hearth chapters vary how they are built and how they end, and make room for other people, scenes without a love interest, ordinary moments and rest after a long day. Your protagonist knows only what the story has shown them, so love interests don't talk as if you already know their past, their habits or the words of their world, and a story set in an existing world, such as Teyvat from Genshin Impact, keeps that world's canon. After something that matters, such as a first kiss or a quarrel, your protagonist sits with it in their own thoughts before the story moves on, and scenes write what they feel in their body, not only what happens. Romance is a slow burn: no one says what they feel before relationship stage 5, and at stage 6 they say it at the first moment a scene allows. Love interests can be genuinely evil, monsters or villains as dark as the story's Darkness allows, and taming them is the point: falling for you doesn't make them good at once, and with the default Angst a love interest can be ruthless with everyone else but never threatens or harms you. With two or more love interests from stage 3 on, they can share an intimate scene with you where the story fits, as far as Heat allows (Marinara-Agents#1924, Marinara-Agents#1950, Marinara-Agents#1956, Marinara-Agents#1959, Marinara-Agents#1961, Marinara-Agents#1979, Marinara-Agents#2055, Marinara-Agents#2090, Marinara-Agents#2098).

  • Your persona's whole Description, Personality, Backstory and Appearance reach every Otome Hearth prompt that writes the story or a character's words, and are read again when you open a story and before each chapter, scene, route and date, so changes to the persona carry over. Your protagonist's dialogue, thoughts and choices follow that persona; its scenario, greetings and example dialogue stay out. How it's written, in setup and Settings → Content, holds your own instructions, such as tense, point of view and pacing, for every scene, message and note, and Banned phrases there lists words and phrases you never want to read, so the world and every love interest are written without them from the start (Marinara-Agents#1846, Marinara-Agents#1880, Marinara-Agents#1902, Marinara-Agents#1959, Marinara-Agents#1979).

  • Affection in Otome Hearth never falls below the start of the highest level you have reached, so an unlocked level is never lost. A hostile choice the first time you play a scene or date, a Confrontation walkout or being shut out of a Closer costs 15 affection with each love interest it hurts, and replaying never takes affection again. From chapter 4 on, when two to four love interests in a chapter really disagree, Side with one of them gives +30 affection with the one you back and −10 with each of the others, at most once every four main chapters. Level 2 takes 200 affection and each level after it 50 more, up to 600 for level 10, and Story → Between you shows the points toward the next one. Past level 10, every 300 more affection earns a prestige point, shown with three pips under Prestige, and three points unlock an extra story with that love interest through A new story with {name}: a what-if such as a wedding, a family or a honeymoon, a mini AU such as a vampire or modern-day story, or new kinks when NSFW is on. Choices in them change nothing, they never become part of the main story, and losing affection never takes back a story you unlocked (Marinara-Agents#1897, Marinara-Agents#1924, Marinara-Agents#2033, Marinara-Agents#2055, Marinara-Agents#2106).

  • Otome Hearth's NSFW modes (NSFW Heat or Dark romance, behind the 18+ confirmation) write romance without stopping to ask: love interests may make the first move and never pause to check in or offer to stop, sex included, and Ease off stays your stop. Crude words, swearing and dirty talk are fine wherever they fit a character's voice. NSFW: Explicit writes sex on the page in full and unhurried, from the build-up to the aftermath, with the characters talking through it, and such a scene may run longer than others. Each new love interest's bible gets their own tastes, kinks included, listed as Into and Drawn to in the spoiler-gated bible where you can edit them, and a love interest from an older cast gets Add intimacy preferences in Your cast (1 Planning call). An optional Sub, Dom or Switch role for your protagonist sits beside Heat in setup and Settings → Content. Your Lines and Veils always win, and story memory keeps an NSFW story as it was written, recording a Veil only as having happened off the page. SFW stories never write or send any of it, though characters may still swear when it fits (Marinara-Agents#1827, Marinara-Agents#1937, Marinara-Agents#1942, Marinara-Agents#1959).

  • Otome Hearth remembers the whole story. Each chapter is summarized once, in up to 1,000 words with its key lines and every choice you made, and every story prompt carries the timeline of those summaries, retold in about 5,000 words once it grows past about 14,000 tokens, along with the previous chapter in full as you played it and a few recent small memories such as messages, Snapshots, Read Me and dates. A love interest's route chapters and Character Stories are in the timeline as private, so they remember them and the others act only on what they saw; a date reaches only its own love interest. Another love interest may appear in a Character Story when it truly calls for it, as themselves; one who speaks in it remembers it too, and its summary says which parts they were there for. A summary that fails shows a banner on every screen of the story with what the connection said, Retry the summary and Change connection, instead of failing silently. Retry the summary tries again at once, and the banner comes back only if the summary fails again. A model that reports no context size, such as Marinara's Local Model, can write the summaries, and one too small for them says so. Retelling the timeline leaves thinking models such as Claude Opus 5.5 enough room for their reasoning (Marinara-Agents#2042, Marinara-Agents#2072, Marinara-Agents#2076, Marinara-Agents#2079, Marinara-Agents#2083, Marinara-Agents#2100, Marinara-Agents#2102, Marinara-Agents#2115).

  • Otome Hearth shows the cost of every paid image, voice and music action before it spends anything, its guide has a table of what each action costs, and images, music and voices never retry without a tap. It costs less on providers with prompt caching: a chapter's plan, scenes and climax share one story context, made of the rules, the world, the protagonist, the arc, the timeline and the previous chapter, which stays cached for an hour with this version of Marinara, so reading slowly doesn't mean paying to cache it again. Story prompts don't grow with the model's context window: the timeline and recalled memories together stay within about 20,000 tokens. Otome Hearth sends only the reply length, so your connection's own temperature, reasoning effort and other settings apply, and setup and Settings → Connections warn when a story connection has a context window under 32,000 tokens (Marinara-Agents#1844, Marinara-Agents#2072, Marinara-Agents#2076, Marinara-Agents#2092, Marinara-Agents#2093).

  • Otome Hearth's Home shows the love interest you pick, or you with Me, cut out over your newest key moment with them or a painted place and tinted by your time of day. Each love interest leaves a handwritten message of the day, curt during a rift, and Reply opens their thread with the note quoted. Tapping their head, hand or heart plays a line written ahead in their own voice, and Rough day? offers comfort, both with no model call. In Messages, each love interest has a private thread, written in whatever carries messages in your world, and Close and remember saves the conversation as a memory only they recall, shows "Remembered by {name}" with the line they keep, and earns 5 affection. With images on, your protagonist has five chibi stickers painted from their look and each love interest has nine, one unlocked at each affection level from 2 to 10; love interests send stickers too, and the Album's Stickers tab shows them all. Love interests who message you each day in Settings → Connections, from 0 to 24 and off by default, sets how many of the love interests you've met may write to you first each day (Marinara-Agents#1812, Marinara-Agents#1846, Marinara-Agents#2059, Marinara-Agents#2076, Marinara-Agents#2079).

  • Dates in Otome Hearth is where you spend time with one love interest at a time. Read Them has you pick what they really feel behind five lines and faces, and the tells you learn reach later scenes. Read Me turns it around: they make four guesses about you, from what you want right now to your likes, fears and memories, you answer Spot on, Close or Not at all, and every answer goes into that love interest's notebook of what they know about you, which reaches only their own scenes, notes, messages and dates; you can read it, rewrite your words or delete an entry from Read Me, and guesses never touch your health, medication or cycle. Date Night lets you pick a place, including ones your story painted, and what you both wear, from any look you own and have painted in the Wardrobe, then plays three scenes of choices judged by what they like, with an optional keepsake picture; during a rift it becomes Make it right. Photo Shoot paints one photo of you two from a place, outfits, an expression and a pose for each of you, including shared poses such as a kiss, a hug or a piggyback ride, with no model call; photos go to the Album's Photos tab, and the newest is taped to that love interest's note on Home. The Claw Machine makes no model or image call: take turns at a swinging claw, cheer until they cheat in their own way, and fill a shelf with six series plushies and one of each love interest, as the animal that fits them, in their colours. Every activity pays even when it goes badly, and only the day's rewards are capped (400 Starlight from activities and 300 affection per love interest), never play (Marinara-Agents#1828, Marinara-Agents#1946, Marinara-Agents#1957, Marinara-Agents#1966, Marinara-Agents#2088, Marinara-Agents#2096).

  • A Wish in Otome Hearth costs 100 Starlight, or 1,000 for ten, and a new story starts with 2,000. Every 14 days, opening Wish makes three banners: Memories, a love interest's wardrobe and yours. The first rotation each month is seasonal, such as Halloween in October and Christmas in December, in a version that fits your world. Past banners wait in Echoes on the same pity. A Memory (5★) is a key image, a short Character Story and a voiced line, a Moment (4★) is one playable scene with its own illustration, a look is a complete outfit, and a Snapshot (3★) is a short illustrated vignette that only its love interest remembers. The pity count is exact and shown, such as "5★ in 23": a 5★ starts at 1.5% a wish, rises from the 46th wish without one and is certain on the 60th, every 10th wish is at least a 4★, and the 5★ is always the featured item. A wish never calls a model, a duplicate refunds Starlight, and each item's picture is painted the first time you open it. Memories banners follow the story's Heat; looks and the pictures of Moments and Snapshots always stay clothed, and a Memory's art is explicit only under NSFW: Explicit with the Explicit image rating. At affection 10 each love interest gives you a Memory Selector to claim one of their past Memories for free (Marinara-Agents#1827, Marinara-Agents#1894, Marinara-Agents#1932, Marinara-Agents#1952, Marinara-Agents#1973).

  • Otome Hearth's Wardrobe keeps your looks and your love interests', shown without their painted backdrop while the original paintings stay saved. Wear at home puts a look on Home, Show off shows a love interest one of your looks and earns 5 affection, the love interest on Home notices when you wear something new, and your featured look and theirs from the same fortnight make a couple set with an optional pair portrait. The story knows the look you wear, from Wear at home or a date, as it knows a love interest's. Each 5★ look comes with a first-wear scene under Read the first-wear scene, and yours is played with the love interest of its couple set, the only one who remembers it. The Album keeps the CGs you have seen, newest first, your Memories (filtered by All, 3★, 4★ or 5★, with unplayed ones first), the Love Timeline, the tells you have learned, your favourite lines and the Soundtrack, which lists each begun chapter's theme after the six mood tracks, and saves pictures through Marinara's own download. The Love Timeline lists each stage and first with a love interest and every Snapshot, Moment and Memory on the day you won it, and each opens from there (Marinara-Agents#1827, Marinara-Agents#1891, Marinara-Agents#1894, Marinara-Agents#1948, Marinara-Agents#2074, Marinara-Agents#2096, Marinara-Agents#2115).

  • With an image connection, Otome Hearth paints the cast's looks when you tap Paint the cast, each place once, key moments that join the Album once you've seen them, and five faces per love interest (tender, flustered, cold, hurt and angry) that follow each line. Characters are painted on a bright backdrop that Marinara's free sprite cleanup removes, so they stand on every screen without one. Image style puts your own style words at the front of every image prompt, and Image prompt style picks which Marinara image style profile the pictures follow, each listed with whether it writes sentences or tags. Pictures of two or more people send one labelled picture of each person and say how many people to draw, for fewer extra arms, legs and fingers. A place's background is prepared before its lines begin, with Continue without background to read while it paints, a place you return to reuses its saved picture, and a scene written ahead paints its key image straight away. Nothing is repainted without a tap, Ask before painting and Marinara's prompt review apply to every picture, and the Suggestive image rating is a ceiling, not an instruction: neutral portraits and face edits stay neutral (Marinara-Agents#1808, Marinara-Agents#1844, Marinara-Agents#1849, Marinara-Agents#1873, Marinara-Agents#1891, Marinara-Agents#1902, Marinara-Agents#1924, Marinara-Agents#1966, Marinara-Agents#2001, Marinara-Agents#2005, Marinara-Agents#2096).

  • In Otome Hearth's Your cast (Settings → Stories → Open your cast), Repaint paints a love interest's look again, and Repaint expressions replaces the five faces for the look they wear, after one review of all five prompts when prompt review is on; the current faces stay until the new ones are ready. Image appearance, above each love interest's spoiler bible, changes how they look in future pictures and scenes without repainting anything, and clearing it goes back to the bible's description. Character card links a love interest to one of your character cards, so its voice and pictures are used, its Full Body → Neutral sprite first, while their story, progress and pictures stay; No linked card removes the link. Each love interest's name plate and glow take a colour from their look, and no two in a cast match. Pictures of your persona always use its current Appearance, or its Image Appearance Override when that is on. Open your stories switches, starts or deletes a story (Marinara-Agents#1849, Marinara-Agents#1862, Marinara-Agents#1867, Marinara-Agents#1877, Marinara-Agents#1924, Marinara-Agents#1966, Marinara-Agents#1971).

  • Otome Hearth plays fully without an image connection. Image description in Your cast, Who's home and owned Wardrobe looks shows how a character or look is meant to appear without opening bible spoilers, and the story header shows the place's description, or a key moment's brief, while that picture is missing. When you add an image connection later in Settings → Images, saving paints nothing, and a place or key moment you have reached without a picture offers Paint with its cost and the usual prompt review. When someone outside your love interests speaks, the previous character leaves the stage, and if exactly one of your character cards has that name, its Full Body sprite stands in once it passes a background check or Marinara's free cleanup; otherwise the stage stays empty (Marinara-Agents#1882, Marinara-Agents#1897, Marinara-Agents#1911, Marinara-Agents#1932, Marinara-Agents#1942).

  • Music in Otome Hearth follows each scene's mood, from Marinara's own library or tracks written for the world, and dialogue is voiced with each card's assigned voice or a default one, while narration and thoughts stay silent. With Generate music on, Settings → Audio → Generate a theme for each chapter (off by default) gives every chapter its own instrumental theme, made after you start reading and reused on replay. With Generate music off, Music folder plays the tracks of one of your Assets music folders instead of the mood library (Marinara-Agents#1808, Marinara-Agents#1878, Marinara-Agents#1924).

  • Remind Me, on Otome Hearth's Home, shows a month at a time: each love interest's birthday, the day your story began, the firsts on your Love Timeline, the last day of each running banner, and your own birthday if you add it, which stays on this device. Settings → Tracker has an optional period tracker, for anyone who has periods. It is off by default and kept only in this browser: logged days show as filled hearts, predicted ones as outlined hearts, and it never calls a period late. An export moves it to another device, and Delete all cycle data removes it in one click. On a tracked day, Caring message has the love interest on Home write you a note from one line about today; the history never reaches a prompt. With Keep it off the model, or while any debug logging is on, a comfort line written ahead answers instead and nothing is sent. Love interests comfort you and never diagnose (Marinara-Agents#1829).

  • While Otome Hearth plans a chapter, What happened so far… shows the story so far to scroll through, told as a recollection of the timeline. While a scene is being written, Play Who said what? starts a small game: match lines from the story to the love interest who said them, with a running tally. It makes no model calls and goes away when the scene is ready (Marinara-Agents#2043, Marinara-Agents#2050).

  • In Otome Hearth's reader, a love interest's sprite leaves the stage when they leave the scene, a 5★ look's first-wear scene shows them in that look, and on a wide screen scene art shows whole, framed by a blurred copy of itself. On desktop, Full screen fills the Home panel across every screen, the reader and Wish included, keeping your draft and reading position. On phones, chapter cut-outs continue behind the dialogue panel, the three-dot button opens Auto, Skip, Hide, Backlog, Rewrite and Ease off beside the mute and fullscreen buttons, and Settings' categories scroll in one row. It plays by keyboard with visible focus and follows Marinara's Reduce Ambient Animations & Effects: stars, parallax, typing text and frosted glass stop, while the Claw Machine's game feedback still plays (Marinara-Agents#1844, Marinara-Agents#1858, Marinara-Agents#1865, Marinara-Agents#1869, Marinara-Agents#1888, Marinara-Agents#1924, Marinara-Agents#1928, Marinara-Agents#1942, Marinara-Agents#2023, Marinara-Agents#2027, Marinara-Agents#2037, Marinara-Agents#2052, Marinara-Agents#2098).

Connections

  • The Connections panel is organized by account. An account is one key, sign-in or address for a provider, and the models you save from it sit under it, with badges for their job, Custom settings, price or Plan. Add opens Add account, with providers grouped by kind (Chat, Decisions, Images & video and Voice) and a search box: paste the key and select Connect, and Marinara tests it, says why when it fails and offers Continue anyway for servers on your computer. Adding your first account goes on to picking a model, with Make … my Main model. The Jobs box (formerly Defaults) shows which model does each job, such as Main for chat replies or Images, and each job's row opens its model, fallback and settings. An account's ⋯ menu has Edit account, Replace key, Test, Add model, Select models, Duplicate, Turn off and Delete account, which first lists the jobs, chats and agents still using it, and a model's menu adds Move to account…, Folder, Add to Shuffle and Change picture. Accounts fold, Show only Off or Needs key finds the ones to fix, and exports still never include keys (#8456).

  • Every model picker now has two panes: Starred and your accounts on the left, the models of the one you pick on the right. That covers the link button in the chat's message box, the phone Quick Switcher, Chat Settings, Professor Mari's message box and every job field in Connections. A strip at the top shows the current model, whether it is for this chat only or follows Main, and Use default. One search box searches the chosen account, or every account from Starred, with a link to widen the search to all accounts. An account lists its starred models first, then All models with a refresh button. The picker opens on Starred; a job picker with nothing starred for that job opens on the current pick's account and lists only accounts the job can use. On a phone it shows one pane at a time, and All connections goes back to the account list (#8677, #8684, #8840).

  • In the Connections Jobs list, a job whose account is off or needs a key shows one small fix button, ⚠ Turn on or ⚠ Add key, so the job name stays readable in a narrow sidebar, and amber is kept for real problems such as ⚠ No model. The optional built-in model shows a grey Set up and Not downloaded instead of a warning, and the Built-in model row below the Jobs box offers Download until the model is on your device. A plan multiplier such as ×2 is grey like Paid. Cloud voices such as ElevenLabs stay on the Voice job instead of showing under On this device, which lists only PocketTTS, a voice job that shows Off has its Turn on button, and Add models on an ElevenLabs account opens its model picker and default voice (#8666, #8678, #8683, #8686, #8845).

  • When you add or edit an account, the address and key fields check themselves a moment after you stop typing or paste, and show a spinner, a green check, a warning or an error, with Check again when a check fails. A wrong address or a mistyped key shows up before you save, and a check saves nothing. A changed address is checked without your saved key, so a half-typed address never receives it, and a server that doesn't answer is reported as not answering instead of as an error code. The Add and Edit windows share one layout: one header, the key first for cloud services, with their address under More options, which opens when the address check warns, and the address first for a local server. Edit lists access, models, Usage and balance and More options in that order, with Delete, Cancel and Save always visible at the bottom. Accounts without a live check, such as image, voice and subscription sign-ins, keep the Test row (#8764).

  • When you update, NanoGPT connections whose embedding address is on api.nano-gpt.com join their NanoGPT account like the others, so the account lists their models in the model picker; an embedding address on another site still keeps a connection out of its account, so its key isn't sent to another host. Deleting a model, unstarring it or moving it to another service waits for chat settings that are still saving, so a chat keeps its model pick. A chat whose pick was the deleted model keeps that model through another entry of the same connection when there is one, and otherwise shows the notice that its model was deleted. A copy of a connection that is still waiting for import review, including one made by splitting models off it, stays under review, and its models can't send chat text until its address or key is saved on this install (#8674, #8780).

  • New Music & Sound Effects connections make instrumental music and sound effects, separately from character voices, with ElevenLabs, SunoAPI or a Custom compatible server, such as an OpenAI-compatible audio server that answers in Prompt JSON → MP3 audio or Chat Completions → inline audio (ACE-Step compatible) format. Each has its own Music model and Sound-effect model, Music generation and Sound-effect generation switches, and its own job and fallback in the Connections Jobs box. Game Mode uses one for generated scene music and sounds, Roleplay's [sound: description] command uses one once Sound effects is on in its command settings, and downloadable agents such as Gacha Forge can use them too. ElevenLabs offers Eleven Music v2.5, and its sound effects get a length that fits each cue instead of always 5 seconds. Generate test music on a saved connection makes and plays one short instrumental track, a paid request Marinara never repeats on its own, explains a wrong key or a missing permission, and no longer leaves its sample in the Music DJ's library. SunoAPI music needs a public HTTPS callback address that you provide, and bundled Game audio still plays with generation off. Add account has no tile for these connections yet: you get one when you update from an Audio connection that made Game music or sound effects, when you turn on Game music or Game sound effects on an ElevenLabs voice connection and save it, or by importing one with Import a backup in Connections (#8027, #8167, #8214, #8223, #8227, #8754, #8790).

  • Claude (Subscription) connections with Extended token caching (1 hour) on work again. In 2.5.1 every request failed with "A maximum of 4 blocks with cache_control may be provided. Found 5." Claude now reads the earlier chat history from its cache with the setting on or off. Thanks to @stonebystone (#7926).

  • When a connection with an If it fails fallback breaks off partway through a streamed reply, tool rounds, Professor Mari, agents and packages now get the first connection's error instead of its partial text with the fallback's whole reply added after it. Steps that stream only to show progress, such as Game setup, session conclusions, campaign progression and Lorebook Keeper, still switch to the fallback. Packages such as Otome Hearth, Gacha Forge and Long-Term Memory get an error when the stream breaks, so they no longer save a cut-off scene or memory as finished. Replies from OpenAI-compatible servers that ignore streaming and answer all at once no longer come back empty (#8778).

  • Models that aren't on Marinara's model list, such as ones behind a proxy or gateway, now receive the tools that Professor Mari, Game Mode and agents ask for, instead of answering in plain text, and an endpoint that refuses tools says so. Endpoints that refuse tool results in the history, such as LinkAPI serving Claude through an OpenAI connection, get the earlier tool rounds retold as text, so the second tool round no longer fails with Unexpected role "tool". Marinara remembers this for that endpoint and model for an hour (#8576, #8585).

  • A Claude model with thinking on, reached through an OpenAI-compatible endpoint or proxy, no longer fails with a 400 error on the round after a tool call, such as a Game Mode dice roll. Marinara now sends back only Claude's signed thinking, retells a tool round that has no text as plain text, and drops empty replies from the history. If such an endpoint still refuses with an Anthropic error, Marinara retries once in that shape, even when the model's name doesn't say Claude. A 400 from a Chat Completions endpoint now logs the provider's answer and the shape of the request, without its text, and debug mode shows the retried prompt (#8165, #8172, #8188).

  • Gemini 3 models no longer fail with a 400 about a missing thought signature on the round after a tool call, on a Google connection or an OpenAI-compatible one. Marinara sends each call's thought signature back, and when a gateway drops it, sends Google's documented placeholder instead. If Gemini still refuses, the error shows the provider's message and no longer tells you to turn on a setting that doesn't exist (#8262, #8270).

  • Custom OpenAI-compatible connections, such as LiteLLM, new-api or one-api, now send the reasoning effort you pick for Claude, Gemini, DeepSeek, Qwen and similar reasoning models; outside OpenAI's models, xhigh and max are sent as high. If the gateway refuses the setting, the request is sent once more without it, and an effort you set in Custom Parameters is left alone (#8389).

  • Requests from a chat to OpenAI's own API and to OpenAI (ChatGPT) now carry a cache key for that chat, so turns that start the same way reuse OpenAI's prompt cache and cost less input. The key is a hash, so the chat's ID never leaves your server, and other OpenAI-compatible endpoints don't get one. Debug mode also logs the provider's token usage (#8276).

  • Test embedding in a connection's Semantic search (embeddings) section checks the embedding model before you vectorize a lorebook. It saves your edits first and shows the result in place, such as "Success · 1536 dimensions · 210 ms", or the provider's error. The embeddings job's test now uses the connection's Embedding endpoint URL and Embedding provider, as semantic search does, so it no longer passes while search fails or the other way round, and a connection with no embedding model says so (#8667).

  • If one GPU runs both your local text model and your local image or video backend, such as llama-swap with llama.cpp and ComfyUI, list that server in MARINARA_SHARED_GPU_HOSTS (comma-separated host:port) and text and media requests take turns instead of fighting over it. Requests of one kind run together, neither kind can hold the other back forever, and the GPU swaps once per turn. A picture or clip waits at most MARINARA_MEDIA_GENERATION_WAIT_TIMEOUT_MS for its turn, 10 minutes by default, and changes in .env apply without a restart. A ComfyUI video that waits behind a render queue no longer fails after five minutes; it gets the VIDEO_GEN_TIMEOUT limit. A selfie whose prompt comes back empty now says so instead of ending without a word. Thanks to @JamesMowery (#8018).

  • ToAPIs works for pictures and video through the existing connection types: choose Image Generation → OpenAI (DALL-E) or Video Generation → Seedance 2.0 with https://toapis.com/v1 or https://toapis.cn/v1, your API key and a model ID you type, such as gpt-image-2 or seedance-2-mini. Text keeps working through Custom (OAI-Compatible). Pictures are one 1k image with at most one reference, at 1:1, 16:9, 9:16, 3:2 or 2:3; videos are 4 seconds at 480p and 16:9, without sound, from text or one first frame. Settings it can't do are refused before you pay for a task, and once a paid task may exist, a failure never buys a replacement through a fallback connection. Noodle and Slurp follow this from Noodle 1.5.9 and Slurp 0.3.53 (#7941).

  • Featherless works on a Custom (OpenAI-compatible) connection: Fetch Models, the connection test and chat replies no longer fail with 404: Gone. Marinara now names itself as MarinaraEngine/<version> on requests to AI providers that don't set their own User-Agent (#8357, #8358).

  • On Apple Silicon Macs, the Local Model's MLX runtime is updated to MLX 0.32.4 and mlx-lm 0.32.2. An existing MLX setup now updates in place instead of failing, and your downloaded models stay. Test no longer reports an empty reply when the model spends its short test on hidden thinking (#8139).

  • Reopening a saved Seedance video connection keeps its video defaults and Upload Seedance reference frames temporarily as you saved them, instead of showing them cleared. With that upload off, an original PNG or JPEG picture from the Global Gallery is sent to Seedance as a link on your public HTTPS address when one is set (#8257).

  • Reopening a saved NovelAI, ComfyUI or Automatic1111 image connection keeps its generation setup, such as its seed, as you saved it, instead of showing the defaults (#8869).

  • A text-only llama.cpp server that answers a lorebook's reference images with an "image input is not supported" server error now gets the reply asked again without the images, as other providers already did, instead of the whole reply failing. The lorebook text and captions still go along, with the usual skipped-image notice (#8484).

  • Refreshing the model list of an Arli AI image account lists its image models instead of its chat models (#8364).

  • In Connections, drag a model row onto an account card, or long-press it on a touch screen, to move it. On an account of the same service it moves at once; on another service it opens Move to account with that account chosen. Move to account… is greyed out in a model's menu, with the reason, when the model has nowhere to go, such as a model that uses another account's key, or an image, video or subscription model that is alone on its account and has no other account of its service to move to. The Starred tab of the model picker has Edit order to put your starred models in the order you like (#8822).

  • On desktop, the model menu you open from the chat's message box has a solid background, so a busy chat background no longer shows through its text in dark or light theme. With Apply preset colors on, the chat's color still tints it (#8833, #8842).

  • In Add account and the connection editor, picking a model that its service lists without a context size, such as Claude Opus 5.5 on Claude (Subscription), now sets the context Marinara knows for that model, 1M for Opus 5.5, instead of leaving Max context window at its earlier value, such as 128K. Custom connections don't get this. The connection editor also no longer shows Max output: 0 for a model whose output limit isn't known (#8846).

Saucelings

  • New Saucelings agent: a Tamagotchi-style pet in Home → Saucelings and on the Home widget grid. Install it from the Agent Organizer, restart Marinara when asked, and pick one of your characters to look after an egg. The caretaker brings an egg that suits their personality, then feeds, plays with and cuddles the sauceling on their own schedule, guided by a care profile read from their card, and when you open Home they tell you in their own words what they did. You cover the gaps they missed, and a hungry sauceling stops growing. Saucelings has five tabs: Nook, Journal, Album, Menagerie and Settings, and every text and image request goes through your own connections (Marinara-Agents#1756, Marinara-Agents#1764, Marinara-Agents#1775, Marinara-Agents#1908).

  • In Saucelings, how you and the caretaker look after a pasta sauceling shifts its sauce temperament from Marinara to one of six others, and other kinds take after whoever found their egg. Some eggs turn up only at certain times of year, special eggs are earned by caring well over time, and a happy sauceling close to its caretaker may be offered a new look in Evolve…. The Nook is a pixel-art stage where the sauceling walks, hops and naps and comes over when you tap; the caretaker stands beside it with their sprites or, with image generation on, a painted pixel figure, and you can upload or generate backgrounds. The large Home widget shows the Nook's stage with Feed and Play buttons. Elders retire to the Menagerie and can come back later, the Album keeps optional paintings, and with Egg hunting on, the default, a character replying to you in a chat may find an egg invented from their card, at most once a day. You can take one new egg a day (Marinara-Agents#1756, Marinara-Agents#1764, Marinara-Agents#1775, Marinara-Agents#1908).

Story Writer

  • New Story Writer agent: a co-writing book for long stories and fanfiction. Install it from the Agent Organizer, restart Marinara when asked, and open Home → Story Writer. Pick a connection and the characters, personas and lorebooks, describe the story, and Write next chapter writes it onto the page, streaming or all at once. The book is an open antique book on a wooden desk that turns its pages, or an e-book reader, in light or dark mode with your choice of font, color and size, and it shows Markdown such as italics, bold and *** scene breaks. Click anywhere on the page to edit, including an empty page to start the story or a chapter yourself, and Write carries on from there. A sticky Author's note in a top corner holds your instructions for the next chapter and, like Roleplay's Author's Notes, goes in at a depth you choose. It needs this version of Marinara (Marinara-Agents#1704).

  • Story Writer's sidebar opens from the arrow tab at the left or right edge. It holds your stories; the story's details, such as overview, fandom, genre, rating, relationships, warnings, tags, author and narration style, language and notes; cast and world; writing settings, with the connection, chapter length, a story length target, chapter titles, the continue message, the prompt and banned phrases; and author tools: chapter summaries, keeping the last chapters in full, auto-summarize, and a timeline the model follows and can update after each chapter. Edit connection opens the connection editor, and closing it brings you back to Story Writer. Stories save on the server, and you can duplicate or delete them or download them as Markdown or plain text; Save now or Ctrl/Cmd+S saves at once. Buttons stop, continue, rewrite after a confirm or finish the last chapter, and a word count shows progress toward your target. Leaving while a chapter is being written, for example by reloading or closing the tab, stops the generation, so the provider doesn't keep writing, and billing, for nobody. With Debug mode on, its prompts and replies are logged like other generations. A phone shows one page upright and the two-page spread sideways (#8341, Marinara-Agents#1704, Marinara-Agents#1716).

Agent Organizer and agents

  • Download Agents is now the Agent Organizer, a store for agents. Home shows featured agents, such as Otome Hearth, Long-Term Memory and 2D Avatars, starter kits that bring together agents for one kind of play, and a shelf for each section, such as Apps, Chat games, Writing help and Trackers. Updates lists installed agents with a newer version, Installed lists everything you have with its version and size, and Not installed lists every agent you don't have yet, for the chat mode you filter by. Every agent has its own page with its logo, banner, tagline, screenshots and How to use it steps. Get installs it, Uninstall is in its ⋯ menu, and the ⋯ menu by the title has Update all, Install all, Refresh catalog and Uninstall all. In the update window, clear the box of an update to skip it; each row then shows Updated or Failed with Retry, and Restart now when one needs it. Downloaded agents show their store logo in Agents, and an agent's settings page uses its banner as the header (#8494, #8862, Marinara-Agents#1921, Marinara-Agents#1926).

  • The agent update dialog keeps What's new closed until you open it, even with only one update. Update all in the Agent Organizer opens its Updates page and updates agents one at a time, with Waiting, Updating…, Updated or Failed on each row, like the update dialog. A failed row shows its error and Retry, and updated rows stay listed until you leave the page. When an agent has an update, its Update button sits in the agent page's header beside Refresh, on phones too (#8249, #8517, #8522).

  • Agent settings pages share one header with the store banner, logo, name, author and version, and the page's buttons. On a phone it shrinks to one row once you scroll down and grows back at the top, and on wide screens the banner sits centered over the form with soft edges. Downloaded agents without their own settings page get the same header, with an Active switch for the open chat and Manage package, and packages can ask the Engine to draw it and add their own buttons (Capability API 1.390). Get and Update are filled buttons, and the store page drops its menu, which only offered the page you were on. The Agent Organizer and agent pages fit a phone's width without sideways scrolling (#8501, #8549, #8575, #8594).

  • With no chat open, the Agents sidebar groups agents into the Agent Organizer's sections, such as Memory & lore, Writing help, Trackers and Pictures & sound, each with a small icon, instead of Writing, Tracker and Misc agents. In a Roleplay chat, each agent in the Agents panel's In this chat list has a sliders button beside its check mark that opens Chat Settings at that agent's options for this chat; custom agents open the shared custom agents options, and agents without options of their own open the Agents section (#8540, #8546).

  • The Conversation, Roleplay and Game filters in the Agents list now show only agents that work in that mode, so Roleplay-only agents no longer appear under Conversation or Game. Agents for several modes show under each of them, standalone apps show only under All, and the filters work together with search and inside folders (#8150, #8218).

  • A writing, tracking or custom agent can have its own reference lorebook in a chat. In Chat Settings → Agents, open the agent's settings, turn on Attach lorebook for the specific agent and choose a book under Reference lorebook. Its entries trigger by the usual rules and budgets and go only to that agent in this chat, retries included, not to the main reply or to other agents, though agents running together may see them too. The choice doesn't change the agent anywhere else. World Maps has the same choice in Roleplay and Game chats: its triggered entries reach map creation, replacement, expansion and prompt previews, alongside the lore sources you pick in the map builder, and it stops before calling the model when the lorebook makes a map request too long. That World Maps version needs this version of Marinara; an older Marinara keeps the version you have (#8153, Marinara-Agents#1604, Marinara-Agents#1614).

  • Duplicating an installed agent now makes a custom agent with all its current settings, default tools and prompts, including ones you never changed, and Music DJ's chosen provider prompt (#8097).

  • Home packages such as Gacha Forge can now expand to fill Marinara's content area. Gacha Forge's fullscreen button beside Settings does this: Home's tabs, address and bookmarks hide while Marinara's top bar stays, and they come back when you close or leave the package, switch to another browser tab or the package fails. It works on iPhone Safari, which can't use browser fullscreen. In Gacha Forge, every screen then fills the available width and height instead of a fixed 16:9 frame, and an unfinished world draft is kept while you switch (Capability API 1.376) (#8123, Marinara-Agents#1592).

  • Noodle, Conversation Calls and Slurp no longer log "Could not auto-create .env file" at startup or leave an empty .env file in Marinara's packages folder. Downloadable agents now read the same .env as Marinara, with no agent update needed (#8669).

  • Downloaded agents such as World Maps and Slurp no longer fail to turn on with an innerType error on installs that keep their dependencies in a shared folder or use a data folder outside the Marinara folder. An agent turned off by that error starts again after updating, with its version, settings and data kept, and when part of Marinara itself is missing, the error says so instead of blaming the agent or rolling it back (#8394).

  • Agent package screens can no longer be broken by HTML in a chat message or card that is on screen when they load. Before, such HTML could stop them working until a reload (#8788).

  • Typing ? in an agent's text field, such as a Gacha Forge message, no longer opens Marinara's keyboard shortcuts and loses the character (#8315).

  • When an agent that picks which characters take part before a reply fails, its prompt now goes to each connection once. Before, the fallback connection got the same request twice, and a rate-limited request was retried inside another retry, up to 49 times on the main connection and 56 on the fallback instead of 7 each (#8702).

  • The agent catalog lists rulesets and Experiences published as .ruleset.json and .experience.json files. Before, one such entry stopped the whole catalog from showing (#8390).

  • On Claude connections that use an Anthropic API key, agent packages such as Otome Hearth can mark the part of their prompts that stays the same, such as instructions, cast and story memory, for Claude's prompt cache. Later calls in a chapter then read it from the cache at a fraction of the input price instead of paying for it in full again. Marked calls are cached even when caching is off on the connection, and a package can ask for the 1-hour cache so the context lasts between scenes. Package calls without marks are sent exactly as before. OpenAI, Gemini, xAI and DeepSeek cache repeated prompts on their own, and Claude (Subscription) caches by itself; Claude through OpenRouter or another OpenAI-compatible address isn't cached this way yet. For package developers: Capability API 1.814 adds cacheBreakpoint to language model messages and reports cached and cache-write prompt tokens in usage, and 1.815 adds the cacheTtl option. Older Marinara versions ignore both (#8698, #8748).

  • Downloadable agents can now animate a picture saved in your Global Gallery with one of your video connections (Capability API 1.384). Gacha Forge uses this for animated banners, and a looping clip asks for matching first and last frames where the video service supports it (#8249, #8257).

  • For agent authors, Capability API 1.385 to 1.391 adds: services.imageDownloads, Marinara's gallery picture saving with the iPhone share sheet, which Gacha Forge uses to save backgrounds; openConnection, to open a saved connection from a Home tab and come back to it; persistence.listChatSummaries, to read a chat's summaries; registerService(key, service, { hostOnly: true }), for a service only Marinara itself can read, which other agents can't reach; setMessagesHiddenFromAI, to hide or show chat messages from the AI, which never changes a message you hid or showed by hand; and reading a chat's Advanced Memory scene summaries, with one optional instruction a package can add to the scene summary request to store its own notes for that scene from the same call. Without a package that asks, the summary request is unchanged. On older versions of Marinara, hostOnly is ignored and the service stays readable. The package developer guide covers them, and how browser agents use /api/generate/raw with debugMode (#8334, #8341, #8361, #8413, #8496, #8592).

  • For agent authors, Capability API 1.377 adds a motion/react host module with Motion 14, which Marinara itself now uses. Installed packages that import framer-motion keep getting Motion 13 and need no rebuild. A package that imports motion/react must declare Capability API 1.377 or newer, and older versions of Marinara refuse it rather than handing it Motion 13. The two versions don't share presence, MotionConfig, layout groups or motion values, so keep each animation tree on one of them; the package developer guide covers this (#8134).

Sign-in and remote access

  • You can set Marinara's login from the browser instead of .env. While no login exists and Marinara listens beyond this computer, the server log prints a one-time setup code (docker logs for Docker): type it on the setup page from any device, or set the login under Remote login in Settings → Advanced → Access on the computer that runs Marinara. The same page changes or removes the login, lists Signed-in devices and signs them out, and Add a device makes a one-time pairing code, valid for 5 minutes, to sign in a new device without the password. A login in .env still wins. If you forget the password, run node scripts/reset-login.mjs in the Marinara folder, or through docker exec for Docker. Behind a login proxy such as Authelia, Authentik or tinyauth, set TRUSTED_AUTH_PROXY to the proxy's address to skip the second login for requests from that proxy only (#8102).

  • Settings → Advanced → Access shows who can open Marinara without a password, such as devices on your local network, on Tailscale, through Docker or through a proxy, or anyone who can reach the computer, and how to stop each. Only the owner sees it. When that list isn't empty, a banner says Others can open Marinara without a password with Review access, and the server log warns at startup. An IP_ALLOWLIST entry as broad as 0.0.0.0/0 or ::/0 counts as open to the internet. When Marinara runs in Docker without a login and trusts the container gateway, it warns at startup that on Docker Desktop, OrbStack and rootless Docker every device reaching a published port arrives from that gateway: keep the port on 127.0.0.1, as the default Compose file does, or set a login before you publish it to your network (#7955, #7988, #8553).

  • With a login set, every password or code the server checks now counts toward the lockout after 10 wrong tries, and a locked-out address stays locked for the full 15 minutes, however many other addresses are signing in. When the server is already counting 4,096 addresses, a new one is asked to wait ("Too many sign-ins at once. Try again in a moment.") until room frees up. Browsers that are signed in, this computer, IP_ALLOWLIST and trusted Tailscale or Docker peers aren't affected. A Basic Auth header doesn't skip the sign-in page's form; scripts and API clients can still send one everywhere else (#8775).

  • The setup page that blocks other devices, and the matching error replies and log line, now point only to setting a login, or the IP allowlist for devices that connect directly, with a link to the Remote Access guide for other options. /api/health tells visitors who aren't allowed in only that Marinara is up, still with status 200 so uptime monitors keep working. The server warns at startup when only one of BASIC_AUTH_USER and BASIC_AUTH_PASS is set, since a half-set login does nothing (#7936, #8003).

  • Every page Marinara serves now asks search engines not to index it. This doesn't protect an install or remove pages already listed; a login does the protecting (#7924).

  • The admin secret can be made in the app. In Settings → Advanced → Admin Access on the computer that runs Marinara, Make admin secret shows a new secret once and saves it in that browser; type it on each other device in the same place. Replace admin secret and Remove admin secret change it. Only that computer, or a device that already has the secret, can make or change it, and an ADMIN_SECRET in .env still wins. With Docker, Marinara doesn't count your browser as that computer, so set the first secret as ADMIN_SECRET in .env. A browser signed in with your login can now use installed agents, such as Otome Hearth, without the secret; installing, updating and removing agents still needs it (#8829).

2D and 3D Avatars

  • 3D Avatars can show rigged characters from a plain .glb or .fbx file, such as Mixamo, Ready Player Me, VRoid FBX, Unity, Unreal or Blender exports, which were refused before as not being a VRM. Choose GLB or FBX model and Import GLB or FBX: bones named the usual ways are matched to the body by themselves, and setup shows how many of the 22 body bones matched and which blend shapes are used for each face, mouth shape and blink, which you can change. The avatar breathes, blinks, changes faces and talks like a VRM, and a model without blend shapes still moves its body and talks. Models in an A-pose, facing away or measured in centimetres are straightened, turned and scaled. A file that can't be used is refused with a plain reason, such as a VRM saved as .glb, a rig missing the bones it names or an FBX older than 7.0, and an FBX without embedded textures gets a warning. The agent's store description now lists every file type it takes (#8656, Marinara-Agents#2038).

  • 3D Avatars can show MMD models. Choose MMD PMX model under Avatar type and select Import PMX or ZIP with a ZIP holding one PMX model and its pictures, folders and file names kept, Japanese ones included, also from ZIPs made on Japanese Windows; a model that needs no pictures can be a .pmx on its own. Textures whose names differ from the model's in letter case or Unicode form are found, and missing textures are refused. Under Faces and mouth shapes, pick the model's face for each feeling, its mouth shapes and its blink, with common English and Japanese names matched for you. An optional .vmd under VMD motion plays while Idle motion is on, and without one the model sways gently. PMX 2.0 and compatible 2.1 models work. PMD models, VPD poses, camera and light motion and physics are not supported, so hair and clothes may hang differently than in MikuMikuDance. It needs WebGL2, and importing or playing a model sends nothing to an AI provider. Other ZIP imports read Japanese file names correctly too (#8481, #8790).

  • In group chats, every participant with an avatar now shows, with no limit of two on a phone and four on a computer. Each reply moves the face and mouth of whoever is speaking: the character who answers in Individual replies, and the speaker named by speaker tags or dialogue in Merged replies, while an unknown speaker stays still. When a voice starts, only that voice's owner moves their mouth (#7916).

  • Blink and talk pictures in 2D Avatars work on dark skin. Talk pictures for dark-skinned characters were refused almost every time with "The image model didn't open the mouth in this picture"; a dark mouth on dark skin now counts like any other. A blink over pale skin and light eyes no longer leaves the open iris showing under the lid, because the whole eye or mouth now comes from the new picture, while the rest of the sprite stays exactly as it was (#7974).

Video and images

  • Characters and the Illustrator can make video clips on their own. Thanks to @JamesMowery (#7993).

    • In Conversation, turn on Generated Videos under Video messages in the chat's Illustrator settings (it also shows as Videos in the Commands list of chat setup and Chat Settings), and a character sends a clip when it fits, as it does with selfies. It is off by default and needs a working video connection. A clip that names you shows your persona and is listed in your persona's gallery.
    • In Roleplay, Illustrator makes offers Pictures (the default), Pictures and clips, where Illustrator may animate the picture it just drew when the moment is about motion, and Clips only, where each picture becomes a clip's first frame and is shown instead if the clip fails. First frame now shows in Roleplay too, and a clip without a picture is written by the new Roleplay Clip Director prompt under Settings → Generations → Video Generation Prompt Overrides. A reply's Illustrate button follows these choices, and without a working video connection Illustrator makes pictures.
    • Video Run Interval sets how many messages must pass after an automatic clip before the next one (5 by default, 0 stops them), and Videos per reply in Settings → Generations → Video Generation allows 1 to 10 clips per reply (3 by default). Clips you ask for with /video, Video, Animate or Illustrate are never limited, and Stop stops a clip in progress. The interval Illustrator already had is now called Image Run Interval and works as before.
  • Roleplay has /video: on its own, or followed by a description, it makes a clip of the latest reply or of what you describe, under the newest reply, following the chat's First frame. The new Video clips Roleplay Command (off by default; needs Illustrator in the chat and a video connection) lets the storyteller ask for a clip with [video: …] when a moment is about motion, within the Video Run Interval and Videos per reply. Expose media prompts before sending covers both. Thanks to @JamesMowery (#8001).

  • In Conversation, the note that a character sent a video message now keeps only the words of the clip's prompt, so characters no longer copy a technical prompt format into their own [video: …] and break it. Peek prompt now shows the photo, selfie and video notes the model gets, and asking for a "group video" starts from a group selfie instead of one with only the sender. Thanks to @JamesMowery (#8010).

  • GPT Image 2.6 Flare and Sunburst are in the image model list for OpenAI (DALL-E). For still pictures they work like GPT Image 2.5, with the same sizes, small requests scaled up, Image quality up to Max and transparent backgrounds. For agent authors, Capability API 1.816 lets a downloadable agent ask GPT Image 2.6 on an OpenAI (DALL-E) connection for a short looping GIF through images.generate; any other model or service, and a request that sends a picture, is refused before anything is paid for (#8872).

  • Save generated images as WebP in Settings → Generations → Overall Generations, off by default, saves new generated images as WebP to use less disk space, with a WebP quality from 1 to 100 (95 by default). It covers Game backgrounds, Roleplay Background agent images and scene illustrations too, and regenerating a background after changing the setting replaces the old file and keeps its folder and star. Transparency is kept, animated pictures and images you already have stay as they are, and if a conversion fails, the original image is kept, so you never pay for it twice. Game scene and Storyboard animations can start from WebP pictures too; a direct Seedance connection needs Upload Seedance reference frames temporarily on for that (#8300, #8790).

  • Pictures from a narrator's [illustrate: ...] command or the Gallery's Illustrate button now draw on the chat's active lorebook entries, chat summary and author's notes, following the Illustrator's Context Sources, so places, outfits and items known only from lore reach the picture. In Roleplay chats with World Maps, the Illustrator's image prompts also get the current place's path and public description when its Tracker data source is on. They read the place after the narrator's move in that reply, so the picture and its location reference image show the new room instead of the previous one (#8247, #8252).

  • Grok (xAI) images made without a reference picture, such as an avatar for a character who has none, now save correctly instead of failing or coming out broken after xAI made and charged for them. JPEG and other images from OpenAI-compatible providers and Together AI are saved with their real type (#8423).

  • OpenRouter video connections offer MiniMax: H3 Max and ByteDance: Seedance 2.5, in the model list and from Fetch Models, each limited to the lengths and resolutions it supports, including H3 Max's 768p. OpenRouter video jobs no longer fail after they are sent when OpenRouter answers with a short relative link to check on them, and your OpenRouter key now goes only to OpenRouter, not to the public site a finished video downloads from (#8300, #8338).

  • NanoBanana 2.1 on NanoGPT no longer refuses avatar and picture sizes: Marinara sends it the 1k or 2k size and the aspect ratio it supports (#8027).

  • Sprite background removal keeps thin blue, gold and teal details such as ribbons, and no longer fades solid shades near the edge, while still cleaning up green halos (#8448).

Search and Professor Mari

  • Professor Mari can work beside the Character, Persona, Lorebook, Preset and Agent editors (#8418, #8524, #8541, #8548, #8552, #8559, #8561, #8563, #8570, #8571, #8572, #8573).

    • With an editor open on a screen at least 1024 pixels wide, she floats in a resizable panel at the left of the fields instead of a window over them, and she docks beside it in narrower windows too, such as 1440 pixels wide with both sidebars open. On phones and tablets she is a sheet below the editor that you set to Title only, Half height or Full height, and its collapsed line says how many changes are waiting.
    • She knows which field you are in, and clicking another field moves her attention to it. Opening her with Cmd/Ctrl+K or Cmd/Ctrl+J from a field sends its unsaved text and selection with your question. The field she is working on glows, and on the classic runtime her new text for a character field streams into it under Prof. Mari is writing….
    • When a change waits for you, each changed field shows it in place with Keep, Not this one, Edit and Next (Ctrl/Cmd+Enter, Esc and Tab), and her change cards have Open at this field. Not this one declines only that field, and Keep saves your own unsaved text first. The Edited by Prof. Mari line under a kept field has Undo as a real button. In the Lorebook editor this covers the book's description and each entry's content, in the Preset editor the name, description, author, conversation prompt and game prompt, and in the Agent editor the name, description and prompt template.
    • These editors now save only what you changed, so a save no longer overwrites a change she just made; where you both changed the same field, your unsaved version is kept and the editor says so. In Bypass permissions and Accept edits modes, sending her a message first saves the open editor, and if that save fails, your message stays in the box. Her changes to a preset's conversation or game prompt and an agent's prompt template now apply instead of being dropped, and asking her about the preset open in the editor no longer fails with "The selected preset is no longer available".
  • Professor Mari's message box stays open while she works. Messages you send then wait in a list, up to 20 per chat with their files and @ links, are kept through a reload, and go out one by one when she finishes; Stop puts them back in the box. When she asks a question, waits for your OK, fails or the app restarts, waiting messages are held, each with Send and a remove button. While she works, the box shows a single Stop button, and when you type it turns into Send, which asks whether to Send now, so your message goes in at her next step without stopping her, or Send after her answer. Files, links, a field, a new subject or a changed permissions mode wait until she finishes, and a message sent this way never skips an approval she would ask for. With Enter sends to Professor Mari on, Enter sends now and Ctrl/Cmd+Enter waits for her answer; with it off, Ctrl/Cmd+Enter sends now and Ctrl/Cmd+Shift+Enter waits. Retry after a reply that failed partway works again instead of being refused (#8557, #8567, #8760).

  • In Professor Mari's composer, type @ to link a character, persona, lorebook or lorebook entry, preset, skill, memory, chat, agent or guide. She gets what she would have looked up herself with your message, so she works on that exact record instead of guessing which "Alice" you meant. Linked names show as pills in the composer and in your sent message, and on a lorebook ArrowRight lists its entries. Beside an editor, Open beside me links what is open, and its › lists the editor's fields so you can switch the field she works on. Up to 8 links go with a message. In ordinary text, the first Tab completes a name and a second Tab links it, with a Tab to link pill, or Tap to link on touch screens. Type / at the start of a line for her commands: /new, /history, /skills, /memories, /context, /attach, /model, /permissions and, while a review waits, /approvals, with aliases such as /clear and /connection. The paperclip opens a menu with Attach, Reference (Link with @) and Mari sections, and while you type with an input method (IME), Enter no longer sends the message before you finish (#8415, #8454).

  • Professor Mari has nine built-in skills: handbooks for characters, lorebooks, presets, themes, extensions, decisions, Home widgets, onboarding and reply repair, with worked examples and checks. She opens the matching one when she starts on that kind of item instead of carrying every procedure in her instructions all the time, so smaller and local models make fewer mistakes and each question costs fewer tokens. Her Skills list shows them as Built-in, apart from your own; they are always on and can't be edited, but you can copy one into a new skill. Read the handbook before the first write in Search and Professor Mari settings, on by default, turns back her first change of each kind in a chat until she has read its handbook. When one of her actions fails, the error tells her what was wrong, what she sent and where the value goes, so she fixes the call instead of repeating it. A change she only previewed shows as Previewed · not saved, and she can't save text with an unclosed {{ into a card or lorebook entry, or a macro into a field that never fills one in (#7908).

  • Professor Mari on Home can ask you questions on a card and wait for your answer. It shows one question at a time with two to four choices, sometimes a Recommended one or several to pick, and Or type your own answer, with Back, Next and Submit. Your answers become your next message, and the card is still there after a reload. She makes no change in the same turn as a question, so nothing happens before you answer, and if you type a reply instead, she still knows what she asked (#8545).

  • Professor Mari keeps a to-do list for longer jobs, pinned under her latest message with a count such as "2 of 3" and each step marked Not started, In progress or Done. It updates while she works and is still there after a reload. Once you write after it, it dims under Plan from before your last message, and she keeps an unfinished list in mind for her next replies (#8577).

  • A handbook Professor Mari reads, such as the one on characters, now stays in her prompt while she keeps working on that part of the app, so follow-ups such as "now shorten her greeting" use the handbook instead of her memory of it. At most two stay at a time, and one drops after three turns without use; she reads it again when she needs it. While they stay, they add up to about 9,000 tokens to each request (#8392).

  • Professor Mari uses less of the model's context for each step, so she gets further on small-context models: a change's result no longer repeats what she sent, an update shows only the fields that changed, and her standing instructions are about 1,100 characters shorter. The start of her system prompt also stays the same from turn to turn, so providers with prompt caching can reuse it on your next message (#8376, #8386).

  • When a reply hits the connection's output limit, Professor Mari on the Pi runtime redoes the cut step in smaller pieces, up to twice per question and with a line saying so, instead of stopping until you type "continue". If it keeps happening, she stops and suggests raising the connection's Max output tokens override or asking for a smaller piece. On connections with an output limit of 4,096 tokens or less, she splits big writes, such as a new character or lorebook, into several steps from the start, on both runtimes. A tool call that OpenAI, Anthropic or Google cut off is now recognized as cut instead of running with empty arguments (#8090, #8100).

  • With no connection chosen, Professor Mari's start screen explains what suits her: a strong model with a large context, at least 32k tokens and preferably 64k, and what 16k to 128k each allow. Her connection picker shows the same advice. These are recommendations only, with no new limit (#7947).

  • Screenshots and other images pasted into Professor Mari's message box are attached like files from the paperclip. When the clipboard also holds text, as copies from Word or Excel do, the text is pasted instead. A finished turn keeps what she wrote between her steps as captions under each step, instead of hiding it, so a question she asked midway can still be read (#8528, #8532).

  • Swipe an open Professor Mari change card left to close its Undo offer and keep the change, or right to undo it, with a finger or a mouse drag. A short swipe springs back, scrolling past the card works as before and the buttons stay (#8400).

  • Professor Mari reports her changes more accurately. She no longer tells you a change that was saved is still waiting for you to accept it, and no longer offers to redo a change from earlier in the chat as if it hadn't happened. She can now clear a persona's text fields, which she used to report as cleared without changing anything, and after reading only her onboarding handbook she can save the card changes that go with an onboarding block (#8366, #8371).

  • Professor Mari keeps answers that only explain or draft something, even when their wording sounds like she made a change, such as a draft list, a quoted example, a code block or an explanation of change cards. Before, such an answer could be thrown away and replaced with "I did not make or hold any change." When a run changed nothing, a short note under her answer now says so instead. Runs that tried a change are checked as before (#8725).

  • When Professor Mari writes a plan or an answer and then goes on checking, her final message now gives it in full, instead of saying the plan she made is still there when you never saw it. The same goes for a reply of hers that was held back for checking, on both runtimes (#8865; thanks @mayhair).

  • Professor Mari no longer fails with OpenRouter's 402 "This request requires more credits, or fewer max_tokens" on models whose Max output tokens override was filled in with the whole context window, such as Kimi K3.1 Pro and Gemini 4 Argon. She now asks OpenRouter for at most 32,768 output tokens, and on other services she lowers such a whole-window value to the model's known output limit. When OpenRouter says your credits cover fewer, she retries with fewer. When a model's real context window is smaller than the connection's, she retries within it, dropping older steps, instead of stopping (#8865; thanks @mayhair).

  • Professor Mari on Home copes better with weaker models. Quick replies that a model such as Gemma writes as text after her answer show as buttons, with readable labels, instead of staying in the chat as XML. When a model prints a lorebook lookup instead of running it, as GLM 5.3 on NanoGPT did, she asks the model once more to answer or make the lookup properly, and if it prints it again, she tells you the lookup didn't run (#8805, #8807).

  • Professor Mari can no longer break a preset by editing one of its sections, which used to drop every other section from the prompt while the editor still listed them. She now changes sections one at a time, and a section id with stray quotes is refused. When she deletes a preset or lorebook, it also leaves its library folders, and undoing the delete puts it back (#8091).

  • Professor Mari can read and change a character's or persona's Game Mode ruleset sheet for any installed ruleset. She checks every value against the ruleset's limits, lists every problem at once, and changes only that ruleset's sheet, never current health or spent slots (#8063).

  • Professor Mari's quick reply cards that point at a chat she can't open, such as her own conversation or a chat that doesn't exist, no longer close her window and drop you on Home. Such a card now sends its text as your message like a normal reply card, and its tooltip says so. This also fixes cards saved under her earlier answers. Cards that open a real chat still open it (#8672).

  • Professor Mari now refuses to give a Personal Extension she drafts full page access, which only External Extensions can have, and says so instead of saving it. Before, such a draft was saved, so approving it in Settings was undone at the next restart and the extension switched itself off. Ask Mari to resend an older draft without it to fix one (#8113).

  • Professor Mari's built-in personality no longer tells her to keep saying "lmao" and "kek". Her dark humor stays (#8482).

  • In Chrome, Edge and other Chromium browsers, Professor Mari's sprite no longer covers the first paragraph of her reply, and a few dividers and rounded corners that these browsers had dropped are back. In right-to-left languages, the gap beside her sprite is now on the text side (#8716).

  • On macOS with Node.js from MacPorts, Professor Mari's workspace commands, including mari db transform, start again: her sandbox can now read MacPorts' files in /opt/local, as it already could Homebrew's (#8419).

  • When Professor Mari rewrites part of a field, her change card, the in-place field review, the Easy Viewer and the diff show each changed stretch as the whole old wording struck through and then the whole new wording, instead of alternating word by word, so an edit reads as one change (#8815).

Characters and personas

  • One picker now chooses characters and personas everywhere: the persona button by the chat input and the phone Quick Switcher, Chat Settings, the chat and Game setup wizards, multiplayer, avatars, lorebook links and regex character scopes. It opens beside its button on a computer and as a sheet on a phone, searches as you type, and works with the arrow keys, Enter and Esc. Folders are rows you can open and close, each with Add all (N), and characters without a folder sit under Ungrouped. When you pick several, each tap applies at once and the pills at the top remove a pick. In Chat Settings, clicking a character row or the persona card opens the picker, the pencil still edits, and the separate Add from Folder menu is gone (#8763, #8796, #8826, #8827).

  • The Character and Persona editors have a wand on Summary, Description, Personality, Backstory, Appearance, Scenario and Example Dialogue, and the character editor has one on the first and alternate greetings. It writes that section in 100 to 300 words from what you already typed there, with the rest of your unsaved card as reference, using the same connection as summary generation. It never saves the card for you, and if you edit that field meanwhile, your text is kept. Personas now have a Summary for the library and Example Dialogue that reaches the prompt, and a character's summary is no longer limited to 500 characters (#7972, #8021).

  • Add Alternative Field under each of those seven fields gives a character or persona a different version of that field for the chats you choose, without copying the whole card. Each alternative starts as a copy, has its own wand, and replaces the field only in its selected chats once you save. A chat uses one alternative per field, and an empty alternative clears that field there. Card exports, conversions and duplicates keep the alternative text but not the chat choices; full backups keep both (#7973).

  • Split description into fields sorts a description that holds everything, such as personality, appearance, backstory, scenario, instructions and example dialogue, into the card's own fields. It recognizes labelled sections, Markdown headings, W++ and PList lists, interview-style questions and answers and <START> dialogue blocks, and moves the text word for word, so no line is lost or rewritten. Tick it in the character import window or the Bot Browser's download dialog for characters and personas, or use the button in the Character Editor, which shows the split before you Apply it. Narrator cards, cards with several characters and empty descriptions are left alone unless you choose Split anyway, and the summary warns when text without labels had to be sorted by its wording. Each split is saved as a new card version, so the original stays in the version history, and Ask Professor Mari lets her sort the card with an AI call instead (#8543).

  • Sprites can go in folders. New folder adds collapsible folders above Loose sprites, separately for Facial Expressions and Full-body, which you can rename and reorder; drag sprites into them, use Move sprite, or hold a sprite to drag it on a phone. Removing a folder keeps its images. Folders only sort: every sprite stays available to chats, the Expression Engine, Game Mode and avatars, and renamed sprites keep working everywhere. Personas get folders too, and folders are kept in exports, transfers and profiles. The character sprite editor is simpler, with search, Add sprites, Export this view or Export selected, and the framing, cleanup and delete tools shown once you select sprites. Imports that are refused or only partly work now say so (#8580; thanks @DSBwizzard).

  • Sprite names can describe an outfit or condition after the expression, such as happy_pajamas or angry_formalwear_soaked. The Expression Engine and the Game Master now see these names, so they pick the sprite that fits what the character wears or how they are, instead of any sprite of that expression at random, and keep the outfit and condition until the scene changes them. A name with no exact match falls back a word at a time, from happy_pajamas_wounded to happy_pajamas to happy, with the expression first. Numbered variants such as happy_pajamas_02 work as before, and libraries without such names are unchanged (#8653, Marinara-Agents#2029).

  • Lorebooks embedded in character cards keep their settings. Saving a card in the character editor keeps Outlet entries as Outlet entries with their outlet name. SillyTavern and Chub cards import each entry's real placement and depth, role, probability, selective logic, group and weight, sticky, cooldown and delay, scan depth, matching and recursion options instead of defaults, and Import Embedded Lorebook uses the book's description, scan depth and recursion setting. Compatible exports write these settings back in SillyTavern's format, so they survive the trip to SillyTavern. A Marinara lorebook from another install keeps only the character, persona and chat links that exist here. JSON cards and .charx files saved with a byte order mark now import instead of failing with "Invalid file format" (#8786).

  • Adding a card with character questions to a running Roleplay chat, from Chat Settings or by dragging it in, now asks its questions first, then opens the greeting picker if the card has greetings. Greetings can use the answers: a chat variable such as {{relationshipToUser}} shows its value, and the greeting picker's preview highlights the filled-in answers. When you create a persona in the new chat wizard, a greeting that names one of its questions, such as Ah, so you are a {{class}}, is saved with your answer; with an existing persona or Quick Start, the tag shows as written, and the Character Editor says so. Available variables under First Message and alternate greetings lists both the card's and the persona's questions (#8509).

  • Cards with interactive onboarding have a small badge on their avatar in the Characters panel, with the tooltip Has interactive onboarding, as they already did in Chat Settings (#8514).

  • An applied character sheet opens in the same full-size viewer as the avatar's Full button, from its thumbnail or the expanded picture, and closes with Escape, the close button, a click outside or the back button. Uploading, generating, replacing or removing a sheet, and the Use character sheet switch, now save at once, like avatar and sprite uploads, so a refresh keeps them without pressing Save and without a leave-page warning. Other unsaved edits stay unsaved. Remove character sheet clears the sheet and keeps the picture in the Gallery. The same labels apply to persona sheets (#8707; thanks @DSBwizzard).

  • In the Character Editor, First Message and Example Dialogue sit in the same bordered panel as the other card fields, with their title, wand and field. Alternate greetings are cards inside the First Message panel, numbered from the second greeting on, with token counts, larger buttons for touch and Add Alternate Greeting below them. They still become swipes in new chats (#8535).

  • A persona's avatar can now be removed with Remove in the avatar crop control. On phones, editor controls no longer wrap or mismatch, the six editors' backgrounds match the sidebar in the default dark theme, and delete and remove buttons use your accent color. The avatar crop's Reset button no longer has an icon (#8021, #8067, #8097).

  • After Restore web links, pressing Save images locally again reuses the copies already in the character's Gallery instead of downloading every greeting image again (#8097).

  • Import character as persona now also copies the character's Phonetic name, Image Appearance Override and Conversation profile (Convo Display Name, About Me and Convo Behavior), as Add persona as character already did the other way. Copies made either way now also keep the card's Game Mode Ruleset sheets (#8689).

Trackers and the State Editor

  • Inventory Tracker no longer loses purchases, drops and removals. Its prompt now shows each change nested under its group, currencies, equipped or inventory, and a result that comes back without a group goes to the group that already tracks the item. A result that can't be placed, such as a new name that could be a currency or an item, is retried like a broken reply, and if the retry fails too, the run fails with a clear reason instead of counting as a success that changed nothing. In the chat that reported it, 30 of 54 runs had lost real changes (#8717, Marinara-Agents#2084).

  • Prompts, conditionals and agent templates can use the World State tracker's story clock with {{date.world_state}}, {{time.world_state}} and {{weekday.world_state}}. They follow the reply you are on, so swiping or regenerating keeps the story's date, and the weekday comes from a Weekday field, a written weekday or a date. They are empty when nothing is tracked, and the real-world date and time macros work as before (#8301).

Advanced Memory and summaries

  • Game chats can now use Advanced Memory Recall, off by default, from Chat Settings → Memory Recall. The current scene stays as messages and earlier scenes reach the Game Master as recaps with the excerpts recall picks, so a long session stays under its context limit instead of resending the whole history every turn. The Game Master reads the memory as narrator, so the per-character settings are hidden in Game. A new session keeps the settings but starts its memory fresh, while summaries you or a Chat Summary agent wrote carry over as before. The optional Decision model works here too (#8254).

  • Deleting an Advanced Memory summary that hid nothing, such as one written with Hide summarised messages off, no longer shows the messages you hid yourself to the model again, and branching a chat inside such a summary keeps your own hides on the copied messages. Advanced Memory also keeps cached message details for only the four most recently read chats instead of every chat opened since the server started, which lowers memory use in long sessions, mostly on SteamOS and Termux (#8794).

  • Large Roleplay and Game chats with Advanced Memory start generating sooner: each message's stored details are read once and reused until the message changes, instead of on every memory step (#8607; thanks @gcyrus).

  • New Roleplay chat setup no longer offers Prepare existing history, since a new chat has none; existing chats keep it in Chat Settings → Memory Recall. The setup's Automatic context and memory handling text now names Advanced Memory Recall, and Maximum messages per excerpt now starts at 5 instead of 10. Limits you saved, including 10 and 0, stay as they are (#8175).

  • An Advanced Memory scene-repair notification, and its Fix button, now open Memory Recall in that chat even when the section is popped out or minimized or the notice came while you were in another chat, and expand the section if it was collapsed (#8203).

  • With Hide summarised messages on and Advanced Memory off, the Recent message tail is now a strict limit in Roleplay: a summarized message older than the tail is left out of the prompt right away, instead of staying until the next summary hid it. Older messages that no summary covers yet are still sent, and Chat Summary shows how many under Recent message tail, so Backfill Summary can summarize them (#8831, #8841).

  • Peek prompt on a reply now says that it shows the request as sent for that reply, saved before any later summary or hiding, so it can hold messages that are left out now. Show current context switches to what the next request would send now, and Show sent request goes back (#8831, #8841).

  • Advanced Memory's Updating continuity now combines the summaries one character reads into one about half their size, and halves it again on the next update if it is still over that character's share. Each request holds only your Combine prompt, one line asking for about half the length, and the summary text, instead of the much larger scene-summary request, so compaction no longer produces repeated oversized replies or long waits. Private parts are shortened separately and stay readable only by the characters who knew them. A reply that comes back cut off, empty or no shorter leaves the summaries as they were, and the same summaries are not sent again until one of them, the helper model or the Combine prompt changes (#8820, #8837).

Voice and Calls

  • Personas can have their own voice. In a text-to-speech connection's Character and persona voices, pick a persona the same way as a character; personas are marked (Persona). With that chat mode's auto-play on, Conversation, Roleplay and Game read the messages you send in that voice, before the reply, and your persona's dialogue in the story, such as in Roleplay or Game narration, uses it too. Opening or refreshing a chat doesn't read old messages again, and All Characters Voice is now Shared voice (#8370).

  • With the speaker extractor on, a line credited to part of a character's name, such as "Junpei" for a card named "Junpei Iori", now uses that card's voice even when the card isn't in the chat, instead of the default voice, or no sound on ElevenLabs without a default voice. Every word of the name has to fit, titles such as Mr. and Mrs. are told apart, and a name that could mean more than one card isn't guessed. This also applies to Game narration and combat, so a Game NPC called by part of a voiced card's name, or a title it contains such as "Professor", now uses that card's voice instead of a random one (#8650).

  • ElevenLabs connections offer Eleven v4 (eleven_v4), first in the model list. Like Eleven v3, it has no speed setting, so the Speed slider is now greyed out for both, with a note, instead of looking active while its value was ignored (#8373, #8374).

  • In Game Mode with ElevenLabs, voices no longer read a line's sprite emotion aloud before it, such as "neutral. Four thirty-one…". The emotion goes only to models that perform audio tags, eleven_v3 and eleven_v4, and only as a tag ElevenLabs knows, such as thoughtful for thinking; emotions like neutral or sleepy send none. Combat dialogue works the same way (#8641).

  • In Roleplay, text to speech starts reading a reply sooner when no agent rewrites it, instead of waiting for unrelated agents to finish. With a rewriting agent on, speech still waits for the final text (#8027).

Install, updates and security

  • Marinara can now show its owner a notice from the Marinara team when something needs action, such as a security update or a manual step for Docker users. It checks a small file on GitHub at startup and every hour, shows at most one notice as a banner, and never shows it to visitors who aren't signed in. Set MARINARA_NOTICES_ENABLED=false to turn this off (#7952).

  • Marinara now uses pnpm 12.15.0. The launchers (start.bat, start.sh, start-termux.sh) and the in-app updater fetch it for you, so an older pnpm installed on your computer doesn't need replacing first. If the launcher still can't get it, run npm install -g pnpm@12.15.0 and start again; Troubleshooting has the steps under pnpm version error. After updating, Marinara deletes the old pnpm 10 dependency store (.pnpm-store/v10, 2 to 3 GB) that the move leaves in every install and that pnpm's own cleanup can't see. On Android/Termux, the launcher removes it before installing, so an update that ran out of space works on the next start, and if the folder can't be removed, startup warns and carries on (#8131, #8792, #8801).

  • On Android, when a Termux update leaves Node.js unable to start (CANNOT LINK EXECUTABLE "node"), the app and start-termux.sh now run a full pkg upgrade and try again, instead of stopping with a message that told you to install a newer APK. If Node.js still can't start, they tell you to run pkg upgrade in Termux. A working install only pays for one quick check. The Termux setup commands in the install guides now start with pkg upgrade -y, and Troubleshooting has a section for this error (#8680).

  • On Windows, the installer no longer stops with The string is missing the terminator: " when it upgrades an older Node.js, and the same fix covers its Git download and file checks, also when the temporary folder's path has spaces or apostrophes. The Node.js it installs is now 24.22.1, with the October 2026 security fixes (#7942, #8088).

  • The launchers open your browser once the server reports it is ready, instead of after a fixed wait, so the page no longer opens before Marinara has started (#8027).

  • A Marinara update is ready. no longer appears after every server restart. Before offering Refresh, the page asks the server which build it serves, and when the page already runs that build, it updates quietly (#8212).

  • Professor Mari's sandbox protects more of Marinara's settings and secrets from her shell commands. On Linux, a .git or .env a command creates at the top of the workspace is renamed when the command ends, and the output says so. mari code check always runs inside the sandbox. When the data folder sits inside her workspace, her shell can read media folders such as avatars, backgrounds, sprites and galleries but not change them, and mari images reads, writes and deletes a file in Marinara's media folders only while its real path stays inside that folder. An app image whose file is a link pointing outside its folder is no longer used, by Mari or your own mari commands; replace the link with the real file (#8770, #8798, #8802).

  • Sandboxed browser extensions stay cut off from Marinara however their page is opened, and an extension's dice text in a /roll message always shows as plain text, with <, > and & shown as look-alike characters (#8773).

  • Regex scripts from imported character cards are checked more strictly, so a pattern can't stall the server or the page while it is checked or run (#8055).

  • Creating a chat or changing its characters now refuses a request over 1 MiB, or one with a malformed character list, before checking it in detail, and validation errors list at most 50 details. Imports, uploads, backups and profiles keep their limits (#8216).

  • Each server route now keeps to its own request rate limit however the request address is written, including routes added in this release such as sign-in sessions, pairing codes and notices. A client that sends more than a route allows gets a "too many requests" reply instead of falling under the shared default (#8792).

  • Moving the computer's clock back, for example by an automatic time correction or by resuming a virtual machine, no longer makes Marinara refuse every request as rate-limited for hours (#8389).

  • Updated body-parser, serialize-javascript, Undici, glob and minimatch, and patched the bundled Zod validation library, the deepmerge library and the developer MCP tool, for published security advisories. The MCP SDK is now 1.32.2 and the Pi agent runtime Professor Mari uses is 1.4.0, and i18next, dotenv and the Android build tools are updated too. Installed agents keep the same validation library interface (#8231, #8451, #8776).

  • Game assets, image previews and avatar clean-up now stay inside their own folders in the data folder. Marinara keeps starting when something in game-assets is a broken link or sits on a disk that isn't connected, logging a warning instead, and a game-assets folder moved to another disk and linked back keeps its files listed and its music and sounds playing. Deleting a top-level Game Assets folder, such as sprites or music, is always refused (#8819).

Chats and messages

  • Chat branches are easier to find and follow (#8114, #8160, #8192, #8209, #8565).
    • In the chat list, a chat's branch-count badge opens its branches as a tree under its row, each nested under the branch it was made from, with its name, when it was last active, its unread or busy state and a delete button. Search also finds a branch by its own name, and the branch you open is highlighted. Deleting a branch that other branches were made from no longer hides them: the orphaned branch hangs under the top chat, and its own branches stay below it.
    • Branch graph in Chat Branches opens a window that draws all of a chat's branches as lanes on one message timeline, with a dot for each message colored by who wrote it, and each branch joined to its parent at the message it split off from. Long stretches fold into a ··· N ··· marker you can open, or use Expand all. Hover or tap a fork or a latest message to see its number, speaker and the start of its text, and click a lane to switch to that chat. The window can be moved and resized and is a sheet on phones.
    • Branches made before Marinara recorded where they came from hang from the first chat with a dashed line marked Fork not recorded, and Game sessions keep the single row with a count.

…and 158 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 and the people the changelog thanks for their reports:

@DSBwizzard, @gcyrus, @Gunterlie, @JamesMowery, @kolacheee, @mayhair, @minikkeuen, @newfiesledneck, @NoblezDomain, @Promansis, @Romuromylus, @SpicyMarinara, @stclaire, @stonebystone, @ylli-selmani.

Full changelog: v2.5.1...v2.5.2

Don't miss a new Marinara-Engine release

NewReleases is sending notifications on new releases.