A resilient distributed platform designed to orchestrate and execute Blender rendering tasks across multiple containerized or standalone nodes. This system achieves horizontal scalability for heavy 3D rendering jobs by using a microservices architecture communicating through object storage and stream-based message brokering.
This application is a Distributed Rendering Cluster for Blender. It allows users to upload .blend scenes and render them significantly faster by splitting the animation into individual tasks and distributing them to a fleet of worker nodes.
Rendering high-quality 3D animations (especially using Cycles) is a computationally expensive and time-consuming process. On a single machine, a multi-frame animation could take hours or days to complete. Furthermore, if a single machine fails mid-render, the entire process might need to be restarted without careful state management.
The system solves this through parallel task distribution:
- Atomic Splitting: The gateway splits a large rendering job into atomic "tasks" (e.g., one task per frame).
- Asynchronous Execution: Multiple worker nodes ("Slaves") pull these tasks from a Redis Stream and process them concurrently.
- Distributed Storage: All input assets and rendered outputs are stored in a centralized MinIO object store, ensuring all nodes have access to the same data without complex file sharing.
- Fault Tolerance: If a slave node goes offline, the task remains in the Redis Stream (pending acknowledgment) and can be reclaimed by another active worker.
- Real-Time Monitoring: A frontend dashboard provides live telemetry (CPU, RAM, progress) for all connected hardware.
gateway/: The orchestration hub. It handles API requests, manages the Redis task queue, monitors slave health, and aggregates individual rendered frames into a final video usingffmpeg.slave/: The worker node. It listens for tasks, downloads the necessary.blendfile, invokes Blender headlessly to render its assigned frame, and uploads the resulting image.frontend/: A modern Next.js dashboard for submitting jobs and tracking the cluster's performance and status in real-time.- Architecture:
- Redis: Acts as the message broker (
jobs_stream) and state tracker. - MinIO: Acts as the shared filesystem for large binary assets (
.blendfiles and.pngoutputs).
- Redis: Acts as the message broker (
- Python 3.10+
- Node.js 18+
- Blender (installed and available in PATH for Slave nodes)
- Redis and MinIO (running locally or via Docker)
It is recommended to use a virtual environment for the Python components.
# From the root directory
python -m venv .venv
# Windows: .venv\Scripts\activate
# Unix: source .venv/bin/activatecd gateway
pip install -r requirements.txt
python run.pyThe gateway will run at http://localhost:8000
You can run multiple slave processes on different ports to simulate a cluster.
cd slave
pip install -r requirements.txt
# Run first slave
python run.py --port 8001
# Run second slave (in a new terminal)
python run.py --port 8002cd frontend
npm install
npm run devThe web interface will be accessible at http://localhost:3000
This project demonstrates key concepts in Parallel & Distributed Computing:
- Amdahl's Law: Benchmarking theoretical vs. actual speedup.
- Load Balancing: Dynamic task distribution via shared streams.
- Cluster Orchestration: Real-time health monitoring and task synchronization.