moeru-ai/airi · warning

No VRM found

Error message

No VRM found

What it means

clipFromVRMAnimation(vrm, animation) takes both parameters optional on purpose, but if vrm is undefined it warns 'No VRM found' and returns undefined — you cannot build an AnimationClip from a VRMAnimation without the target VRM rig. The animation parameter is then never even examined.

Source

Thrown at packages/stage-ui-three/src/composables/vrm/animation.ts:39

  // load VRM Animation .vrma file
  const gltf = await loader.loadAsync(url)

  const userData = gltf.userData as GLTFUserdata
  if (!userData.vrmAnimations) {
    console.warn('No VRM animations found in the .vrma file')
    return
  }
  if (userData.vrmAnimations.length === 0) {
    console.warn('No VRM animations found in the .vrma file')
    return
  }

  return userData.vrmAnimations[0]
}

export async function clipFromVRMAnimation(vrm?: VRMCore, animation?: VRMAnimation) {
  if (!vrm) {
    console.warn('No VRM found')
    return
  }
  if (!animation) {
    return
  }

  // create animation clip
  return createVRMAnimationClip(animation, vrm)
}

// Set initial positions for animation
export function reAnchorRootPositionTrack(clip: AnimationClip, _vrm: VRMCore) {
// Get the hips node to re-anchor the root position track
  const hipNode = _vrm.humanoid?.getNormalizedBoneNode('hips')
  if (!hipNode) {
    console.warn('No hips node found in VRM model.')
    return
  }

View on GitHub (pinned to 677329427f)

Solutions

  1. Ensure the VRM is fully loaded (await the VRM loader) before creating the clip.
  2. Check the model-load path for a silently swallowed error upstream.
  3. Guard the call site and skip animation setup when vrm is absent.

Example fix

// before
const clip = await clipFromVRMAnimation(vrmRef.current, animation) // vrmRef.current may be undefined

// after
if (!vrmRef.current) return // model not ready; skip or await model load first
const clip = await clipFromVRMAnimation(vrmRef.current, animation)
Defensive patterns

Strategy: type-guard

Validate before calling

if (!vrm) { /* model not loaded yet: skip or await */ }

Type guard

function isLoadedVRM(v: VRMCore | undefined | null): v is VRMCore {
  return !!v
}

Prevention

When it happens

Trigger: Calling clipFromVRMAnimation(undefined, anim) after the VRM model failed to load, is still loading, or the variable was never assigned; wiring animation loading before model loading and not awaiting the model.

Common situations: Race between model load and animation load in onMounted; a model-load failure swallowed earlier so undefined propagates; refactoring that renamed the vrm variable.

Related errors


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