Skip to content
Deployments

Deploy the CPU render-farm worker pool template with OpenTofu

Deployment · Updated Jun 2026

Coming from another cloud?

▸AWS·Deadline Cloud

This Quake AI feature maps to AWS’s Deadline Cloud.

▸Google Cloud·Render Farm

This Quake AI feature maps to Google Cloud’s Render Farm.

Deploy the CPU render-farm worker pool template with OpenTofu

Stand up a dispatcher VM plus CPU workers that pull render jobs and upload results to Object Storage using the validated OpenTofu template render-farm-worker. Quake AI has no GPU rendering; this template provisions a CPU-only render pool for hobbyist previews, overnight batch jobs, and audio-render workloads.

Monthly cost estimate

Pricing calculator ↗

Sized as a custom package on dedicated vCPU.

Starting template$197.00/mo

Monthly total for the required template above. Use the configurator below to add optional pieces and see the total update.

What each resource is for

Dispatcher

c2a.large · 2 dedicated vCPU, 4 GiB RAM, 0.5 Gbps

$62.00/mo

2× Worker node

c2a.large · 2 dedicated vCPU, 4 GiB RAM, 0.5 Gbps

$124.00/mo

Compute shown per role at custom-package rates ($29/dedicated vCPU, $7.25/shared vCPU, $1/GiB RAM). The headline above is the billed total: the cheaper of a named plan and the custom package, plus add-ons.

Included in baseline

c2a.large

2 dedicated vCPU, 4 GiB RAM, 0.5 Gbps

$62.00

c2a.large

2 dedicated vCPU, 4 GiB RAM, 0.5 Gbps

$62.00

c2a.large

2 dedicated vCPU, 4 GiB RAM, 0.5 Gbps

$62.00

Compute + RAM rate basis

6 vCPU + 12 GiB RAM at $29/dedicated vCPU, $7.25/shared vCPU, $1/GiB RAM (regular). Totals apply the flat −$5/mo package promotion.

—

Block storage (200 GiB)

200 GiB at $0.08/GiB/mo

$16.00

Package promotional discount

Flat −$5.00/mo on the custom package (same promotion as named plans).

$-5.00

Object storage (usage-based)

Object storage

2 buckets. The first 1 TB is included, then $10.00 per TB each month. You pay for what you store, so this line depends on usage.

$0–$40/mo

Assumes: 2 TB stored is $10/mo; 5 TB stored is $40/mo. Within the included allotment it stays $0.

Included at no charge

These line items are zero on Quake AI. Many other providers meter them separately.

Data transfer (inbound and outbound)

Unlimited data transfer on every plan; Quake AI does not meter per-GB egress.

AWS, GCP, and Azure meter outbound transfer per GB. DigitalOcean and Hetzner include an allowance on compute plans, then charge overage.

Learn more
$0.00

Object storage upload and download

No separate charges for uploading or downloading object storage data.

Most object storage providers meter egress and API requests separately from stored capacity.

Learn more
$0.00

Private networking

Private networks, subnets, Neutron routers, and security groups are included with the plan.

VPC objects are usually free to create elsewhere, but NAT gateways bill hourly plus per-GB processed. Quake AI uses router SNAT with no separate NAT line item.

$0.00

Control-plane API requests

OpenStack API calls for provisioning and management are included.

Some managed services on other clouds meter API calls or charge for premium control-plane features.

$0.00

Configure your estimate

Check the add-ons you plan to deploy to build a monthly total. Nothing is selected to start, so the total below begins at the baseline.

Starting template

The required baseline, always included.

$197.00/mo

Pick how much you expect to store to fold it into the total.

$0.00/mo
Your configured estimate$197.00/mo

Dev/test vs production

Start on shared CPU for dev/test, then promote to dedicated for production with a flavor resize. The network, storage, and template stay the same.

Dev/test on shared CPU

Burstable s1a flavors; suited to prototyping and low or bursty load.

$60.50/mo

Production on dedicated CPU

The headline estimate above; predictable steady-load performance.

$197.00/mo

Saves $136.50/mo while you build on shared CPU.

Shared flavors carry less RAM (c2a.large (4 GiB RAM) -> s1a.small (2 GiB RAM); c2a.large (4 GiB RAM) -> s1a.small (2 GiB RAM)). A resize reboots the instance; data on attached volumes persists. Size the dedicated flavor for the RAM your production workload needs.

Pricing data last validated: . For current rates, check quake.ai/pricing.

Quake AIJobs bucketmanifests + assetsOutput bucketrendered framesDispatcher VMqueue API :8080CPU worker poolFFmpeg / BlenderPrivate networkno worker FIPs poll queuefetch assetsupload results
Click to zoom
Render farm topology: dispatcher queues jobs on a floating IP; CPU workers on a private subnet pull work and write rendered frames to Object Storage

Prerequisites#

You need:

Step 1: Mint credentials and configure variables#

Mint EC2-compatible credentials and export the standard AWS variables:

bash
openstack ec2 credentials create
export AWS_ACCESS_KEY_ID=YOUR_ACCESS_KEY
export AWS_SECRET_ACCESS_KEY=YOUR_SECRET_KEY
export AWS_ENDPOINT_URL_S3=https://object.us-east-1.rumble.cloud

Copy terraform.tfvars.example to terraform.tfvars and set:

HCL
key_name              = "YOUR_KEY_NAME"
jobs_bucket_name      = "YOUR_PROJECT_RENDER_JOBS"
output_bucket_name    = "YOUR_PROJECT_RENDER_OUT"
s3_access_key         = "YOUR_ACCESS_KEY"
s3_secret_key         = "YOUR_SECRET_KEY"
enable_dispatcher_fip = true

worker_count = 2

Workers stay on the private subnet with no floating IPs. Setting enable_dispatcher_fip = true allocates one floating IP on the dispatcher so your workstation can reach the job API.

Step 2: Apply the template#

From the template directory, run:

bash
tofu init
tofu plan
tofu apply

Type yes when prompted. Cloud-init installs the dispatcher API and worker agents on each node. First boot can take 10 to 15 minutes while FFmpeg and Blender install on the workers.

When the run finishes, note job_submit_url, jobs_bucket, and output_bucket from the outputs.

Step 3: Submit a sample job and verify output#

Upload a short test asset:

bash
ffmpeg -f lavfi -i "color=c=blue:s=320x240:d=2" -pix_fmt yuv420p /tmp/frame-source.mp4
aws s3 cp /tmp/frame-source.mp4 \
  "s3://$(tofu output -raw jobs_bucket)/jobs/tutorial-frame/source.mp4" \
  --endpoint-url "$AWS_ENDPOINT_URL_S3"

Create and submit a job manifest:

bash
cat > /tmp/tutorial-job.json <<'EOF'
{
  "job_id": "tutorial-frame",
  "input_key": "jobs/tutorial-frame/source.mp4",
  "output_prefix": "jobs/tutorial-frame/out/",
  "profile": "ffmpeg-transcode",
  "params": { "format": "mp4" }
}
EOF

curl -sS -X POST \
  -H "Content-Type: application/json" \
  --data-binary @/tmp/tutorial-job.json \
  "$(tofu output -raw job_submit_url)"

Workers poll the queue on the private subnet. Allow 10 to 15 minutes after tofu apply for cloud-init to finish before you expect rendered output. Poll the output bucket:

bash
aws s3 ls "s3://$(tofu output -raw output_bucket)/tutorial-frame/" \
  --endpoint-url "$AWS_ENDPOINT_URL_S3"

You should see render.mp4 under the tutorial-frame/ prefix. If nothing appears after 15 minutes, confirm dispatcher and worker instances are Active in the Console.

Next steps#

Clean up#

Empty both buckets, then run tofu destroy from the project directory:

bash
aws s3 rm "s3://$(tofu output -raw jobs_bucket)" --recursive --endpoint-url "$AWS_ENDPOINT_URL_S3"
aws s3 rm "s3://$(tofu output -raw output_bucket)" --recursive --endpoint-url "$AWS_ENDPOINT_URL_S3"
tofu destroy

Delete the EC2-compatible credential with openstack ec2 credentials delete YOUR_ACCESS_KEY if you created one only for this deployment.

Was this page helpful?