BabylonJS/Babylon.js · error · Error

No scene available to load animations to

Error message

No scene available to load animations to

What it means

loadAnimationGroupAsync (and related animation loading entry points) requires a target Scene to receive the loaded animation groups. Passing null/undefined scene throws before any network/file access.

Source

Thrown at packages/dev/core/src/Loading/sceneLoader.ts:1227

export async function loadAssetContainerAsync(source: SceneSource, scene: Scene, options?: LoadAssetContainerOptions): Promise<AssetContainer> {
    return await LoadAssetContainerAsync(source, scene, options);
}

// This is the core implementation of import animations
async function importAnimationsCoreAsync(
    rootUrl: string,
    sceneFilename: SceneSource = "",
    scene: Nullable<Scene> = EngineStore.LastCreatedScene,
    overwriteAnimations = true,
    animationGroupLoadingMode = SceneLoaderAnimationGroupLoadingMode.Clean,
    targetConverter: Nullable<(target: any) => any> = null,
    onProgress?: Nullable<(event: ISceneLoaderProgressEvent) => void>,
    pluginExtension?: Nullable<string>,
    name = "",
    pluginOptions: PluginOptions = {}
): Promise<void> {
    if (!scene) {
        throw new Error("No scene available to load animations to");
    }

    if (overwriteAnimations) {
        // Reset, stop and dispose all animations before loading new ones
        for (const animatable of scene.animatables) {
            animatable.reset();
        }
        scene.stopAllAnimations();
        const animationGroups = scene.animationGroups.slice();
        for (const animationGroup of animationGroups) {
            animationGroup.dispose();
        }
        const nodes = scene.getNodes();
        for (const node of nodes) {
            if (node.animations) {
                node.animations = [];
            }
        }

View on GitHub (pinned to 0592b347b8)

Solutions

  1. Create the engine/scene before calling and pass the scene instance
  2. Check argument order for the overload you use and supply scene in the right position
  3. Await engine/scene initialization before starting animation loads

Example fix

// before
await SceneLoader.LoadAnimationGroupAsync(url, undefined, undefined, 'clips'); // scene missing
// after
const scene = new Scene(engine);
await SceneLoader.LoadAnimationGroupAsync(url, undefined, undefined, 'clips', scene);
Defensive patterns

Strategy: validation

Validate before calling

if (!scene) throw new Error('Scene required for animation loading');
await SceneLoader.LoadAnimationGroupAsync(url, undefined, undefined, name, scene);

Type guard

const hasScene = (s: unknown): s is Scene => s instanceof Scene;

Try / catch

try {
  await SceneLoader.LoadAnimationGroupAsync(url, undefined, undefined, name, scene);
} catch (e) {
  if (e instanceof Error && e.message.includes('No scene available to load animations')) {
    console.error('Scene not initialized before animation load');
  } else throw e;
}

Prevention

When it happens

Trigger: Calling SceneLoader.LoadAnimationGroupAsync(url, onProgress, pluginExtension, name, undefined /* scene */) — omitting the scene argument so it resolves to undefined.

Common situations: Calling the animation loader before scene creation; forgetting the scene parameter due to differing argument orders between overloads; async init race where the scene variable isn't assigned yet.

Related errors


AI-assisted analysis of BabylonJS/Babylon.js@0592b347b8 (2026-08-30). Data as JSON: /api/errors/41015db2f55f0850. Report an issue: GitHub.