v2.0.9 — VaM package #106
- Shows "Can't reach Voxta" on screen while the plugin waits for Voxta, instead of a scene that silently does nothing
- The API key panel frees the mouse when a scene uses mouse look (Tab), so you can paste the key and click Connect; mouse look comes back when the panel closes
- Fixes a red "Socket is not connected" error when a scene deletes its chat on load right after another Voxta scene
v2.0.7 — VaM package #104
- Fixes being cut off mid-sentence, and the conversation getting stuck after you speak, with current Voxta servers
- The microphone and speaker buttons now mute just the current chat, instead of switching voice off for the whole Voxta server
- If your Voxta server needs an API key, the plugin now asks for it on screen with step-by-step instructions, instead of showing a red error
- The chat bar, subtitles and other plugin overlays move aside while VaM's main menu is open
v2.0.6 — VaM package #103
- Swallow the cloud credits, downloads and workspace messages instead of reporting them as unknown
- Keep the chat loading overlay gone after it fades out (pressing M twice no longer brings back "Chat session ready!")
- Support for Voxta Server v1.10
- Quick resume chat button in Connect tab
- Publish every context slot when a chat starts
- When an image generate, do not stop the currently spoken message
- Handle reply cancellation, avoiding locked chats
- Fix InvalidProgramException errors
Updates for Voxta Server 1.9 compatibility
- Fixes "Unknown message type" errors
- Correctly speaks the command mode voice
v2.0.2 — VaM package #99
![]()
Want to try Voxta? You can now do it for free. Download the free Voxta Lite build, get free Voxta Cloud credits, and see how it all works in VaM, no payment required.
Highlights
A small follow-up to v2.0.1: the Vision tab now explains how to actually turn Continuous Vision on, so its capture toggles stop looking broken.
New: Continuous Vision setup guide
- A short read-only guide pinned to the top of the Vision tab walks through the whole flow in order: enable "Voxta Utilities: Vision" in Chat Augmentations, turn on Continuous Vision, set the character's Chat Style to Companion, add the Vision augmentation with only Vision.continuous, then flip the Screen/Eyes capture toggles below.
- Clears up the most common vision question: the capture toggles do nothing on their own until vision is enabled server-side, and until now nothing in the tab said so.
v2.0.1 — VaM package #98
Highlights
A small follow-up to v2.0.0 with three log-spam / animation fixes and one new in-headset niceness: a status overlay during chat startup so you stop staring at silence while the server warms up.
This release pairs with today's Voxta server hotfix — the status overlay needs that server-side change to show real loading progress.
New — Chat startup status overlay
- In-VR HUD that fills the previously-silent gap between Start Chat and the first audio chunk. Shows the current loading stage ("Starting chat session…", "Loading TTS voice…", etc.) plus a progress percentage when the server reports one.
- Auto-shows on Start Chat, auto-hides when the first reply starts speaking (or when the chat goes idle / errors out / you Stop Chat).
- Renders on its own world-space canvas anchored upper-center, below subtitles in the layering. Position and font size are independently tunable for desktop and VR.
- Needs today's server hotfix to receive progress events. Without it the overlay still appears, but only the initial "Starting chat session…" line — no per-stage updates.
Fixes
- SMPL / HY-Motion animations no longer lift the character ~1 ft off the floor. Frame-0 of every clip was pasting the SMPL avatar's absolute pelvis height (~0.9 m above SMPL's ground plane) directly onto the DAZ rig, so any motion request made the character float. The retargeter now anchors against the rig's bind-pose hip and treats SMPL trans as a per-clip delta, so feet stay on the floor and longer action sequences no longer drift upward over time. PreserveHeight keeps working exactly as before.
- Foreign-app triggers no longer spam the plugin error log. Server broadcasts every app trigger to all connected clients; web-UI-only triggers like SetAvatar and SelectView were printing "Received invalid app trigger: … (Not enough arguments)" into VaM. The plugin now silently ignores triggers it doesn't speak; genuine VaM-shape misconfigurations still log a precise error.
- imageGenerationProgress no longer spams the plugin error log. Every sampler step (~20–40 per image) was printing "Unknown message type: imageGenerationProgress…" into VaM's error log during image generation. Now swallowed silently — the in-progress preview is the web frontend's job, not VaM's.
v2.0.0 — VaM package #97
Big one. A year of work since v1.9.0 / VaM package #96. Pairs with the brand new Voxta Server v1.6.0 — recommended to update both together so AI-driven animations work end-to-end.
What's new
▸ AI-driven animations (text-to-motion)Voxta Server can now generate SMPL motion at runtime and stream it straight to VaM. The plugin retargets the SMPL skeleton to your Person atom on the fly — no FBX import, no Timeline authoring required. A brand new Animate tab gives you a scrubber, paused-mode preview, and restore-pose-on-stop. Per-clip Preserve Height toggle stops the vertical drift you get when chaining motions. Persisted motion, intro blend, and idle loop keep the character alive between generations.▸ Actions tab — structured editor with state machineBuild actions inline without leaving VaM. Type a name, describe when the AI should fire it, optionally pick a Timeline clip from a dropdown — the plugin compiles state into proper flag filters under the hood. Namespace-aware state slugs meanpose.sittingandoutfit.dresscan coexist on the same character without stomping each other. Starting State field bootstraps closed loops at chat start. Per-action cooldowns, post-speech trigger delay, validation hints. Save and import action presets to disk.▸ Suggestions overhaul7 slots with per-slot enable toggles and custom tones. On-screen HUD bar with scrollable rows and auto-lifting subtitles. Import/export presets as.voxtasuggestions. One-click spawn of a UIButton interface inside a SubScene so suggestions are available without opening the plugin. Suggestions storables are now exposed to scene plugins, so scene authors can build their own dialog UIs on top of Voxta-generated lines.▸ Two-row tab layoutThe plugin outgrew a single row. 11 tabs are now reorganized into a focused two-row layout: Connect / Chat / Subtitles / Context / Actions on row 1; Animate / Triggers / Suggestions / Vision / Inspect / Settings on row 2. Connect turns green when the server is reachable; Chat turns green while a session is running.▸ Inspect tab — live diagnosticsA new diagnostics surface for catching leaks and performance hiccups. Live memory and frame-time inspector with a built-in 60-second leak test. Catches the kind of slow degradation you can't see by eyeballing the chat.▸ Chat input bar polishSlash command picker — click the pencil icon for a grid of/event,/story,/note,/summarize,/infer. Mic + speaker mute icons that sync live with voxta-talk — flip them anywhere and the icons update everywhere. Replay last character message as a bindable action. VR polish for the keyboard tap-to-open flow.▸ Reasoning-model supportVoxta Server'sreplyThinkmessages from reasoning models no longer spam the plugin log with "Unknown message type: replyThink". The plugin quietly ignores them — your character still replies, just the thinking trace stays on the server side where it belongs.▸ Subtitles polishNarration events (/event,/note,/story) now render in their own orange color, distinct from character speech (pink) and your speech (blue). Whitespace flicker fixed.▸ Vision improvementsScreen and Eyes vision are now independent toggles — run one without the other. Quality pass and a fix for vision capture registration that didn't survive a plugin reload.
Bug fixes
- Service-toggle PUT through reverse proxies failed with
Generic/unknown HTTP errorbecause VaM'sUnityWebRequestsends chunked-transfer PUT bodies that Caddy, Nginx, or Cloudflare Tunnel can drop on short payloads. The plugin now forcesContent-Length. Direct connections were unaffected.- Chat hung after the bootstrap message when activating the plugin via a scene UIButton or any path other than opening the Chat tab first. Fixed; works from every activation path now.
- Interrupting mid-speech now sends a server-side Interrupt immediately, so the server stops generating and the rest of the sentence isn't queued.
- Activation chokepoint + chat-start NRE fixed (was breaking
InterruptSpeechaction wiring).- Default desktop positions tuned for the chat input bar and subtitles so they don't overlap on standard window sizes.
- Vision capture registration and persistence bugs fixed; plugin reload no longer leaves orphaned vision state.
- Subtitle whitespace flicker cleaned up.
- Speech playback hang diagnostics — catches
ImportClipexceptions and logs when audio chunks are dropped because no AudioSource is bound, so future regressions surface in the logs instead of silently stalling.
Upgrade notes
- Server compatibility — AI-driven animations require Voxta Server v1.6.0 or later (text-to-motion scaffolding lives there). Every other feature in this release still works against older servers.
- Tab layout changed — same features, new arrangement. If you're looking for a tab that "moved", it's now on the second row.
- No persisted data changes — existing scenes, action presets, and subtitle settings continue to work without migration.
Voxta Server v1.6.0 release notes: https://portal.voxta.ai/ · Need help? Join Discord
v1.9.0 — VaM package #96
New Actions tab. Author AI-driven actions directly inside VaM. No more bouncing to the web scenario editor or hand-writing JavaScript for the common case. Add an action, describe when the AI should fire it, optionally type a Timeline animation name, and you're done.
Timeline integration. Each action has anAnimationfield that auto-plays a Timeline clip when fired. TheWait for animation to finishtoggle defers the state change until Timeline auto-progresses to the next clip, so closed loops like sit/stand stay perfectly in sync with the visual state, with no more glitchy mid-transition firing.
State machine, no flag expressions. UseAvailable when character is in stateandAfter firing, character is in stateper action. Typestanding,sitting, or anything else. The plugin compiles everything to flag filters under the hood. AStarting statefield at the top bootstraps closed loops at chat start.
Per-action controls. UseDisable action after first usefor one-shots, theCooldown (character messages)slider,Trigger action after speech finishesso animations don't fire mid-sentence, and aContextfield that is pushed to the LLM only while the action's state is active.
Live status.Last Action,Current State, a scrollableAvailable Actionschip flow showing what the AI is currently picking from, and aConfigure Triggers (N)count so you don't have to open the panel to see if triggers are wired. The Connect tab turns green when reachable, and the Chat tab turns green while a session is running.
Validation hints. A red warning appears under an action'sAvailable whenfield if it references a state that nothing else sets. This catches the most common state-machine authoring mistake.
Bug fixes
- Service-toggle PUT through reverse proxies failed withGeneric/unknown HTTP errorbecause VaM'sUnityWebRequestsends chunked-transfer PUT bodies that Caddy, Nginx, or Cloudflare Tunnel can drop on short payloads. The plugin now forcesContent-Length. Direct connections were unaffected.
- Available Actions stayed empty until the Voxta web UI's Inspector tab was opened. The server only fills that field when Inspector mode is on. The plugin now auto-enables Inspector at chat start, so the readout populates from the first frame.
- flagsFilter shape. It was being sent as an array, but the server expects a string. System.Text.Json's strict parsing silently dropped the entire Actions payload. Fixed by sending a single string with && joins for compound filters.
- setFlags location. State-change effects are now correctly nested inside effect.setFlags server-side ActionEffect.SetFlags instead of at the action level, so they actually fire.
![]()