# Hugging Face Space SSH Runbook This runbook records how to connect to the running Hugging Face Space container for debugging. ## Space ```text https://huggingface.co/spaces/build-small-hackathon/VoiceGate ``` SSH target: ```text build-small-hackathon-voicegate@ssh.hf.space ``` ## Local SSH Key The local private key generated for this Space is: ```text C:\Users\yantianlong\.ssh\codex_space_voicegate ``` The public key is: ```text C:\Users\yantianlong\.ssh\codex_space_voicegate.pub ``` Only the `.pub` file content should be added to Hugging Face. Never upload or share the private key file. ## Connect From PowerShell: ```powershell ssh -i "$env:USERPROFILE\.ssh\codex_space_voicegate" build-small-hackathon-voicegate@ssh.hf.space ``` Non-interactive smoke test: ```powershell ssh -i "$env:USERPROFILE\.ssh\codex_space_voicegate" ` -o BatchMode=yes ` -o StrictHostKeyChecking=accept-new ` -o ConnectTimeout=20 ` build-small-hackathon-voicegate@ssh.hf.space ` "pwd && git rev-parse HEAD && ls -la" ``` Expected working directory: ```text /home/user/app ``` ## Important Runtime Caveat SSH connects to the currently running Space container. That container may be stale after a git push. On 2026-06-05, SSH connected successfully, but the running container was still at the original template commit: ```text a94117f35a42cb17f654ae70cbe619c15345d057 ``` The Space git remote had already advanced to: ```text 7acf781e730d4b84d40cf3c688a1575b11bd90aa ``` Before debugging runtime behavior through SSH, always verify the container commit: ```bash git rev-parse HEAD ``` If the container commit does not match the latest Space commit, use the Hugging Face Space page to restart/rebuild/factory reboot the Space, then SSH again and re-check. ## What SSH Is Good For - Inspect the running app files. - Check build/runtime environment differences. - Run small diagnostic commands. - Inspect installed packages and model cache paths. - Debug ComfyUI startup logs once Phase 3 is implemented. - Run ComfyUI in CPU mode to verify the local API can start: ```bash cd /home/user/app python scripts/bootstrap_comfy.py python scripts/run_comfy.py --cpu ``` In another SSH command, check: ```bash curl http://127.0.0.1:8188/system_stats ``` ## What SSH Is Not For Do not rely on SSH edits for persistent code changes. Files changed inside the running container can be lost after rebuild or restart. Persistent changes should be made locally, committed, and pushed to the Space git repository. SSH also does not expose the ZeroGPU CUDA device in the normal shell. On 2026-06-05, starting ComfyUI without `--cpu` through SSH failed with: ```text RuntimeError: No CUDA GPUs are available ``` GPU-backed inference should be triggered from the Gradio app through a `@spaces.GPU` function. SSH remains useful for CPU startup and API diagnostics. ## Runtime Findings On 2026-06-05, `python scripts/bootstrap_comfy.py` completed successfully in the Space container. CPU-mode ComfyUI reached `/system_stats`, but `ComfyUI_AudioTools` required additional dependencies: - system package `sox` - system package `libportaudio2` - system package `portaudio19-dev` - Python package `sounddevice` - Python package `easydict` - Python package `pytorch-lightning` These are now recorded in `packages.txt` and `requirements.txt`; a Space rebuild is required before the system packages are available in the container. After adding these dependencies, CPU-mode ComfyUI reached `/system_stats` and the custom node import log showed: ```text 0.4 seconds: /home/user/app/ComfyUI/custom_nodes/ComfyUI_AudioTools ``` with no `IMPORT FAILED` entry for `ComfyUI_AudioTools`. On 2026-06-05, the ComfyUI API smoke test passed in Dev Mode using a local MP3 uploaded to `/tmp/voicegate_test_audio.mp3`: - `/upload/image` accepted the MP3 and returned `voicegate_test_audio.mp3`. - A minimal `LoadAudio -> SaveAudioMP3` workflow submitted through `/prompt` returned no `node_errors`. - `/history/{prompt_id}` returned `status_str: success`. - The output was reported as `audio/api_smoke_voicegate_00001.mp3`. When uploading local binary files through SSH, avoid plain PowerShell byte pipelines because they can corrupt binary data. Use a binary-safe method such as base64 from Python and verify `sha256sum` on the remote file.