- Use **`tab_active`** for a row of buttons that mirrors the tab bar.
- Use **`tab_kind`** for a fixed button that asks "is he on the whiteboard?" — that one stays right
however the tabs are reordered.
- The **ProPresenter Sync tab lights `tab_kind/sync`, never `tab_kind/bible`**, even though it is a Bible
tab underneath.
- A `tab_kind` lights for **any** tab of that kind. With three Bible tabs open, `tab_kind/bible` is `1` on
all three and `tab_active/<n>` says which one.
**No button can be left stranded.** Every slot and every kind is re-sent on each change — the active one
as `1`, all 25 others as `0` — so a button cannot stay lit for a tab he has already left. Slots past the
end of the row are sent `0` and simply stay dark. That is ~27 tiny UDP packets per tab change.
Switch it off under **Settings › OSC › Tab button colours** (`feedbackTabStates`, default on).
**Companion setup**: add an OSC listener on the path you want (say
`/bibleapp/feedback/state/tab_kind/whiteboard`), then a boolean feedback on `= 1` that sets the button's
background colour. Repeat per button. Pair it with the information line on one extra button if you also
want the passage in text.
### Live State Feedback Paths
These feedback paths are sent when the user changes state in the app UI (not only when OSC commands run), so Companion can keep buttons in sync with what is currently active.
| Feedback Path | Trigger | Description |
|--------------|---------|-------------|
| `/bibleapp/feedback/state/tool_pen` | Any tool change | `1` when Pen is active, `0` otherwise |
| `/bibleapp/feedback/state/tool_highlight` | Any tool change | `1` when Highlighter is active, `0` otherwise |
| `/bibleapp/feedback/state/tool_erase` | Any tool change | `1` when Eraser is active, `0` otherwise |
| `/bibleapp/feedback/state/tool_select` | Any tool change | `1` when Select is active, `0` otherwise |
| `/bibleapp/feedback/state/pen_color/<hex6>` | Pen color change | `1` for selected color, `0` for previously active color |
| `/bibleapp/feedback/state/splash_visible` | Splash show/hide | `1` while splash is visible, `0` when hidden |
| `/bibleapp/feedback/state/ppsync_enabled` | ProPresenter Sync switched on/off in Settings | `1` while "Follow ProPresenter" is on, `0` otherwise |
| `/bibleapp/feedback/state/ppsync_live` | ProPresenter link goes live / drops | `1` while slides are being received from ProPresenter, `0` otherwise (connecting, dropped, off) |
| `/bibleapp/feedback/state/action_refresh` | Reset/Refresh action | Pulses `1` then `0` for button flash/light behavior |
3.**Feedback Port in Bible App**: Set a fixed feedback port that matches your Companion module's feedback listener.
- Recommended: use a dedicated port such as `18000`.
- If you leave it empty, Bible App auto-detects sender port and falls back to `16759`.
- Avoid using ports that are already in use (`EADDRINUSE` in Companion logs).
4.**Button Feedback**: Use the feedback paths to update button states:
- Status `1` = Button pressed successfully (can use for button highlight/confirmation)
- Status `0` = Command failed (can use for error indication)
5.**Example Companion Actions**:
- Listen to `/bibleapp/feedback/undo` → Update button state when undo completes
- Listen to `/bibleapp/feedback/tool_pen` → Highlight pen tool button when selected
- Listen to `/bibleapp/feedback/pen_color/ff3333` (or your exact hex color) → Highlight only that specific color button
- Listen to `/bibleapp/feedback/state/tool_pen` → Keep Pen button active even for UI-only tool changes
- Listen to `/bibleapp/feedback/state/action_refresh` → Flash a refresh/reset button on press
- Listen to `/bibleapp/feedback/state/action_undo`, `/action_redo`, `/action_clear`, `/action_clear_all` → Flash those action buttons on app-side presses
- Listen to `/bibleapp/feedback/state/action_new_bible_tab`, `/action_new_whiteboard_tab`, `/action_new_notes_tab` → Flash tab-creation buttons
- Listen to `/bibleapp/feedback/state/splash_visible` → Keep splash button lit while splash is visible
- Listen to `/bibleapp/feedback/state/pen_color/<hex6>` → Keep selected pen color button active
**Troubleshooting**: If feedback isn't working:
- Verify Companion listener is ON and the port matches Bible App feedback port (for example `18000`)
- Check that you have an OSC Listener action configured to receive `/bibleapp/feedback/*` messages
- Verify firewall isn't blocking the configured UDP port
- Check the Bible App log viewer (File → Log Viewer) to see if packets are being sent
## Configuration
Feedback can be configured in the OSC settings:
- **Information line**: which pieces go into `/bibleapp/feedback/information` (default: tab, passage, splash; none = line off)
- **Tab button colours**: per-tab `1`/`0` on `state/tab_active/<n>` and `state/tab_kind/<kind>` (default: on)