Installation
Install the stera-sdk PyPI package, system requirements, and optional extras.
Requirements
- Python 3.9 or newer (3.10+ recommended; HaMeR/WiLoR backends test cleanly on 3.10).
ffmpegon yourPATHif you wantrgb.mp4to come out ofsession.export.
sudo apt install ffmpeg # Debian/Ubuntu
brew install ffmpeg # macOSInstall the package
pip install stera-sdkgit clone https://github.com/fpvlabs/stera-sdk.git
cd stera-sdk
pip install -e .This pulls & installs the main stera-sdk with it's core dependencies.
Optional extras
The model backends are opt-in. Install only the ones you'll use:
pip install "stera-sdk[mediapipe]"Adds mediapipe>=0.10. Used by both HandTracker(model="mediapipe") and FaceBlurrer(model="mediapipe"). No external repo, no checkpoint to download manually, MediaPipe pulls its own assets to ~/.cache/mediapipe/ on first use.
pip install "stera-sdk[retinaface]"Adds batch-face>=1.4. Used by FaceBlurrer(model="retinaface"). Auto-downloads the RetinaFace weights to ~/.cache/torch/hub/checkpoints/ on first call.
pip install "stera-sdk[mesh]"Adds pymeshlab, pyransac3d, scipy, and matplotlib. Required for MeshRefiner — the cleanup cascade, Loop subdivision, and (optional) RANSAC-based scene-cleaning passes. The colorize-only path works on a base install.
from stera.processing import MeshRefiner
refined = MeshRefiner(session).refine()Also unlocks Visualizer(..., mesh_refine=True) to apply the same pipeline before the mesh is logged to Rerun.
Backends that need a local repo
These models below ship their own GitHub repos with their own dependency stacks. The SDK doesn't pull them in, you clone them, follow their setup, and pass the directory via model_path.
| Task | Backend | Repo | What you pass | Notes |
|---|---|---|---|---|
| Hand tracking | WiLoR | rolpotamias/WiLoR | HandTracker(model="wilor", model_path="/path/to/WiLoR") | Pulls pyrender, chumpy, pytorch-lightning, timm, smplx. |
| Hand tracking | HaMeR | geopavlakos/hamer | HandTracker(model="hamer", model_path="/path/to/hamer") | Adds detectron2 + a vendored ViTPose+. Auto-downloads ~3 GB of weights on first call. |
| Face blurring (PII) | EgoBlur | facebookresearch/EgoBlur | FaceBlurrer(model="egoblur", model_path="/path/to/EgoBlur") | The directory must contain both the gen2 source tree and ego_blur_face_gen2.jit. |
Hand tracking
WiLoR
https://github.com/rolpotamias/WiLoRClone the repo and follow its README to download wilor_final.ckpt, detector.pt, and model_config.yaml under pretrained_models/:
git clone https://github.com/rolpotamias/WiLoR.git /opt/WiLoR
cd /opt/WiLoR && pip install --no-build-isolation -r requirements.txtLayout you should end up with:
Pass the directory:
HandTracker(model="wilor", model_path="/opt/WiLoR")HaMeR
https://github.com/geopavlakos/hamerClone the repo and run its setup script (extracts checkpoints + MANO assets into _DATA/):
git clone --recursive https://github.com/geopavlakos/hamer.git /opt/hamer
cd /opt/hamer
bash fetch_demo_data.sh
pip install --no-build-isolation -e .[all]Layout you should end up with:
Pass the directory:
HandTracker(model="hamer", model_path="/opt/hamer")The first call will download a ~3 GB ViTDet-H detector checkpoint from FAIR public files. After that, everything is local.
Face blurring (PII)
EgoBlur
https://github.com/facebookresearch/EgoBlurClone the repo and drop ego_blur_face_gen2.jit into the root of it, then:
FaceBlurrer(model="egoblur", model_path="/opt/EgoBlur")Verify the install
Confirm the package imported cleanly and MCAPReader can open a recording:
import stera
stera.setup_logging()
from stera.data import MCAPReader
print(stera.__version__)
session = MCAPReader("path/to/some.mcap")
print(session.duration, session.num_rgb_frames)Expected output: a single info line Opened MCAP <name> duration=...s rgb=... followed by your prints, version string, recording duration in seconds, and RGB frame count.