Releases: xenofei/SillyTavern-ScenePulse
Release list
v6.13.8 — Profiles, Crash Log, GPU Fix + Slash/Macro Audit
12 releases worth of work since v6.11.9. The big changes:
🎭 Prompt + Schema Profiles (closes #15)
Each profile is a self-contained {schema, systemPrompt, panels, fieldToggles, dashCards, customPanels} bundle. Switch profiles via dropdown to swap setups (e.g. Medieval Fantasy ↔ Pokemon ↔ Modern Slice-of-Life) without manually editing prompts and schemas.
- Settings → Prompts → new "Profile" section with active dropdown + new/duplicate/rename/export/import/delete buttons
- Full Profile Manager overlay with inline actions, "Custom Panels" tag tooltip, Clear Panels per-row action
- Per-chat override — pin a different profile for one specific chat
- Read-through, not destructive — switching is
s.activeProfileId = newId, no copy, no risk of mid-edit data loss - Migration is automatic — your existing
s.schema+s.systemPrompt+s.customPanelsare wrapped into a "Default" profile on first load. Nothing lost. - Import safety: validates schema as JSON object, auto-suffixes name collisions
/sp-profile [name]slash command for chat-input switching
🐞 Combined Crash Log + Debug Inspector (closes #13)
- Captures errors from both ScenePulse AND host SillyTavern (
window.error,window.unhandledrejection, ScenePulse-internalerr()calls — tagged by source) - Persistent across reloads (in-memory + localStorage + server file flush)
- Settings → Advanced → Debug → 🔍 Debug Inspector opens a tabbed overlay:
- Activity — live debug log with filter/search/copy/export
- Last Response — pretty-printed raw LLM JSON
- Crashes — severity + source filters, expand-for-stack, "Report on GitHub" per row pre-fills a new-issue template
Replaces the previous SP Log + View Log + Last Response + Crash Log buttons.
⚡ 80% GPU at idle, fixed (fixes #14)
A reporter on RTX3060 saw extreme GPU usage just from loading the extension. Two specialist agents traced it to the "Water Droplet Matrix" decorative canvas in the Time dashboard card.
- WDM canvas gated behind a new "Reduce visual effects" toggle (Settings → General) AND
prefers-reduced-motion - Throttled 60→20fps with
IntersectionObserverpause when off-screen - Removed
mix-blend-modefrom dashboard layers (was forcing per-frame compositor work) - Weather overlay properly torn down on disable instead of left attached
- 13
will-change: transformdeclarations removed from weather particles
Expected: 80% → ~25% on defaults, 80% → near-zero with new toggle on.
🧪 Slash Command + Macro audits (closes #7, #8)
Both subsystems were marked "experimental needs further testing" since v6.3.6. Audited, fixed, locked behind regression tests.
Slash commands:
- New:
/sp-profile,/sp-refreshslash commands - Fixed:
/sp-togglenow handles custom panels case-insensitively - Fixed:
/sp-exportincludes profiles in payload - Fixed:
/sp-debughonorsmaxSnapshotsinstead of hardcoded30 - 50 regression tests cover the dispatcher + every synchronous handler
Macros:
- Fixed:
sp_charactersreturned''whencharactersPresentwas empty[](truthy-array gotcha) - Added:
sp_relationships,sp_main_quests,sp_side_quests,sp_quest_count,sp_char_count,sp_active_profile - Every handler wrapped in try/catch — runtime errors now log to Crash Log instead of breaking ST's prompt build
- 50 regression tests cover all handlers, both registration APIs, and error containment
📚 Character Wiki + Persistence Overhaul (fixes #11)
Three confirmed root causes for "characters disappearing from wiki":
- Wiki only iterated
latest.characters— now walks the cumulative roster across all snapshots - Pipeline non-delta path silently dropped off-scene characters every periodic refresh — now preserves
renderExistingrecovered only ONE prior snapshot when ScenePulse activated mid-chat — now walks every AI message chronologically and replays through delta-merge
38 regression tests cover the four scenarios end-to-end.
🪟 Polish
- Panel Manager no longer collapses to one line (fixes #12)
- Stuck scene transition overlay fix (fixes #10)
- Meter bar widths now stable across deltas at every resolution (mobile / 1366×768 / desktop / QHD / 4K) — was a CSS grid
min-width: autogotcha - Meter status labels capped at 4 words with hover tooltip showing the full text
- Portrait upload from Character Wiki avatars (v6.12.3)
- Crash Log + Debug Inspector overlays no longer dismiss the settings panel underneath
- Single-dialog enforcement so rapid-clicking Delete doesn't stack confirms
🧪 Test coverage
559 regression test cases across 15 suites. Every release runs the full suite. Notable additions in this stretch:
| Suite | Cases | Covers |
|---|---|---|
issue-7-slash-commands |
50 | Dispatcher routing, every synchronous handler, custom panel toggle |
issue-8-macros |
50 | All 18 macros, both registration APIs, error containment |
issue-11-wiki-persistence |
38 | Pipeline preservation, cumulative roster, mid-chat backfill |
issue-13-crash-log |
37 | Capture, dedup, ring eviction, persistence round-trip, logger bridge |
issue-15-profiles |
52 | Migration, CRUD, per-chat override, import safety, export shape |
Full changelog
See CHANGELOG.md for entries v6.11.9 through v6.13.8.
v6.11.9 — Panel Architecture Redesign + Bug Fixes
Full Panel Architecture Redesign
Complete rewrite of the panel layout system based on 15-agent expert analysis (architecture strategist, best-practices researcher, performance oracle, design reviewer, Dooms-Enhancement-Suite analysis).
Architecture
- Flexbox column layout — panel uses
display:flex; flex-direction:column; overflow:hidden - Per-section scrolling — each section scrolls independently within
max-height:70vh - Content stops at last element — no wasted space below short sections
- Zero bleed — sections occupy non-overlapping flex regions by construction
- Zero JS height calculations — flexbox handles all sizing
Toolbar
- Features dropdown (4 toggles → 1 button with checkboxes)
- Button groups with pill backgrounds
- State-driven brand icon (idle/generating/error)
- Contextual subtitle with live scene info
Typography
- 12px minimum font floor with CSS variable scale system
--sp-fs-basethrough--sp-fs-xl— override base to scale everything- ~200 font-size declarations migrated to variables
New Features
- Section header icons (SVG per section type)
- Collapse/expand all button for Characters + Relationships
- Elapsed field in Scene Details
- Sparklines visible at all resolutions
- Story ideas positional slot ordering (guaranteed 5 unique types)
Bug Fixes
- Fix stuck scene transition overlay (#10) — replaced unreliable
setTimeoutwithanimationendevent for cleanup. Card now removed from DOM entirely after animation.
Polish
- 40+ hardcoded colors → theme variables
- 10-item UX polish from design review
- Mobile/tablet mode fixes
- ~35 lines stale code removed
32 files changed, 900+ insertions, 710+ deletions
v6.9.14 — Per-Chat Custom Panels + Full Panel Overhaul
Highlights
Per-chat custom panel definitions — each chat owns its own panels. Create Fantasy RPG stats in one chat and Sci-Fi systems in another — switching chats shows only that chat's panels. New chats start empty; add panels via 13 genre templates, import, or manual creation.
Per-field toggles — disable individual fields within a panel without deleting them. The field is skipped from the LLM prompt and hidden from the UI.
Custom panel visual overhaul — meter fields show threshold-colored bars (green→amber→red with danger glow), enum fields render as severity-colored badge pills, list fields as chip tags, number fields in monospace wells. Custom sections get a teal left border.
What's New Since v6.8.6
Custom Panels (v6.9.11–v6.9.14)
- Per-chat panel definitions — each chat owns independent panel configs
- Enable/disable toggle per panel AND per individual field
- 13 genre templates: Fantasy RPG, Sci-Fi, Horror, Social, Superhero, Western, Cyberpunk, Medieval, Post-Apocalyptic, School, Pirate, Wuxia, Romance
- Export/import panel definitions as JSON
- Duplicate panel button, key collision detection
- Visual overhaul: threshold meters, enum pills, list chips, number wells
- Stable panel IDs for reliable per-chat storage
Core Features (v6.8.41–v6.9.10)
- Delta mode production-default (saves 66-77% output tokens)
- Scene Details overhaul (summary, tension meter, witnesses, changed dots)
- Organization tracking in relationship web
- Universal hover-enlarged portrait preview
- NAME AWARENESS character promotion, anti-contamination framing
- Quest validation (actionability, consolidation, urgency calibration)
- Model compatibility guide (Claude Opus 4.6, GPT-5.4, Gemini 3.1 Pro, GLM-5.1)
- WCAG AA contrast compliance, theme variable migration
- i18n extracted to 29 JSON locale files (JS codebase -35%)
- 10 test files with 200+ assertions
Model Compatibility (April 2026)
- Recommended: Claude Opus 4.6, GPT-5.4, Gemini 3.1 Pro / 3 Flash, Grok 4, GLM-5.1
- Compatible: DeepSeek V3.2, Mistral Large 3, Qwen 3 32B+, Llama 4 Maverick/Scout
- Not recommended: Models under 14B, heavily quantized (Q3/Q2)
Full changelog in CHANGELOG.md
v6.8.6 — Inline tracker prompt-following + two-tier recovery
Highlights
Two targeted improvements to the inline (Together) generation path that reduce tracker omissions and make the cases that still happen significantly cheaper to recover from.
Added
-
Head-anchor injection for the inline tracker prompt — a short reminder is prepended to the start of the chat context in addition to the existing tail reminder. Counters lost-in-the-middle attention behavior on long prompts: as the injected schema spec plus accumulated snapshot state grows past ~3k tokens, the appendix instruction at the end can lose attention weight and the model may forget to emit the tracker block entirely. The head anchor primes the model's planning phase to know structured output is required before it begins narrative generation.
-
Two-tier recovery for tracker omission — when extraction fails because no tracker markers are present in the response, ScenePulse now attempts a cheap continuation re-prompt before escalating to a full separate generation. The continuation passes only the response text and asks for a tracker JSON object for it.
- Cost: ~600–2500 prompt tokens vs ~6000 for the existing full fallback
- Latency: ~10–15s vs ~40s
- The tracker is generated from the exact text already on screen rather than being re-derived from chat context, so it stays in sync
- Falls through to the existing full separate generation if the continuation fails — worst-case behavior is unchanged
- Triggered only for the "no SP markers" failure mode when response length is between 500 and 2500 chars
- The "markers found, JSON unparseable" failure mode skips this tier and goes straight to the full fallback, since re-prompting will not change the underlying sampling/formatting glitch
Notes
Both changes target the inline (Together) generation path only. Neither touches cleanJson or the vendored jsonrepair library. The full separate-generation fallback is unchanged and remains the final tier of recovery.
Full changelog: v6.8.5...v6.8.6
v6.8.5 — Character Wiki, Relationship Web, jsonrepair, responsive overhaul
Highlights
Two major new features (Character Wiki + Relationship Web), a from-the-ground-up responsive overhaul (container queries, tablet fullscreen, auto-condense), and a real tokenizer-based JSON repair pipeline that finally handles unescaped quotes inside string values.
Added
- Character Wiki overlay — full-screen browser for every character ever encountered, not just those currently in scene. Walks all snapshots once on open to aggregate first seen / last seen / appearance count / last known location. Per-character cards with appearance grid, relationship meters with mini sparklines, goals, inventory, fertility, and history metadata. Search, filter pills (All / In Scene / Absent), sort (name / first seen / last seen / appearances / relevance), compact grid view, per-character user notes, avatars, JSON / MD export.
- Relationship Web visualization — SVG circular layout graph of all characters with relationship edges. Edge weight reflects relationship strength; node color matches per-character color assignment. Reachable from the Character Wiki header.
- Container queries for the panel —
#sp-paneldeclarescontainer-type: inline-sizeso child styles can react to the panel's actual width. Replaces viewport@mediaqueries that broke onposition: fixed. New breakpoints at 550px and 380px. - Tablet fullscreen mode — 601–1024px viewports now match the mobile fullscreen overlay pattern, with the mobile slide-up animation and the mobile-style top bar.
- Auto-condense at intermediate widths so the panel stops bleeding into the chat area before mobile mode kicks in.
- Vendored
jsonrepairv3.12.0 (ISC) for inline tracker JSON parsing — 106-case validation suite undertests/vendor/.
Changed
- Quest journal UI — NEW / UPDATED / RESOLVED badges right-aligned alongside action buttons.
"upd"abbreviation replaced with the full localized label, capitalized via CSS so all 29 locales render naturally. - Inline tracker JSON repair —
cleanJson()now usesjsonrepair(tokenizer-based) instead of nine in-house regex passes. Worst-case behavior is unchanged: a clean throw still triggers the existing separate-generation fallback. - Character storage now accumulates the full historical character set forever; the view layer trims via
filterForView(). This is what powers the Character Wiki overlay. - Interceptor prompt — removed "silently / hidden" wording that some models parroted into narrative. Concrete delta payload examples improve schema compliance.
Fixed
- Character / relationship sync —
filterForView()reconcilesd.charactersagainstd.charactersPresentand stubs missing entries fromd.relationships. Resolves the "4 relationships shown but only 1 character" gap. - MemoryBooks compatibility —
GENERATION_ENDEDhandler now guards oninlineGenStartMs > 0so extraction only runs against generations ScenePulse actually injected into. Other extensions firingGENERATION_ENDEDfor their ownquietPrompt()calls will no longer corrupt their messages. - Streaming hider regex broadened to match
[SCENE TRACKER ...]echoed instruction headers some models emit during streaming. - JSON parse error logging now matches both V8/Chromium
position Nand Firefoxline N column Nformats. Previously the logged context window was always anchored at position 0 on Firefox. - Fallback warning text distinguishes
markers found, JSON unparseable(sampling/formatting failure) fromno SP markers(prompt-following failure). Conflating these previously sent investigations down the wrong path. - Live language switch for settings, schema-edit protection (lock confirm), experimental-feature caution labels, miscellaneous settings i18n fixes.
- Wiki meter row spacing — label column widened so "Compatibility" no longer overflows into the bar.
Full changelog: v6.6.0...v6.8.5
v6.6.0 — Scene Intelligence Overhaul
What's New in v6.6.0
Highlights
- Auto-update system — Amber pulsing dot + "Update & Reload" button when a new version is available
- Relationship sparklines — Mini inline graphs on each meter, full-screen SVG graph overlay with hover tooltips
- Historical node navigation — Click timeline dots to scroll to that message in chat, auto-loading lazy-loaded messages
- Token usage analytics — Full-screen panel with per-snapshot breakdown
- Theme presets — Default, Midnight, Fantasy, Cyberpunk, Minimal
- Slash commands & macros —
/sp status,/sp regen,{{sp_location}}, etc. (experimental) - Settings tabs — General, Generation, Prompts, Advanced
- Unlimited snapshot storage — Configurable in Advanced settings
Relationship Meters
- Unique per-meter delta icons (heart, star, Adinkra, lightning/shield, venn rings)
- Green/red/yellow color-coded +/- indicators
- Previous-value white marker on bars
- Mini sparklines always visible
Generation
- Shared extraction pipeline eliminates code duplication
- Smart snapshot selection for context embedding
- Post-extraction schema validation
- Function tool calling (Separate mode, experimental)
- Streaming hider with aggressive early JSON detection
Quality of Life
- Message highlight with glow pulse + graceful fade
- Browse All: paginated (10/page) with tension badges
- Keyboard shortcuts: Alt+Shift+P (panel), Alt+Shift+R (regen), Escape (close)
- Config export/import as shareable JSON
- Accessibility: focus-visible, prefers-reduced-motion
- max_tokens no longer overridden by ScenePulse
See full changelog for complete details.