affaan-m/ECC · error · SystemExit

unsupported mesh format

Error message

unsupported mesh format: {suffix}

What it means

Format dispatch guard in build: the mesh file's extension is not one of the supported importers (.glb, .gltf, .obj, .fbx), so no importer can be selected and the build exits before touching Blender state.

Solutions

  1. Convert the mesh to .glb, .gltf, .obj, or .fbx with a 3D tool or Blender export
  2. Check the file extension for typos (e.g. .blend is not accepted here)
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at skills/taste-application/scripts/blender_prop.py:185 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/83e6e583478e9ab1. Report an issue: GitHub.

Appendix: source

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

    if out is not None and receipt is not None and out.absolute() == receipt.absolute():
        raise ValueError("receipt and scene output must be distinct")
    source_hash = _sha256(mesh)
    grade = pack / "grade.json"
    grade_hash = _sha256(grade) if grade.is_file() else None
    import bpy
    import mathutils

    bpy.ops.wm.read_factory_settings(use_empty=True)

    suffix = mesh.suffix.lower()
    if suffix in (".glb", ".gltf"):
        bpy.ops.import_scene.gltf(filepath=str(mesh))
    elif suffix == ".obj":
        bpy.ops.wm.obj_import(filepath=str(mesh))
    elif suffix == ".fbx":
        bpy.ops.import_scene.fbx(filepath=str(mesh))
    else:
        raise SystemExit(f"unsupported mesh format: {suffix}")

    objs = [o for o in bpy.context.scene.objects if o.type == "MESH"]
    if not objs:
        raise SystemExit(f"no mesh geometry found in {mesh}")

    mn = mathutils.Vector((float("inf"),) * 3)
    mx = mathutils.Vector((-float("inf"),) * 3)
    for o in objs:
        for c in o.bound_box:
            w = o.matrix_world @ mathutils.Vector(c)
            mn = mathutils.Vector(min(mn[i], w[i]) for i in range(3))
            mx = mathutils.Vector(max(mx[i], w[i]) for i in range(3))
    validate_bounds(mn, mx)
    center = (mn + mx) / 2.0
    radius = max((mx - mn).length / 2.0, 1e-4)
    print(f"[prop] {len(objs)} mesh object(s), radius {radius:.4f}")

    pivot = bpy.data.objects.new("turntable_pivot", None)

View on GitHub (pinned to 8321021c54)