This module logs into studio.resi.io / central.resi.io with a username + password, reads decoder/player playback position, loads cue points for the current event, and exposes variables/actions for cue timing and cue management.
The main goal is to drive things like a countdown clock in ProPresenter (time until next cue, next cue name, etc).
- Logs in via
POST /api/v3/login?newToken=true - Stores auth cookies (
refreshToken,livingas1) and uses them on subsequent requests - Exposes status via:
- Instance status (green/red in Companion)
- Variables:
auth_status,last_error
- Polls decoder/player position from:
GET /api_v2.svc/users/{venueUuid}/players
- Updates variables like:
current_positioncurrent_position_seccurrent_event_id
When the current eventId changes, the module loads:
- Event detail:
GET /api/v3/customers/{customerId}/events/{eventId}- Captures
startTimefor ToD (time-of-day) math
- Cues:
GET /api_v2.svc/streamprofiles/{eventProfileId}/events/{eventId}/cues?canISetCues=1
Cues are stored locally and used to compute next/prev cue timing from the live playback position.
- Next cue:
next_cue_namenext_cue_time_in_secondsnext_cue_time_in_hmsnext_cue_positionnext_cue_tod(24-hour)
- Previous cue:
prev_cue_nameprev_cue_time_ago_in_secondsprev_cue_time_ago_in_hmsprev_cue_positionprev_cue_tod(24-hour)
- Add cue (player position or custom time)
- Lookup cue by name (stores into
lookup_*variables) - Delete cue by name (looks up UUID, deletes by UUID)
- Push this repo to GitHub/GitLab (public or private).
- On the test system, add it as a Developer Module in Companion.
- Restart Companion.
yarn installyarn build- Zip the module folder (without
node_modules) and provide to tester. - Tester places it in Companion’s modules folder and restarts Companion.
(Exact folder paths vary by OS / Companion version.)
Typical config fields:
- Username / Email
- Password (secret)
- Default Player (optional)
- Polling intervals
- Playback position refresh (fast, e.g. 2000ms)
- Account/venue refresh (slow, e.g. 60000ms)
- Cue refresh while playing (optional, e.g. 15000ms)
- Fallback when no next cue (optional)
Note: dynamic "read-only" status display inside config is not supported by Companion config fields. Use Instance Status + module variables for connection state.
- Refresh profile: Reload
/users/me - Refresh lists: Reload venues + players list
- Select decoder/player: Choose which player to poll
- Add cue at player position (or custom time)
- Options:
- Cue name
- Private cue
- Position source: player vs custom
- Custom time string
- Text fields support Companion variables (e.g.
$(internal:...))
- Options:
- Lookup cue by name
- Writes result into:
lookup_cue_found,lookup_cue_uuid,lookup_cue_position, etc.
- Writes result into:
- Delete cue by name
- Finds matching cue(s), deletes by UUID via:
DELETE /.../cues/{uuid}
- Finds matching cue(s), deletes by UUID via:
Recommended “production” feedback set:
- Connected (auth OK) → Green
- Error (auth/API) → Red
- Player active (position > 0) → Blue
- Approaching next cue (threshold seconds) → Yellow
- Playback frozen (position not changing) → Red
Playback frozen requires:
- variable
playback_last_change_epoch_msto be updated when playback position changes.
- Connected / Error indicator
- Player active indicator
- Playback frozen warning
- Next cue display (with T- countdown)
- Previous cue display
- Refresh profile
- Refresh venues/players list
- Add cue @ player position
- Add cue @ custom time
- Lookup cue by name
- Delete cue by name
- The Resi API endpoints used here are not public/stable; breaking changes may occur.
- Avoid polling cues every 2 seconds. Recommended cue refresh while playing is 10–30 seconds unless you have a specific need.
- Companion config fields are not truly read-only, so status is exposed via variables + instance status.
- Optional periodic cue refresh while playing (rate-limited)
- Extra feedback: "No player selected"
- Extra feedback: "No next cue"
- More presets for ProPresenter integration workflows