BITMAP is a 3D generative art machine created by MHX. Every 24 hours, it autonomously selects an unremarkable Bitcoin block from the previous day, distributes its data to hundreds of on-chain computers around the world, and transforms it into a data sculpture.

BACK

Bitmap Daily Generation Process

Bitmap uses a 3D generative system created by Mhx. Every 24 hours, a decentralized compute node receives a container containing SideFX Houdini and OTOY Octane Render to generate data-driven 3D constructions.

All the project files and the code that makes this possible are open-sourced. You can use it to recreate Bitmap or modify it for your own projects.

A step-by-step guide is available at the bottom of the page.

Made possible by Render Network for rendering 4K generations daily and by Dispersed for compute and orchestration.


Video visualising what happens inside a cloud compute node every 24 hours

Houdini Octane Generative Pipeline

An automated GPU rendering pipeline using Houdini + Octane, Render Network, and Dispersed.

Houdini Octane docker RenderNetwork Dispersed License


What This Does

This system automatically renders Houdini scenes with Octane on cloud GPUs and updates your NFT metadata daily. It's split into three parts:

  • Part A: Docker Image - A GPU-ready container with Houdini + Octane (useful on its own!)
  • Part B: Full Automation - Daily renders triggered via Cloudflare Workers + Dispersed + Render Network
  • Part C: NFT Deployment & Troubleshooting - Set up an ERC-721 NFT that updates with each render.

You can stop after Part A if you just want a cloud-ready Houdini/Octane environment.

PART A: HOUDINI + OCTANE DOCKER IMAGE

Part A: Houdini + Octane Docker Image

This section creates a GPU-ready Docker container with Houdini and Octane. No Cloudflare account needed.


Prerequisites

Software

Licenses & Accounts (Part A)

Additional for Part B

A1. Install Prerequisites

Install Docker Desktop

  1. Download from docker.com/products/docker-desktop
  2. Run the installer
  3. Important: Enable WSL 2 backend (Windows) or Rosetta (Mac M1/M2)
  4. Restart your computer

Verify installation:

docker --version
# Should show Docker version 24.x.x or higher

A2. Get Your API Keys

You need three sets of credentials:

SideFX Houdini API Keys

  1. Go to sidefx.com/oauth2/applications/
  2. Log in with your SideFX account
  3. Click "Create new application"
  4. Fill in:
    • Name: Bitmap Render (or anything)
    • Client type: Confidential
    • Authorization grant type: Client credentials
  5. Click Save
  6. Copy your Client ID and Client Secret

⚠️ You must have an active Houdini license (Indie or higher)


OTOY Octane Unattended License

Email [email protected] and request an unattended rendering token for Octane.

They will provide you with a JWT token that looks like:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lk...

Render Network API Keys

  1. Follow the instructions at Render API Access Guide
  2. For https://dispersed.com/ API access, email [email protected]

You will receive:

  • RC_PUBLIC_KEY - Your public API key
  • RC_SECRET_KEY - Your secret API key

A3. Create the .env File

After you clone the repo and cd into the directory, create your environment file:

cp .env.example .env

You'll fill this in as you go through the setup.

A4. Add the Octane Plugin

  1. Download Octane 2025.3.0.0 Solaris from OTOY
  2. Extract the downloaded file - it contains multiple Houdini versions
  3. Find the file: Octane_2025.3.0.0_Solaris_Studio+_Win64.zip
  4. Extract that zip - inside you'll find folders for different Houdini builds
  5. Copy the folder Octane_2025.3.0.0_Solaris_20.5.684_Studio+_Linux
  6. Zip ONLY this folder and name it octane.zip
  7. Place it in the docker/ folder:
bitmap-generative-workflow/
└── docker/
    └── octane.zip
        └── Octane_2025.3.0.0_Solaris_20.5.684_Studio+_Linux/
            ├── bin/
            ├── config/
            ├── dso/
            └── ...

⚠️ Make sure the zip contains the Octane_2025.3.0.0_Solaris_20.5.684_Studio+_Linux folder at the root level


A5. Build the Docker Image

Open a terminal in the project folder and run:

cd docker

docker build -t bitmap/ho:20.5.684 \
  --build-arg SIDEFX_CLIENT_ID="YOUR_SIDEFX_CLIENT_ID" \
  --build-arg SIDEFX_CLIENT_SECRET="YOUR_SIDEFX_CLIENT_SECRET" \
  .

Replace YOUR_SIDEFX_CLIENT_ID and YOUR_SIDEFX_CLIENT_SECRET with your actual credentials from step A2.

☕ This takes 15-30 minutes. Go grab a coffee!


A6. Test the Docker Image

Run the container interactively:

docker run --rm -it --gpus all \
  --runtime=nvidia \
  --shm-size=16g \
  bitmap/ho:20.5.684

You should see:

══════════════════════════════════════════════════════════════════════════════
  Houdini + Octane Environment Ready
  Run 'hython' to start Houdini Python
══════════════════════════════════════════════════════════════════════════════

Test Houdini:

hython -c "import hou; print('Houdini', hou.applicationVersionString())"

🎉 Congratulations! You now have a GPU-ready Houdini + Octane Docker image!


A7. Push to Docker Hub

To use this image with Dispersed or any other containerized cloud service, you need to push it to Docker Hub:

# Login to Docker Hub
docker login

# Tag your image
docker tag bitmap/ho:20.5.684 YOUR_DOCKERHUB_USERNAME/bitmap-render:20.5.684

# Push it
docker push YOUR_DOCKERHUB_USERNAME/bitmap-render:20.5.684

Replace YOUR_DOCKERHUB_USERNAME with your actual Docker Hub username.