- Home now offers four clear starts and a visual character library with next-step guidance. Empty sidebar categories are hidden until requested.
- Everyday navigation is Home, Characters, World, Pictures and Try a conversation. Presets, regex and Quick Replies remain under Advanced tools.
- Character editing has six everyday tabs, a basics checklist, one consistent Ask AI entry point, and an expandable set of advanced tabs. Credit/version fields and bulk generation controls no longer dominate the writing view.
- Pictures follows the working character. Both entry points share an editable prompt, optional prompt-writing help, a visible Generate picture button, direct image settings, portrait upload, a character gallery and expression controls. Project picture library provides the separate project-wide search, expression/unused filters, usage details and undoable removal.
- Generation offers three scopes and persists the idea, tone and chosen steps across navigation/reload. Export offers PNG and CHARX first, with other formats in an expandable section.
- Searchable Help explains common tasks and opens the relevant screen without an AI request. Sections work from the keyboard, dialogs keep keyboard focus inside, and mobile has a reachable project library and wrapping navigation.
- Advanced tools now expose labeled Delete controls in project/workshop lists and editors, distinguish whole sets/presets from individual buttons/prompts, and confirm the named project copy before removal. Deletion offers a visible Undo action; the top-bar Undo is labeled too. Built-in prompts explain how to disable them.
- See the short guide for the updated workflow.
Validated on 2026-10-18 against the local development SillyTavern at 127.0.0.1:8123: 160 unit tests passed; the live integration suite reported 13 successful results (12 executed checks and its optional prompt-capture check skipped because no chat was open). Browser checks covered empty start, writing, generation draft persistence, portrait upload, card import/undo, picture removal/undo, PNG export round-trip, Help, advanced tools, review-plan opening and desktop/mobile layouts. No paid model requests or live image-generation calls were made for this update.
The verification below records the earlier feature releases; provider and image-generation results are historical.
Deletion follow-up (2026-10-18): 164 unit tests passed. Local Chromium checks at 1440×1000 and 390×844 verified cancel, keyboard dismissal, whole-set/preset removal, individual replies/custom prompts (including unused prompts), profile references, all three regex scopes, character-link restoration and protection against stale Undo notifications. Mobile testing found and fixed a clipped confirmation dialog. No relevant browser errors or warnings remained. Temporary test data was removed and the original local project restored; installed SillyTavern items were not changed.
Release 1.2.1 (2026-10-19): 220 unit tests passed. Avatar selection keeps old and new pictures available, changes only the intended character, and supports separate Undo/Redo steps. Further generated portraits keep the chosen avatar. CHARX export uses that avatar even when the imported card has a main icon, preserving other asset bytes. Local browser checks reproduced the old overflowing controls and layered portrait/expression preview, then verified click and keyboard selection, matching portrait/reference images, Undo/Redo, and contained controls at desktop and 390px widths using disposable pictures. The real local SillyTavern page also showed 1.2.1, the selected Seraphina portrait, and contained controls with no browser errors. No model or GPU requests were made. The README and quick guide describe the new Choose avatar section.
Release 1.2.0 (2026-10-19): 215 unit tests passed. New coverage verifies source preservation and fresh identity, local age averaging, missing/ambiguous age handling, word counting, bounded expansion, original greeting preservation, cancellation, project-switch protection, one-step Undo, later field requirements, and editable dialogue-variation instructions. The local in-app browser showed the actual remix form and calculated 30 + 40 as age 35. A disposable browser fixture using production UI, prompts, schemas and generation logic with only the model simulated verified full-card creation, automatic short-field expansion, unresolved shortfall reporting, editable/remembered minimums, Undo, connection errors and cancellation with no late character save. The real dialog fit a 390-pixel viewport without horizontal overflow; the viewport was restored. No browser errors were logged. No external model or GPU request was made, so model creativity and adherence remain to be tested with the user's chosen model. README, quickstart, searchable Help, manifest, package and visible version were updated.
The disposable UI fixture is served at tests/live/remix-ui.html inside the extension. It uses an in-memory
project and simulated model replies; refreshing resets it without touching saved projects.
Expression background-removal follow-up (2026-10-19): 201 unit tests passed. A simulated SillyTavern response matching the reported ImageRemoveBackground+ [rembg] / libnvrtc-builtins.so.13.0 failure reproduced the stop and misleading adapter advice before the fix. The corrected path retries once with only the cutout nodes removed, preserving the sampler, seed, reference image and adapter. The rest of that run keeps backgrounds, and the completion report explains why. Regression checks cover failure after an earlier successful mood, GPU out-of-memory in cutout/sampler nodes, CUDA errors outside cutout nodes, failure of the single retry, cancellation, and both face adapters. External image responses were mocked; no GPU job was launched, and the other instance's CUDA installation was not modified or live-validated.
Portrait recovery follow-up (2026-10-18): 195 unit tests passed. Pictures now shows the current portrait above the generator and automatically repairs missing portrait links using owned media, an explicit SillyTavern avatar filename, or a unique imported-card content match. Tests cover same-name ambiguity, existing portrait preservation, project/character switches, late uploads, request deduplication, Undo, deliberate deletion across reloads, and retry after failure. In the actual local in-app browser, the selected legacy Seraphina import recovered default_Seraphina.png; both Pictures entry points showed the saved 400×600 image, and the expression reference used the identical saved image with generation enabled. No AI or GPU generation was needed for this verification.
Field context and voice follow-up (2026-10-18): 181 unit tests passed. Field requests now include only selected earlier writing fields, unabridged, plus the target text and author's direction. Unit checks cover V2/V3 defaults, exclusion of unchecked/later fields, long descriptions, selection persistence/isolation, priority voice prompts and whole-character generation. Local Chromium at 1440×1000 and 390×844 verified checkbox defaults, a Scenario rewrite excluding Description, structured/raw Voice controls, three takes, additive quick directions retaining typed instructions, and alternate openings carrying the priority voice. The actual assembled requests were captured with mocked text-model replies; no external writing-model call was made, so accent quality was not evaluated. Preferences survived a page reload; mobile controls worked after closing the automatically opened proposal inspector. No browser exceptions or horizontal overflow occurred. Test data was removed and the original project restored.
Expression identity and deletion follow-up (2026-10-18): 174 unit tests passed. Two actual GPU generations (joy and anger) ran from the local test instance through its configured ComfyUI server using IP-Adapter Plus Face, the same portrait and seed, and no text-model request. Both graphs connected the reference adapter to the sampler; both retained the reference's hair, clothing and pose, with comparatively subtle mood changes. Transparent background removal was disabled for these checks. FaceID Plus v2 was not run: its nodes and model were present, but its matching LoRA was absent. A mocked missing-LoRA response verified persistent, actionable failure feedback with no unconditioned fallback. Local desktop/mobile checks covered direct picture/expression/character deletion, confirmation cancellation, Undo, and generation being disabled without a portrait. Original project data and settings were restored after testing.
Pictures follow-up (2026-10-18): 170 unit tests passed, including character ownership, saved drafts, late results after switching characters/projects, deletion during a save, and Undo. Local Chromium at 1440×1000 and 390×844 verified both Pictures entry points, context retention across Home and the project library, isolated drafts, prompt help filling the editable box, direct image settings, generation/save/display, missing-generator guidance and error recovery. Text-model and ComfyUI responses were mocked; image storage used the real local SillyTavern endpoint. No paid generation or live GPU request was made. No browser exceptions occurred. Temporary test data was removed and the original project restored.
| Suite | Result | What it covers |
|---|---|---|
| Live AI, whole roleplay (ST → OpenRouter → DeepSeek V3.1 Terminus) | 10 / 10 steps, about 5.5 min | One sentence → premise, character, card, 3 openings, 10-entry lorebook, preset, 2 regex scripts with passing tests, 4 Quick Replies, image prompts, self-critique. The run exposed five issues, all fixed and covered by unit tests: skipped card fields, a hung provider call, AI "secondary keys" that stopped entries firing, {{system}} lines in example dialogue, and sentence-long lore titles. Build the rest for me then filled only the two empty fields (30 s), and Resume recovered the interrupted run after a reload. Two later runs found three more issues, all fixed: optional schema fields came back empty, 54 tags, and one greeting where three were asked for. Latest runs (empty idea box, studio-created OpenRouter profile): Prometheus in the Gloom, 10/10 steps in 2 min 45 s, and The Glitch That Gnaws, 10/10 in 2 min 20 s. Neither had warnings; both had 7-8 tags, 3 openings and a lorebook whose preview fires through recursion passes |
| Independent code review of the generative release | 12 findings, all fixed, each with a regression test | Key safety: only studio-created keys can be deleted with a profile, never a shared or active one; a failed rotate removes the new key; a corrected key replaces the stored one. Pipeline: Polish in fill-only mode proposes instead of overwriting; a failed repair keeps what was written; a failed repair round-trip keeps the first answer; discard cleans links; single-step Retry; no auto-retry after a main-connection timeout; the time limit scales with answer length; no double starts, and the live run is shown first. Undo leaves run records alone. tidyExamples keeps "{{char}}'s…" prose; the Quick Reply script check matches ST's input[0] == '/' |
Install from the GitHub URL (/api/extensions/install, the call behind Extensions → Install extension) |
Works; the live suite passes 13 / 13 from the installed copy | Cloned as data/default-user/extensions/SillyTavern-CreativeStudio (v0.2.0). Only that copy loaded (dev copy disabled), the studio opened the saved projects, and ST's delete endpoint removed it cleanly |
Unit (npm test, Node 24) |
156 / 156 pass | Bringing things in and pictures (a card, a project, a bundle, a CHARX or a plain picture is told apart without parsing it in full; an import is one undo step for the character and its pictures and takes the place of an untouched blank; every way a character uses a picture; removing a picture clears its avatar, gallery, sprite and asset references; removing a character takes the pictures only it used, never shared ones); AI instructions and content levels (every writing task carries the level's rule and the fixed adults-only line for mature/adult, technical tasks none; the author's edited instructions replace the defaults and blank edits fall back; every instruction is listed on the page), Add to it (only the addition comes back; what was there stays word for word, joined as a paragraph, line or sentence), lore-entry context (keys, the book's other entries, linked characters only), picture negatives per level; Sprites from a character's picture (FLUX Kontext edit graph and loaders, edit wording, Kontext/VAE detection from ST's lists, face-only and whole-picture fallbacks, inline or uploaded picture, cutout order, what the server refuses is skipped and remembered); Bringing ST characters in (sprite folder with overrides, one picture per expression, lorebook link by ST file name on apply and in bundles); provider setup (storing a key keeps ST's active key, model listing, profiles hold only secret ids); per-call schemas that require the requested card fields; generation pipeline (dependencies, retry, resume, discard, fill-only, missing-field repair, auto-retry), gateway timeouts, example-dialogue repair, AI lore key/title mapping; PNG chunks, V1/V2/V3 normalization, CHARX round trips, card export shapes; project/proposal/provenance/snapshot model; lorebook defaults, lint, card⇄world conversion, activation simulation (recursion, groups, budget, placement order) on ST's Eldoria; regex engine semantics, stage matrix, lint, order conflicts; CC preset lint/assembly/diff on ST's Default preset and the 130-prompt Deus ex Machina community preset (lossless); TC fallback rendering with ST's ChatML templates; STscript scanner on a script ST's real parser accepts; QR id quirk and v1 migration; bundle zip round trip; sandbox playtest assembly; AI gateway routes, lenient JSON, schema coercion and repair; storage save/load, snapshots, two-tab conflict, offline fallback |
Live integration (tests/live/live-integration.js, in a running ST 1.19.0) |
13 / 13 pass, leaves no CSTEST_* artifacts |
ST context surface; reading ST cards; creating a character from a spec-V3 PNG with zero stored differences; merge-attributes apply (array replace, key unset) and backup restore; World Info save/read-back; preset save; studio CHARX accepted by ST's importer; bundle World Info accepted by /api/worldinfo/import; real STscript parser errors; Quick Reply live install; Text Completion preview rendered by ST's own functions; live WI settings; dry-run prompt capture |
| Live AI (ST → Custom OpenAI-compatible → Ollama qwen3:8b, CPU-bound) | Works end to end | Ideation via a separate connection profile with json_schema → 3 distinct concepts (438 s); concept → 11 field proposals (300 s); accepting a proposal updates the card and records provenance; sandbox playtest turn (card + 3 activated lore entries + Default preset, 5 messages) → in-character reply that uses the activated lore (178 s) |
| UI walkthrough (browser) | Every workshop opens and works | Pull from ST, compatibility matrix, embedded book → project lorebook, activation preview explaining recursion/whole-word effects, Prompt Manager + assembled preview + lint, regex stage preview in a worker, STscript live parse + effects + enum lint, bundle build with real avatar |
Legend: ✅ implemented and verified (unit and/or live) · 🟡 implemented, partially verified · ⬜ not implemented
- ✅ Generate a complete roleplay (Project): an idea or nothing (Surprise me), optional dials (genre, tone, rating, narration, reply length, card type, target model) → 10 linked steps; live progress; Stop, Resume after reload, per-step Retry, Discard
- ✅ Hands-free mode (default): AI output lands directly with provenance, undo and a snapshot before each run; Review mode keeps everything as proposals; toggle in the top bar
- ✅ Just build it for me (Characters), Build the rest for me (only what the character lacks; never duplicates artifacts), Critique & fix
- ✅ One AI box on every text field (card fields and lorebook entry content): a typed direction, then Add to it (the model returns only new material plus how it joins; the text already there is kept word for word), Rewrite, 3 takes, or one-click More detail / Tighter / Punchier; Write it when the field is empty. Live on Seraphina (OpenRouter → DeepSeek): Add to it on her 2,844-character description kept it exactly and added a
[Seraphina's fears= …]block in the card's own W++ format (3.0 s); on the Eldoria entry it kept the dialogue and continued it in the same{{user}}:/{{char}}:form (3.2 s) - ✅ AI instructions page (content pill in the top bar, the plug panel, or the palette): every instruction the studio gives the model, grouped, searchable, editable, with Reset and Reset all; edits live in SillyTavern's extension settings (and the studio's settings backup) and apply to every project
- ✅ Content level per project: Keep it SFW, Mature themes (default) or Adult, explicit allowed; its rule goes into every writing task (not into regex/STscript/preset engineering), mature and adult say "fiction by and for adults, no disclaimers, no toning down" and always add the fixed line "Anyone in romantic or sexual content is an adult."; the critique judges craft, not morality; the generator's rating dial sets it too
- ✅ One-click recipes: regex (added only if their own tests pass) and Quick Replies (added only if SillyTavern's parser accepts them; never run)
- ✅ Presets and worlds generate from the project when the goals are left empty and link themselves to the character; playtest scenarios can be invented
- ✅ Resilience: missing-field repair, a 240 s time limit per call, one automatic retry per step, dependency blocking, resumable runs
- ✅ AI for creation panel (plug icon, or + Add a provider… in any creation-model menu): OpenRouter, OpenAI, Claude, Google AI Studio, DeepSeek, Mistral, Groq, xAI, LM Studio, Ollama, other OpenAI-compatible. Keys go to SillyTavern's secret store with the previously active key restored, stored keys can be reused, model lists come from the provider through ST, and each provider becomes a native Connection Manager profile (secret id only) with a Test button. Verified live: OpenRouter (456 models, profile test 1.4 s), local Ollama listing, and the unreachable-server error
- ✅ Images settings (plug icon → Images): ComfyUI through SillyTavern's
/api/sd/comfy/*proxy (no CORS), checkpoints from the server (UNet/GGUF-only models excluded), prompt style per checkpoint (Pony score tags, Illustrious tags, natural-language SDXL; DMD2/Lightning fast sampling), optional 1.5× second pass, own Export (API) workflow adopted automatically or ST%placeholder%workflows, test render; or SillyTavern's Image Generation extension. Verified live against ComfyUI 0.28.3 (RTX 5070 Ti Laptop, 14 checkpoints): test render 13 s - ✅ Images tab per character: AI-written appearance + avatar / full-body / scene prompts in the checkpoint's style (appearance leads every character picture; "people" never in a character's negative); Paint / Paint all; first portrait becomes the avatar. Live: 3 pictures in 77 s
- ✅ Expression sprites (8 core or all 28 ST labels): base portrait cached by ComfyUI, then a 0.65-denoise re-sample per expression with the expression weighted first; transparent via ComfyUI Essentials' RemBG nodes (falls back to plain backgrounds). Live: 8 transparent sprites in 143 s, same face and outfit. Install into Character Expressions (
/api/sprites/upload) and CHARX export as V3 emotion assets - ✅ Sprites from a character's own picture (imported avatars above all; setting under Images): a FLUX Kontext edit when the server has a Kontext model (found in SillyTavern's model list as a UNet/GGUF entry; Nunchaku
svdq-, GGUF or plain loader; T5 and Flux VAE found by name), otherwise the face alone repainted (Impact Pack FaceDetailer + Ultralytics face model), otherwise a gentle whole-picture repaint. The picture goes in inline (Easy-Useeasy loadImageBase64or tooling-nodesETN_LoadImageBase64) or by a direct upload; cutouts by InSPyReNet (keeps long hair that isnet loses), then isnet. The ways a server accepts are found by trying (a refused graph costs nothing) and remembered per server. Darker moods tell the editor what replaces the smile. Live on ST's Seraphina (anime avatar): Kontext kept the art style, outfit and pose exactly; about 35 s a sprite at 1 MP / 20 steps (0.75 MP / 16 steps was faster but lost subtle moods such as sadness). Informed by the author's own ComfyUI expression workflows and the community "Silly Tavern V2" FaceDetailer workflow - ✅ Pictures from a character's own picture: with Kontext on the server, Paint makes the portrait, full body and scene from the avatar (the scene on a wide canvas, "with no people in it"); without it, pictures are painted from the words as before. Live: Seraphina's three AI-written prompts painted from her avatar in 130 s, same face, outfit and art style
- ✅ Edit wording tested on Kontext: "Remove the smile: … lips closed in a straight line" is what moves a smiling face to neutral; concrete cues (star-like highlights, both eyes closed, a small round open mouth) separate the quiet positive moods
- ✅ Stage: the painted scene as the set with the chosen sprite standing in it
- ✅ Portrait step in the generator (when images are set up)
- ✅ Pictures follow the content level: SFW adds safe tags and keeps nudity out; mature keeps only nudity out; adult keeps nothing out
- 🟡 Freshly painted sprites share one face with each other; sprites made from the avatar match it. Face-only and whole-picture repaints follow the checkpoint's style, so an anime avatar wants an anime checkpoint (Kontext has no such limit)
- 🟡 Kontext renders subtle moods (sadness, remorse) more gently than strong ones (fear, anger, joy)
- 🟡 Flux / Z-Image and other diffusion-only (UNet) models are not used: they need their own loaders and workflows
- ✅ SillyTavern saves its whole settings file from whichever tab saves last; in testing a stale tab rolled back the connection model, auto-connect, a Connection Manager profile and the studio's settings. The studio keeps
cstudio-settings.json(its settings plus the profiles it created; secret ids only) and on open restores what a stale tab removed. It never resurrects a profile deleted on purpose in Connection Manager
- ✅ V3 editing: core fields, alternate & group-only greetings, examples (structured or raw), system prompt / post-history, character's note (depth_prompt), creator notes (+ multilingual), source, dates, assets, raw extensions (preserved), nickname, character vs scenario kind
- ✅ Ideation: several distinct concepts (voice, contradiction, motive, secret, dynamic, pressure, openings, replay) → develop → draft all fields as proposals
- ✅ Per-field AI variants, greetings with distinct openings, critique (replacements become proposals, notes become diagnostics)
- ✅ Import PNG (chara/ccv3), CHARX (assets and unknown files kept), JSON V1/V2/V3; export ST-style PNG, spec-V3 PNG, CHARX, JSON V3/V2/ST-shape; lossy conversions reported
- ✅ Ways in for a card file: Import card… on the Characters page, the + next to Characters & scenarios (a menu: new character, new scenario, import card, from SillyTavern), the project menu, Ctrl+K, Open file… on the Project page (projects and bundles open, cards are imported), and dropping the file anywhere on the studio (no drag over the studio reaches SillyTavern's page-wide importer, which would add dropped files or links to ST's own character list; text dragged into a field still lands there; a damaged file gets a message and the rest of a multi-file drop still comes in). Each card and its pictures land in one undo step of their own; an import takes the place of an untouched blank character only when nothing points at it (no pending proposal, no build filling it). Removing a CHARX file also drops the card's asset entry for it, so a CHARX export falls back to the avatar. Live (ST 1.19.0): each way in imported Seraphina; Ctrl+Z took the character and avatar out together; ST's character list stayed unchanged
- ✅ Spec validation vs SillyTavern 1.19 support matrix per card
- ✅ Bring in from SillyTavern with what belongs to the character: card + avatar, its linked lorebook (
data.extensions.world) and its expression sprites (/api/sprites/get, Character Expressions folder override respected). Entry points: a feather in ST's character panel (next to Export; returns to the project that already holds the character, otherwise a new project named after it), Start from one of my characters… on the Project page, Characters → From SillyTavern…, and the command palette. The picker lists the current chat's character first, then by most recent chat, and marks characters already in the project. Live: ST's Seraphina with lorebook Eldoria and 28 sprites in 2.6 s; applying the untouched copy back reported no differences - ✅ Review diff and apply (merge-attributes) with backup/restore, create in ST with fidelity read-back. The card SillyTavern receives names the character's first project lorebook as its World Info link (by ST's file name), so generated lorebooks are linked in ST without manual wiring (live: created character stored
extensions.world) - ✅ Build the rest for me says what it will add for the character in view (openings, lorebook, preset, regex, Quick Replies, image prompts, portrait)
- ✅ Image prompts + painting (ComfyUI verified live; SillyTavern Image Generation
/imaginepath implemented, not exercised: no backend configured there) - ⬜ Renaming an ST-linked character from the studio (ST's file-name key needs
/rename; studio tells the user)
- ✅ All 1.19 entry fields, lint (unreachable entries, bad regex keys, unsupported decorators, outlet without name, …)
- ✅ Activation preview with reasons, competing books, inclusion groups, budget, recursion passes, placement ("what reaches the model"), live ST scan settings
- ✅ AI world design (per-entry selection), extraction from text or the current ST chat, contradiction/gap audit, key suggestions
- ✅ Import ST world / character_book / lorebook_v3; export ST world JSON and lorebook_v3; save to ST via
saveWorldInfo - 🟡 Simulator approximations: probability assumed, sticky/cooldown not simulated,
delayUntilRecursionlevels simplified (documented in the UI)
- ✅ CC Prompt Manager: order, enable, roles, relative/in-chat depth & order, triggers, forbid overrides, divider markers; samplers & formatting; other keys preserved
- ✅ Assembled preview (card overrides, generation type) + live dry run of ST's real prompt + AI critique
- ✅ TC: instruct / context / system prompt / reasoning / sampler presets; preview rendered by ST's own
renderStoryString+formatInstructMode* - ✅ Versions & compare (prompt-level diff), import (incl. Advanced Formatting master export), export (sensitive fields stripped), save to ST
- ✅ Connection profiles shown as selections, never mixed with preset contents; secrets never copied
- ✅ AI prompt generation from goals + sample outputs with per-prompt selection; TC system prompt generation
- ✅ Token counts in the assembled preview and field editors come from SillyTavern’s active tokenizer (estimates shown only until counts arrive)
- ✅ Global / preset / character scopes in engine order, full editor, import/export (new ids like ST), pull/save global to ST (backup)
- ✅ Stage preview for saved text, display, prompt, edit, World Info, reasoning and slash output, with fixtures and match highlighting; runs in a worker with a 2 s timeout
- ✅ Lint (flags, literal
$&, destructive "stored" mode, depth ranges, legacy placements, duplicate names) and order-sensitivity detection - ✅ AI generation from goal + examples; model-supplied tests are checked locally and become fixtures
- ⬜ Direct toggling of ST's scoped/preset allow-lists (ST asks the user itself on first use)
- ✅ Sets and buttons (all v2 options, context menus, automation IDs, intended global/character links), v1 import conversion, single-QR import/export
- ✅ Source editor + readable outline; syntax check with ST's real parser; argument/enum lint from the live registry; offline lint for known traps
- ✅ Effects & dependency panel (variables, generation, chat changes, calls, macros); command reference
- ✅ Reviewed test run in the current chat; AI generation with parse/effects shown per candidate; live install via Quick Reply's importer; save file
- ⬜ Step debugger (ST's own QR editor has one)
- ✅ Project tree, dependency/relationship report, health across all validators
- ✅ Publish bundle: ST-native files +
manifest.json+ install-orderREADME.md+project.studio.json; re-import projects or bundles - ✅ Apply to SillyTavern: reviewed plan with per-step opt-out, snapshot first, per-item backups and restore
- ✅ Snapshots, undo/redo, provenance history, multi-tab conflict protection
- ✅ Pictures (Media): clicking a picture opens its view (preview, which characters use it and how, origin, size) with Remove from project, which clears every place that shows it; pictures no character uses are marked unused and the broom on Media removes them all; removing a character takes the pictures only it used. Each is one undo step. Live: a project with three leftover pictures and no characters using them (as left behind by earlier versions) showed all three as unused, one click removed them, Ctrl+Z restored them
- ✅ Playtest: sandbox runs through any profile with full configuration capture, AI-played user, scripted scenarios, prompt inspection per reply, live ST chat capture with active config + dry-run prompt, ratings/notes, side-by-side compare
- ✅ Sandbox playtest turn verified against a real model (single turn; multi-turn scenarios use the same path, run time was CPU-bound)
- Exercise
/imagineimage generation with a configured Image Generation backend, and a multi-turn scenario on a GPU-backed model. - Claude Fable 5.1 native structured output in ST 1.19 may return
{}(suspected ST client/server mismatch); the gateway already parses raw text, but this is unverified against the real API. - (Done) Assembled-preview token counts now use ST’s tokenizer.
- The activation simulator does not track sticky/cooldown state across turns; playtests could feed turn-by-turn state.
- Keyboard: Ctrl+K palette, Alt+1…7, Alt+I, undo/redo, save, Esc; list navigation inside editors is mouse-first.
- i18n: UI strings are English only.