Distributed Bucket Rendering for Blender

Project Name: Distributed Bucket Rendering
Client: Lab project
Stack: Python 3.10, Blender 4.2, Docker Compose, Flask
Source: github.com/sirhaffy/distibuted_bucket_render
Write-up: Post on LinkedIn
Status: Works locally on CPU and GPU in Docker. Azure not tried yet.

A while back I wanted to find out whether the power sitting in Azure, or any other public cloud, could be pointed at distributed 3D rendering for Blender. The real question behind it was smaller and more personal: could a freelancer, which is what I was, get the same render capacity as a large studio?

The idea is that you scale the number of render nodes and choose how many pieces the image is cut into. Each piece, each bucket, becomes a render job for one node. When a node finishes, its bucket is sent back to Blender and placed where it belongs in the render window, so the image takes shape while the render is still running. The node immediately picks up the next bucket.

That last part is the one that matters when you are actually working. You are not waiting for a finished frame to find out whether the lighting holds. You watch it arrive, and you can develop the scene in steps.

Under the hood the addon packs the .blend with its dependencies, uploads it to each container over HTTP, and polls for progress. The containers run headless Blender behind a small Flask server and keep nothing after a job finishes, so the same image runs under Docker Compose locally or in a cluster without changes. Output is EXR MultiLayer with the passes preserved.

Right now it all works with CPU and GPU rendering in Docker locally. I have not had the chance to try it in Azure yet. There are plenty of further ideas, and I might pick it up again if GPU prices come down, because as things stand it is not a sustainable thing for a freelancer to run.

What I got working is on GitHub for anyone who wants to look at it or take it further: github.com/sirhaffy/distibuted_bucket_render

← All projects