Local-app passwords — no username, the password picks the role. A coach types the coach password on their iPad and gets REPLAY only; your admin password unlocks everything.
USERS
roles: fan < parent < player < coach < manager < admin — uploads need parent+, tagging coach+, this page (incl. SCHEDULE/TEAMS) admin. Associate players to give a parent/player their PLAYERS page (a parent can have several — twins!).
cloud note: with the admin key configured (DEPLOY.md step 5), adding a user here ALSO emails their sign-in invite and role changes sync to Supabase automatically. Without it, invites are manual (Supabase → Authentication → Users) and access roles are the SQL snippet in DEPLOY.md 1c.
RIG HEALTH —
loading health…
TAG TYPES
the REPLAY tag buttons and the EDITOR type list. pre / post = seconds captured before and after the tap (defaults — every clip is still trimmable in EDITOR). Deleting a type keeps existing clips of that type. GOAL is load-bearing (operator goal flow) and can't be removed.
PRACTICE MODE
for practices: drills at both ends, 25+ bodies, extra pucks. The follow (and the aux cameras riding it) commit to ONE drill instead of sitting between two. Pucks and jersey numbers don't matter — the live follow never reads either.
RINK DRIFT SENTINEL
re-measures the pano's board stripes and flags a bumped camera on the HEALTH board. Measured cost: 49 ms of one CPU core per check. 3 agreeing checks to flag, 3 to clear.
AUTO-FOLLOW DETECTION
player detection feeding the AUTO BROADCAST camera. Rate applies live; confidence applies when the pano next starts.
CROSS-CAMERA FUSION
how the rig decides two cameras are looking at the SAME player. These need tuning AT THE RINK — the right values depend on how accurately our cameras agree on a position, which has never been measured with the aux cams calibrated.
AUX CAMERA AUTO-FOLLOW
the OBSBOTs aim themselves at the play, driven by the pano's detections (no second detector). This physically moves the cameras. Does nothing until the pano has a rink frame AND each camera has ≥3 follow-calibration points.
coming to this section: DeepStream infer interval, SAHI tiling for the follow detector, announcer-cue service.
ON-ICE GRAPHICS (AR)
graphics painted flat ON THE ICE — a logo, a reveal animation, or a video/replay projected on the sheet — locked to the rink by calibration. Real-time (GPU composite), shows in the live preview. For EMPTY ice (pregame / intermission / stoppages); players are not cut out.
⚠ the pano has no rink frame yet — it needs a rink calibration, so this paints nothing.
a static "house lights down, ice lit" layer — dims everything OFF the ice so the sheet pops. Cheap (one multiply, no AR), composes with any graphic. Pregame or all-game.
BROADCAST SCOREBUG
size and on-screen position of the score bar overlaid on the broadcast video. Applies to the next render.
Enter the team access code (ask a coach or team manager).
Tell us who you are. An admin reviews every request.
MARKING A MOMENT
Pause on the moment you want, choose what the play shows, optionally tap the players involved,
and add a note — then SAVE MOMENT.
Zamerai makes a clip around that point. Trim its start and end, retag it, or add players later
from the CLIPS list — nothing here is final.
EXPORTING A CLIP
⤓ on a clip asks for a downloadable video file of just that moment — its window is
whatever the clip is trimmed to, so trim it first if you want more or less.
The cut does not happen in your browser. The request is queued, a machine picks it up and
cuts it from the full game, and the finished file lands back here. The button tracks it:
⤓ not exported yet — click to ask for it ⋯ queued — waiting for the renderer ◍ rendering now ⤓ ready — click to download ! failed — click to try again
A clip is usually a few MB and takes seconds once the renderer picks it up. If the renderer
is offline the request simply waits — nothing is lost, and it runs when the machine is back.
Once downloaded the file is yours: it plays anywhere, with no internet.
Asking for the same clip twice will not render it twice.