CI / Lint (push) Canceled after 0s
CI / Build Test (stage-web) (push) Canceled after 0s
CI / Build Test (ui-loading-screens) (push) Canceled after 0s
CI / Build Test (ui-transitions) (push) Canceled after 0s
CI / Unit Test (push) Canceled after 0s
CI / Type Check (push) Canceled after 0s
CI / Check Provenance (push) Canceled after 0s
Sync Labels / sync-labels (push) Successful in 1m43s
- Remove stage-tamagotchi, stage-pocket, server, and engine workspaces with their workflows, addons, and docs - Switch the toolchain from pnpm to bun, replace lockfiles with bun.lock - Rewrite remaining product references to Moeka
@proj-airi/model-driver-lipsync
Shared lip-sync profiles and model-neutral mouth-driving policies for Moeka.
What It Does
- Exposes the shared wLipSync profile.
- Converts raw AEIOUS frames into stable AEIOU weights.
- Owns winner selection, silence detection, and weight smoothing.
- Provides the existing Live2D lip-sync driver.
- Exposes the browser-only wLipSync node factory through a separate runtime entry.
The package does not write weights to VRM expressions or MMD morphs. Each renderer owns that mapping.
Exports
@proj-airi/model-driver-lipsync: the Live2D driver.@proj-airi/model-driver-lipsync/shared/wlipsync: the profile, types, and pure vowel driver.@proj-airi/model-driver-lipsync/runtime/wlipsync: the browser-only audio-node factory.
The shared entry has no Web Audio side effects. Node-based tools and tests can import it safely.
How To Use It
import { createWLipSyncNode } from '@proj-airi/model-driver-lipsync/runtime/wlipsync'
import {
createWLipSyncVowelDriver,
wlipsyncProfile,
} from '@proj-airi/model-driver-lipsync/shared/wlipsync'
const node = await createWLipSyncNode(audioContext, wlipsyncProfile)
const driver = createWLipSyncVowelDriver()
const weights = driver.update(node, deltaSeconds)
The caller owns the AudioContext, the source node, and the source lifecycle.
When To Use It
- Use the shared entry when a renderer needs standard AEIOU weights.
- Use the runtime entry when browser code creates a wLipSync audio node.
- Keep renderer-specific expression and morph mappings in the renderer package.
When Not To Use It
- Do not import the runtime entry from Node-only code.
- Do not add Vue, Three.js, VRM, or MMD dependencies to this package.
- Do not move renderer-specific model writes into the shared driver.