Files
nanakura dc26878386
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
chore: prune unused apps and services for the moeka fork
- 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
2026-09-14 16:40:49 +07:00

50 lines
1.8 KiB
Markdown

# `@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
```ts
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.