moeru-ai/airi · warning

[Spine] No model source provided

Error message

[Spine] No model source provided

What it means

The Spine Model component's load routine requires the modelSrc prop (skeleton + atlas source). When it is empty, the component disposes any previous Spine instance, clears modelLoading, sets componentState to 'mounted' and returns — a controlled no-op, not a crash.

Source

Thrown at packages/stage-ui-spine/src/components/scenes/spine/Model.vue:128

  modelIntrinsicBounds = undefined
  spineStore.isModelLoaded = false
}

async function loadModel() {
  await modelLoadMutex.acquire()

  modelLoading.value = true
  componentState.value = 'loading'

  try {
    if (!canvas.value) {
      modelLoading.value = false
      componentState.value = 'mounted'
      return
    }

    if (!modelSrc.value) {
      console.warn('[Spine] No model source provided')
      disposeSpine()
      modelLoading.value = false
      componentState.value = 'mounted'
      return
    }

    disposeSpine()

    let assetPaths: { skeletonPath: string, atlasPath: string, skeletonFormat: 'binary' | 'json', texturePaths: string[] }
    let pathPrefix = ''
    let blobUrls: Record<string, string> | undefined
    let rawData: Record<string, Uint8Array | string> | undefined

    const isLocalBlob = modelSrc.value.startsWith('blob:')
    if (isLocalBlob || modelSrc.value.endsWith('.zip')) {
      const response = await fetch(modelSrc.value)
      const blob = await response.blob()
      const file = new File([blob], 'model.zip', { type: 'application/zip' })

View on GitHub (pinned to 677329427f)

Solutions

  1. Provide a valid modelSrc pointing at the Spine skeleton/atlas source
  2. Render conditionally: <Model v-if="modelSrc" :model-src="modelSrc" /> and show a placeholder state otherwise

Example fix

// before
<Model />

// after
<Model v-if="modelSrc" :model-src="modelSrc" />
Defensive patterns

Strategy: validation

Validate before calling

// Before rendering the Spine model
// template: <Model v-if="modelSrc" :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 the Spine <Model /> without modelSrc, or with modelSrc bound to a value that is still undefined while settings/model stores load.

Common situations: No Spine model selected during onboarding; passing only identifiers and expecting the component to fetch the source; conditional sources that start as undefined.

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/53b34bc948195f72. Report an issue: GitHub.