Skip to main content
Version: 1.38.0

Prompter

See Sofie views for how to access the prompter page.

Prompter screen before the first Part is taken

The prompter will display the script for the Rundown currently active in the Studio. On Air and Next parts and segments are highlighted - in red and green, respectively - to aid in navigation. In top-right corner of the screen, a Diff clock is shown, showing the difference between planned playback and what has been actually produced. This allows the host to know how far behind/ahead they are in regards to planned execution.

Indicators for the On Air and Next part shown underneath the Diff clock

If the user scrolls the prompter ahead or behind the On Air part, helpful indicators will be shown in the right-hand side of the screen. If the On Air or Next part's script is above the current viewport, arrows pointing up will be shown. If the On Air part's script is below the current viewport, a single arrow pointing down will be shown.

Customize looks

The prompter UI can be configured using query parameters:

Query parameterTypeDescriptionDefault
mirror0 / 1Mirror the display horizontally0
mirrorv0 / 1Mirror the display vertically0
fontsizenumberSet a custom font size of the text. 20 will fit in 5 lines of text, 14 will fit 7 lines etc..14
markerstringSet position of the read-marker. Possible values: "center", "top", "bottom", "hide"hide
marginnumberSet margin of screen (used on monitors with overscan), in %.0
showmarker0 / 1If the marker is not set to "hide", control if the marker is hidden or not1
showscroll0 / 1Whether the scroll bar should be shown1
followtake0 / 1Whether the prompter should automatically scroll to current segment when the operator TAKE:s it1
debug0 / 1Whether to display a debug box showing controller input values and the calculated speed the prompter is currently scrolling at. Used to tweak speedMaps and ranges.0

Example: http://127.0.0.1/prompter/studio0/?mode=mouse&followtake=0&fontsize=20

Controlling the prompter

The prompter can be controlled by different types of controllers. The control mode is set by a query parameter, like so: ?mode=mouse.

Query parameterDescription
DefaultControlled by both mouse and keyboard
?mode=mouseControlled by mouse only. See configuration details
?mode=keyboardControlled by keyboard only. See configuration details
?mode=shuttlekeyboardControlled by a Contour Design ShuttleXpress, X-keys Jog and Shuttle or any compatible, configured as keyboard-ish device. See configuration details
?mode=pedalControlled by any MIDI device outputting note values between 0 - 127 of CC notes on channel 8. Analogue Expression pedals work well with TRS-USB midi-converters. See configuration details
?mode=joyconControlled by Nintendo Switch Joycon, using the HTML5 GamePad API. See configuration details

Control using mouse (scroll wheel)

The prompter can be controlled in multiple ways when using the scroll wheel:

Query parameterDescription
?controlmode=normalScrolling of the mouse works as "normal scrolling"
?controlmode=speedScrolling of the mouse changes the speed of scolling. Left-click to toggle, right-click to rewind
?controlmode=smoothscrollScrolling the mouse wheel starts continous scrolling. Small speed adjustments can then be made by nudging the scroll wheel. Stop the scrolling by making a "larger scroll" on the wheel.

has several operating modes, described further below. All modes are intended to be controlled by a computer mouse or similar, such as a presenter tool.

Control using keyboard

Keyboard control is intended to be used when having a "keyboard"-device, such as a presenter tool.

Scroll upScroll down
Arrow UpArrow Down
Arrow LeftArrow Right
Page UpPage Down
Space

Control using Contour ShuttleXpress or X-keys (?mode=shuttlekeyboard)

This mode is intended to be used when having a Contour ShuttleXpress or X-keys device, configured to work as a keyboard device. These devices have jog/shuttle wheels, and their software/firmware allow them to map scroll movement to keystrokes from any key-combination. Since we only listen for key combinations, it effectively means that any device outputing keystrokes will work in this mode.

From Release 30, the speedMap has a prefix: shuttle_ (i.e. shuttle_speedMap)

Key combinationFunction
Ctrl Alt F1 ... Ctrl Alt F7Set speed to +1 ... +7 (Scroll down)
Ctrl Shift Alt F1 ... Ctrl Shift Alt F7Set speed to -1 ... -7 (Scroll up)
Ctrl Alt +Increase speed
Ctrl Alt -Decrease speed
Ctrl Alt Shift F8, Ctrl Alt Shift PageDownJump to next Segment and stop
Ctrl Alt Shift F9, Ctrl Alt Shift PageUpJump to previous Segment and stop
Ctrl Alt Shift F10Jump to top of Script and stop
Ctrl Alt Shift F11Jump to Live and stop
Ctrl Alt Shift F12Jump to next Segment and stop

Configuration files that can be used in their respective driver software:

Control using midi input (?mode=pedal)

This mode listens to MIDI CC-notes on channel 8, expecting a linear range like i.e. 0-127. Sutiable for use with expression pedals, but any MIDI controller can be used. The mode picks the first connected MIDI device, and supports hot-swapping (you can remove and add the device without refreshing the browser).

If you want to use traditional analogue pedals with 5 volt TRS connection, a converter such as the Beat Bars EX2M will work well.

From Release 30, the parameters for the pedal have a prefix: pedal_ (i.e. pedal_speedMap, pedal_reverseSpeedMap etc)

Query parameterTypeDescriptionDefault
speedMapArray of numbersSpeeds to scroll by (px. pr. frame - approx 60fps) when scrolling forwards. The beginning of the forwards-range maps to the first number in this array, and the end of the forwards-range map to the end of this array. All values in between are being interpolated using a spline curve.[1, 2, 3, 4, 5, 7, 9, 12, 17, 19, 30]
reverseSpeedMapArray of numbersSame as speedMap but for the backwards range.[10, 30, 50]
rangeRevMinnumberThe end of the backwards-range, full speed backwards.0
rangeNeutralMinnumberThe beginning of the backwards-range.35
rangeNeutralMaxnumberThe minimum input to run forward, the start of the forward-range (min speed). This is also the end of any "deadband" you want filter out before starting moving forwards.80
rangeFwdMaxnumberThe maximum input, the end of the forward-range (max speed)127
  • rangeNeutralMin has to be greater than rangeRevMin
  • rangeNeutralMax has to be greater than rangeNeutralMin
  • rangeFwdMax has to be greater than rangeNeutralMax

Yamaha FC7 mapped for both a forward (80-127) and backwards (0-35) range.

The default values allow for both going forwards and backwards. This matches the Yamaha FC7 expression pedal. The default values create a forward-range from 80-127, a neutral zone from 35-80 and a reverse-range from 0-35.

Any movement within forward range will map to the speedMap with interpolation between any numbers in the speedMap. You can turn on ?debug=1 to see how your input maps to an output. This helps during calibration. Similarly, any movement within the backwards rage maps to the reverseSpeedMap.

Calibration guide:

SymptomAdjustment
"I can't rest my foot without it starting to run"Increase rangeNeutralMax
"I have to push too far before it starts moving"Decrease rangeNeutralMax
"It starts out fine, but runs too fast if I push too hard"Add more weight to the lower part of the speedMap by adding more low values early in the map, compared to the large numbers in the end.
"I have to go too far back to reverse"Increse rangeNeutralMin
"As I find a good speed, it varies a bit in speed up/down even if I hold my foot still"Use ?debug=1 to see what speed is calculated in the position the presenter wants to rest the foot in. Add more of that number in a sequence in the speedMap to flatten out the speed curve, i.e. [1, 2, 3, 4, 4, 4, 4, 5, ...]

Note: The default values are set up to work with the Yamaha FC7 expression pedal, and will probably not be good for pedals with one continuous linear range from fully released to fully depressed. A suggested configuration for such pedals (i.e. the Mission Engineering EP-1) will be like:

Query parameterSuggestion
speedMap[1, 2, 3, 4, 5, 7, 9, 12, 17, 19, 30]
reverseSpeedMap-2
rangeRevMin-1
rangeNeutralMin0
rangeNeutralMax1
rangeFwdMax127

Control using Nintendo Joycon (?mode=joycon)

This mode uses the browsers Gamapad API and polls connected Joycons for their states on button-presses and joystick inputs.

The Joycons can operate in 3 modes, the L-stick, the R-stick or both L+R sticks together. Reconnections and jumping between modes works, with one known limitation: Transition from L+R to a single stick blocks all input, and requires a reconnect of the sticks you want to use. This seems to be a bug in either the Joycons themselves or in the Gamepad API in general.

From Release 30, the parameters for the JoyCon have a prefix: joycon_ (i.e. joycon_speedMap, joycon_reverseSpeedMap etc)

Query parameterTypeDescriptionDefault
speedMapArray of numbesSpeeds to scroll by (px. pr. frame - approx 60fps) when scrolling forwards. The beginning of the forwards-range maps to the first number in this array, and thee end of the forwards-range map to the end of this array. All values in between are being interpolated in a spline curve.[1, 2, 3, 4, 5, 8, 12, 30]
reverseSpeedMapArray of numbersSame as speedMap but for the backwards range.[1, 2, 3, 4, 5, 8, 12, 30]
rangeRevMinnumberThe end of the backwards-range, full speed backwards.-1
rangeNeutralMinnumberThe beginning of the backwards-range.-0.25
rangeNeutralMaxnumberThe minimum input to run forward, the start of the forward-range (min speed). This is also the end of any "deadband" you want filter out before starting moving forwards.0.25
rangeFwdMaxnumberThe maximum input, the end of the forward-range (max speed)1
  • rangeNeutralMin has to be greater than rangeRevMin
  • rangeNeutralMax has to be greater than rangeNeutralMin
  • rangeFwdMax has to be greater than rangeNeutralMax

Nintendo Swith Joycons

You can turn on ?debug=1 to see how your input maps to an output.

Button map:

ButtonActon
L2 / R2Go to the "On-air" story
L / RGo to the "Next" story
Up / XGo top the top
Left / YGo to the previous story
Right / AGo to the following story

Calibration guide:

SymptomAdjustment
"The prompter drifts upwards when I'm not doing anything"Decrease rangeNeutralMin
"The prompter drifts downwards when I'm not doing anything"Increase rangeNeutralMax
"It starts out fine, but runs too fast if I move too far"Add more weight to the lower part of the speedMap / reverseSpeedMap by adding more low values early in the map, compared to the large numbers in the end.
"I can't reach max speed backwards"Increase rangeRevMin
"I can't reach max speed forwards"Decrease rangeFwdMax
"As I find a good speed, it varies a bit in speed up/down even if I hold my finger still"Use ?debug=1 to see what speed is calculated in the position the presenter wants to rest their finger in. Add more of that number in a sequence in the speedMap to flatten out the speed curve, i.e. [1, 2, 3, 4, 4, 4, 4, 5, ...]