One-line summary
Drive the loaded VRM’s built-in facial expression presets (and any custom expressions on the model) from AVATAR — beyond today’s blink and amplitude lip sync.
Problem / motivation
VRM models already carry standard emotion expressions (and sometimes custom ones) inside the .vrm. We only use expressionManager for blink and mouth visemes atm, so the face stays emotionally flat while the body can play VRMA. Users and future triggers (hotkeys, keywords, local bus) have no way to set happy / angry / sad / relaxed / surprised (or model-specific names) at a chosen weight and clear them afterward.
Proposed solution
Explore and implement expression control on the currently loaded avatar:
- Discover what the model actually exposes (
expressionManager presets + customs); don’t assume every file has the full set.
- Apply / clear expression weights (0–1) without permanently fighting lip sync and blink (define a simple override / blend policy).
- Expose triggers in a way that fits existing surfaces — e.g. optional face on animation one-shots, hotkeys, keywords, and/or a small manual UI, exact placement TBD in design.
- Persist only what makes sense (bindings / last manual choice); don’t invent a “custom expressions folder” (expressions live in the VRM, not as separate media files).
Keep v1 local-first and Electron-first, document which presets are missing when a model omits them.
Alternatives considered
- Rely on VRMA clips that bake facial tracks, harder to author/reuse, many packs are body-only.
- Hardcode only five emotion names, breaks on incomplete or custom-heavy models.
- Full Appearance “Emotions” product surface before any trigger API, may be premature, a shared set/clear path might land first.
Primary surface
Other
Constraints you accept
Mock / sketch / reference (optional)
Open: whether expressions get a gear entry, sit under Appearance, only ride along with animation/hotkey/keyword/bus events, or some mix. Prefer one internal set / clear path that all of those can share.
One-line summary
Drive the loaded VRM’s built-in facial expression presets (and any custom expressions on the model) from AVATAR — beyond today’s blink and amplitude lip sync.
Problem / motivation
VRM models already carry standard emotion expressions (and sometimes custom ones) inside the
.vrm. We only useexpressionManagerfor blink and mouth visemes atm, so the face stays emotionally flat while the body can play VRMA. Users and future triggers (hotkeys, keywords, local bus) have no way to set happy / angry / sad / relaxed / surprised (or model-specific names) at a chosen weight and clear them afterward.Proposed solution
Explore and implement expression control on the currently loaded avatar:
expressionManagerpresets + customs); don’t assume every file has the full set.Keep v1 local-first and Electron-first, document which presets are missing when a model omits them.
Alternatives considered
Primary surface
Other
Constraints you accept
Mock / sketch / reference (optional)
Open: whether expressions get a gear entry, sit under Appearance, only ride along with animation/hotkey/keyword/bus events, or some mix. Prefer one internal
set/clearpath that all of those can share.