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
..

@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.