affaan-m/ECC · error · RuntimeError

Blender failed to save scene

Error message

Blender failed to save scene

What it means

Save guard in build: Blender's save_as_mainfile call completed but the staged scene file is missing or zero bytes, so publishing the scene via hard link is unsafe. Indicates a Blender save failure or filesystem error.

Solutions

  1. Check Blender's console output for save errors
  2. Verify write permissions and disk space in the output directory
  3. Retry the build; transient I/O failures are possible
Defensive patterns

Strategy: retry

When it happens

Trigger: Thrown at skills/taste-application/scripts/blender_prop.py:289 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of affaan-m/ECC@8321021c54 (2026-09-16). Data as JSON: /api/errors/0c12768911d026bf. Report an issue: GitHub.

Appendix: source

Thrown at skills/taste-application/scripts/blender_prop.py:289

    sc.frame_set(1)
    bpy.context.view_layer.update()

    if render_dir:
        sc.render.filepath = str(render_dir.absolute() / "turn_")
        try:
            sc.render.engine = "BLENDER_EEVEE_NEXT"
        except TypeError:
            sc.render.engine = "BLENDER_EEVEE"

    if out:
        out.parent.mkdir(parents=True, exist_ok=True)
        # Pack textures, then publish on the same filesystem without clobbering.
        bpy.ops.file.pack_all()
        with tempfile.TemporaryDirectory(prefix=".taste-blender-", dir=out.parent) as temporary:
            staged = Path(temporary) / "scene.blend"
            bpy.ops.wm.save_as_mainfile(filepath=str(staged), check_existing=False, copy=True)
            if not staged.is_file() or staged.stat().st_size == 0:
                raise RuntimeError("Blender failed to save scene")
            validate_output(out)
            os.link(staged, out)
        print(f"[prop] scene -> {out}")

    if render_dir:
        validate_output(render_dir)
        render_dir.mkdir(parents=True, exist_ok=False)
        status = bpy.ops.render.render(animation=True)
        verify_render(status, render_dir, frames)
        print(f"[prop] frames -> {render_dir}")

    if receipt:
        if _sha256(mesh) != source_hash or (_sha256(grade) if grade.is_file() else None) != grade_hash:
            raise RuntimeError("input changed during scene build")
        payload = {
            "schema_version": 1, "blender_version": bpy.app.version_string,
            "source": {"path": str(mesh.absolute()), "sha256": source_hash},
            "grade": {"path": str(grade.absolute()), "sha256": grade_hash},

View on GitHub (pinned to 8321021c54)