Files

33 lines
1.9 KiB
Markdown

# 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
```