# Copy to .env — docker compose reads it automatically from this directory. # Signed license for THIS robot (default = the bundled example, entitles P1). SANAD_LICENSE_FILE=./license/sanad.lic.example # Enforce machine-fingerprint binding (1 on a delivered robot). When 1, also # uncomment the /etc/machine-id mount in docker-compose.yml so the in-container # fingerprint matches the host. SANAD_LICENSE_BIND=0 # Audio: builtin (G1 chest mic+speaker over DDS) | plugged (USB e.g. Anker via PulseAudio) SANAD_AUDIO_PROFILE=builtin # DDS interface to the G1 firmware. SANAD_DDS_INTERFACE=eth0 # --- Plugged/Bluetooth speaker volume (Anker/JBL) --------------------------- # The volume slider drives ALL speaker types like SanadV3: the G1 chest over DDS # (always) AND the active PulseAudio sink (plugged/BT). The container runs as root, # so it needs the HOST pulse socket + cookie to reach a uid-1000 PulseAudio. # One-time host setup (stable socket at boot, no stray dir): # loginctl enable-linger unitree # Override these only if your pulse runs under a different uid or cookie path: SANAD_PULSE_DIR=/run/user/1000/pulse PULSE_SERVER=unix:/run/user/1000/pulse/native # Cookie location varies by distro; if plugged volume/output is silent, try # /home//.config/pulse/cookie instead and mount it accordingly. PULSE_COOKIE=/run/user/1000/pulse/cookie # Conversation language (overrides the license `language` feature if set). # e.g. ar, en, hi, ur, zh, ru, fr ... (any Gemini-supported language) SANAD_LANGUAGE= # Bundle the chest-audio Unitree SDK into the image at build time # (1 = yes, default; 0 = leaner USB/plugged-only image). WITH_UNITREE_SDK=1 # Base image (override only for a GPU build). BASE_OS_IMAGE=python:3.10-slim-bookworm # Image name/tag (e.g. a registry path for pull-and-run). # SANAD_IMAGE=sanad-p1:latest