# bitfocus/companion-module-hopla-powerstudio architecture

> Architecture diagram of the GitHub repository bitfocus/companion-module-hopla-powerstudio, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-25). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/bitfocus/companion-module-hopla-powerstudio
- Repository: https://github.com/bitfocus/companion-module-hopla-powerstudio

## Overview

This is a Bitfocus Companion control module for Power Studio. Operators use Companion actions or presets to control playout, carts, mix editing, recording, and playlist selection; the module sends REST commands and polls state, then exposes updated variables and feedbacks. The main runtime coordinates these flows, API-version capabilities, polling, and refreshes. The README documents the feature set; some subsystem wiring is therefore shown at the documented level because its implementation was not sampled.

Main entry points: [`src/main.ts`](https://github.com/bitfocus/companion-module-hopla-powerstudio/blob/master/src/main.ts) (Lifecycle and polling), [`src/client.ts`](https://github.com/bitfocus/companion-module-hopla-powerstudio/blob/master/src/client.ts) (REST client), [`src/variables.ts`](https://github.com/bitfocus/companion-module-hopla-powerstudio/blob/master/src/variables.ts) (Trigger variables), [`src/feedbacks.ts`](https://github.com/bitfocus/companion-module-hopla-powerstudio/blob/master/src/feedbacks.ts) (State feedbacks)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interaction["Companion interaction"]
  node_actions["Control actions<br/>[actions.ts]"]
  node_presets["Control presets<br/>[presets.ts]"]
  node_feedbacks["State feedbacks<br/>[feedbacks.ts]"]
  node_variables["Trigger variables<br/>[variables.ts]"]
end

subgraph group_runtime["Module runtime"]
  node_main["Lifecycle and polling<br/>[main.ts]"]
  node_client["REST client<br/>[client.ts]"]
  node_cart["Cart rack helpers<br/>[cart-rack.ts]"]
  node_playlist["Playlist window<br/>[playlist-window.ts]"]
end

subgraph group_powerstudio["Power Studio API"]
  node_api["Power Studio REST API"]
end

subgraph group_support["Compatibility and state"]
  node_capabilities["API capabilities<br/>[capabilities.ts]"]
  node_version["Version parsing<br/>[version.ts]"]
  node_selectors["State selectors<br/>[state-selectors.ts]"]
  node_errors["Error mapping<br/>[errors.ts]"]
end

node_operator(("Operator"))
node_companion(("Bitfocus Companion"))

node_operator -->|"operates"| node_companion
node_companion -->|"invokes actions"| node_actions
node_companion -->|"offers presets"| node_presets
node_actions -->|"requests commands"| node_main
node_main -->|"polls and dispatches"| node_client
node_client -->|"sends REST requests"| node_api
node_api -->|"returns status"| node_client
node_client -->|"returns results"| node_main
node_main -->|"builds capability map"| node_capabilities
node_capabilities -->|"parses API version"| node_version
node_main -->|"calculates window"| node_playlist
node_presets -->|"builds rack presets"| node_cart
node_feedbacks -->|"reads rack helpers"| node_cart
node_variables -->|"reads rack helpers"| node_cart
node_variables -->|"formats playlist values"| node_playlist
node_feedbacks -->|"evaluates state"| node_selectors
node_variables -->|"selects state"| node_selectors
node_main -->|"publishes values"| node_variables
node_main -->|"refreshes feedbacks"| node_feedbacks
node_client -->|"classifies failures"| node_errors
node_main -->|"maps request errors"| node_errors
node_companion -->|"displays feedbacks"| node_feedbacks
node_companion -->|"exposes variables"| node_variables

click node_actions "https://github.com/bitfocus/companion-module-hopla-powerstudio/blob/master/src/actions.ts"
click node_presets "https://github.com/bitfocus/companion-module-hopla-powerstudio/blob/master/src/presets.ts"
click node_feedbacks "https://github.com/bitfocus/companion-module-hopla-powerstudio/blob/master/src/feedbacks.ts"
click node_variables "https://github.com/bitfocus/companion-module-hopla-powerstudio/blob/master/src/variables.ts"
click node_main "https://github.com/bitfocus/companion-module-hopla-powerstudio/blob/master/src/main.ts"
click node_client "https://github.com/bitfocus/companion-module-hopla-powerstudio/blob/master/src/client.ts"
click node_cart "https://github.com/bitfocus/companion-module-hopla-powerstudio/blob/master/src/cart-rack.ts"
click node_playlist "https://github.com/bitfocus/companion-module-hopla-powerstudio/blob/master/src/playlist-window.ts"
click node_capabilities "https://github.com/bitfocus/companion-module-hopla-powerstudio/blob/master/src/capabilities.ts"
click node_version "https://github.com/bitfocus/companion-module-hopla-powerstudio/blob/master/src/version.ts"
click node_selectors "https://github.com/bitfocus/companion-module-hopla-powerstudio/blob/master/src/state-selectors.ts"
click node_errors "https://github.com/bitfocus/companion-module-hopla-powerstudio/blob/master/src/errors.ts"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_actions,node_presets,node_feedbacks,node_variables toneBlue
class node_main,node_client,node_cart,node_playlist toneAmber
class node_api toneMint
class node_capabilities,node_version,node_selectors,node_errors toneRose
class node_operator,node_companion toneIndigo
```

## Components

### Companion interaction

- [Control actions](https://github.com/bitfocus/companion-module-hopla-powerstudio/blob/master/src/actions.ts): `src/actions.ts`
- [Control presets](https://github.com/bitfocus/companion-module-hopla-powerstudio/blob/master/src/presets.ts): `src/presets.ts`
- [State feedbacks](https://github.com/bitfocus/companion-module-hopla-powerstudio/blob/master/src/feedbacks.ts): `src/feedbacks.ts`
- [Trigger variables](https://github.com/bitfocus/companion-module-hopla-powerstudio/blob/master/src/variables.ts): `src/variables.ts`

### Module runtime

- [Lifecycle and polling](https://github.com/bitfocus/companion-module-hopla-powerstudio/blob/master/src/main.ts): `src/main.ts`
- [REST client](https://github.com/bitfocus/companion-module-hopla-powerstudio/blob/master/src/client.ts): `src/client.ts`
- [Cart rack helpers](https://github.com/bitfocus/companion-module-hopla-powerstudio/blob/master/src/cart-rack.ts): `src/cart-rack.ts`
- [Playlist window](https://github.com/bitfocus/companion-module-hopla-powerstudio/blob/master/src/playlist-window.ts): `src/playlist-window.ts`

### Power Studio API

- **Power Studio REST API**

### Compatibility and state

- [API capabilities](https://github.com/bitfocus/companion-module-hopla-powerstudio/blob/master/src/capabilities.ts): `src/capabilities.ts`
- [Version parsing](https://github.com/bitfocus/companion-module-hopla-powerstudio/blob/master/src/version.ts): `src/version.ts`
- [State selectors](https://github.com/bitfocus/companion-module-hopla-powerstudio/blob/master/src/state-selectors.ts): `src/state-selectors.ts`
- [Error mapping](https://github.com/bitfocus/companion-module-hopla-powerstudio/blob/master/src/errors.ts): `src/errors.ts`

### Other components

- **Operator**
- **Bitfocus Companion**

## Connections

- Operator → Bitfocus Companion: operates
- Bitfocus Companion → Control actions: invokes actions
- Bitfocus Companion → Control presets: offers presets
- Control actions → Lifecycle and polling: requests commands
- Lifecycle and polling → REST client: polls and dispatches
- REST client → Power Studio REST API: sends REST requests
- Power Studio REST API → REST client: returns status
- REST client → Lifecycle and polling: returns results
- Lifecycle and polling → API capabilities: builds capability map
- API capabilities → Version parsing: parses API version
- Lifecycle and polling → Playlist window: calculates window
- Control presets → Cart rack helpers: builds rack presets
- State feedbacks → Cart rack helpers: reads rack helpers
- Trigger variables → Cart rack helpers: reads rack helpers
- Trigger variables → Playlist window: formats playlist values
- State feedbacks → State selectors: evaluates state
- Trigger variables → State selectors: selects state
- Lifecycle and polling → Trigger variables: publishes values
- Lifecycle and polling → State feedbacks: refreshes feedbacks
- REST client → Error mapping: classifies failures
- Lifecycle and polling → Error mapping: maps request errors
- Bitfocus Companion → State feedbacks: displays feedbacks
- Bitfocus Companion → Trigger variables: exposes variables
