# MODEL_BUDGET.md Running sum must stay ≤ 32B params. | Component | Model | Params | |---|---|---| | 2D Pose (primary) | YOLO26l-Pose | 0.026B | | 2D Pose (HQ alt) | YOLO26x-Pose | 0.058B | | 2D Pose (fallback) | Sapiens2 Pose | 0.6B | | Segmentation | SAM 3.1 base | 0.85B | | 3D Body (optional) | SAM 3D Body DINOv3-H+ | 0.84B | | Scoring Head | ST-GCN (pyskl) | 0.03B | | Judge/Classifier | Qwen3-VL-8B-Instruct (Q4_K_M GGUF + F16 mmproj, llama.cpp) | 8B | | Retrieval | Qwen3-VL-Embedding-8B | 8B | | **Total** | | **~18.37B** | Headroom: ~13.63B under 32B cap. Note: The two Qwen3-VL-8B models share a backbone (counted separately here for safety). Only one pose backend runs at a time (YOLO or Sapiens2, not both). Judge/Classifier serving: `scripts/serve_judge.sh` (llama-server, port 8080). Default GGUF: `Qwen/Qwen3-VL-8B-Instruct-GGUF` → `checkpoints/qwen3-vl/` (gitignored). Fine-tuned swap: set `FORMSCOUT_JUDGE_GGUF` (+ `FORMSCOUT_JUDGE_MMPROJ`) — no code change.