Flamenco
Distributed render farm management system for Blender
[](https://github.com/blender/flamenco/actions)
[](https://golang.org/)
[](https://www.gnu.org/licenses/gpl-3.0)
[](https://flamenco.blender.org/)
---
## Quick Start
Get up and running with Flamenco in minutes:
```bash
# Download latest release
curl -L https://flamenco.blender.org/download -o flamenco.zip
unzip flamenco.zip
# Start the Manager (central coordination server)
./flamenco-manager
# In another terminal, start a Worker (render node)
./flamenco-worker
# Install the Blender add-on from addon/ directory
# Then submit your first render job from Blender!
```
**Web Interface:** Open http://localhost:8080 to manage your render farm.
## What is Flamenco?
Flamenco is a free, open-source render farm manager that helps you distribute Blender renders across multiple computers. Whether you have a small home studio or a large production facility, Flamenco makes it easy to:
- **Scale Your Renders** - Distribute work across any number of machines
- **Monitor Progress** - Real-time web interface with job status and logs
- **Manage Resources** - Automatic worker discovery and load balancing
- **Stay Flexible** - Support for custom job types and rendering pipelines
### Key Features
- **π Easy Setup** - One-click worker registration and automatic configuration
- **π Web Dashboard** - Modern Vue.js interface for monitoring and management
- **π§ Extensible** - JavaScript-based job compilers for custom workflows
- **πΎ Asset Management** - Optional Shaman system for efficient file sharing
- **π Secure** - Worker authentication and task isolation
- **π± Cross-Platform** - Linux, Windows, and macOS support
## Architecture
Flamenco consists of three main components that work together:
```
βββββββββββββββββββ βββββββββββββββββββ βββββββββββββββββββ
β Blender Add-on βββββΆβ Manager ββββββ Worker β
β (Job Submit) β β (Coordination) β β (Task Execute) β
βββββββββββββββββββ βββββββββββββββββββ βββββββββββββββββββ
β β
β βββββββββββββββββββ
β β Worker β
β β (Task Execute) β
β βββββββββββββββββββ
β
β βββββββββββββββββββ
βββββββββββββββββΆβ Worker β
β (Task Execute) β
βββββββββββββββββββ
```
- **Manager**: Central server that receives jobs, breaks them into tasks, and distributes work
- **Worker**: Lightweight daemon that executes render tasks on individual machines
- **Add-on**: Blender plugin that submits render jobs directly from your Blender projects
## Installation
### Pre-built Releases
Download the latest release for your platform from [flamenco.blender.org/download](https://flamenco.blender.org/download).
### Building from Source
**Prerequisites:**
- Go 1.24.4+
- Node.js 18+ (for web app)
- Python 3.9+ (for add-on development)
**Build all components:**
```bash
# Install build tools and dependencies
make with-deps
# Build Manager and Worker binaries
make all
# Build web application
make webapp-static
# Run tests
make test
```
**Development setup:**
```bash
# Start Manager in development mode
make devserver-webapp # Web app dev server (port 8081)
./flamenco-manager # Manager with hot-reload webapp
# Start Worker
./flamenco-worker
```
## Usage Examples
### Basic Render Job
```python
# In Blender with Flamenco add-on installed
import bpy
# Configure render settings
bpy.context.scene.render.filepath = "//render/"
bpy.context.scene.frame_start = 1
bpy.context.scene.frame_end = 250
# Submit to Flamenco
bpy.ops.flamenco.submit_job(
job_name="My Animation",
job_type="simple_blender_render"
)
```
### Custom Job Types
Create custom rendering pipelines with JavaScript job compilers:
```javascript
// custom_job_type.js
function compileJob(job) {
const renderTasks = [];
for (let frame = job.settings.frame_start; frame <= job.settings.frame_end; frame++) {
renderTasks.push({
name: `render-frame-${frame.toString().padStart(4, '0')}`,
type: "blender",
settings: {
args: [
job.settings.blender_cmd, "-b", job.settings.filepath,
"-f", frame.toString()
]
}
});
}
return {
tasks: renderTasks,
dependencies: [] // Define task dependencies
};
}
```
### API Integration
Access Flamenco programmatically via REST API:
```bash
# Get farm status
curl http://localhost:8080/api/v3/status
# List active jobs
curl http://localhost:8080/api/v3/jobs
# Get job details
curl http://localhost:8080/api/v3/jobs/{job-id}
```