moeru-ai/airi · warning
[Model.vue] Expression controller initialization failed:
Error message
[Model.vue] Expression controller initialization failed:
What it means
In loadModel's finally, the expression controller initializes fire-and-forget: it reads expression definitions from model3.json and parses each referenced exp3.json. A failure (missing files, CORS-blocked fetch, malformed JSON) only logs this warning — by design, expression problems never block model rendering. Expressions stay unavailable until the feature is toggled or the model reloads.
Source
Thrown at packages/stage-ui-live2d/src/components/scenes/live2d/Model.vue:448
// without idle-motion blink curves.
if (internalModel.eyeBlink) {
;(internalModel as any).eyeBlink = null
}
internalModelRef.value = internalModel
}
emits('modelLoaded')
}
catch (error) {
console.error('[Live2D] Failed to load model:', error)
emits('error', error instanceof Error ? error : new Error(String(error)))
}
finally {
modelLoading.value = false
componentState.value = 'mounted'
await initExpressionController(internalModelRef.value).catch((err) => {
console.warn('[Model.vue] Expression controller initialization failed:', err)
})
modelLoadMutex.release()
}
}
/**
* Initialise the expression controller by reading expression definitions from
* the model settings (model3.json) and parsing each referenced exp3.json file.
*
* This is intentionally fire-and-forget from loadModel so that a failure in
* expression loading does not prevent the model itself from rendering.
*/
async function initExpressionController(internalModel?: PixiLive2DInternalModel) {
// Dispose any previous state (handles model reloads)
expressionController.dispose()
const settings = internalModel?.settings as any
if (!settings)View on GitHub (pinned to 677329427f)
Solutions
- Verify the model archive contains every exp3.json referenced by model3.json
- Re-import the complete model archive (partial extraction is a common cause)
- Serve remote models with CORS headers so expression fetches succeed
- Retry by toggling the expression feature or reloading the model
Defensive patterns
Strategy: fallback
Validate before calling
const expressions = internalModel?.settings?.expressions ?? [] if (expressions.length === 0) return // no expression refs to parse
Try / catch
await initExpressionController(internalModelRef.value).catch((err) => {
console.warn('[Model.vue] Expression controller initialization failed:', err)
}) // fire-and-forget by design: model rendering must not depend on expressions Prevention
- Validate model3.json expression references when importing model archives
- Serve remote models with CORS headers so exp3.json fetches succeed
- Retry init by toggling the expression feature or reloading the model
- Keep expression failures non-fatal: motions and rendering continue
When it happens
Trigger: model3.json referencing exp3.json files missing from the archive; malformed exp3.json content; remote hosting without CORS blocking the expression file fetches.
Common situations: Community models with broken expression references; partially extracted model folders; models hosted on buckets without CORS headers.
Related errors
- [Model.vue] Expression controller initialisation 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/3eb7265f711ff8ec.
Report an issue: GitHub.