affaan-m/ECC · error · ValueError
scene output must use .blend extension
Error message
scene output must use .blend extension
What it means
build() in blender_prop.py validates the --out scene path extension: Blender's save_as_mainfile needs a .blend target, so any other suffix is rejected.
Solutions
- Rename the output to end in .blend, e.g. --out scene.blend
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at skills/taste-application/scripts/blender_prop.py:166 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/df543dd33c0a8be5.
Report an issue: GitHub.
Appendix: source
Thrown at skills/taste-application/scripts/blender_prop.py:166
return hashlib.file_digest(stream, "sha256").hexdigest()
def build(mesh: Path, pack: Path, out: Path | None, frames: int, size: int,
render_dir: Path | None, *, width: int | None = None,
height: int | None = None, fps: float = 24,
receipt: Path | None = None) -> None:
width = size if width is None else width
height = size if height is None else height
validate_settings(frames, width, height, fps)
if not mesh.is_file():
raise ValueError(f"mesh is not a regular file: {mesh}")
for path in (out, receipt, render_dir):
if path is not None:
validate_output(path)
if receipt is not None and out is None:
raise ValueError("receipt requires a saved --out scene")
if out is not None and out.suffix.lower() != ".blend":
raise ValueError("scene output must use .blend extension")
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:View on GitHub (pinned to 8321021c54)