Skip to content

SkyrimNet Beta26

Latest

Choose a tag to compare

@MinLL MinLL released this 03 Oct 21:46
· 11 commits to main since this release
d5354f5

SkyrimNet Beta26

Beta26 introduces TypeSafe's Jev as the new approach to choosing conversation targets, speakers, and moods. It brings a significant improvement in speed, cost, and reliability for these behind-the-scenes decisions, while your chosen dialogue models still write what characters say. You should notice even faster conversation responses than in beta25, which was in turn much faster than beta24.

This release also makes spoken voices more consistent throughout conversations, improves memory recall for non-english users, fixes several VR issues, fixes subtitles and OmniSight compatibility with upscalers, and expands the tools available to mod authors.

Faster, Cheaper, More Reliable Conversation Decisions (Min, Dowser)

SkyrimNet now uses TypeSafe's Jev, a dedicated decision model, for three of the main jobs previously handled by the chat-based Meta approach: figuring out who you are addressing, choosing who speaks next, and selecting character moods.

Instead of asking a chat model a question and interpreting its written response, Jev chooses directly from the available options. This is a significantly faster, cheaper, and more reliable way to handle these tasks.

Your chosen dialogue models still write what characters say. Jev handles the supporting decisions, not the dialogue itself. The previous chat-based Meta approach remains available for now, and built-in conversation decisions fall back to it if a decision request fails.

What Changes in Conversation

  • Choosing who answers: When your intended recipient is unclear, the NPC you are looking at replies, or the nearest NPC if you are not looking at one.
  • Continue Narration: Pressing F8 asks the decision model who should carry the scene forward, usually whoever spoke last. Without decisions, the last speaker continues as before.
  • Continuous mode: The GameMaster still decides that someone should speak and suggests a speaker; the decision model makes the next-speaker selection. Bystanders join only when named, spoken to, or directly concerned.
  • Knowing when to stay quiet: The next-speaker decision can always choose silence. Speaker Selector Silence Chance applies only to the previous chat-based selector.

Settings and Providers

Jev is enabled by default when you have an OpenRouter key, even if your dialogue models use other providers. Jev is a paid model with no free tier.

Under Settings → Conversations → Decision Model, you can toggle target, speaker, and mood selection independently and adjust how many recent events the model considers. There are also two optional confidence checks, both off by default.

AI → Providers now includes an API Style field with Chat Completions, Decisions, and System One options. The built-in OpenRouter (Decisions) provider reuses your OpenRouter key, and the Decisions variant is added automatically on load.

To use TypeSafe directly with its own key, add a provider using System One and select it on the Decisions card under AI → Models. Decision models need a Decisions or System One provider rather than a chat-completions provider.

Speech, Voice Input, and Audio

Whispering and Other Voice Styles Last Through the Whole Reply (Min)

An NPC who starts whispering should not suddenly return to their normal voice after the first sentence.

SkyrimNet can include short instructions such as [whispers] alongside dialogue to tell a voice engine how to say the words. These are called audio tags, and this improvement works with any voice engine that supports them.

Because speech is generated one sentence at a time, an instruction at the start of a reply could previously affect only its first sentence. These instructions now carry through the rest of that reply unless a later sentence supplies its own tags.

One-off sounds such as laughs, coughs, and sighs are not carried over, so they happen once rather than repeating with every sentence. Subtitles are unchanged.

Configure which instructions carry over under Voice → Carry-Over Audio Tags. Tags are grouped into categories such as Volume, Anger, and Sorrow; you can disable individual categories or add your own lists.

More Consistent ElevenLabs Voices Between Sentences and Turns (Min)

ElevenLabs now receives the speaker's earlier lines with each request, helping it maintain a consistent tone instead of treating every sentence as if it were the start of a new conversation.

This complements the audio-tag improvement above: tags preserve explicit instructions such as whispering, while earlier-line context helps the voice engine maintain the speaker's delivery across sentences and between replies.

Voice → Text-to-Speech → ElevenLabs → Send Earlier Lines as Context is enabled by default. It works with eleven_v4 and eleven_v4_turbo. New model configurations default to eleven_v4_turbo; existing configurations keep their selected model.

While this option is enabled, lines are sent one request at a time. The tradeoff is that the end of a long reply may arrive later.

Voices cloned from Skyrim voice types also start subsequent lines faster. Only the first line for each voice in a session looks up which ElevenLabs voice to use; later lines reuse that result and skip two requests, saving about 0.2–0.4 seconds per line.

Voice Input, Subtitles, and Playback Fixes (Min)

  • Short noises are ignored: Clicks, coughs, and breaths shorter than a quarter second no longer open an Open Mic line or reach transcription.
  • Subtitles without speech: NPC lines appear as subtitles when the voice engine is disabled or fails to generate a line.
  • Long subtitles keep updating: Long replies no longer freeze once the subtitle fills up. Subtitle rendering also avoids a timing conflict with the game that was a suspected, but unconfirmed, cause of crashes with long Russian lines.
  • Internal reasoning stays out of dialogue: Models that include their working text inside <think> blocks no longer have that text spoken or subtitled while the reply is arriving.
  • Bards do not talk over their own songs: Starting a song no longer makes the bard speak a line over its opening. Nearby NPCs still remember that the song began.

Memory and Character Fixes

Non-English memory recall (Min): Fixed recall problems affecting Russian, accented text, Chinese, Japanese, Korean, and curly quotes. Affected memories are reprocessed once on first load so they can be recalled correctly. NOTE: For users with long playthroughs, your first load may take a while depending on how many memories need to be updated and fixed. Some Russian community members in the alpha reported 15+ minutes for 6 month long playthroughs.

Edited memories (Zevick): Changing a memory's text on the Memories page now updates what NPCs recall it by, rather than continuing to match the old wording.

VR memory persistence (Min): With the VR playroom enabled, loading a save no longer puts NPC memories into a temporary database that disappears on the next launch.

NPCs with the same name (Zevick): Looking up an NPC by their game ID no longer mixes their diaries and memories with those of other NPCs who share the same name. These lookups also work for actors with non-English names.

Joyful memories (Zevick): New and edited memories marked JOY retain that type instead of being saved as EXPERIENCE. Existing entries are unchanged.

Player name updates (Zevick): NPCs and prompts use your new name as soon as character creation or showracemenu closes, rather than continuing to call you “Prisoner” until a save and reload.

NPC Awareness and Game Controls (Min)

Actor filters: Closed several gaps that could allow excluded actors, including animals, to respond in some situations.

Line of sight hardening: Improved visibility checks in inn rooms and other situations to reduce cases where NPCs outside a closed room could overhear conversations, and show up in the chat menu. Please report if you still encounter this anywhere.

GameMaster toggle: Turning the GameMaster off through a hotkey, the wheel menu, VRIK, or MCM now stays off after restarting the game.

Compatibility and Stability (Min)

OmniSight with upscalers: Captures taken with upscaling or frame-generation mods, including PureDark's Skyrim Upscaler, no longer reach the vision model as blank images.

Model download verification: Downloaded model files are checked to make sure they are intact, using SHA-256 checksums. On the first launch after updating, each file is checked once. A file that fails verification is kept as <name>.replaced and downloaded again. A stalled download fails after one minute instead of hanging indefinitely.

Self-referencing prompt templates: A custom prompt that repeatedly includes itself now stops after 16 nested levels and is identified in SkyrimNet.log, rather than crashing the game when you speak or type.

Plugin Hub (Min)

Resubmit without starting over. Selecting Resubmit on My Plugins reopens the submission form with the details from the rejected attempt already filled in.

Tagline and description fields now show character counts and prevent submission while either is over its limit.

For Mod and Content Authors

The C++ public API is now v12, with custom decision requests alongside new diary, memory, event, actor-search, and timeline-state capabilities.

Custom Decision Requests (Min)

Mods can ask the decision model typed questions, such as choosing an option, answering yes/no, or returning a score, without parsing a free-form chat reply.

Ship a decision template under prompts/decisions/ and call SkyrimNetApi.SendCustomDecisionToLLM from Papyrus or PublicSendCustomDecisionToLLM from C++ using public API v12.

The callback's first argument is the answer to the template's first question, returned as a string: the option key, "true" or "false", or the score. Probabilities and answers to further questions are available in the JSON argument. For example:

GetJsonFloat(resultJson, "<id>.p.<key>", 0.0)

Custom decision requests do not fall back to chat. Without a decision provider, the callback receives success = 0 with error no_decisions_route, and nothing is sent. This differs from the built-in conversation decisions, which can fall back to chat prompts.

The full callback contract and error codes are documented in SkyrimNetApi.psc and PublicAPI.h.

Diary and Memory APIs (Zevick)

C++ integrations can add, edit, and delete diary entries for any actor, and edit or delete actor memories.

  • PublicAddDiaryEntry, PublicUpdateDiaryEntry, and PublicDeleteDiaryEntry: Added diary entries receive a memory and fire SkyrimNet_DiaryCreated, like generated entries. Tags are stored as supplied by the caller.
  • PublicUpdateMemory and PublicDeleteMemory: Update a memory using a JSON object containing the fields to change, or delete it. World knowledge and a diary entry's own memory are excluded from editing.
  • Change notifications: Edits and deletions, including those made through the dashboard, fire SkyrimNet_DiaryUpdated, SkyrimNet_DiaryDeleted, SkyrimNet_MemoryUpdated, or SkyrimNet_MemoryDeleted. Query results include updated_at.

Diary Queries (Zevick)

PublicQueryDiaryEntries filters an actor's diary by tags, emotion, location, importance, date, or ID range. It uses the same JSON query style as PublicQueryMemoriesForActor, with a typed DiaryQuery in PublicAPIDiaryQuery.h.

Order by ID to read entries in the order they were written. IDs never rewind or get reused, even when loading an earlier save causes entry_date to move backward.

Event Registration and Recipient Control (Zevick)

PublicRegisterEvent registers any event type from C++, like Papyrus RegisterEvent.

Supplying an actor list limits perception to those actors plus the event's originator and target. Nearby bystanders, virtual NPCs, and the player are not automatically included, allowing something like a letter's contents to reach only its recipient. Without a list, the event reaches everyone nearby as before.

Actor Search and Timeline State (Zevick)

PublicSearchActors finds any actor SkyrimNet has registered in the current save by partial name, whether currently loaded or not, with the best match first.

PublicGetTimelineState reports none, pending, kept, or cleared, so integrations can tell when the keep/clear choice after loading a save has been resolved. Writes are refused while the state is pending; SkyrimNet_TimelineResolved fires with the outcome.

Carry-Over Audio Tags in Plugins (Min)

Plugins can add their own lists of audio tags to carry across sentences by shipping config/ lists in the Content Library. These extend the categories shown under Voice → Carry-Over Audio Tags.


SkyrimNet Beta26: TL;DR

  • Jev conversation decisions: Significantly faster, cheaper, and more reliable target, speaker, and mood selection; your dialogue models still write the conversations.
  • Setup and fallback: Jev runs by default with an OpenRouter key and has no free tier; the previous chat-based Meta approach remains available as a fallback.
  • Conversation flow: Better handling of unclear recipients, Continue Narration, and bystanders joining continuous conversations.
  • Consistent voice styles: Whispering and other speech instructions carry through a whole reply on tag-supporting voice engines, without repeating one-off sounds.
  • ElevenLabs improvements: Earlier-line context helps maintain tone between sentences and turns, while reused voice lookups reduce delays.
  • Voice and subtitles: Ignore very short noises, keep subtitles working when speech is unavailable, and fix long subtitles and spoken reasoning text.
  • Memory fixes: Improve multilingual and edited-memory recall, separate same-named NPCs' histories, and preserve joyful memories' type.
  • VR memory persistence: NPC memories survive restarts when using the VR playroom.
  • NPC awareness and controls: Stronger actor filters and visibility checks, immediate player-name updates, and a GameMaster toggle that stays set after restarting.
  • Compatibility and stability: Fix blank OmniSight captures with upscalers, verify model downloads, and prevent self-referencing prompt crashes.
  • Plugin Hub: Resubmit rejected plugins without retyping the form, with character counts and length checks before submission.
  • Custom mod decisions: Papyrus and C++ mods can request option choices, yes/no answers, and scores with structured results.
  • Expanded mod APIs: Create and edit diaries, update memories, control event recipients, search actors, and track save-timeline decisions.

IMPORTANT:

  • As mentioned above, users playing in non-roman languages like Russian or Japanese will have a much longer load-time their first load after the upgrade. This is normal, as the system repairs memories that were previously failing to work correctly. Be patient - And enjoy greatly increased memory recall precision after this is done.