SkyrimNet Beta15 Released
๐ SkyrimNet Beta 15 Latest
SkyrimNet Beta15 @everyone
This release brings massive performance improvements to dialogue generation and response times, along with critical fixes for issues where actors would stop responding or the Game Master would stall. Building on Beta14's foundation, we've optimized template rendering, improved caching strategies, and eliminated several blocking operations that were causing slowdowns.
This should be the fastest and most performant version of SkyrimNet to date, particularly for users that were using a lot of community plugins; Let us know if you encounter problems, and have fun!
Major Performance Improvements @Minโ
This release brings significant performance optimizations to dialogue generation:
- 90% reduction in template render times in many cases โ single-digit millisecond renders on base SkyrimNet without plugins, low double-digits for users with a lot of complex templates
- Decorator-level result caching โ When a decorator is called with the same arguments during a render, the result is cached and reused. The cache is keyed on the NPC, player, and response target to ensure proper isolation between actors โ no data leaks between NPCs or across conversation flows. This cache lives for the entire request flow (from player input through NPC response), and is shared across all template renders in that flow, but is not reused beyond it
- Smarter cache warmup โ When you press the talk key, the system pre-renders templates to populate the decorator cache ahead of time, so by the time the actual render happens most decorator calls are already cache hits. A few templates (like event history) are excluded from warmup caching so the player's input is still reflected, but their internal
format_eventcalls still benefit from cached results - Reduced rendering overhead โ Internal refactoring eliminates redundant work when generating prompts, especially for nested templates
Papyrus Decorator Caching Changes @MIn @naitro2010โ
We've significantly improved the speed of Papyrus decorators by reducing consistency guarantees in favor of performance:
- Non-blocking resolution โ Template rendering no longer blocks waiting for Papyrus script calls. When cached data isn't available, the system immediately returns empty/stale data and logs a warning
- Prefer stale cache over blocking โ When Papyrus cache expires during async operations, the system uses expired cached data while refreshing in the background, rather than blocking for fresh data
- Extended cache TTL โ Papyrus and eligibility cache TTL increased from a few seconds to 15 minutes, dramatically reducing cache misses during normal gameplay sessions
- Fixed action cache regression โ Resolved caching issues related to paused game time that could return stale action data
For modders: If you require stronger consistency guarantees for your data, use native decorators like
get_worn_equipment(),is_in_combat(),get_faction_rank(), orpapyrus_utilwhich always return current values.
Biotemplate Translation Layer @Daikichiโ
Added a name translation system so non-English Skyrim installations can resolve localized NPC names to English prompt filenames โ no need to rename prompt files per language:
- Supports unique NPCs (matched by plugin + actor ref ID) and generic NPCs (matched by base NPC form ID โ localized name lookup)
- Handles light plugins (.esl and esp-fe) correctly
- Example:
ใชใใฃใข(Japanese) automatically maps tolydia_C94.prompt
Universal Translator Plugin Filter @Daikichiโ
Added a Plugin Filter to the Universal Translator page:
- Select plugins from those in your load order as either a whitelist or blacklist
- In blacklist mode, dialogue from selected plugins will not be translated
- In whitelist mode, only dialogue from selected plugins will be translated
- Uses LRU caching for better performance
New Template Decorators @Minโ
get_name(uuid)โ Access entity names without needing to usedecnpc. Useful for event history templates with many different actorsget_recent_events(uuid, count)โ Access event history from templates, synergizing with Beta14's caching changesget_event_history_count(uuid)โ Returns the configured event history count for dialogue context, with optional per-actor overrides via bio template key
CUDA Improvements @Dowserโ
- Better error messages when CUDA compute architecture is not supported
- More robust handling of unsupported CUDA configurations
- Improved provider auto-selection for GPU/CPU fallback
Bug Fixesโ
Stability Fixesโ
- Fixed Game Master directed dialogue stalling and never progressing that some users were encountering โ refactored dialogue generation system to be less complex and prone to stalling @Min
- Fixed a race condition where NPC continuation dialogues could get blocked when TTS is slow, causing conversations to stall @Min
- Fixed crash caused by template rendering in multi-threaded scenarios @Min
- Fixed eligibility functions becoming stuck (introduced in Beta14) @Min
Context Leak Fixesโ
- Fixed virtual NPC memory leak where private events could bleed into other NPC contexts @Min
- Fixed player thoughts leaking into NPC context @Min
- Fixed event context leak issue (NPCs seeing events they were not present for) @Min
- Fixed private virtual NPC events appearing in event history @Min
- Fixed target selector event history including ineligible NPCs @Min
Template & Caching Fixesโ
- Fixed several template caching issues that could return stale/incorrect responses @Min
- Fixed trace ID not resetting when streaming buffer is reused @Min
- Fixed decorator trace spans for more accurate debugging @Min
- Fixed pre-warm cache miss that prevented dialogue warmup from working correctly @Min
- Fixed embedded actions not working @Min
UI Fixesโ
- Fixed dashboard web UI rapidly polling and causing excessive CPU usage @Min
- Fixed dashboard NPC click incorrectly showing "create new bio" when bio was saved to current save profile @Min
- Fixed creating new character_bio submodule prompts failing validation โ now auto-generates proper template scaffold @Min
- Improved trace timeline rendering โ key spans are now expanded by default and long-running audio spans no longer compress the useful portion of the timeline @Min
Game Integration Fixesโ
- Fixed Omnisight screenshots sometimes showing title screen instead of gameplay @Min
- Added per-actor throttling for hit events to prevent engine overload during big fights @Min
- Dialogue from actors like Meridia, the Black Door, etc. are now properly detected @Daikichi
- Added PaarthurnaxFaction to default faction whitelist @Daikichi
Translation & Prompt Fixesโ
- Universal Translator now scans save-specific prompt directories, so actors with save-specific character bios are selectable @daikichi
- Fixed several misnamed prompt files and ref IDs for mod NPCs @Daikichi