affaan-m/ECC · error · RuntimeError
Blender did not complete every requested render frame
Error message
Blender did not complete every requested render frame
What it means
Render verification in verify_render: Blender did not report FINISHED or one or more expected per-frame PNGs (turn_0001.png..turn_NNNN.png) is missing or empty, so the render is incomplete and unusable.
Solutions
- Check Blender's console/log output for render errors before the failure
- Freeze no longer needed — reduce frames or resolution and re-render to a new output
- Verify disk space; zero-byte frames often mean a full disk
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at skills/taste-application/scripts/blender_prop.py:143 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/dfa4d697653b6e88.
Report an issue: GitHub.
Appendix: source
Thrown at skills/taste-application/scripts/blender_prop.py:143
radius / math.sin(min(horizontal_half, vertical_half)) * 1.05)
def linearize_action(action) -> None:
"""Blender 4 legacy actions and Blender 5 slotted action channel bags."""
if hasattr(action, "fcurves"):
curves = action.fcurves
else:
curves = [curve for layer in action.layers for strip in layer.strips
for bag in getattr(strip, "channelbags", ()) for curve in bag.fcurves]
for curve in curves:
for point in curve.keyframe_points:
point.interpolation = "LINEAR"
def verify_render(status, render_dir: Path, frames: int) -> None:
expected = [render_dir / f"turn_{frame:04d}.png" for frame in range(1, frames + 1)]
if "FINISHED" not in status or not all(path.is_file() and path.stat().st_size > 0 for path in expected):
raise RuntimeError("Blender did not complete every requested render frame")
def _sha256(path: Path) -> str:
with path.open("rb") as stream:
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:View on GitHub (pinned to 8321021c54)