moeru-ai/airi · warning
No Live2D model source provided.
Error message
No Live2D model source provided.
What it means
Live2D Model.vue runs loadModel() immediately via watch(modelSrcRef, ..., { immediate: true }). When the optional modelSrc prop is empty there is nothing to load; the component logs this warning, clears modelLoading, sets componentState to 'mounted' and returns instead of throwing. It is a controlled no-op for an unconfigured scene.
Source
Thrown at packages/stage-ui-live2d/src/components/scenes/live2d/Model.vue:240
}
// REVIEW: here as await until(...) guarded the pixiApp and stage to be valid.
if (model.value && pixiApp.value?.stage) {
// Dispose expression controller before destroying the old model
expressionController.dispose()
internalModelRef.value = undefined
try {
pixiApp.value.stage.removeChild(model.value)
model.value.destroy()
}
catch (error) {
console.warn('Error removing old model:', error)
}
model.value = undefined
}
if (!modelSrcRef.value) {
console.warn('No Live2D model source provided.')
modelLoading.value = false
componentState.value = 'mounted'
return
}
try {
if (isUnmounted) {
modelLoading.value = false
componentState.value = 'mounted'
return
}
const live2DModel = new Live2DModel<PixiLive2DInternalModel>()
await Live2DFactory.setupLive2DModel(live2DModel, { url: modelSrcRef.value, id: props.modelId }, { autoInteract: false })
availableMotions.value.forEach((motion) => {
if (motion.motionName in Emotion) {
motionMap.value[motion.fileName] = motion.motionName
}View on GitHub (pinned to 677329427f)
Solutions
- Bind a real source once available: <Model :model-src="live2dStore.modelSrc" :model-id="modelId" />
- Guard rendering with v-if="modelSrc" so the component only mounts when a source exists, showing a placeholder otherwise
- If the src loads asynchronously, delay mounting until it resolves instead of relying on the watcher to re-run
Example fix
// before <Model :model-id="modelId" /> // after <Model v-if="modelSrc" :model-src="modelSrc" :model-id="modelId" />
Defensive patterns
Strategy: validation
Validate before calling
// Before rendering the Live2D model component const ready = computed(() => typeof modelSrc.value === 'string' && modelSrc.value.length > 0) // template: <Model v-if="ready" :model-src="modelSrc" />
Type guard
function isModelSource(value: unknown): value is string {
return typeof value === 'string' && value.trim().length > 0
} Prevention
- Treat modelSrc as required in practice: never mount the Model without it
- Gate the component with v-if on a resolved source and show an empty/placeholder state otherwise
- For async sources, await the settings/model store before entering the scene
When it happens
Trigger: Rendering <Model /> from stage-ui-live2d without the modelSrc prop, or binding modelSrc to a reactive value that is still undefined/'' at mount time (settings store not hydrated yet, wrong store path, model deleted).
Common situations: First-run/onboarding state where no Live2D model has been imported or selected yet; passing only modelId and expecting the component to resolve the source itself; the source arriving asynchronously after mount.
Understand the failure class
Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.
Related errors
- [Spine] No model source provided
- Cannot set motion: model not loaded
- NO model src, cannot load VRM model.
- Empty settings file: ${url}
- Electron ipcRenderer is not available. Pass it explicitly to
AI-assisted analysis of moeru-ai/airi@677329427f (2026-08-18).
Data as JSON: /api/errors/adc5201844df860d.
Report an issue: GitHub.