Files
Nextcue/source/dist/config.js
T
christianandClaude Opus 5.5 1a658875bc Resi cue countdowns on ProPresenter and in Companion
The Resi -> ProPresenter bridge, its installer and site kit, and the
Companion module resi-studio-cues, as running at North Attleboro.

Bridge (resi_to_propresenter.py)
- Follows a Resi decoder's playhead and keeps ProPresenter's NextCue timer
  counting down to the next cue; optional cue name as a stage message, sent
  once per cue (ProPresenter flashes it on every send) and off by default.
- Playhead estimate no longer learns a cadence from the partial first gap
  after a start, so a 30s Resi doesn't read as paused half the time.
- Backs off on 429, holds 2 min before retrying a failed startup login, and
  logs Resi's actual reason (wrong password, USER_LOCKED, rate limit).
- --setup asks for the login, decoder, ProPresenter and timer.

install_bridge.sh installs it as a login service (outside ~/Documents,
which launchd may not read); make_kit.sh builds the kit for another site.

Companion module resi-studio-cues 0.1.4 (source/, package committed)
- Same playhead fix; login and request hold-off (15s doubling to 5 min);
  a 401/403 on a fresh session is a permission, not a reason to sign in
  again; init never fails on a Resi problem, so Companion can't restart it
  into a login loop.

Tests: test_playhead.py, test_stage_message.py, test_rate_limit.py and
source/backoff_test.js run offline; test_end_to_end.py drives a real
ProPresenter and refuses to run without an explicit flag.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-06 18:11:01 -04:00

65 lines
1.7 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.GetConfigFields = GetConfigFields;
function GetConfigFields() {
return [
{
type: 'textinput',
id: 'username',
label: 'Username / Email',
width: 12,
},
{
type: 'dropdown',
id: 'defaultPlayerHardwareId',
label: 'Default decoder/player on startup',
width: 12,
default: '',
choices: [{ id: '', label: '(none)' }],
},
// NEW: polling intervals
{
type: 'number',
id: 'playerPollMs',
label: 'Player position poll (ms)',
width: 6,
min: 250,
max: 30000,
default: 1000,
},
{
type: 'number',
id: 'positionTrimMs',
label: 'Position trim (ms) - only if it still reads behind',
width: 6,
min: -30000,
max: 30000,
default: 0,
},
{
type: 'number',
id: 'cuePollMs',
label: 'Cue list refresh (ms)',
width: 6,
min: 1000,
max: 60000,
default: 5000,
},
{
type: 'number',
id: 'listPollMs',
label: 'User & decoder inf0 poll (ms)',
width: 6,
min: 10000,
max: 3600000,
default: 120000,
},
{
type: 'secret-text',
id: 'password',
label: 'Password',
width: 12,
}
];
}
//# sourceMappingURL=config.js.map