ProPresenter Look 1.0.0: a new module showing the live audience look #55

Merged
christian merged 6 commits from claude/propresenter-looks into main 2026-10-26 13:05:54 -04:00
Collaborator

Adds modules/propresenter-looks/, a new module, so it shows up in the admin page's Available modules catalog.

Why

When something looks wrong on the outputs and nobody is at the ProPresenter machine, the first question is "what look are we on?". This tile answers it from any dashboard.

What the tile does

  • Shows the name of the audience look that is live in ProPresenter right now, sized as large as the tile allows.
  • Flashes once when the look changes.
  • Shows a Modified tag when someone changed the look by hand and it no longer matches a saved look.
  • Shows "since 10:42 AM" for when the look last changed.
  • If ProPresenter stops answering, the status dot goes red and the tile keeps the last known look on screen, dimmed. It recovers by itself.

How it works

  • The server entry polls GET /v1/look/current once a second, and GET /v1/looks every ten seconds to find the name of the saved look the live one matches. It streams the result to tiles over SSE (only when something changed, with a 15 s heartbeat).
  • Browsers never talk to ProPresenter. No dependencies.
  • ProPresenter gives the current look a UUID of its own. Its index points at the matching saved look, or equals the number of saved looks when it matches none; that case is what shows as Modified.
  • On an older ProPresenter without /v1/looks, it falls back to the live look's own name.

Module guide rules

  • One self-contained folder; nothing in the shell (server.js, public/) is touched.
  • proddash: ">=1.5.0", version 1.0.0. Declares the local-network permission.
  • Admin config: one endpoint field (ProPresenter) plus password, both with help.
  • Tile gear: three ungrouped switches (Heading, Live status, Since), no help, labels of two words or fewer.
  • No title-bar controls. Styles are scoped under [data-module="propresenter-looks"] and use only the shell's colour variables.

Testing

modules/propresenter-looks/tools/pp-looks-mock.js is a mock of ProPresenter's looks API. It changes the live look every few seconds and makes every fourth change a hand-modified look; --password and --no-list exercise the other paths.

Run in a checkout against the mock, through the guide's resilience checklist:

  • Mock killed: red dot, "Unreachable · last known", last look dimmed
  • Mock restarted: recovers with no reload
  • ProdDash restarted with the tile open: recovers
  • Two tiles with different gear settings work independently
  • Tile removed: no errors from the module, no streams left open
  • Admin config saved: module remounts and follows the new host
  • Page reload: tile comes back with its settings

Not yet run against a real ProPresenter.

The same module is also at christian/propresenter-looks as a standalone repo.

🤖 Generated with Claude Code

Adds `modules/propresenter-looks/`, a new module, so it shows up in the admin page's **Available modules** catalog. ## Why When something looks wrong on the outputs and nobody is at the ProPresenter machine, the first question is "what look are we on?". This tile answers it from any dashboard. ## What the tile does - Shows the name of the audience look that is live in ProPresenter right now, sized as large as the tile allows. - Flashes once when the look changes. - Shows a **Modified** tag when someone changed the look by hand and it no longer matches a saved look. - Shows "since 10:42 AM" for when the look last changed. - If ProPresenter stops answering, the status dot goes red and the tile keeps the **last known** look on screen, dimmed. It recovers by itself. ## How it works - The server entry polls `GET /v1/look/current` once a second, and `GET /v1/looks` every ten seconds to find the name of the saved look the live one matches. It streams the result to tiles over SSE (only when something changed, with a 15 s heartbeat). - Browsers never talk to ProPresenter. No dependencies. - ProPresenter gives the current look a UUID of its own. Its `index` points at the matching saved look, or equals the number of saved looks when it matches none; that case is what shows as **Modified**. - On an older ProPresenter without `/v1/looks`, it falls back to the live look's own name. ## Module guide rules - One self-contained folder; nothing in the shell (`server.js`, `public/`) is touched. - `proddash: ">=1.5.0"`, version `1.0.0`. Declares the `local-network` permission. - Admin config: one `endpoint` field (ProPresenter) plus `password`, both with `help`. - Tile gear: three ungrouped switches (Heading, Live status, Since), no `help`, labels of two words or fewer. - No title-bar controls. Styles are scoped under `[data-module="propresenter-looks"]` and use only the shell's colour variables. ## Testing `modules/propresenter-looks/tools/pp-looks-mock.js` is a mock of ProPresenter's looks API. It changes the live look every few seconds and makes every fourth change a hand-modified look; `--password` and `--no-list` exercise the other paths. Run in a checkout against the mock, through the guide's resilience checklist: - [x] Mock killed: red dot, "Unreachable · last known", last look dimmed - [x] Mock restarted: recovers with no reload - [x] ProdDash restarted with the tile open: recovers - [x] Two tiles with different gear settings work independently - [x] Tile removed: no errors from the module, no streams left open - [x] Admin config saved: module remounts and follows the new host - [x] Page reload: tile comes back with its settings Not yet run against a real ProPresenter. The same module is also at `christian/propresenter-looks` as a standalone repo. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
christian added 6 commits 2026-10-26 12:59:40 -04:00
christian merged commit 5ed2137dd5 into main 2026-10-26 13:05:54 -04:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: michael/ProdDash#55