Files
distrobox-images/houdini

Houdini Apprentice in distrobox

SideFX Labs is baked into the image at build time (see SIDEFXLABS_VERSION below) — no need to install it from Houdini's own package menu, which needs git and a working CA bundle that this image doesn't ship. The Labs menu should just appear in Houdini's menu bar on first launch.

Two images built from the same Dockerfile, pushed to a private registry, used via distrobox:

  • houdini-amd — Houdini + Mesa, for AMD/Intel GPUs
  • houdini-nvidia — Houdini only; the NVIDIA driver is injected at runtime by distrobox --nvidia

Registry: docker.slambin.fr. Files: Dockerfile, houdini-run (in-image launcher).

Houdini binaries are baked into these images under a personal SideFX account. Keep the registry private — never push these images publicly.


Prerequisites

  • Your Houdini Linux tarball from your SideFX account (e.g. houdini-22.0.429-linux_x86_64_gcc14.2.tar.gz), placed next to the Dockerfile.
  • A SideFX account (Apprentice is free) to activate the license on first launch.

Build & push

REGISTRY=docker.slambin.fr
VERSION=22.0.429
TARBALL=houdini-22.0.429-linux_x86_64_gcc14.2.tar.gz
# Date the EULA at https://www.sidefx.com/legal/license-agreement/ was last
# updated, format YYYY-MM-DD, no "SideFX-" prefix.
EULA_DATE=2021-10-13
# Release tag at https://github.com/sideeffects/SideFXLabs/releases — pick
# the newest tag whose bundled SideFXLabs.json "enable" range covers your
# Houdini version (default below already matches 22.0.429).
SIDEFXLABS_VERSION=22.0.440

# Build amd image
podman build -f Dockerfile \
  --build-arg "HOUDINI_TARBALL=${TARBALL}" \
  --build-arg "HOUDINI_EULA_DATE=${EULA_DATE}" \
  --build-arg "SIDEFXLABS_VERSION=${SIDEFXLABS_VERSION}" \
  --target "amd" \
  -t "${REGISTRY}/houdini-amd:${VERSION}" \
  -t "${REGISTRY}/houdini-amd:latest" .

# Build nvidia image
podman build -f Dockerfile \
  --build-arg "HOUDINI_TARBALL=${TARBALL}" \
  --build-arg "HOUDINI_EULA_DATE=${EULA_DATE}" \
  --build-arg "SIDEFXLABS_VERSION=${SIDEFXLABS_VERSION}" \
  --target "nvidia" \
  -t "${REGISTRY}/houdini-nvidia:${VERSION}" \
  -t "${REGISTRY}/houdini-nvidia:latest" .

Install / run

One-time, on the host — persists the Apprentice license across container recreation:

mkdir -p ~/.houdini-apprentice && touch ~/.houdini-apprentice/licenses

Create the box (pick the image matching your GPU):

# AMD / Intel
distrobox create \
  --name houdini \
  --image docker.slambin.fr/houdini-amd:latest \
  --additional-flags "--hostname houdini-apprentice -v $HOME/.houdini-apprentice/licenses:/usr/lib/sesi/licenses"

# NVIDIA
distrobox create \
  --name houdini \
  --image docker.slambin.fr/houdini-nvidia:latest \
  --nvidia \
  --additional-flags "--hostname houdini-apprentice -v $HOME/.houdini-apprentice/licenses:/usr/lib/sesi/licenses"

Then:

distrobox enter houdini
houdini-run

First launch prompts to install the free Apprentice license — log in with your SideFX account. Two things worth knowing:

  • The --hostname houdini-apprentice flag must stay the same every time you recreate the box — Apprentice licenses node-lock to hostname as well as hardware.
  • Apprentice licenses expire after 30 days; re-activate the same way (a quick re-login in the same dialog).

App menu entry (icon, no terminal)

Houdini doesn't ship its own .desktop file, and distrobox doesn't have a built-in way to generate a proper GUI-app entry from a binary — distrobox-generate-entry only makes the generic "Terminal entering X" shortcut. So write one by hand and export it:

distrobox enter houdini
cat > /tmp/houdini.desktop << 'EOF'
[Desktop Entry]
Type=Application
Name=Houdini FX
Comment=Houdini Apprentice (distrobox)
Exec=houdini-run
Icon=/opt/hfs/houdini/cloudsubmit/houdini_icon.png
Terminal=false
Categories=Graphics;3DGraphics;Education;
StartupWMClass=houdinifx-bin
EOF
distrobox-export --app /tmp/houdini.desktop

This copies the icon to ~/.local/share/icons/ on the host and writes ~/.local/share/applications/houdini-houdini.desktop. Distrobox also auto-creates a generic houdini.desktop ("Terminal entering Houdini") when the box is created — set NoDisplay=true in that file, or delete it, if you don't want both entries in the app menu.