moeru-ai/airi · error · Error

Godot Stage currently supports VRM models only.

Error message

Godot Stage currently supports VRM models only.

What it means

Thrown by assertGodotSceneInputSupportedDisplayModel when the resolved DisplayModel's format is not DisplayModelFormat.VRM. The Godot stage scene input path (G1.1 baseline) only loads VRM models; Live2D, MMD/PMX, or unknown formats are rejected before model bytes are read and sent to Electron main.

Source

Thrown at apps/stage-tamagotchi/src/renderer/pages/settings/models/godot-scene-input.ts:36

export function isGodotSceneInputSupportedDisplayModel(model: DisplayModel): boolean {
  return model.format === DisplayModelFormat.VRM
}

/**
 * Rejects display models that the Godot stage G1.1 scene input path cannot load.
 *
 * Use when:
 * - A renderer side-effect is about to read model bytes and invoke Electron main
 *
 * Expects:
 * - The display model has already been resolved from the selected model id
 *
 * Returns:
 * - Nothing when the model is supported
 */
export function assertGodotSceneInputSupportedDisplayModel(model: DisplayModel): void {
  if (!isGodotSceneInputSupportedDisplayModel(model))
    throw new Error('Godot Stage currently supports VRM models only.')
}

View on GitHub (pinned to 27111382b4)

Solutions

  1. Switch the active display model to a VRM (.vrm) model before enabling the Godot stage.
  2. If a VRM was intended, re-import it so the store classifies format as DisplayModelFormat.VRM.
  3. Use the Three.js/pixi stage renderer for Live2D/MMD models.
  4. Gate the Godot-stage UI so non-VRM models cannot be selected for it.

Example fix

// before
assertGodotSceneInputSupportedDisplayModel(model)

// after
if (!isGodotSceneInputSupportedDisplayModel(model)) {
  // disable Godot stage input, surface a user-facing message
  return
}
Defensive patterns

Strategy: type-guard

Validate before calling

import { DisplayModelFormat } from '@proj-airi/stage-ui/stores/display-models'
function canUseGodotSceneInput(model: DisplayModel): boolean {
  return model.format === DisplayModelFormat.VRM
}

Type guard

import { DisplayModelFormat } from '@proj-airi/stage-ui/stores/display-models'
function isVrmDisplayModel(model: DisplayModel): boolean {
  return model.format === DisplayModelFormat.VRM
}

Try / catch

try {
  assertGodotSceneInputSupportedDisplayModel(model)
} catch (e) {
  // disable Godot stage input, show 'VRM only' message, keep current renderer
}

Prevention

When it happens

Trigger: User selected a Live2D or MMD display model and switched to the Godot stage renderer; a display model resolved to a non-VRM format; the format enum on the stored model is missing or unknown.

Common situations: Mixing renderer backends — Godot stage selected while a Live2D model is active; imported a .pmx/.pmd that the display-model store classified as MMD; model record missing format field defaulting to a non-VRM value.

Related errors


AI-assisted analysis of moeru-ai/airi@27111382b4 (2026-08-12). Data as JSON: /api/errors/2a214632932342d0. Report an issue: GitHub.