Changelog
Every shipped release, newest first. The same notes appear as the update changelog inside the app.
0.6.1
- Phone app and desktop download: the ScyllaChat logo shows next to the name in the header (and on the loading screen) again
- Avatars that came from a desktop install running from source (e.g. via sync) no longer show as broken images on the phone
0.6.0
- Lorebooks are listed in a steady order (by name) instead of shuffling every time the list loads
- Under the hood: the API server and the app's scripts and styles are split into small feature files (no change in how anything works), so future updates are quicker and safer
- Fixed your persona's name showing as "User" in history recaps and group chats, and card scripts not seeing your persona
- Fixed card scripts, triggers and card assets reading the previously edited character's card after switching to another character
- The first message sent right after starting the app no longer packs extra history (it used rough token estimates before the tokenizer had loaded, which could overflow the context limit)
- Long chats stay light after browsing far back: when you return to the bottom, older loaded messages are released again ("Load more" brings them back)
- Loading older messages is lighter: images finishing loading no longer snap the chat back to an old scroll position (it only keeps a tab's place right after you switch tabs), and plain messages are no longer tracked for animation pausing
- New optional "Gemini reasoning prefill" in API settings (shown for any model with "gemini" in its name): like the Kimi-K3 option, a final preset prefill starting with <think> is sent as the reply's reasoning so the model continues it as its own thinking
- Fixed stopping a reply while it was still being prepared (e.g. during {{call:}} requests) showing "An unexpected error occurred"
- Opening another chat while a reply is still being prepared no longer sends a prompt that mixes both chats; starting a new chat and then switching away no longer puts it on the wrong character
- Fixed stopping a background reply right as it started: it no longer keeps running on the server or leaves an empty reply or loading dots behind
- Starting a new chat and then opening another chat of the same character before it finished no longer switches you to the new chat
- Scrolling right after "Load more" no longer gets pulled back to where the older messages were inserted
- A persona with the same name as the character no longer turns the character's replies into your messages (or hides Regenerate)
- Message numbers in long chats count from the start of the chat again (new messages showed e.g. #81 instead of #1201 after only the latest messages were loaded)
- Token counts in message details no longer get replaced by an outdated count after a swipe or edit, and running totals stay consistent when older messages are loaded or released
- API settings: your API keys are hidden by default (eye button to show), and "Max Tokens" / "Chat Processing" are now labelled "Context Size (tokens)" and "API Format"
- Presets are called presets everywhere (the Preset tab no longer says "jailbreak"), and a preset imported without a name shows as "Unnamed preset …" instead of a long id; rename it with its edit button
- The ⋯ menu next to the message box: the switches are now as readable as the other items, and the › arrow only marks items that open a dialog
- Delete is no longer a button next to Chat and Edit: characters, personas, presets and recent chats have a ⋯ menu with the less frequent actions, and deleting asks in a red-buttoned dialog that starts on Cancel
- Recent chats can be renamed (⋯ → Rename chat); the name sticks through new messages, and clearing it goes back to the automatic name
- On phones, character and persona cards show fewer, bigger buttons (tags and lorebooks moved into ⋯), and recent-chat cards no longer waste space on the left
- Messages that end in card HTML no longer show a band of empty lines at the bottom of the bubble, right above the message box
- Lorebook page: lorebooks are shown as a list of cards with their entry count and the characters that use them (tap one to open it) instead of a dropdown; Delete and Export stay disabled until one is open, and creating or deleting a lorebook or entry uses the in-app dialogs
- World Agent: saved worlds, locations and characters whose image is missing show the normal placeholder instead of a broken image, and the background preview no longer shows "World background" text or a "generating" label that never goes away (it says "Generating background…" only while the image is actually being made)
- Sync & Updates page regrouped into Updates, Sync devices and Pair a device; device id, local hash and the server/manifest URLs are under "Details". The SillyTavern import moved to Advanced Settings → Data Management ("Import from SillyTavern"), next to the other imports
- Tap the API status dot to see what it means (connected, error or not reachable, with the server address), check again, or jump to API settings; it also no longer shows red for the first half minute after startup
0.5.8
- Sync no longer copies your whole data folder (cards, images, music) every time it receives a change; its safety backups now keep only the files that sync changed, so they take kilobytes instead of hundreds of MB each
- Sync uses far less CPU while you chat: it re-checks only the files that changed instead of re-reading all your data every heartbeat
- New messages no longer flash taller for a moment when they appear, so the chat doesn't jump at the start of every reply
- Background replies no longer make the chat jump up and back down as they start
- HTML replies no longer flash a stray "<" while a tag is still streaming in
- Edits, swipes and deletes always work on the chat you have open, even after a background task or group chat swapped it in
- Long chats open 2–3× faster, with much shorter freezes: image placeholders are measured once instead of on every update, messages are no longer rendered twice when a chat opens, and header token counts are worked out in the background
- Header token counts now become exact even when the chat was opened right after startup (they used to stay rough estimates)
- Much lower CPU use while a chat is open: card text animations pause while scrolled out of view, and "Image not generated" bars and the hidden loading indicator no longer animate
- "Image not generated" bars inside card layouts no longer show a spinning loader
- Faster startup: all settings load in one request instead of ~90, and the World tab only fetches images for other scene steps once you open it
- Mobile header: your persona and the character show as two small avatars next to the API status dot; tap one to open Personas or Characters and switch, tap it again to go back to the chat
- Fixed the invisible close (×) button in the character editor
- Message headers show generation speed (tok/s) next to the time taken, e.g. "7.8s · 158 tok/s · 1231 / 53.1k tokens"
- Generation time and speed are saved with each reply version, so they still show after reloading and follow the version you swipe to
- Running token totals above 10,000 are shortened (53.1k); on phones the time/speed/tokens line sits on its own row instead of being cut off
- Editing the open character's name or avatar now updates new messages and the header right away
- Page transitions: pick one in UI → Page Transition (Ink, Fade, Fade + rise, Slide, Slide over, Sheet, Shared axis, Zoom in/out, Pop, Blur, Flip, Circle reveal, Wipe); they play when you switch pages from the tab bar, menu or header avatars, and respect Smooth Animations and your system's reduce-motion setting
- Old World Agent transcript copies are moved out of settings.json (kept in data/worlds_archive), so settings load and save much faster; sync stops carrying them
- Character avatars are stored as image files next to the character, so big characters load, save and list faster (sync and backups still carry the image)
- Background replies save just the reply while they generate instead of rewriting the whole chat every few seconds
- "Load more" in long chats now loads 50 older messages at a time and keeps your place, instead of building the whole history at once
- Tap or click a notification to dismiss it
- Message details show which model wrote each reply (saved per version, so it follows swipes and survives reloads)
- Fixed a stray "·" in front of the message number on phones; the details read "time · model · #3" with speed and tokens underneath
- Stats: tap the ScyllaChat title in the mobile header to see how full this chat's context is (a colour bar split into preset, character card, persona, lorebook and chat history, plus free space), this chat's numbers (messages, tokens, average reply, tok/s, swipes, models), and overall totals across all your chats with a 30-day activity chart
- Desktop tab bar now has the logo, persona and character circles and the API status dot on the right, same as the mobile header: the circles open Personas / Characters (tap again to go back to Chat) and the logo opens Stats
- Long chats open much faster on phones: building each message no longer makes the browser re-lay-out the whole chat (opening a heavy chat went from ~5s to ~1.7s in testing)
- Replies stream with far less work in chats that have many images (the image display no longer re-checks the whole chat on every streamed word)
- Chats with many images check for saved images in one request instead of one per image (hundreds in long chats), finish sooner and stop when you switch chats
- Opening a chat no longer rewrites the chat file (and re-uploads it through sync) unless a regex actually changed a message
0.5.7
- Cleaner chat messages: one compact header with avatar, name and a quiet "time · tokens · #id" line
- Message actions show on hover with a mouse; the version pager stays visible when a reply has alternatives
- Messages and the composer now share one aligned reading column at every desktop width
- Generated images have rounded corners and less empty space below them
- Images that were never generated show an "Image not generated" bar with a Generate image button, instead of waiting forever
- Smaller, theme-coloured loading indicator
- Token metrics read "12s · 30 / 127 tokens" instead of bracketed text
- Recent Chats previews no longer show image prompts or * emphasis markers
- Model list errors now explain what went wrong instead of showing a blank message
- Soft theme-coloured gradients across the app: chat backdrop, message headers, avatars, character names, page headers, mobile header and menu
- The message box focus ring and send button now follow your theme colour
- Selected filter chips and the selected character card now use your theme colour instead of a leftover purple
- Preset: compact prompt lists with quiet controls and a filter box for jailbreaks; prompt details show depth only for depth-injected prompts
- Fixed blank scroll space at the bottom of settings pages
- Regex: compact pattern cards with an on/off pill, clearer option names and a visible delete icon
- Fixed regex errors showing on the wrong pattern; switching to "Trim out" now hides the Replace field right away
- Fixed stretched checkboxes on mobile
- Calls: compact rows with quiet actions, a grouped pipeline toolbar, switch toggles, and the help text tucked behind "How the pipeline works"
- Fixed the pipeline Exit button showing when the pipeline wasn't fullscreen
- Fixed typed Recap length values being rounded to a different number (e.g. 500 became 100) and saved values above 1500 being lost on reload
- Summarizer: proper page header, switches stay beside their labels on mobile, no large empty gap under the slider
- UI: compact quick-theme grid, a Custom CSS editor tall enough to use, and a smaller preview
- API: Prefill is a single-line switch; tidier section spacing; on mobile, tighter fields, aligned paired inputs and a full-width Logit Bias box
- Sync: compact layout, header and status left-aligned on mobile, consistent input sizes and readable password hints
- Code and monospace text (Sync values, Custom CSS, preset editor, regex fields) no longer shows in italics on some Linux systems
- Characters on mobile: Add / Group / Filters / Upload fit on one row
- World on mobile: a failed or unavailable scene image no longer draws an empty box over its message; the status and Retry sit centred, clear of the scene arrows
- Lorebook: entries are titled by their name with keywords underneath and a two-line preview; settings use aligned fields and a switch for recursive scanning
- Fixed the Lorebook "Filter entries" box doing nothing
- Fixed lorebook entries with order 0 or probability 0 being saved as 100, and a Max Tokens of 0 showing as 500
- Fixed garbled characters (dashes, emoji, non-English text) in background replies with streaming on
- Streaming no longer makes images flicker or resets your text selection and opened sections
- Plain-text replies no longer change look when generation finishes or after reloading the chat
- Smoother background streaming: text types out continuously instead of jumping every second
- Sending in long chats no longer briefly freezes the UI
- The chat stays scrolled to the bottom when a background reply finishes
- Cancelling a background reply now shows all the text that arrived, not just the part typed out so far
- Double-clicking or double-tapping Send no longer cancels the reply it just started
- Leaving a chat while a background reply is running and coming back no longer lets edits, swipes or deletes undo the rest of that reply
0.5.6
- Removed image-count footers from chat and World Agent while retaining the image rendering fixes.
0.5.5
- Images now appear individually as they finish, preserving interactive HTML, card UI, and custom image sizing.
- Generated images work in HTML backgrounds and show elapsed time, retry/download status, per-image retry controls, and ready/failed counts.
- World Agent displays scenes immediately while their referenced images load, without waiting for unrelated older images.
0.5.4
- Fixed tokenizer loading in packaged desktop and Android builds.
0.5.3
- Added configurable image steps, sampler, scale, and CFG settings.
- Image settings now persist in API presets and apply to chat and World Agent generation.
- Fixed image caching and browser tokenizer loading for reliable generation and startup.
0.5.2
- Fixed streamed replies briefly showing literal styling markup while generating (with HTML rendering off): the mid-stream text now shows clean raw prose and styles fully when the reply completes
- Added optional Kimi-K3 reasoning prefills: enable the API checkbox and start the final assistant jailbreak prefill with `<think>`
0.5.1
- Fixed the app failing to start after the 0.5.0 update ("Error during initialization")
- Fixed the loading screen's cached theme colors never applying (broken in compiled builds for several versions)
0.5.0
- Fixed Call Pipeline canvas on mobile: pinch zoom now actually works (anchored between your fingers), one finger on empty canvas pans the view, and the fullscreen button falls back to a full-viewport overlay with an Exit button on mobile browsers without the Fullscreen API
- Added Author's Note: a global note injected near the end of the prompt (configurable role and depth), with a saved-notes library (name, save, load, delete). Find it in the chat ⋯ menu — a green dot shows when a note is active
- The "Send last message as final" checkbox is now a "Prefill" toggle (same behavior, opposite polarity — checked means the last message is sent as prefill). Your saved setting carries over unchanged
- Added Prompt Processing to the chat ⋯ menu (default: None), opening a picker with descriptions: Merge consecutive roles, Semi-strict, Strict (user first), Single user message, Single system message, and NoAss — the whole chat sent as one name-prefixed assistant message the model continues as its own prefill (rentry.co/NoAss). The menu entry shows the active mode
- Empty and whitespace-only messages (e.g. left over from interrupted generations) are now stripped from the prompt before sending — some APIs reject them
- Fixed text styling with HTML rendering off: styled messages no longer show literal <span> markup, and nested styling (italics inside quotes, quotes inside bold, code with quotes) now colors correctly instead of spilling style attributes into the text
- Fixed pipeline canvas port wiring: tapping a block's in-port to complete a tap-tap connection works reliably now (it used to silently disarm), new blocks can't spawn off-canvas, and adding a block scrolls the view so both it and Main are visible
0.4.0
- New optional API parameters: Top A, Typical P, and Logit Bias (JSON token map) with per-model auto-detection
- New "Web search" toggle in Advanced Settings: lets the model search the web during generation (Claude server tool, OpenRouter :online, Grok Live Search, OpenAI search-preview)
- New "Prompt caching (Claude)" toggle (on by default): unchanged context re-reads at ~10% input price — swipes and long chats get much cheaper
- New Summarizer tab: enable auto-summary of old history, set recap length with a slider, edit the summarizer's prompt structure like a preset (system/user/assistant rows with macros), and view/edit/clear the current chat's recap
- The app now warns when a reply is nearly identical to the previous one (suggests swiping or raising repetition penalty)
- Fixed background-mode saves erasing card-trigger chat variables
- New Call Pipeline (Calls tab): a node-graph editor — drag Prepare/Rewrite/Preset/Saved call/Judge blocks on a canvas and wire them between the Main (preset) and Output blocks; parallel branches race and a Judge picks the winner; a Judge watching a single block loops it with feedback until it approves; a Yes/No judge routes the flow down green (yes) or red (no) wires; progress line on the composer
- Call Pipeline blocks are fully configurable: name/description, model (picked from your API's model list), temperature, top P, max tokens, penalties, preset (current or any saved), per-block web search, and chat history (full / last N / none, user-only or assistant-only) — grouped into clear sections
- Whole Call Pipelines can be saved as named presets, loaded/deleted from the toolbar, and exported/imported as JSON files
- Pipeline rewrites now show a pulsing "refining…" chip on the message while they run, and refined messages get a ± button that opens a modal with the full Diff (green additions / red removals), Original, and Refined views
- Pipeline block requests now stream internally (accumulated, not rendered), so long rewrite/judge calls no longer risk dying to connection idle timeouts
- When the last pipeline step is a plain rewrite block, its output now streams live into the message instead of swapping in all at once
- Rewrote the pipeline blocks' instruction wrapper: the old "Ignore previous instructions" phrasing made some models refuse the task ("I won't follow OOC overrides") — blocks are now framed as sanctioned app processing steps
- Call Pipeline canvas: wheel zoom on desktop, pinch and double-tap zoom on mobile, fullscreen button
- Fixed clicking a re-rendering control in a non-Chat tab bouncing you back to the Chat tab
- Fixed switching chats while a reply was generating: the reply could overwrite messages in, or get saved into, the newly opened chat — it now always lands in the chat it was generated for (visible when you switch back)
- Fixed flipping the streaming toggle while a reply was generating silently dropping that reply
- Fixed streamed replies leaking into another chat if you switched chats mid-stream (chunks kept writing into whichever chat was open)
- Fixed deleting a chat while its background generation was running: the late reply used to recreate the deleted chat — deletion now cancels the background task
- Background generation polling now retries brief network hiccups instead of detaching until you minimize/reopen the app
- Pipeline steps that produce no output (e.g. bad key/model on a block) now show a warning instead of being skipped silently
0.3.1
- Smaller Android APK (~1MB less): removed duplicated frontend files from the app bundle
- Fixed chat area leaving a large gap above the message box after the Android keyboard opens/closes
- Background-safe generation is now on by default everywhere (toggle still available in Advanced Settings, without popup notifications)
- Fixed swipe regeneration silently overwriting the previous message version when background generation is on
- Fixed touch-swipe regeneration sending the wrong chat context when swiping a message that isn't the latest
- Fixed the message box not growing while typing multi-line messages (was frozen at one line)
0.3.0
- Exported character cards are now spec-compliant V2 (chara_card_v2) and keep embedded lorebooks, alternate greetings, and extensions instead of flattening them away.
- Character import now reads V3 cards (ccv3 chunk) and plain .json card files in addition to PNG.
- Character cards with embedded lorebooks (character_book) now import the lorebook automatically and bind it to the character; V2 position values (before_char/after_char) are mapped correctly.
- Alternate greetings from character cards now appear as swipeable versions of the first message.
- Character post_history_instructions are now injected after chat history (with {{original}} support), and V3 single-colon macros ({{roll:N}}, {{pick:...}}) work.
- V3 .charx character archives now import, including the embedded icon as the avatar.
- Lorebook entries with V3 decorators (@@activate, @@position, @@role, ...) are handled: supported ones apply, all are stripped from prompt text.
- Card macros: {{char}} uses the V3 nickname when set, {{// comments}} are stripped from prompts, and {{original}} works inside a card's system_prompt.
- Lorebooks: V3 regex keys (use_regex) and standalone lorebook_v3 files import correctly; selective now follows spec semantics; @@activate_only_after/@@activate_only_every decorators map to delay/cooldown.
- The character editor now has dedicated fields for nickname, post-history instructions, alternate greetings, creator notes, card tags, creator, and version.
- New: group chats! Create a group from the Characters tab, members reply in turn (mentions and talkativeness decide who), with member chips above the composer to trigger, mute, or pass the turn.
- Lorebook V3 decorators completed: keep_activate_after_match, is_greeting, and spec-correct activate_only_after/every; new {{hidden_key}}, {{reverse}}, and stable {{pick}} macros; APNG cards import.
- Lorebook entries can now inject at a specific depth in chat history (@@depth decorator and SillyTavern position-4 world info).
- CHARX assets are now stored: embedded icons, backgrounds, and other assets survive import, and background assets display behind the chat for that character.
- Exported PNG cards now carry both V2 (chara) and V3 (ccv3) data, and a new "Export as CHARX" button in the character editor produces a V3 .charx archive with the avatar and stored assets embedded.
- Importing a card with tags now offers an "Adopt tags" button to merge them into your library tag filters (instead of ignoring or auto-merging them).
- Cards that ship regex scripts (RisuAI customScripts / SillyTavern regex_scripts) now offer an "Adopt scripts" button on import; adopted scripts only run for that character and show a character badge in the regex manager.
- RisuAI PNG cards with embedded emotions/extra assets (chara-ext-asset chunks) now import those assets into character storage instead of dropping them.
- RisuAI .charx archives with a module.risum now import fully: module regex scripts feed the "Adopt scripts" offer, the module lorebook binds to the character, and the module (including trigger scripts, which are never executed) survives re-export verbatim.
- Chat variables: prompts and cards can now use {{getvar}}, {{setvar}}, and {{addvar}} macros; values are saved per chat and persist across reloads.
- Interactive cards: cards that ship declarative triggers (stat systems, affection meters, etc.) now offer an "Enable triggers" button; once enabled they update chat variables, inject prompt text conditionally, and can add messages — all opt-in per character.
- Cards with JavaScript code scripts (RisuAI cjs/triggercode) can now run them in a sandbox — code executes with no network access and can't touch your settings or API keys, and a runaway script is auto-stopped. Opt-in per character with a warning.
- Lorebook entries with `@@position personality` or `@@position scenario` now render at those points in the prompt instead of defaulting to the top.
- The `{{pick::a::b::c}}` double-colon macro form now works (previously only `{{pick:a,b,c}}` did).
- New "Export as JSON" button in the character editor writes a spec-compliant V3 card.json (preserves embedded lorebook, greetings, and V3 metadata; strips local asset URLs).
- Card triggers now run Lua scripts (RisuAI triggerlua) and the full trigger-v2 opcode set, alongside the existing JavaScript triggers — all sandboxed, opt-in per character, with network/LLM access as a separate explicit grant.
- Conditional card syntax now works: {{#if}}/{{#if_pure}} blocks (including bare {{/}} closers and {{? expr}} conditions) and inline functions ({{equal}}, {{and}}, {{greater}}, {{getvar}}, arithmetic, etc.) are evaluated in both prompts and displayed messages instead of showing as raw text.
- Card image references now display: [🖼️|name] and {{asset::name}}/{{img::name}}/{{emotion::name}} render the card's embedded images inline in messages.
- Fully interactive RisuAI cards now render: display scripts build the card's HTML UI, the card's own CSS (backgroundHTML) is applied, clickable buttons run the card's scripts (e.g. a language/scenario picker), and images + conditional content appear — matching how the card looks in RisuAI.
- Large .charx files that previously failed to import ("card.json not found") now load correctly.
0.2.1
- Fixed the mobile keyboard leaving a gap under the chat and unfocusing the jailbreak editor while typing.
- Major performance pass: faster streaming and sends, smaller payloads, and far fewer disk writes across jailbreaks, characters, and sync.
- Character editing no longer drops embedded card data; PNG export now works with emoji and special characters.
- Theme colors now apply across the whole app chrome, plus visual fixes on mobile and wide screens.
- Hardened the sync relay and API server.
0.2.0
- Completed visual overhaul across desktop and mobile interfaces.
- Improved chat composer, navigation, characters, personas, presets, settings, modals, and responsive layouts.
- Fixed desktop and mobile scrolling, viewport sizing, race conditions, and layout regressions.
0.1.10
- Fixed mobile/APK character upload by using a native file-label trigger instead of a hidden programmatic click.
- Made character card import accept Android file pickers that return generic or missing MIME types for PNG cards.
- Improved Android WebView file chooser handling with openable document intents, multiple selection, MIME mapping, and read URI grants.
ScyllaChat