# [2026-08-24] Scriberr transcription deployed on ana-ml2, GPU1 Self-hosted audio/video transcription + diarization. Operator chose GPU placement over ana-docker (8 cores shared with 50 containers, 37 GB disk) against ana-ml2's 96 cores, `/tank`'s terabytes and GPU1's headroom. **Live:** `http://scriberr.ana.internal:8080` (DNS alias added), health `healthy`, all seven backends up, zero failures: `whisperx pyannote sortformer parakeet canary voxtral openai`. ~30 GB of weights on `/tank`. Stack: `stacks/scriberr/`. Full gotcha list in auto-memory `reference_scriberr_ana_ml2`. ## Three upstream bugs, none of them ours **1. The Blackwell image does not exist.** Upstream's README documents `scriberr-cuda-blackwell`; GHCR has **no tags for it**. Published `scriberr-cuda` covers sm_61–sm_89 only — on these sm_120 cards it fails or silently drops to CPU. The real sm_120 path is `Dockerfile.cuda.12.9` (CUDA 12.9.1, cu128 torch), **built from source**. Do not "simplify" the compose back to the published image. **2. It must run as uid 10001, not 1000** — and the error lies: `unable to open database file: out of memory (14)`. Error 14 is `SQLITE_CANTOPEN`, not an OOM, on a box with 566 GB RAM. That Dockerfile creates `appuser` at 10001 (Ubuntu 24.04 owns uid 1000 as `ubuntu`) and chowns `/app` to it, while the entrypoint's PUID remap covers only the data dirs. **Isolated by elimination**: SQLite writes fine to `/tank` as 1000 → not the mount; fails on a plain named volume too → not the storage; the **published CPU image works at PUID=1000** because there `appuser` *is* 1000. Generalisable: *when a container "permission" bug appears, compare the uid the image was BUILT for against the uid you are RUNNING as.* **3. `UV_LINK_MODE=copy` is required.** Scriberr builds each backend's Python env with `uv` at start; uv's reflink mode fails on overlayfs+ZFS with `Failed to clone … Resource temporarily unavailable (os error 11)`. **Partial failure** — WhisperX and PyAnnote came up and the app looked fine while Parakeet and Sortformer were silently absent. Occurrences 2 → 0 after the fix. ## Related `speaches` on irv-ml1 **stopped** the same day (stack retained, one command to restart): Eyra was abandoned pre-implementation because Scriberr covers the need, leaving it with no consumer. Scriberr runs its **own** WhisperX in-container and is **not** a speaches consumer. Idle footprint at stop was 274 MiB, not the ~5.9 GB quoted — that figure is the loaded-model working set.