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.
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 for rendering 4K generations daily and by
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.
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
- Docker Desktop
- NVIDIA GPU with drivers installed
Licenses & Accounts (Part A)
- SideFX Houdini - Houdini Engine License
- OTOY Octane - With unattended rendering token (email [email protected])
- Docker Hub - Free account to push images
Additional for Part B
- Node.js v18+
- Cloudflare - Free account
- https://dispersed.com/ API keys (email [email protected])
- Render Network API keys - Request access
A1. Install Prerequisites
Install Docker Desktop
- Download from docker.com/products/docker-desktop
- Run the installer
- Important: Enable WSL 2 backend (Windows) or Rosetta (Mac M1/M2)
- 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
- Go to sidefx.com/oauth2/applications/
- Log in with your SideFX account
- Click "Create new application"
- Fill in:
- Name:
Bitmap Render(or anything) - Client type:
Confidential - Authorization grant type:
Client credentials
- Name:
- Click Save
- 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
- Follow the instructions at Render API Access Guide
- 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
- Download Octane 2025.3.0.0 Solaris from OTOY
- Extract the downloaded file - it contains multiple Houdini versions
- Find the file:
Octane_2025.3.0.0_Solaris_Studio+_Win64.zip - Extract that zip - inside you'll find folders for different Houdini builds
- Copy the folder
Octane_2025.3.0.0_Solaris_20.5.684_Studio+_Linux - Zip ONLY this folder and name it
octane.zip - 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+_Linuxfolder 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.