hermes-psfn-avatar — 3D VRM VTuber & Companion Avatar for Hermes Agent
hermes-psfn-avatar brings a live 3D VRM 0.x / 1.0 VTuber avatar directly into Hermes Desktop and the Hermes Web Dashboard as a transparent corner overlay, dockable stage pane, and full 3D motion studio—powered by Three.js and @pixiv/three-vrm.
Built as a standalone plugin for any Hermes Agent user, with a zero-config emotional continuity bridge to PSFN Lite (psfn_lite) when installed in the same Hermes profile.
Features
- Floating VTuber Corner Overlay & Dockable Stage Pane:
- Sits in any corner of Hermes Desktop (
bottom-right,bottom-left,top-right,top-left) with a transparent WebGL canvas (alpha: true), framed on the character's upper-body bust (bust), waist-up (waist), or full body (full). - Click-through background with interactive anatomical touch zones (
headpat,petting,cheek boop,hug), drag-to-reposition on the avatar silhouette,Shift+dragorRight-dragsmooth 360° 3D camera orbit,Ctrl+drag/Middle-drag/Shift+wheelcamera pan (slide the view up, down and sideways to inspect any spot), scroll-wheel zoom, and a persistent hover Mini-HUD with one-click toggle to dock into a right-hand layout pane. - Also populates the
overlayshell slot and/vrm-avatarStudio tab in the Hermes Web Dashboard.
- Sits in any corner of Hermes Desktop (
- On-Demand VRM Download Catalog (4 Models) & Custom
.vrm/.glbUpload:- Defaults to Nous-Girl (
Nous-Girl.vrm, CGIC assembly; seeCGIC-AI/nous-girl-vrm/LICENSE.md) and includes a commit-pinned, SHA-256-verified on-demand download catalog: DeepSeek-chan (CC BY-NC-SA 4.0) plus Claude (claude.vrm) and Claude Suit (claude_suit.vrm) fromSkyeShark/eidoverse-video. - Upload any standard
.vrm(VRM 0.x or VRM 1.0) or.glbfile in the Avatar Studio (/vrm-avataror Settings → Plugins → Hermes PSFN Avatar); models are validated locally (including rigs with more than 255 bones; re-uploading a file under the same name replaces the cached copy) and persisted in<HERMES_HOME>/plugin-data/hermes-psfn-avatar/models/and browser IndexedDB.
- Defaults to Nous-Girl (
- 42 Baked ARDY Humanoid Motion-Capture Clips & 28 GoEmotions Moods:
- Ships 42 baked Core-27 skeletal motion clips in
clips/: Idle, 4 auto-rotating Talking gesture variants, a 55-second Thinking choreography sequence (hand-to-chin pondering, calm breathing stances, gentle nods, and weighing-an-idea gestures), 2 Listening clips, 7 one-shot Reactions (wave,nod,celebrate,thanks,reach,surprise,laugh,shrug), and 27 discrete GoEmotions mood body performances with 0.4s attack / 0.5s release facial blend envelopes. - Per-model tuning in the Avatar Studio, remembered for each model: Arm Spread (0×–1.5×, how far the arms are held out from the body during clips), Height (move the model up or down in frame) and Size (larger or smaller in frame), plus a Reset View button that clears orbit, zoom and pan.
- Supports
psfn.companion-motion/1VRM extras for custom ear/tail spring-bone pivots while keeping standard VRMs 100% compatible.
- Ships 42 baked Core-27 skeletal motion clips in
- Text-Driven Lip-Sync + Automatic Turn Reactivity + Agent-Driven Stage Directions:
- Automatically shifts between Thinking (during reasoning, streaming, and tool calls), Talking (5-vowel
aa/ih/ou/ee/ohmouth shapes laid out from the words and punctuation of each reply at a text-to-speech pace; the plugin never patches or taps the host's audio, so the mouth follows what is being said rather than the exact waveform), and Idle (breathing, periodic blinking, spring-bone physics, and subtle eye/head gaze). - Tool (
vrm_avatar) and Transcript Directive (::avatar{mood="joy" reaction="wave" say="..."}) let the model deliberately emote and perform gestures mid-conversation.
- Automatically shifts between Thinking (during reasoning, streaming, and tool calls), Talking (5-vowel
- Optional PSFN Lite (
psfn_lite) Emotional Continuity Bridge:- When
psfn_liteis configured in the active Hermes profile ($HERMES_HOME/psfn-lite.jsonwith a loopbackgardenendpoint),hermes-psfn-avatarautomatically syncs the companion's continuous Valence-Arousal-Dominance (VAD) vector and 28-class GoEmotions state after each turn.
- When
Installation
hermes plugins install https://github.com/CGIC-AI/hermes-psfn-avatar
hermes plugins enable hermes-psfn-avatar
The installer may ask whether to install Node dependencies because the repository contains a package.json. Answer N: the desktop and dashboard bundles ship prebuilt, and Node packages are only needed to rebuild from source.
In Hermes Desktop, open Capabilities → Plugins and toggle Hermes PSFN Avatar on (or run ⌘K → Hermes PSFN Avatar: Open Avatar Studio).
Usage
Inline Transcript Directives
The agent can emit a standalone ::avatar{...} paragraph in any reply:
::avatar{mood="excitement" reaction="celebrate" say="All tests are green!"}
Agent Tool (vrm_avatar)
vrm_avatar(action="emote", mood="curiosity", reaction="nod", camera="bust")vrm_avatar(action="status")vrm_avatar(action="clips")vrm_avatar(action="sync_psfn")
Disclosure (Catalog Rule 13) & Model Attribution
- Local Storage: Stores avatar state (
avatar_state.json) and user-uploaded.vrm/.glbfiles in Hermes's profile-scoped plugin data directory (<HERMES_HOME>/plugin-data/hermes-psfn-avatar/), and caches VRM models in browser IndexedDB (hermes-psfn-avatar-vrm-cache). No binary.vrmfiles are packaged inside this repository. - Pinned Static Asset Fetches (
raw.githubusercontent.com):- Nous-Girl (Default Model): Fetched on demand from
https://raw.githubusercontent.com/CGIC-AI/nous-girl-vrm/70bfc01c3bbc105267612f94486e0e7ee1b5a7d6/nous-girl.vrmand verified against SHA-25634c72ebaf068f3d692c29e5b1878b42e0039f63a2b0679aab18bb365b4abc275(11,491,924bytes) before caching inplugin-data/ IndexedDB. Created by CGIC (base body/face derived from VRoidAvatarSample_Aunder its conditions of use; procedural hair, headphones, and outfit built in Blender; seeCGIC-AI/nous-girl-vrm/LICENSE.md). - DeepSeek-chan (Optional Preset, CC BY-NC-SA 4.0): Fetched on demand when selected from
https://raw.githubusercontent.com/tegnike/deepseek-chan-vrm/3aceb037df7a8b8126efea89d3a75664d1af868d/DeepSeek-chan.vrmand verified against SHA-2569fa455e48ee2271dc7c2b62f2f2edcd47709406ca89067b6f544979589958f42before caching. Credits (CC BY-NC-SA 4.0): original character 溟月 (Mingyue) by 上善无形 (Bilibili), maid outfit design by ZipZipPipe (Bilibili), 3D VRM model by ニケ (tegnike) (Hugging Face / GitHub). - Eidoverse 3rd-Party VRM Catalog (Optional Presets): Fetched on demand when selected from commit-pinned
https://raw.githubusercontent.com/SkyeShark/eidoverse-video/404a00e7db3068af51bd914d61e608e6b8dc9b82/eidoverse/assets/vrms/<file>.vrm(claude.vrmSHA-256883eb1d6c63c7409e1cbebb335509af346e92d046c4c9916ebc7695da4c64073andclaude_suit.vrmSHA-2567be6286215c0d7e4251633ec741d9f5bde943dc635f05a312ca7d1b45bceaa5d) and verified against each file's SHA-256 digest before caching in IndexedDB. - Motion Clips Fallback: In standalone Desktop mode when the gateway FastAPI plugin route (
/api/plugins/hermes-psfn-avatar/clips/*) is not mounted, fetches the 42 baked motion-capture JSON clips fromhttps://raw.githubusercontent.com/CGIC-AI/hermes-psfn-avatar/7b9a7f7f677b2fd25ed889b56e5ec83055202463/clips/.
- Nous-Girl (Default Model): Fetched on demand from
- Loopback PSFN Lite Continuity Bridge: When
psfn_lite_bridgeis enabled and$HERMES_HOME/psfn-lite.jsondefines a loopback (127.0.0.1/localhost/::1)garden.url, queriesGET <garden.url>/api/lite/overviewusing the profile's secret scope (agent.secret_scope.get_secret) to read the companion's VAD and GoEmotions state; non-loopback URLs are refused. - No Shell Execution or Background Daemons: Spawns no subprocesses, shell commands, or external daemons, and collects no telemetry.
README from the reviewed commit c8fa99b; it updates when the author re-pins.

axAilotl