3b1b/manim · warning

No scene named {name} found

Error message

No scene named {name} found

What it means

note_missing_scenes runs after name-based scene filtering in get_scenes_to_render: for each name requested via the CLI that has no matching scene class in the loaded module(s), it logs 'No scene named {name} found'. Unlike errors 55/56 this only logs — it does not itself exit; but if no requested scene matched at all, classes_to_run is empty and manim falls into the empty-selection path (typically the interactive menu or an abort).

Source

Thrown at manimlib/extract_scene.py:91

    pre_config["file_writer_config"]["quiet"] = True
    pre_config["skip_animations"] = True
    pre_scene = scene_class(**pre_config)
    pre_scene.run()
    total_time = pre_scene.time - pre_scene.skip_time
    return int(total_time * manim_config.camera.fps)


def scene_from_class(scene_class, scene_config: Dict, run_config: Dict):
    fw_config = manim_config.file_writer
    if fw_config.write_to_movie and run_config.prerun:
        scene_config.file_writer_config.total_frames = compute_total_frames(scene_class, scene_config)
    return scene_class(**scene_config)


def note_missing_scenes(arg_names, module_names):
    for name in arg_names:
        if name not in module_names:
            log.error(f"No scene named {name} found")


def get_scenes_to_render(all_scene_classes: list, scene_config: Dict, run_config: Dict):
    if run_config["write_all"] or len(all_scene_classes) == 1:
        classes_to_run = all_scene_classes
    else:
        name_to_class = {sc.__name__: sc for sc in all_scene_classes}
        classes_to_run = [name_to_class.get(name) for name in run_config.scene_names]
        classes_to_run = list(filter(lambda x: x, classes_to_run))  # Remove Nones
        note_missing_scenes(run_config.scene_names, name_to_class.keys())

    if len(classes_to_run) == 0:
        classes_to_run = prompt_user_for_choice(all_scene_classes)

    return [
        scene_from_class(scene_class, scene_config, run_config)
        for scene_class in classes_to_run
    ]

View on GitHub (pinned to dee01804d4)

Solutions

  1. Check the scene class names in the file and pass the exact __name__
  2. Run with no scene name to see the printed list of available scenes
  3. If the module failed to import the class (ImportError swallowed at module load), fix the import — the class then appears in the list

Example fix

# before
$ manim file.py MyScnee
# after
$ manim file.py MyScene
Defensive patterns

Strategy: validation

Validate before calling

import inspect, importlib
mod = importlib.import_module("your_module")
available = {n for n, o in inspect.getmembers(mod, inspect.isclass) if issubclass(o, object)}
missing = [n for n in requested_names if n not in available]
assert not missing, f"unknown scenes: {missing}"

Type guard

def scene_exists(name: str, module) -> bool:
    import inspect
    return name in {n for n, _ in inspect.getmembers(module, inspect.isclass)}

Prevention

When it happens

Trigger: manim file.py Typpo instead of Typo; scene names gathered from multiple files where one file lacks the class; using --save_as or config that carries stale scene_names.

Common situations: Renamed or deleted scene classes; copy-pasting a render command from a project where the class was named differently; expecting snake_case file names to select scenes.

Related errors


AI-assisted analysis of 3b1b/manim@dee01804d4 (2026-08-14). Data as JSON: /api/errors/8afb7c3045a9417f. Report an issue: GitHub.