moeru-ai/airi · warning

NO model src, cannot load VRM model.

Error message

NO model src, cannot load VRM model.

What it means

VRMModel's load routine (guarded by a requestId for cancellation) requires the scene and a truthy modelSrc. When modelSrc is empty it warns and aborts the whole load request; no model is added to the scene and no load/error events beyond the warn are emitted.

Source

Thrown at packages/stage-ui-three/src/components/Model/VRMModel.vue:666

async function loadModel() {
  const requestId = invalidatePendingLoads()
  const currentLoadReason = resolveVrmLoadReason()
  const loadStartedAt = performance.now()
  let nextVrm: VRM | undefined
  let nextVrmGroup: Group | undefined
  let nextVrmAnimationMixer: AnimationMixer | undefined
  let nextVrmEmote: ReturnType<typeof useVRMEmote> | undefined
  let didCommitLoad = false

  try {
    if (!scene.value) {
      await until(() => scene.value).toBeTruthy()
      if (!isLoadRequestCurrent(requestId))
        return
    }
    if (!modelSrc.value) {
      console.warn('NO model src, cannot load VRM model.')
      return
    }

    emit('loadStart', currentLoadReason)

    if (isStageThreeRuntimeTraceEnabled()) {
      stageThreeRuntimeTraceContext.emit(stageThreeTraceVrmLoadStartEvent, {
        modelSrc: modelSrc.value,
        reason: currentLoadReason,
        rendererMemory: createThreeRendererMemorySnapshot(getRendererInstance()),
        sceneSummary: createVrmSceneSummarySnapshot(),
        ts: loadStartedAt,
      })
    }

    modelLoaded.value = false
    const reusableInstance = takeManagedVrmInstance(getManagedVrmScopeKey(), modelSrc.value)
    if (reusableInstance) {

View on GitHub (pinned to 677329427f)

Solutions

  1. Ensure modelSrc resolves to a usable VRM source (object URL, http(s) URL, or data URL) before the component renders — use v-if or await the store
  2. Re-select or re-import the VRM model if the stored source no longer exists
  3. Check the parent data flow: the prop must actually reach the component with a value

Example fix

// before
<VRMModel :model-src="vrmStore.src" />

// after
<VRMModel v-if="vrmStore.src" :model-src="vrmStore.src" />
Defensive patterns

Strategy: validation

Validate before calling

// Before rendering VRMModel
const ready = computed(() => typeof modelSrc.value === 'string' && modelSrc.value.length > 0)
// template: <VRMModel v-if="ready" :model-src="modelSrc" />

Type guard

function isModelSource(value: unknown): value is string {
  return typeof value === 'string' && value.trim().length > 0
}

Prevention

When it happens

Trigger: Rendering VRMModel without a resolved modelSrc: the model store/settings still loading, a cleared or missing VRM selection, or the prop bound to undefined by mistake.

Common situations: First-run state before any VRM is chosen; switching models where the new src is briefly undefined; persisted settings pointing at a deleted model record.

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


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