moeru-ai/airi · warning

[Model.vue] Expression controller initialisation failed:

Error message

[Model.vue] Expression controller initialisation failed:

What it means

The enable/disable watcher nulls the stock expressionManager (and eyeBlink) and calls initExpressionController(im); that promise rejected and was warned. Because the stock manager is already nulled at that point, expressions are dead until the feature is toggled off/on again or the model reloads. Motion and rendering are unaffected.

Source

Thrown at packages/stage-ui-live2d/src/components/scenes/live2d/Model.vue:722

})

// Watch for expression system toggle — nullify/restore SDK managers at runtime
watch(live2dExpressionEnabled, (enabled) => {
  if (!model.value)
    return
  const im = model.value.internalModel
  const mm = im.motionManager
  if (enabled) {
    if (mm.expressionManager) {
      (mm as any).expressionManager = null
    }
    if (im.eyeBlink) {
      (im as any).eyeBlink = null
    }

    internalModelRef.value = im
    initExpressionController(im).catch((err) => {
      console.warn('[Model.vue] Expression controller initialisation failed:', err)
    })
  }
  else {
    mm.expressionManager = savedExpressionManager.value
    im.eyeBlink = savedEyeBlink.value
    expressionController.dispose()
    internalModelRef.value = undefined
  }
})

watch(focusAt, (value) => {
  if (!model.value)
    return
  if (!props.eyeTracking)
    return

  model.value.focus(value.x, value.y)
})

View on GitHub (pinned to 677329427f)

Solutions

  1. Toggle the feature off/on to retry initExpressionController
  2. Same checks as the load path: validate exp3.json files and CORS
  3. Reload the model if toggling does not re-arm
  4. Accept degraded behavior: motions and rendering continue without custom expressions
Defensive patterns

Strategy: fallback

Validate before calling

const mm = model.value?.internalModel?.motionManager
if (!mm) return // no motion manager to swap expression managers on

Try / catch

initExpressionController(im).catch((err) => {
  console.warn('[Model.vue] Expression controller initialisation failed:', err)
}) // stock expressionManager was already nulled; re-toggle to retry

Prevention

When it happens

Trigger: Toggling the custom-expression feature on for a model with missing or broken exp3.json; same expression-load failures as the loadModel path but triggered from the watcher.

Common situations: User toggles the expression feature on a model known to have broken expression files; feature toggled during an ongoing model load.

Related errors


AI-assisted analysis of moeru-ai/airi@677329427f (2026-08-18). Data as JSON: /api/errors/4e6a56fa04933ba0. Report an issue: GitHub.