Skip to content

Releases: MinLL/SkyrimNet-GamePlugin

SkyrimNet Beta 22.1

Choose a tag to compare

@MinLL MinLL released this 03 Jul 05:59
040fda1

SkyrimNet Beta22.1

A small stability hotfix on Beta22.

OmniSight HDR/SDR Screenshot Detection @langfod

Reworked how OmniSight decides whether your game renders in HDR or SDR when it grabs screenshots for the vision model, and added a manual override for when auto-detection guesses wrong.

New OmniSight setting: Auto / HDR / SDR. Auto (default) detects the backbuffer colorspace itself; force HDR or SDR if it gets it wrong.

Quest Journal Decorator Reverted @Gerkinfeltser

Beta22's newer quest-journal integration (the get_quest_journal decorator and the party-quest prompt built on it) is disabled here, reverting quest context to the older, less powerful version. This is a stability fix — the newer path was causing problems for some VR users, this will return in a future release.

Dragonborn Voice Over: Pin to v1.1.1 @Dekana @zevck

If you use Dragonborn Voice Over, install v1.1.1 — not 2.x. DBVO 2.x moved to a DLL and dropped the .swf file our integration depends on, which breaks it. The dependency instructions now specify v1.1.1.

Bug Fixes

  • Gamepad buttons wouldn't open the dashboard — Fixed; controller now opens the SkyrimNet dashboard. @zevck

SkyrimNet Beta 22

Choose a tag to compare

@MinLL MinLL released this 27 Jun 10:47
be4f275

SkyrimNet Beta22

Quest Journal Awareness @PhospheneOverdrive

NPCs can now read your actual quest journal — the same quest names, journal narrative, and objective list you see in your own log — and bring it into conversation. A follower can ask how the hunt for the dragon is going, comment on the step you're stuck on, or react to a job you just wrapped up, all from your real, current journal rather than a vague "you're on a quest somewhere" hint.

Until now the quest data handed to characters was raw engine text, riddled with the tokens the game normally substitutes at display time. Aliases, location names, and progress counters all came through unresolved — so a character "reading" your journal saw nonsense. That's all resolved now:

Quest Before After
Rare Gifts Bring one Mammoth Tusk to <Alias.ShortName=QuestGiver> Bring one Mammoth Tusk to Ysolda
Retrieve Lost Item Retrieve Lost Item from <alias=locationAlias> Retrieve Lost Item from Fellglow Keep
Ice Wraith Teeth Find 5 Ice Wraith Teeth for Marise (<Global=…>/…) Find 5 Ice Wraith Teeth for Marise (1/5)

More importantly, characters now get the journal narrative and your objective progress, not just the title. Here's the kind of thing a follower can actually see for a main-quest step — narrative text in your character's own voice, with finished objectives marked [DONE]:

Dragon Rising
Word reached Whiterun that a dragon was attacking the Western Watchtower.
The Jarl's housecarl, Irileth, gathered a few guards to deal with it, and
I went with them.

  • Go to the Western Watchtower [DONE]
  • Kill the dragon [DONE]
  • Absorb the dragon's soul
  • Report to Jarl Balgruuf

Because the done markers carry through, a character can tell the difference between "you've already slain the dragon" and "you still need to report back to Balgruuf" — and talk to you accordingly, instead of congratulating you on something you haven't done yet.

It rides along in a new party-quests bio section. Active quests show the resolved name, the journal narrative, and your displayed objectives with [DONE] markers. Misc tasks show as a flat list of outstanding objectives; quests sitting inactive in your log can be surfaced too, but are off by default. Controlled by show_misc_tasks (on by default) and show_inactive_quests (off by default).

Quest context is also centralized now — player and follower thought prompts used to render quest info twice, so thoughts and bios no longer double up on it.

Inventory-Aware Prompts @PhospheneOverdrive

Two new decorators let prompt authors react to what someone is actually carrying:

{{ get_item_count(player.UUID, "Gold001") }}
{% if has_item(npc.UUID, "Lockpick") %}NPC has lockpicks{% endif %}

get_item_count returns how many of an item an actor holds; has_item is the true/false version. Both take either an editor ID ("Lockpick") or a form ID (0x0000000F).

OpenRouter Routing Visibility @zevick

If you route through OpenRouter, you can now see and steer which underlying provider it picks.

  • API requests show the routed provider next to the model name, so you can tell whether a given call actually went to, say, Together or Fireworks.
  • A searchable "ignore providers" dropdown under Providers → OpenRouter → Advanced lets you exclude providers you don't want. It flags which providers have had recent requests, and you can search by provider or by model name to see every provider that serves a given model.
  • Logs → API Requests is searchable by provider name.

Request Cost in API Logs @zevick

The API logs now show what each request cost, just to the left of the provider and model:

$0.0002 - novita - qwen/qwen3-vl-235b-a22b-instruct

It appears in the Logs list, the request-detail modal, and the home page's Recent API Requests module. Sub-cent amounts get extra decimal places, and the cost is hidden entirely when it's zero or unavailable. This is automatic on OpenRouter; other providers are unaffected. As a bonus, failed requests now show which upstream provider they actually routed to (recovered from the error body) instead of leaving it blank.

Startup Diagnostics @zevick

If your install is broken or incomplete, SkyrimNet now tells you in plain language with an in-game message box, instead of burying the problem in raw debug notifications you'd have to decode yourself. It catches the common failure shapes:

  • Missing dependencies — split into critical (SkyrimNet won't run) and optional (some features degrade), so you can tell what's actually broken from what's merely nice-to-have.
  • Runtime failures — config, database, or web-server problems that left SkyrimNet half-initialized, including a watchdog for "the game loaded but the database never came up."
  • First-run setup guidance — a setup box that points you at the dashboard (and shows your real dashboard hotkey), with a live Discord invite button if you get stuck.

Each tier can be dismissed on its own, and a dismissed warning auto-clears once you fix the underlying problem. There's also ESL-aware handling so a missing skyrimvresl/BEES doesn't snowball into a bogus "SkyrimNet.esp is missing" warning. Tested on both SE and VR.

Open the Dashboard from Wheel & MCM @zevick

You can now open the in-game dashboard without reaching for a keyboard — handy for controller and VR users. There's a new top-level Open Dashboard entry in the wheel menu, plus an MCM-bindable dashboard hotkey you can set under SkyrimNet's controls. The bound key toggles the dashboard open and closed even while Papyrus owns the rest of the hotkey set.

A couple of related web fixes came with it:

  • Custom web-server ports now work — the dashboard and the in-tutorial audio tests only functioned on the default port 8080; if you'd moved the web server elsewhere (e.g. 8083), the dashboard silently refused to open and audio tests broke. Base-URL resolution now waits for the real server address instead of assuming 8080.
  • Clear Recent Events takes any amount of time — instead of a handful of fixed presets you can type any number of game-hours, plus a new All button to wipe the lot.

Dashboard @zevick

Tutorial overview. The tutorial now has a second half — a guided walkthrough of SkyrimNet's core systems (Prompts, Triggers, and more) with worked examples. The Prompts step walks through the 0010_setting world prompt, and the Triggers step hands you a ready-made example trigger that writes a player diary entry when you sleep (SkyrimNet ships with no triggers by default, so this gives you something concrete to start from). Tutorial steps also no longer hard-gate the Next button behind running their test first.

Character overrides are now one editor everywhere. The Settings and Characters pages share the same override components — config sections, group inheritance, and character settings are available in both (Characters just omits the Override Targets pane). voice_id override fields get the same searchable, free-typeable voice dropdown as the rest of the voice settings, and a dialogue-model override now pre-selects the provider from the base endpoint instead of opening blank.

Per-slot provider overrides. When you edit a model's advanced parameters in your rotation, you can now override provider_settings and the SSE streaming config for that individual slot, instead of the change applying to every model.

Prompts page. You can pin prompts to the top of the list (0010_setting.prompt is pinned by default), and selecting a prompt for the first time no longer reloads the page.

Edit slider values by typing. Click the number shown next to any slider to get an input box and enter an exact value.

A pile of dashboard fixes also landed:

  • Copy/paste in the prompt editor works reliably now; ESC exits the prompt editor (CM6) so a second press can close the dashboard.
  • Template preview is back on the Characters page; bulk add-item and capture modals are back in the Game Data Explorer.
  • Plugin model variants are no longer overwritten on startup; empty plugin setting sections are hidden.
  • Pronunciation dictionary and voice-fallback entries now save correctly; the Trigger modal rejects spaces in names.
  • Edit Action modal shows eligibility conditions again; toggling a virtual entity from the character list now auto-saves.
  • Virtual-entity bios with Cyrillic (and other non-ASCII) names now resolve to the correct file.
  • The AI-assistant window and its splitters resize smoothly again (pointer-capture instead of erratic mouse-drag); you can select and copy text out of the agent chat output.
  • Deleting an NPC group works from the in-game PrismaUI overlay.
  • OmniSight image refresh gives visible feedback; in-dashboard logs are truncated for performance; plus assorted text-selection and visual tweaks.

Chat UI @zevick

  • Dialogue & thoughts filter. A new filter (off by default) drops everything except spoken dialogue and NPC thoughts from the overlay. Thoughts are still gated behind the usual perks.
  • Events display correctly now. The overlay renders events the same way the Recent Events panel does. Lines that used to show up bare — "wrote a diary (troubled)", "Prisoner - Natural" — now read properly as "Prisoner wrote a diary (troubled)" and "Prisoner woke up from sleep". Empty dialogue responses are dropped.
  • Clicking an NPC name keeps what you've typed — it prepends @Name to your current message instead of wiping it (and prefixes like # no longer pre-fill).
  • The ! prefix is no longer re-filled after you send a direct narration, and ESC exits the inline event editor. The whole chat UI was also converted to i18n in prep for future translations.

Log Viewer Highlighting @PhospheneOverdrive

The dashboard's log viewer now syntax-highlights LL...

Read more

SkyrimNet Beta 21.1

Choose a tag to compare

@MinLL MinLL released this 02 Jun 05:10
646b23d

SkyrimNet Beta21.1 @everyone

Small hotfix addressing a few issues. Fixes a VR compatibility issue, and does a cleanup pass on the dashboard.

VR Compatibility Fix @Min_LL

Fixed a compatibility issue with Skyrim VR preventing Beta21 from working for those players.

NOTE: If you're still having problems with the game not booting on VR, make sure you upgrade to the latest version of SeverActions as well!

Dashboard Fixes @zevck

The new dashboard gets a cleanup pass — missing settings are back, buttons that didn't do anything now work, and a handful of display bugs are fixed.

Settings that were missing from the new dashboard are back. A number of options from the old web UI hadn't made it into the new dashboard yet. This pass went through every category and filled the gaps:

  • VastAI — the whole Preferences section was missing and is now back
  • Voice / TTS — PocketTTS precision and language, ElevenLabs/Inworld parallel limits, and voice clone cache size
  • Diary — exclude-from-recall
  • Developer / Systems — event filtering and outbound mod-event toggles
  • Conversations — pinned-target range multiplier
  • Hotkeys — the dialogue-choice key
  • MCP — server version

Buttons that did nothing now work. Several confirmation pop-ups in the in-game dashboard — the delete buttons for custom voices, voice effects, and actors, plus bulk pack creation — didn't actually do anything when clicked. They now work, and a voice delete that fails tells you instead of looking like it succeeded.

Custom voices show up after you upload them. Uploading a player voice or thoughts voice worked, but it never appeared in the custom-voice tab. Now it does (NPC voices were never affected).

The conditions dropdown in the edit-action window works again.

Other small fixes. Model names made entirely of numbers now display correctly, the colored badges are back in the recent requests view, a file-picker error was fixed, plus minor cosmetic tweaks.

Bard Singing is now in the Quick Toggles menu.

SkyrimNet Beta 21

Choose a tag to compare

@MinLL MinLL released this 01 Jun 02:50
646b23d

This is our biggest release in a while. The main highlight is a fully rebuilt and more user-friendly dashboard that now works both in your browser and in-game through PrismaUI. This release also includes a reworked provider/model system with shareable presets, a much larger Bard Singing provider menu, multi-language local TTS, and a broad pass on dialogue and prompt quality.

There is one upgrade step before you jump in: you will need to set up your models again in the new Models UI. See Breaking Changes below.

Breaking Changes 🚨

You will need to set up your models again — one time — in the new Models UI. The provider/model system was rebuilt for this release, so your old rotation config will not carry over. This is a one-time reconfiguration, not a feature loss. Rotations are still supported, and they are now more flexible, with per-model providers and parameters.

SkyrimNet ships with a recommended preset, so you can get running again with one click while you rebuild your own setup. Your saved API keys are preserved. The old comma-separated rotation text has been replaced by the new row-based rotation editor, so rotations are still there; they are just configured through the UI now.

To clear up two likely concerns: rotations are not gone, and the browser UI is not gone. The new dashboard runs at http://127.0.0.1:8080/ in any browser, and it also runs in-game.

The New Dashboard @zevick

The dashboard has been rebuilt from the ground up, and the big change is that it now runs inside the game. Press the dashboard hotkey, F6 by default, and it opens as a full PrismaUI overlay with the same features as the browser version. You can configure, test, and manage everything without alt-tabbing. In fullscreen, it stops rendering the world behind it, which helps keep performance smooth even in busy areas.

image image

The in-game dashboard works with both PrismaUI 1.3 and 1.4+

Two ways in. You can use the browser version at http://127.0.0.1:8080/, or open it in-game through PrismaUI. The legacy web UI is still included for now on a secondary port, 8081 by default, but it is deprecated and will be removed soon. To disable it now, set “Legacy browser UI port” to 0 under Settings → Web Server → Network. IMPORTANT NOTE: Assigning models in the old UI is broken, and incompatible with our new model/provider functionality. Do not assign models through the old UI.

A new interface, top to bottom. The dashboard has been redesigned around making features easier to find. It is also i18n-ready, with English available for now and more languages planned. There are multiple built-in themes, plus support for custom themes. Theme, language, and UI scale are all under Settings → Dashboard.

New dedicated pages have been added for things that used to be buried in config: Providers, Models, Text-to-Speech, Speech-to-Text, GameMaster for feature toggles and the activity feed, Bard Singing for setup and replaying cached songs, and an in-app view of the community Wiki, maintained by @gonçalo.

Reworked pages. Home, formerly called “Dashboard,” now has toggleable modules and a Quick Setup block for swapping or testing your LLM, TTS, or STT quickly. Characters can now create and manage Virtual Entities, sort by nearby actors, add actors to NPC Groups, edit overrides inline, show save-specific bios, and expose player settings from the player bio. Favorites and Pins have also been merged into one system.

Actions now combines Custom Actions and the Action Library into a single page, with a “Group by Source” toggle. YAML-defined actions are editable in the UI, and per-action actor eligibility is shown.

Context-aware hotkey. Pressing the dashboard key while an actor is in your crosshairs now jumps straight to that actor’s bio. If they do not have one yet, it opens the New Character modal instead. You can turn this off, or require Shift, under Settings → Dashboard.

First-time tutorial. A step-by-step setup walkthrough now gets a fresh install fully operational, and you can restart it any time from Settings.

Troubleshooting in-game. While the dashboard is open, Ctrl + F6, or whatever you have bound it to, toggles the PrismaUI inspector. Console, Network, and Storage tabs all work for diagnosing a page that is misbehaving. The upstream “Layers” tab is broken, so do not click it. Courtesy of @Dowser.

The dashboard also supports IME composition for Japanese, Chinese, and Korean input, including inside the prompt editor’s iframe. Courtesy of @Daikichi.

Providers, Models & Presets @zevick

Providers are now first-class. You can store your API key and endpoint once for OpenRouter, NanoGPT, Nvidia NIM, or Chutes, all listed by default. You can also add a custom provider. Once that is set up, you do not need to keep re-entering credentials.

Rotations are more flexible. On the Models page, every entry in a rotation now has its own provider, model ID, and parameters, and you can mix and match them freely. For the four default providers, the model-ID field is a searchable live list of available models, with a SkyrimNet-curated recommended set pinned at the top.

Presets let you store, export, and import full model configurations without API keys, so the community can share setups. SkyrimNet ships with approved presets at several price points. While you are using an official preset, your models update automatically when models are deprecated or when better options become available. If you edit a preset, you opt out of auto-updates. You can reselect the preset any time to opt back in.

Bard Singing — More Providers & Failover @Dowser

Bard Singing, originally by @galanx, now supports a much wider range of music backends. It also has a backup-provider option that automatically retries with a second service if the primary one fails, whether that is because the provider is down, rate-limited, or returned a malformed response.

You can set up and manage all of this from the new dashboard’s Bard Singing page, which also lets you browse and replay your cached songs.

Provider menu, in USD per song. Please verify pricing yourself, since providers can change prices without notice:


SunoAPI         — Suno V4, V4_5, V4_5ALL, V5, V5_5            ($0.06)
OpenRouter.ai   — google/lyria-3-pro-preview                  ($0.08)
Nano-gpt        — google/lyria-3-pro/music                    ($0.08)
Minimax-Music-02                            ($0.05)
Minimax-Music-2.6                            ($0.15)
Minimax         — music-2.6-free (free), music-2.6 ($0.15), music-2.0 ($0.03)
Acemusic.ai     — acestep-v15-xl-turbo                        (free)
ACE-Step (local)— acestep-v15-xl-turbo                        (local)

For Minimax, use a Pay-As-You-Go or Token Plan account. The Audio Subscription plan does not authorize the music endpoint. ACE-Step local uses ACE-Step’s OpenRouter-style interface, not its API endpoint. The song cache holds 50 entries.

PocketTTS Multi-Language @Dowser

PocketTTS now has new on-device language models, so you can run local TTS in your preferred language without leaving the local pipeline. Supported languages are English, Spanish, French, German, Italian, and Portuguese.

There is also a new FP32 → INT8 quantization option that improves performance with a small quality tradeoff. It is worth trying if your CPU is the bottleneck for TTS.

Heads up: old PocketTTS models and .bin voice files are no longer used. Switching languages starts a one-time download the first time you select that language. That is expected and does not mean the app has hung.

Dialogue Choice (LLM-Assisted Vanilla Dialogue) @min

SkyrimNet can now ask the LLM to pick one of Skyrim’s vanilla dialogue topics for you. The selected option is highlighted in the Dialogue Menu, and you press Enter to actually say it. In other words, the LLM suggests the choice, but it does not commit for you. Outside the Dialogue Menu, the feature does nothing.

There are two modes, following the same pattern as the V-key voice-thought hotkey:

  • Quick-tap — the LLM picks based on event history alone. No mic input.
  • Hold + speak — your spoken intent, such as “ask about the dragon” or “haggle him down,” is transcribed and matched against the visible options.

The LLM’s reasoning is voiced as a player-thought. The pick comes back with a short in-character justification, is registered as a player_thoughts event, and plays through the same PlayerThoughts virtual-entity TTS path as a normal V-key thought. It is channel-bound, with no facial animation and no dialogue package.

The in-game hotkey to trigger this is not wired up yet. That will land in a follow-up. The feature itself is included in this release.

Speaker Selector Tags & Tuning @Severause

The dialogue speaker selector and player-target selector prompts now tag nearby NPCs so the LLM has better context for who should speak or who you are addressing. Three tags appear automatically next to candidate names when applicable:

  • [COMPANION] — the NPC is one of your followers
  • [ENGAGED] — the NPC is running SkyrimNet’s follow package
  • [IN SCENE] — the NPC is in a SexLab or OStim scene, and the tag is gracefully hidden if neither mod is installed

These tags make the LLM less likely to interrupt a scene participant and more likely to pick your companion when that makes sense. A new companion-priority factor nudges the target selector toward followers when your input is ambiguous.
...

Read more

SkyrimNet Beta 20.2

Choose a tag to compare

@MinLL MinLL released this 11 May 14:22

Small hotfix release changing the default meta model (EOL later this week), and fixing several bugs.

  • Default meta LLM switched from x-ai/grok-4-fast to deepseek/deepseek-v4-flash. Existing users will see this in the update-review prompt on first launch.
  • Inline NPC thoughts in dialogue are now off by default (was on). Existing users keep their setting; the change is surfaced in update-review. Intended to reduce strain on non-flagship models.
  • Wheel menu: whisper mode moved to the main wheel and numbering tidied up so the faction whitelist/blacklist entries line up correctly again.(thanks @Dekana )

Beta 20.1

Choose a tag to compare

@MinLL MinLL released this 04 May 01:09
7457b50

Small hotfix release addressing an issue in which the unique "Knowledge Keys" that control world knowledge deduplication were not being persisted correctly from knowledge packs when exporting them.

Beta20

Choose a tag to compare

@MinLL MinLL released this 02 May 20:29
7457b50

Beta20 is a major systems release focused on deeper NPC cognition, more reliable spatial awareness, richer world knowledge authoring, and new modding/plugin APIs. The headline changes are NPC Thoughts, Telepathy, the Knowledge Builder, the line-of-sight overhaul, Voice Effects, and a much stronger foundation for virtual actors and external integrations.

Knowledge Builder @Min_ll

New AI-powered Knowledge Builder integrated into the World Knowledge page for authoring and maintaining world knowledge packs.

The builder can inspect live game data from all loaded mods, existing knowledge entries, quests, stages, factions, races, condition expressions, and Skyrim lore context, then propose batches of entries for review. You can select a knowledge pack, browse/search/sort existing entries, and run the agent in that context so it can extend what is already there instead of duplicating it.

New knowledge_key deduplication: when multiple entries share a key, only the highest-importance entry whose condition passes is injected for a given NPC. This lets specific knowledge override general rumors without both appearing in the prompt.

While building this, a few other improvements were made:

  • For agents (prompt editor / world knowledge builder), Pretty-printed / multi-line tool calls now parse correctly. @Min_ll
  • Faction and race dropdowns for the World Knowledge page now list full game data instead of only currently loaded actors.
  • Fixed an issue causing poor retrieval for first-turn world knowledge lookups.
  • Also added bulk delete support for World Knowledge entries.

New MCP tools for modders and for the Knowledge Builder:

  • get_quest_stages
  • get_npcs

Line-of-Sight and Awareness Overhaul @Min_ll

SkyrimNet already used physics-based line of sight, but beta20 significantly overhauls it. NPCs can now “bend” their sight checks around open obstacles and corners while still being blocked by closed doors, closed rooms, and solid walls. See the included illustration: open geometry can be peeked around; closed spaces still block.

The old close-range LOS bypass has been removed. Instead of letting nearby NPCs see through walls, the underlying false blockers were fixed:

  • Furniture no longer blocks seated NPCs across a table.
  • Bystanders no longer block sight over someone’s shoulder.
  • Trees, invisible AI markers, and small nearby clutter are handled more reliably.
  • Exterior cell-boundary failures are fixed.
  • Self-hits and target body hits are handled better.
  • A torso-eye fallback helps when the head ray is awkwardly occluded.

The new peek system samples 17 fixed directions and tries two-stage sight paths: outward to a possible vantage point, then from that point to the target. This allows natural “around the pillar” or “around the doorway” cases without allowing sight through sealed rooms.

Interaction range defaults were also expanded:

  • interaction.maxDistance default: 800 -> 1600
  • interaction.normalMaxDistance default: 800 -> 1600
  • max allowed interaction distance: 2000 -> 8000
  • interaction.whisperMaxDistance remains unchanged
  • interaction.pinnedTargetRangeMultiplier added, default 2.0, range 1.0-5.0

Pinned targets now reach farther than normal interaction distance, which should make travelling with companions much less frustrating when Skyrim pathing leaves them behind.

Combat awareness is also stronger: NPCs in combat always remain mutually visible for SkyrimNet purposes, and combat targets are always aware of each other. This allows for easier back-and-forth banter during combat as the player repositions and maneuvers.

image

NPC Thoughts @Min_ll

NPC Thoughts are a major new cognition layer for characters. They let NPCs generate private, unvoiced internal thoughts that are saved to their event history and influence future prompts, improving LLM coherency, continuity, and depth.

This behaves a bit like giving characters a “reasoning mode” for roleplay cohesion, while explicitly not being model scratchpad/reasoning mode and without adding response latency. Thoughts happen alongside normal dialogue and are parsed into separate thought events instead of delaying speech. This has very little token cost in its out-of-the-box configuration, though it does result in the effective event history filling faster for dialogue use cases. Users can disable inline thoughts if they do not desire this behavior.

Thoughts can be triggered through:

  • Trigger responses: response.type: npc_thought
  • Papyrus: SkyrimNetApi.GenerateNPCThought
  • Chat command: /npcthink <name> [prompt]
  • Inline dialogue tags: <internal_thought>...</internal_thought>

/npcthink supports nearby and pinned actors, and pinned actors can be targeted at any distance.

Inline internal thoughts are stripped from TTS and saved as separate thought events. Player thoughts now follow the same separation path, so transform mode and voice mode no longer mix internal thoughts into spoken dialogue history.

Config defaults:

  • enabled: true
  • perNPCCooldownSeconds: 60
  • allowInlineInDialogue: true

Telepathy @Min_ll

Telepathy builds on NPC Thoughts and adds player-facing thought perception and long-distance mental communication.

There are two independent perks. You can use either one, or both at the same time.

Telepathy
Read-only player-facing telepathy. When enabled, the player sees NPC thoughts in the PrismaUI chat interface. Additionally, when eavesdropping is on, nearby NPC thoughts are voiced through TTS so the player can hear them. This does not make the player character canonically aware of those thoughts.

Telepathy (Canonical)
In-fiction telepathy. When eavesdropping is on, the player character can perceive nearby NPC thoughts; those thoughts are voiced through TTS and included in the chat/history context so the LLM can let the character act on that knowledge.

Canonical Telepathy also controls long-distance mental communication. With the canonical perk, the player can project a thought to a single NPC anywhere in Skyrim and receive a privately voiced reply.

Commands:

  • /telepathy Lydia meet me outside
  • ~Lydia meet me outside
  • ~'Lydia meet me outside

The apostrophe form routes the message through transform mode, with behavior adjusted for defaultTransform.

Eavesdropping controls whether thought audio/perception is active:

  • Listen In: Illusion spell, 140 magicka base, silent, instant, non-hostile, 60 seconds, reduced by Adept Illusion.
  • Eavesdrop Debug: Lesser Power toggle for testing.
  • Eavesdropping resets to off on save load.

Remote telepathy tells the target that the player is not physically present and provides both locations, so replies should not claim the NPC turned toward you from another city.

Telepathy and thoughts also suppress facial animation: NPC mouths no longer move while inner thoughts or telepathic replies are being voiced.

Voice Effects @.dekana

Create recipes of post-processing effects to apply to TTS output and save them as Voice Effects.

  • Accessible in the web UI from Manage Data -> Voice Effects.
  • Available effects include pitch, formant, speed, bitcrush, distortion, reverb, chorus, tremolo, ringmod, echo, EQ, whisper, and gain.
  • Effects can be toggled from the Characters page, Actor tab, in Triggers, and from Papyrus.
  • Added Papyrus scripts: SetVoiceEffect, ClearVoiceEffect, GetVoiceEffect, SetVoiceEffectByUUID, ClearVoiceEffectByUUID, GetVoiceEffectByUUID.
  • Effect assignments are persisted to the SKSE cosave.

This release includes several default Voice Effect definitions, such as Werewolf and Vampire Lord, but these are placeholders and do not really represent those creatures very well. Please ping @.dekana if you find good recipes to replace the defaults in a follow-up release.

Virtual NPCs, Actions, and Plugin APIs @.dekana / @tetherball88 / @galanx

Actions can now be enabled to work with virtual NPCs. As part of this, new UUID-based Papyrus API variants allow scripts to work with virtual NPCs and entities that do not have a game Actor reference. @.dekana

New helpers include:

  • GetEntityUUID
  • GetEntityDisplayNameByUUID
  • IsVirtualEntity
  • GetActorByUUID

New ByUUID variants include:

  • ExecuteActionByUUID
  • RegisterEventByUUID
  • RegisterShortLivedEventByUUID
  • RegisterDialogueByUUID
  • RegisterDialogueToListenerByUUID
  • DirectNarrationByUUID
  • RegisterPersistentEventByUUID
  • GenerateDiaryEntryByUUID

Virtual NPC action support was expanded with availableForVirtualNpc and dynamic UUID parameter mapping. @.dekana

New public C++ APIs:

  • SendCustomPromptToLLM lets third-party plugins invoke LLM generation directly, just like they could in Papyrus. @tetherball88
  • PublicGetWorldKnowledgeForActor exposes the same per-NPC world knowledge resolution used in prompts. @galanx
  • Public API version bumped to v9. @galanx

Action System and Prompt Targeting @Min_ll / @Severause

New runtime Actions master switch lets you temporarily disable NPC action execution from the wheel menu or Web UI QuickToggles. This is process-lifetime only and resets on restart. @Min_ll

Prompt improvements from SeverActions were merged: @Severause

  • Plugin-defined action categories now work correctly without requiring SeverActions.
  • Player requests like “wait here” are picked up more reliably.
  • Dialogue speaker targeting is more stable in multi-NPC scenes.
  • Drilldown action selection now gets a lightweight NPC profile for action-relevant details.
  • Player dialogue target selection is tighter when the crosshair target is virtual, unresolved, or not the actual addressee.

Dialogue target parsing is also more robust. NPC-to-NPC followup...

Read more

Beta 19.1

Choose a tag to compare

@MinLL MinLL released this 15 Apr 19:33

SkyrimNet Beta 19.1

Virtual NPC Actions @.dekana

  • Virtual NPCs can now use actions! Previously, actions were hard-gated to only work with real (in-game) NPCs. This adds a new dynamic_uuid parameter type that passes the selected actor's UUID to Papyrus, enabling vNPCs to perform actions like reading books, trading, and more
  • Action creators can opt-in their actions for vNPC use with the new "available for virtual NPC" flag in action definitions
  • Action categories are now automatically hidden from the action selection prompt if all their items are filtered out (by cooldown or vNPC availability), keeping the action list clean and relevant

Bug Fixes

  • Fixed orphaned TalkToPlayer packages — when audio delivery fails (player moved too far, TTS failure), the TalkToPlayer package get stuck resulting in NPC's permanently chasing the player (until removed manually in the package manager UI) because the dialogue cleanup was never triggered. The orphaned package source is now properly handled. Note, that this comes with a behavioral change: The package is now applied when audio playback begins rather than when the speech is queued in our system. @galanx.

SkyrimNet Beta19

Choose a tag to compare

@MinLL MinLL released this 13 Apr 04:38

SkyrimNet Beta19 @everyone

AI Bard Singing @galanx @min_ll

  • Bards now compose and perform original songs using AI — lyrics are written from the bard's memories and experiences, with music generated via Suno API (Note: This is a third-party api provider on top of Suno, Suno does not have an official API)
  • Bards auto-perform when you enter an inn; new songs generate every 8 game-hours (configurable in the Web UI)
  • Ask any bard to sing about a specific topic, or tell them to stop their current performance
  • Songs cached per save (10 max, configurable), with gender-matched vocals and spatial audio — vanilla bard sounds silenced automatically during AI performances
  • Player song composition: use /compose [topic] in chat to write and perform your own songs, and /playsong [title] with Tab autocomplete to replay any cached song — jumping stops the performance
  • Requires a Suno API key from sunoapi.org — configure in Web UI Configuration -> AI Model -> Bard Singing

World Knowledge @min_ll @Severause

  • New system for defining persistent world facts that NPCs know about — things like "The Stormcloaks won the civil war" or "There are three dangerous factions of bandits in my world"
  • Each entry has a condition expression controlling which NPCs know it — uses the same template functions you already have (is_in_faction, get_quest_stage, is_in_npc_group, etc.). A Stormcloak war plan only reaches Stormcloak NPCs; a rumor about the Companions only reaches their members
  • Entries can be always-injected (guaranteed in every matching NPC's prompt) or semantically retrieved (only surfaced when relevant to conversation, scored by keyword match, embedding similarity, and importance)
  • Configurable limits for semantic and always-inject entries, with a minimum relevance score threshold (default: 0.6)
  • Full condition builder in the Web UI with a Test button to verify which NPCs receive each entry
  • MCP tools for bulk create/read/update/delete and search operations
  • C++ and Papyrus APIs available for mod integration

Knowledge Packs @min_ll

  • Bundle world knowledge entries into named, shareable collections
  • Export packs as .sknpack files, share with other users, and import — making it easy to distribute lore, quest knowledge, or custom world-building
  • Enable/disable toggle per pack — disabled packs exclude their entries from NPC knowledge entirely
  • Full Web UI with bulk selection, inline pack assignment, and import/export

NPC Groups @min_ll @Severause

  • General-purpose NPC grouping system — create named groups like "Dawnguard Scouts" or "Whiterun Market Vendors" and assign specific NPCs (including the player)
  • Groups plug directly into World Knowledge conditions — restrict knowledge to only members of a specific group
  • Pinned actors now use the NPC Groups system internally, unifying pin and group management
  • New template decorators is_in_npc_group, get_npc_groups, and get_npc_group_members for prompt templates
  • Manage through Web UI, in-game chat context menu, or MCP tools
  • Will be expanded in the future to integrate fully with other systems like config groups.

Chat Context Menu & Group Management @min_ll

  • Right-click any speaker name or audience member in the chat UI to access a new context menu with Talk to, Whisper to, Pin/Unpin, Groups, and Copy Name
  • Pin and unpin NPCs directly from the context menu with immediate visual feedback — pinned actors show gold highlighting in the audience strip
  • Manage NPC group membership directly from chat — the Groups submenu shows all groups with checkmarks for quick toggling

Group Chat Mode @min_ll

  • New & prefix modifier restricts dialogue to members of your Pinned NPC group only — non-group actors won't be selected as targets or interject
  • Combinable with ^ whisper in either order (&^ or ^&) and works with all input modes
  • GROUP toggle button added to the chat input bar for easy toggling
  • Group restriction propagates through the entire dialogue and interjection chain — NPC responses also stay within the group
  • This will serve as a foundation for some planned group conversation coherency improvements and optimizations. Already functions as a step-function improvement for people that play with parties.
  • Currently limited to input via PrismaUI only; Deliberating options on how to best bring this to voice input in an intuitive manner.

/summon Command @min_ll

  • New /summon <name> slash command in the in-game chat — teleports any NPC to the player
  • Tab completion cycles through pinned actor names for quick selection
  • Works with both nearby actors and far-away pinned group members

Voice Slot LRU Cache @Daikichi

  • Automatic voice slot management for ElevenLabs and Inworld TTS — configurable max_voices limit with least-recently-used eviction
  • When the voice slot limit is reached, the oldest unused cloned voice is automatically deleted before cloning a new one — no more manual cleanup or subscription cap errors
  • 🚨 ElevenLabs has limits on the number of voices that you can clone monthly; Using this feature may cause you to exceed the limit depending on how often it needs to delete voices, and what your plan limit is. See here for details: https://help.elevenlabs.io/hc/en-us/articles/24351056337937-How-many-voice-slots-do-I-get-per-tier-and-how-can-I-increase-it 🚨

Memory Retrieval Improvements @min_ll

  • Significantly improved the semantic search engine — NPC memory recall is noticeably more accurate, finding the right memories more often based on conversational context
  • Existing memories are automatically upgraded on first launch (~10 seconds, with HUD notifications as to progress)
  • Retuned how NPCs prioritize memories — relevance matters more, recency matters less

Config Defaults Review System @min_ll

  • New system to keep your configuration aligned with our latest recommended settings — when we update defaults between versions, you'll see a banner notification with a one-click review flow
  • Accept individual changes to adopt our new recommendations, or keep your current values — full control over what updates and what stays
  • No more guessing what changed between versions or manually comparing release notes against your config.
  • This will mostly benefit future releases; Changes you've already made from the defaults before this release will not reflect in the UI (with a few exceptions for specific things I changed in this release)

Updated Default LLM Models @min_ll

  • Default model assignments updated to more budget-friendly alternatives based on community feedback — dialogue now uses DeepSeek v3.2, action evaluation uses DeepSeek Chat v3-0324, character profile/memory/diary now use Qwen 3 235B, and GameMaster now uses Llama 3.3 70B
  • Provider sorting now defaults to latency-based ordering for faster real-time responses
  • Atlas Cloud provider excluded by default — it was producing garbage output for DeepSeek v3.2
  • Existing users will need to delete and recreate their openrouter.yaml file to pick up all of the changed variant settings.

Embed Actions in Dialogue (New Default) @min_ll

  • embedActionsInDialogue now defaults to true — eligible actions are listed directly in the dialogue prompt so the NPC can choose to act as part of its response. This has been available for quite some time, but is now the default and preferred path for action evaluation.
  • When the dialogue LLM wants to act, it picks a top-level action category and provides an intent (e.g., "I want to give the player a healing potion"). The action evaluation LLM then drills down within that category to select and execute the specific action, guided by the dialogue LLM's intent. When the NPC doesn't want to act, no second LLM call happens at all — saving latency and tokens.
  • The old separate-evaluation mode (a second LLM call after every response to decide on actions independently) is still available but no longer recommended. The new approach considerably improves action execution accuracy over the old one.
  • If you previously had this set to false, the defaults review system will prompt you to consider switching. Unless you're using a small local model that has problems with doing double-duty on this use-case, it is recommended that you use this setting. Users may be concerned with this overly biasing LLM behavior based on the actions that are present (Like we observed with MinAI and the "horny llama"); This is not a significant problem with this implementation, due to us primarily exposing top level categories. The vast majority of actions are not exposed to the dialogue llm, and thus we still maintain a reasonable level of isolation.

Trade Events @min_ll

  • NPCs now perceive when you open a merchant's shop and complete trades — with summaries of items bought/sold and gold exchanged.
  • These are full-fledged events; you can create triggers on them like anything else if you wanted shop-keepers to automatically comment on trades, and so forth. Try talking to the next merchant you sell stuff to; this is a pretty fun awareness improvement.
  • Empty trades (opening and closing the menu without trading) are silently skipped

Dialogue Event Collapsing @min_ll

  • Consecutive dialogue lines from the same speaker (e.g., a bard singing 10 lines) are now collapsed into a single event in NPC context prompts, dramatically reducing prompt waste
  • Fixes false "time has passed" dividers that could appear between rapid-fire dialogue lines

Chat UI Improvements @min_ll

  • Tab completion now shows a visual popup with pill-style candidates instead of cycling blindly
  • Pressing / then Tab cycles through available slash commands
  • Smooth flow from command completion to argument input

Plugin & Template Integration @.vrelk

  • Current save unique ID now available via Papyrus GetSaveUniqueID(), C++ `PublicGetSaveUniqueID(...
Read more

Test build v2: PR#668 — Fix SetInputIgnored thread safety + keyboard driver workaround

Choose a tag to compare

@MinLL MinLL released this 31 Mar 11:48
7356a19

Test build v2 for PR #668 — Fix SetInputIgnored thread safety.

Changes since v1:

  • Workaround for keyboard driver bug
  • Fix small logic bug in ChatUIManager

This is NOT a stable release. It is provided for testing purposes only.

Install by extracting the zip into your mod manager's overwrite/mod directory, replacing existing SkyrimNet files.