# Tail 2 pose server GPU-only, receive-only NDI inference service. It never saves frames/crops and has no PTZ, shell, upload, cloud, identity, or action-classification API. - API: `http://192.168.50.100:18120` - Token: `/mnt/user/appdata/tail2-pose-server/secrets/api-token` (mode 0600) - Source: `TAIL 2_1621D2 (OBSBOT)` / `192.168.50.207` - Coordinate contract: unmodified NDI buffer, no horizontal flip - Default backend: RTMLib 0.0.15, official YOLOX-m HumanArt+COCO 640x640 and RTMPose-m Body17 256x192, ONNX Runtime GPU with CUDA EP first. - Alternatives: `openmmlab`, `rtmlib_wholebody` (DWPose-m 133), and `rtmlib_rtmw_l`. The original RTMDet-tiny + RTMW-m OpenMMLab path remains available as the baseline. - NDI binding: cyndilib 0.1.1 and its distributed NDI runtime. NDI's redistributable license applies; do not redistribute the image outside this private deployment without reviewing that license. Rotate the integration token after onboarding clients: ```sh umask 077 printf 'tail2_%s' "$(head -c 48 /dev/urandom | base64 | tr -d '\n=/+')" > /mnt/user/appdata/tail2-pose-server/secrets/api-token docker compose restart tail2-pose-server ``` ## Current acceptance status The RTMLib optimization passes the offline inference target. Body17 1/2/4-person p50 is 19.405/24.543/34.781 ms and p95 is 19.734/25.727/36.191 ms. DWPose-m WholeBody 1/2/4-person p50 is 19.905/26.193/37.770 ms and p95 is 20.237/27.489/39.592 ms. All cases used 100 warmups and 300 measured iterations with real 1/2/4-person detector results. Live acceptance is currently blocked externally: the camera IP responds, but the NDI finder repeatedly reports `last_sources=[]`. Re-run the live WebSocket and 30-minute soak acceptance after `TAIL 2_1621D2 (OBSBOT)` resumes broadcasting. The one-shot validation services are profile-gated and do not run during normal Arcane lifecycle: ```sh docker compose --profile validation up validate docker compose --profile validation up soak ```