Bitfocus Companion setup
These URLs control the show over HTTP, so they work from any machine and whether or not the app window is focused, minimised, or even closed.
How to set it up
- In Companion, add a connection using the Generic HTTP module.
- Create a button and add the action HTTP GET.
- Paste one of the URLs below into the URL field. That is the whole setup.
- Optional: use the status URL with the Generic HTTP variables so buttons can show the live countdown.
- For buttons with feedbacks listed below, add the action Internal: Variable value as a feedback, pick the variable and comparison shown, and set the colours. The button then follows the run state on its own.
Typed here only to build the URLs below — it is never saved in the browser.
Live status display
Exactly what Companion reads from the status endpoint, refreshed every second.
Paste your control key above to see the live speaker and countdown here.
Variables to use on your buttons
Name the Generic HTTP connection timer, point its polling URL at the status URL above with a 1000 ms interval, then use these in any button text.
- $(timer:speaker)
- — Current speaker name
- $(timer:mmss)
- — Time remaining as MM:SS
- $(timer:remaining_seconds)
- — Time remaining in seconds (can go negative)
- $(timer:status)
- — running, paused or stopped
- $(timer:tone)
- — safe, warn, danger or over — handy for button colours
- $(timer:speaker_position)
- — Position of the speaker in the list
- $(timer:blackout)
- — true while stage is blacked out, false otherwise
- $(timer:show_clock)
- — true while showing wall clock, false for countdown
- $(timer:display_mode)
- — remaining or elapsed
Example button text:
$(timer:speaker)
$(timer:mmss)Start
Start the countdown for the current speaker.
https://your-app.lovable.app/api/public/companion/start?key=YOUR_CONTROL_KEY- Button text:
- START
- Companion action:
- Generic HTTP: GET
- Background:
- #1B7F3B
- Text colour:
- #FFFFFF
Feedbacks — the button recolours itself from the status endpoint
In Companion: Add feedback → Internal → Variable text value. Fill in the values below.
Timer running
Comparison: Equal
- Variable:
- $(timer:status)
- Value:
- running
- Background:
- #22C55E
- Text colour:
- #000000
Bright green while the clock is running, so you can see the show is live.
Timer not running
Comparison: Not equal
- Variable:
- $(timer:status)
- Value:
- running
- Background:
- #14532D
- Text colour:
- #FFFFFF
Dimmed dark green while paused or stopped — the button is ready to press.
Pause
Pause the countdown where it is.
https://your-app.lovable.app/api/public/companion/pause?key=YOUR_CONTROL_KEY- Button text:
- PAUSE
- Companion action:
- Generic HTTP: GET
- Background:
- #B58A00
- Text colour:
- #000000
Feedbacks — the button recolours itself from the status endpoint
In Companion: Add feedback → Internal → Variable text value. Fill in the values below.
Timer running
Comparison: Equal
- Variable:
- $(timer:status)
- Value:
- running
- Background:
- #FACC15
- Text colour:
- #000000
Bright amber while running, because pausing is the useful next press.
Already paused
Comparison: Equal
- Variable:
- $(timer:status)
- Value:
- paused
- Background:
- #78350F
- Text colour:
- #FFFFFF
Dark amber once paused, so you can tell the pause landed.
Start / pause
One button that starts or pauses.
https://your-app.lovable.app/api/public/companion/toggle?key=YOUR_CONTROL_KEY- Button text:
- START\nPAUSE
- Companion action:
- Generic HTTP: GET
- Background:
- #14532D
- Text colour:
- #FFFFFF
Feedbacks — the button recolours itself from the status endpoint
In Companion: Add feedback → Internal → Variable text value. Fill in the values below.
Timer running
Comparison: Equal
- Variable:
- $(timer:status)
- Value:
- running
- Background:
- #FACC15
- Text colour:
- #000000
Amber while running — the next press pauses.
Timer not running
Comparison: Not equal
- Variable:
- $(timer:status)
- Value:
- running
- Background:
- #22C55E
- Text colour:
- #000000
Green while paused or stopped — the next press starts.
Reset
Reset the clock to the full talk length.
https://your-app.lovable.app/api/public/companion/reset?key=YOUR_CONTROL_KEY- Button text:
- RESET
- Companion action:
- Generic HTTP: GET
- Background:
- #374151
- Text colour:
- #FFFFFF
Feedbacks — the button recolours itself from the status endpoint
In Companion: Add feedback → Internal → Variable text value. Fill in the values below.
Clock already at full length
Comparison: Equal
- Variable:
- $(timer:status)
- Value:
- stopped
- Background:
- #1F2937
- Text colour:
- #9CA3AF
Greyed out when the timer is stopped and there is nothing to reset.
Timer running
Comparison: Equal
- Variable:
- $(timer:status)
- Value:
- running
- Background:
- #DC2626
- Text colour:
- #FFFFFF
Turns red while the clock runs, as a reminder that a reset is destructive mid-talk.
Next speaker
Move to the next speaker and reset.
https://your-app.lovable.app/api/public/companion/next?key=YOUR_CONTROL_KEY- Button text:
- NEXT ▶
- Companion action:
- Generic HTTP: GET
- Background:
- #1D4ED8
- Text colour:
- #FFFFFF
Feedbacks — the button recolours itself from the status endpoint
In Companion: Add feedback → Internal → Variable text value. Fill in the values below.
Talk finished
Comparison: Equal
- Variable:
- $(timer:tone)
- Value:
- over
- Background:
- #3B82F6
- Text colour:
- #000000
Lights up once the talk has run over, cueing you to move on.
Timer running
Comparison: Equal
- Variable:
- $(timer:status)
- Value:
- running
- Background:
- #1E3A8A
- Text colour:
- #FFFFFF
Dimmed while a talk is still running.
Previous speaker
Move back one speaker and reset.
https://your-app.lovable.app/api/public/companion/previous?key=YOUR_CONTROL_KEY- Button text:
- ◀ PREV
- Companion action:
- Generic HTTP: GET
- Background:
- #1E3A8A
- Text colour:
- #FFFFFF
Feedbacks — the button recolours itself from the status endpoint
In Companion: Add feedback → Internal → Variable text value. Fill in the values below.
First speaker on stage
Comparison: Equal
- Variable:
- $(timer:speaker_position)
- Value:
- 1
- Background:
- #1F2937
- Text colour:
- #9CA3AF
Greyed out on the first speaker, where there is nothing to go back to.
Set live speaker
Put a speaker on stage by their position in the list.
https://your-app.lovable.app/api/public/companion/select?position=2&key=YOUR_CONTROL_KEY- Button text:
- SPEAKER\n2
- Companion action:
- Generic HTTP: GET
- Background:
- #312E81
- Text colour:
- #FFFFFF
Set talk length
Set the talk length in minutes. Without position, it changes the speaker on stage.
https://your-app.lovable.app/api/public/companion/set-duration?minutes=15&position=2&key=YOUR_CONTROL_KEY- Button text:
- SET 15\nMIN
- Companion action:
- Generic HTTP: GET
- Background:
- #0F766E
- Text colour:
- #FFFFFF
Add or remove time
Shift the running clock, for example 1 or -2 minutes.
https://your-app.lovable.app/api/public/companion/adjust?minutes=1&key=YOUR_CONTROL_KEY- Button text:
- +1 MIN
- Companion action:
- Generic HTTP: GET
- Background:
- #0E7490
- Text colour:
- #FFFFFF
Set time remaining
Jump the clock so this much time is left.
https://your-app.lovable.app/api/public/companion/set-remaining?minutes=5&key=YOUR_CONTROL_KEY- Button text:
- 5 MIN\nLEFT
- Companion action:
- Generic HTTP: GET
- Background:
- #7C2D12
- Text colour:
- #FFFFFF
Send message
Show a message on the stage screen for 10 seconds.
https://your-app.lovable.app/api/public/companion/message?text=Please+wrap+up&key=YOUR_CONTROL_KEY- Button text:
- WRAP UP
- Companion action:
- Generic HTTP: GET
- Background:
- #B91C1C
- Text colour:
- #FFFFFF
Clear message
Remove the stage message now.
https://your-app.lovable.app/api/public/companion/clear-message?key=YOUR_CONTROL_KEY- Button text:
- CLEAR\nMSG
- Companion action:
- Generic HTTP: GET
- Background:
- #4B5563
- Text colour:
- #FFFFFF
Blackout stage
Toggle the stage to full black — use when you need to make changes without the audience seeing.
https://your-app.lovable.app/api/public/companion/blackout?key=YOUR_CONTROL_KEY- Button text:
- BLACK OUT
- Companion action:
- Generic HTTP: GET
- Background:
- #1F2937
- Text colour:
- #9CA3AF
Feedbacks — the button recolours itself from the status endpoint
In Companion: Add feedback → Internal → Variable text value. Fill in the values below.
Blackout active
Comparison: Equal
- Variable:
- $(timer:blackout)
- Value:
- true
- Background:
- #DC2626
- Text colour:
- #FFFFFF
Bright red while stage is blacked out.
Blackout off
Comparison: Equal
- Variable:
- $(timer:blackout)
- Value:
- false
- Background:
- #1F2937
- Text colour:
- #9CA3AF
Dark grey when stage is live and ready.
Clock mode
Toggle the stage between the countdown timer and the current wall clock time.
https://your-app.lovable.app/api/public/companion/clock?key=YOUR_CONTROL_KEY- Button text:
- CLOCK MODE
- Companion action:
- Generic HTTP: GET
- Background:
- #1E3A8A
- Text colour:
- #FFFFFF
Feedbacks — the button recolours itself from the status endpoint
In Companion: Add feedback → Internal → Variable text value. Fill in the values below.
Clock mode active
Comparison: Equal
- Variable:
- $(timer:show_clock)
- Value:
- true
- Background:
- #3B82F6
- Text colour:
- #000000
Bright blue while showing wall clock time.
Timer mode active
Comparison: Equal
- Variable:
- $(timer:show_clock)
- Value:
- false
- Background:
- #1E3A8A
- Text colour:
- #FFFFFF
Dark blue while showing the countdown.
Remaining / elapsed
Switch the stage timer between time remaining and time elapsed.
https://your-app.lovable.app/api/public/companion/toggle-display?key=YOUR_CONTROL_KEY- Button text:
- REMAIN ELAPSED
- Companion action:
- Generic HTTP: GET
- Background:
- #374151
- Text colour:
- #FFFFFF
Feedbacks — the button recolours itself from the status endpoint
In Companion: Add feedback → Internal → Variable text value. Fill in the values below.
Showing elapsed
Comparison: Equal
- Variable:
- $(timer:display_mode)
- Value:
- elapsed
- Background:
- #F59E0B
- Text colour:
- #000000
Amber when showing elapsed time, dark when showing remaining.
Status (feedback)
Returns speaker, remaining time and run state as JSON for Companion variables.
https://your-app.lovable.app/api/public/companion/status?key=YOUR_CONTROL_KEY- Button text:
- $(timer:speaker)\n$(timer:mmss)
- Companion action:
- Generic HTTP: GET with variables (poll every 1000 ms)
- Background:
- #000000
- Text colour:
- #FFFFFF
Every request must include the control key, either as the key query parameter shown above or as an x-control-key header. POST works the same as GET.