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
- Toggle the feature off/on to retry initExpressionController
- Same checks as the load path: validate exp3.json files and CORS
- Reload the model if toggling does not re-arm
- 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
- Before enabling the feature, confirm the model ships valid exp3.json files
- Keep savedExpressionManager/savedEyeBlink so disable can restore stock behavior
- Treat init failure as non-fatal: motions and rendering continue
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
- [Model.vue] Expression controller initialization failed:
- [ZipLoader] Failed to extract CDI/EXP metadata:
- Error removing old model:
- [OPFS] ZipLoader not found in middlewares, caching disabled
- No Live2D model source provided.
AI-assisted analysis of moeru-ai/airi@677329427f (2026-08-18).
Data as JSON: /api/errors/4e6a56fa04933ba0.
Report an issue: GitHub.