Rules and requirements for customized themes
We recommend using the Pexip branding portal (https://webapp2-branding.pexip.io/) to customize your themes. The portal provides an easy way to change the text, images, splash screen layouts and some of the settings that are used in themes, and it generates a ZIP file that you can upload via the Administrator interface. Note that you cannot change the audio files via the branding portal.
If you want to manually customize your own themes, or have more advanced customization requirements, the following sections list the complete set of audio, configuration, endpoint data, image and custom layout files that can be used to configure each theme. They include the requirements for each of those files, including how to manage video watermarking, content classifications, and information on which files are relevant to themes used by Call Routing Rules.
Theme ZIP file
When creating or editing a theme, you upload a single ZIP file containing your own customized version of one or more of the files described here. The ZIP file does not need to contain the complete set of files or settings, just the files or settings that you want to use in place of, or as an extension to, those from the default Base theme.
If, for example, you are replacing one of the default background JPGs, icon SVG files or audio files, then you should ensure that you use the same file name as the file you are replacing. If you are using additional background or icon files that you are applying to a subset of screens, then you must also include those new files in your ZIP file.
If "theme_version": 2 is not present in a themeconfig.json file at the lowest level of the theme file hierarchy then it is assumed to be a legacy-style theme (see How do I know which files and configuration settings will be used in a particular VMR? for more information).
Therefore, even if you only want to customize a single image or sound file, the pinning configuration, or the vendordata file, you must include in your ZIP upload a themeconfig.json file that contains a "theme_version": 2 switch, if you want to use new-style themes.
If any errors are reported when trying to upload your own manually-created ZIP file, such as "Invalid file in theme: themeconfig.json", you must fix the errors and then try to upload the ZIP file again. Any errors in the themeconfig.json are typically due to invalid JSON structures, such as missing commas between any key value pairs, or having a comma after the last key value pair in any object. Graphics file related errors are typically caused by incorrect image resolutions or using an invalid filename.
Audio (sound) files
You can replace any of the audio files by using your own version of the file in your customized theme. You must use the same file name as the file you are replacing. All audio files must be:
- .WAV format
- RIFF (little-endian) data, WAVE audio, Microsoft PCM, 16 bit, mono 48000 Hz
Points to note:
- mono and 48000Hz are essential - audio files that do not meet these requirements will fail to upload.
- The volume level of the audio recording is important - use the default Pexip Infinity prompts as a guide.
- Some endpoints may take a few seconds after a call connects before they are able to receive audio. For this reason, we have included a 2-second pause at the start of any audio files that may be played when a user first connects to Pexip Infinity. We recommend that you include a similar pause; use the default Pexip Infinity files as a guide.
If you have used the Pexip branding portal to generate your theme ZIP file and you also want to customize the audio prompts (you cannot currently customize the audio files via the branding portal), then you must add your customized audio (wav) files to the ZIP file generated by the branding portal.
The following table lists the default audio files and their content, which is contained within the Base theme:
These are the default audio files in the Base theme:
| File name | Content in Base theme |
|---|---|
| 2sd-invalid-number-three-times-disconnect_48kHz_mono.wav | "You have entered an invalid number three times. I will now disconnect the call." |
| 2sd-not-entered-valid-number-disconnect-call_48kHz_mono.wav | "You have not entered a valid number. I will now disconnect the call." |
| 2sd-number-not-valid-try-again_48kHz_mono.wav | "That number is not valid. Please try again." |
| 2sd-number-pound-key_48kHz_mono.wav | "Please enter the number you wish to connect to, followed by the pound key." |
| 2sd-please-hold-connect-you_48kHz_mono.wav | "Please hold while I try to connect you." |
| conf-ai_started_48kHz_mono.wav |
"This call is being processed by AI." |
| conf-ai_stopped_48kHz_mono.wav |
"AI has stopped processing this call." |
| conf-call-will-be-disconnected_48kHz_mono.wav | "Your call will be disconnected." |
| conf-capacity_exceeded_48kHz_mono.wav | "The conferencing system capacity has been exceeded." |
| conf-getpin_48kHz_mono.wav | "Please enter the conference PIN number." |
| conf-getpin_pound-key_48kHz_mono.wav | "Please enter the conference PIN number, followed by the pound key." |
| conf-insufficient_licenses_48kHz_mono.wav | "There are insufficient conferencing system licenses available." |
| conf-invalid_license_48kHz_mono.wav | "The conferencing system license is invalid." |
| conf-invalidpin_48kHz_mono.wav | "The PIN is invalid for this conference." |
| conf-leaderhasleft_48kHz_mono.wav | "The Host has left the conference. The conference is about to end." |
| conf-live_captions_started_48kHz_mono.wav | "Live captions are enabled. Your continued participation in this call will be considered as consent." |
| conf-live_captions_stopped_48kHz_mono.wav | "Live captions are not in use." |
| conf-participant_entry_tone_48kHz_mono.wav |
<empty file> (For more information, see Playing notification tones when participants join or leave a conference.) |
| conf-participant_exit_tone_48kHz_mono.wav | <empty file> |
| conf-participant_is_in_lobby_48kHz_mono.wav |
"Welcome to the lobby. Please wait and your meeting host will admit you soon." |
| conf-participant_locked_out_48Khz_mono.wav |
Three knocks. (For more information, see Locking a conference and allowing participants to join a locked conference.) |
| conf-placeintoconf_48kHz_mono.wav | "Welcome to the conference." |
| conf-public_streaming_started_48kHz_mono.wav |
"This call is being streamed publicly." |
| conf-public_streaming_stopped_48kHz_mono.wav |
"Public streaming of this call has stopped." |
| conf-recording_started_48kHz_mono.wav |
"This call is being recorded." |
| conf-recording_stopped_48kHz_mono.wav |
"Recording of this call has stopped." |
| conf-streaming_started_48kHz_mono.wav |
"This call is being streamed." |
| conf-streaming_stopped_48kHz_mono.wav |
"Streaming of this call has stopped." |
| conf-test_call_48kHz_mono.wav |
"Let's test your video and audio. Count out loud from one to three, now." (For more information, see Configuring the Test Call Service.) |
| conf-test_call_audio_only_48kHz_mono.wav |
"Let's test your audio settings. Count out loud from one to three, now." |
| conf-test_call_disconnect_48kHz_mono.wav |
"If you have technical issues, check your settings or contact your administrator." |
| conf-transcribing_started_48kHz_mono.wav |
"This call is being transcribed." |
| conf-transcribing_stopped_48kHz_mono.wav |
"Transcribing of this call has stopped." |
| conf-waitforleader_48kHz_mono.wav | "Waiting for the conference Host to join." |
| conf-waithostpin_48kHz_mono.wav | "Waiting for the conference Host to join. If you are the conference Host, please enter the conference PIN number now." |
| conf-waithostpin_pound-key_48kHz_mono.wav | "Waiting for the conference Host to join. If you are the conference Host, please enter the conference PIN number followed by the pound key." |
| conf-you_are_the_only_participant_48kHz_mono.wav | "You are the only participant in the conference." |
|
|
|
Theme configuration file (themeconfig.json)
The themeconfig.json file is the theme's primary configuration file. It is a JSON dictionary that specifies the background and layout of the splash screens used when joining a conference (such as the Welcome screen and PIN entry screens), specifies which image files are used, and controls some of the features and overlays that are used within a conference. It does not control any of the audio (sound) elements of the theme.
Whenever you include a themeconfig.json file in your customized theme, it must contain: "theme_version": 2. If it does not contain this setting, then it is assumed to be a legacy-style theme
If any settings within your customized themeconfig.json file are not specified, Pexip Infinity will simply use the equivalent setting from the Base theme or use default behavior. For example, if the only thing you want to customize from the default settings is to disable watermarks, then your themeconfig.json file only needs to contain the disable_watermark_icon setting (in addition to "theme_version": 2). See How do I know which files and configuration settings will be used in a particular VMR?
Here is the default (Base theme) contents of themeconfig.json:
{
"enable_dtmf_conference_control": true,
"dtmf_conference_control_commands": {
"*6": "toggle_self_mute",
"*7": "toggle_lock",
"*5": "toggle_guest_mute",
"*4": "toggle_pres_in_mix",
"*9": "toggle_multiscreen",
"*8": "cycle_layout",
"*3": "toggle_raise_hand",
"*1": "cycle_personal_layout",
"##": "end_conference"
},
"dtmf_allowed_layouts": ["1:7", "ac", "1:21", "2:21", "2x2", "3x3", "4x4", "5x5", "1:0", "1:33"],
"disable_ai_indicator": false,
"disable_streaming_indicator": false,
"disable_watermark_icon": false,
"disable_watermark_mute_icon": true,
"disable_conference_locked_indicator": false,
"ai_indicator_text": "AI",
"streaming_indicator_text": "Streaming enabled",
"public_streaming_indicator_text": "Public streaming enabled",
"recording_indicator_text": "Recording",
"transcribing_indicator_text": "Transcribing",
"live_captions_on_indicator_text": "Live captions on",
"live_captions_off_indicator_text": "Live captions off",
"conference_locked_indicator_text": "Conference locked",
"conference_unlocked_indicator_text": "Conference unlocked",
"conference_locked_indicator_n_waiting_text": "{number_of_waiting_participants} waiting for host",
"test_call_service_media_delay": 2,
"test_call_service_disconnect_timeout": 10,
"theme_version": 2
}
The default settings within the Base themeconfig.json file are described below. Note that the Base file does not contain any text overlay or splash screen layout controls, but you can add your own controls to your customized file — as described in this topic — to override the default behavior.
The themeconfig.json file must be UTF-8 encoded, therefore when editing the file you should use a UTF-8 capable editor. We recommend that you do not use Notepad on Windows computers.
All of the colors in these controls are specified using RGB hexadecimal notation (in the format 0xnnnnnn).
| Name | Description | Value in Base theme |
|---|---|---|
|
enable_dtmf_conference_control |
Determines whether Host participants can use DTMF to control the conference (true) or not (false). |
true |
|
dtmf_conference_control_commands |
If DTMF controls are enabled, this section specifies the DTMF digits used for each control. Current controls are:
When changing the DTMF controls, you must only edit the keypad digits inside the first pair of quotes on each line (i.e. *6, *7, ## etc). Editing anything else will disable DTMF commands. If you change the *6 control for self-mute, you should also change the associated watermark_mute_icon.png graphic to reference the revised command. Note that another DTMF control command, toggle_teams_large_gallery, could be made available for endpoints that are in an interop call to a Microsoft Teams conference. This command toggles between the current layout and Microsoft's Large Gallery view. However, it is not included in the base theme and must be manually added to your custom theme and assigned some appropriate DTMF digits (such as *2). Each control must be two DTMF digits long, and all the commands must be different. Note that with calls made via the Infinity Gateway, any DTMF signals are forwarded to the other party. The only exceptions to this are interop calls to Microsoft Teams and Google Meet where DTMF controls can be used to control aspects of the layout and toggle self mute See Using a DTMF keypad to control a conference for guidance on best practice. |
"*6": "toggle_self_mute" "*7": "toggle_lock" "*5": "toggle_guest_mute" "*4": "toggle_pres_in_mix" "*9": "toggle_multiscreen" "*8": "cycle_layout" "*3": "toggle_raise_hand" "*1": "cycle_personal_layout" "##": "end_conference" |
| dtmf_allowed_layouts |
The set of layouts that are cycled through on each press of the cycle_layout DTMF command (*8 by default), and by the cycle_personal_layout DTMF command (*1 by default). This can also include the names of any custom layouts. The order of the layout identifiers in the list determines the cycle sequence, starting with the layout next in the list after the current layout. However, if the initial (default) layout is not in the list then:
|
["1:7", "ac", "1:21", "2:21", "2x2", "3x3", "4x4", "5x5", "1:0", "1:33"] |
| disable_ai_indicator | Determines whether the Google Meet AI indicator is disabled (true) or enabled (false). | false |
| disable_streaming_indicator | Determines whether the streaming indicator icon is disabled (true) or enabled (false). | false |
| disable_watermark_icon | Determines whether the watermark icon is overlaid onto the main speaker video (false) or is not used (true). See Video watermarking for more information. | false |
|
disable_watermark_mute_icon |
Determines whether the "Your mic has been muted" watermark icon is overlaid onto the stream sent to a participant when that participant has been muted (false) or is not used (true). See Video watermarking for more information. | true |
|
disable_conference_locked_indicator |
Determines whether the conference locked and conference unlocked indicators are disabled (true) or enabled (false). | false |
| ai_indicator_text | The text that is associated with the AI indicator and that is temporarily displayed when Google Meet AI features are enabled. | AI |
| streaming_indicator_text | The text that is associated with the streaming indicator and that is temporarily displayed when a conference is being streamed. | Streaming enabled |
|
public_streaming_indicator_text |
The text that is associated with the streaming indicator and that is temporarily displayed when Google Meet public streaming is enabled. | Public streaming enabled |
| recording_indicator_text | The text that is associated with the recording indicator and that is temporarily displayed when a conference is being recorded. | Recording |
|
transcribing_indicator_text |
The text that is associated with the conference transcribing indicator and that is temporarily displayed when a conference is being transcribed. | Transcribing |
|
live_captions_on_indicator_text |
The text that is associated with the live captions indicator and that is temporarily displayed when captions are enabled. | Live captions on |
|
live_captions_off_indicator_text |
The text that is associated with the live captions indicator and that is temporarily displayed when captions are disabled. | Live captions off |
|
conference_locked_indicator_text |
The text that is associated with the conference locked indicator and that is temporarily displayed when a conference is locked. This has a maximum limit of 20 characters. |
Conference locked |
|
conference_unlocked_indicator_text |
The text that is associated with the conference unlocked indicator and that is temporarily displayed when a conference is unlocked. | Conference unlocked |
|
conference_locked_indicator_n_waiting_text |
The text that is associated with the conference locked indicator text, and shows the number of participants waiting in the lobby in Teams CVI calls. |
{number_of_waiting_participants} waiting for host |
|
test_call_service_media_delay |
The number of seconds that media is delayed before being looped back to the caller when using a Test Call Service. (For more information, see Configuring the Test Call Service.) |
2 |
|
test_call_service_disconnect_timeout |
The number of seconds that a user can test their media before the disconnect message is played, when using a Test Call Service. |
10 |
| theme_version | Controls whether legacy (version "1") or new style (version "2") themes are used. If "theme_version": 2 is not present in a themeconfig.json file at the lowest level of the theme file hierarchy then it is assumed to be a legacy-style theme (see How do I know which files and configuration settings will be used in a particular VMR? for more information). | 2 |
This table contains any additional settings that are not included in the Base themeconfig.json file that you download from the Management Node, but can be used to control theme behavior.
| Name | Description | Default behavior |
|---|---|---|
| disable_multiscreen | Determines whether the multiscreen feature is available or not. | false |
|
enable_solo_streaming_loopback |
Normally, the streaming_in_progress splash screen is shown if there are no other participants in the conference other than a streaming participant. If you want to show a loopback of the presentation stream instead of this splash screen you need to insert the setting: |
false |
| disable_comfort_noise |
Low-level, almost imperceptible background noise is added to the audio mix in conferences. This can be disabled by updating your theme configuration — either the default theme, or just in themes applied to specific services. Note that comfort noise is not sent towards Google Meet or Microsoft Teams meetings. To disable comfort noise you need to insert the setting: |
false |
| message_box_config |
Specifies the properties of any message overlay banner text. It contains a dictionary where you can define the text color, the background colour of the box, and the color of the box's border. You can use either:
For example (showing the default colors): "message_box_config":
{
"text_color": "0xFF000000",
"background_color": "0xE6FFFFFF",
"border_color": "0xFF000000"
}
|
as shown in the example |
| indicator_color_config |
Specifies the colors of the in-conference messages (audio-only speaker names, locked/unlocked and so on) shown in the layout's information bar (referred to in themes as the "notch"). For example (showing the default colors): "indicator_color_config":
{
"ai":{
"background":"0x00FFFFFF",
"border":"0xE6FFFFFF",
"text":"0xFFFFFFFF",
"light_mode":{
"background":"0x00FFFFFF",
"border":"0xE6000000",
"text":"0xFF000000"
}
},
"captions":{
"background":"0x00FFFFFF",
"border":"0xE6FFFFFF",
"text":"0xFFFFFFFF",
"light_mode":{
"background":"0x00FFFFFF",
"border":"0xE6000000",
"text":"0xFF000000"
}
},
"hand_raised":{
"background":"0x00FFFFFF",
"border":"0xE6FFFFFF",
"text":"0xFFFFFFFF",
"light_mode":{
"background":"0x00FFFFFF",
"border":"0xE6000000",
"text":"0xFF000000"
}
},
"locked":{
"background":"0x00FFFFFF",
"border":"0xE6FFFFFF",
"text":"0xFFFFFFFF",
"light_mode":{
"background":"0x00FFFFFF",
"border":"0xE6000000",
"text":"0xFF000000"
}
},
"recording":{
"background":"0x33D73332",
"border":"0xE6D73332",
"text":"0xFFFFFFFF",
"light_mode":{
"background":"0x33AE191A",
"border":"0xE6AE191A",
"text":"0xFF000000"
}
},
"speaker":{
"background":"0x330EBEC7",
"border":"0xE60EBEC7",
"text":"0xFFFFFFFF",
"light_mode":{
"background":"0x330EBEC7",
"border":"0xE60EBEC7",
"text":"0xFF000000"
}
},
"streaming":{
"background":"0x00FFFFFF",
"border":"0xE6FFFFFF",
"text":"0xFFFFFFFF",
"light_mode":{
"background":"0x00FFFFFF",
"border":"0xE6000000",
"text":"0xFF000000"
}
},
"transcribing":{
"background":"0x33D73332",
"border":"0xE6D73332",
"text":"0xFFFFFFFF",
"light_mode":{
"background":"0x33AE191A",
"border":"0xE6AE191A",
"text":"0xFF000000"
}
}
}
When an indicator message name e.g. "captions", is specified:
If a message type is not specified, the default values for that message are used. |
as shown in the example |
|
reserved_slot_overlay_text |
Specifies any overlay text to be placed in a reserved slot when using participant pinning. | null |
Endpoint data (vendordata.json)
The vendordata.json file contains information about videoconferencing endpoints from different manufacturers.
It is used to determine whether a specific endpoint is a single-screen or two-screen device (unless the endpoint explicitly signals to Pexip Infinity how many screens it has). This information is used when determining if presentation content could be sent as part of the layout mix when using Adaptive Composition or the Teams-like layout, and if multiscreen participant display is supported:
-
Single screen endpoints:
- Presentation content may be sent as part of the layout mix, or as a separate presentation stream.
- Multiscreen participant display is not available.
-
Dual screen endpoints:
- Presentation content is always sent as a separate presentation stream.
-
Multiscreen participant display is available for the supported layouts.
For H.323 endpoints, the vendordata.json file cannot identify the number of screens (single or dual) and the endpoint cannot explicitly signal how many screens it has, thus they cannot use multiscreen participant display by default. Multiscreen participant display can only be enabled by sending a *9 (toggle to multiscreen) DTMF command to the conference. See Using a DTMF keypad to control a conference and Determining if an endpoint has single or multiple screens for more information.
See Receiving the presentation stream as part of the layout mix (Adaptive Composition) and Multiscreen participant display for more information.
It is also used for Google Meet audio denoising interoperability to configure a list of endpoints that perform their own in-built denoising. See Configuring Pexip Infinity as a Google Meet gateway for more information.
The default vendordata.json file is shown below:
{
"endpoints_by_display_count": {
"1": [
"Cisco-Board",
"Cisco-DX",
"Cisco-Desk",
"Cisco-EX60",
"Cisco-EX90",
"Cisco-MX200",
"Cisco-MX300",
"Cisco-RoomKitMini",
"Cisco-SX10",
"TANDBERG/257",
"Yealink VC200",
"PolycomRealPresenceTrio",
"PolycomStudioX30",
"Polycom (HDX 4000",
"Polycom (HDX 4500",
"Polycom (HDX 6000"
],
"2": []
},
"built_in_denoising": [
]
}
The JSON dictionary in the file contains:
-
An endpoints_by_display_count object, which contains two further objects:
- "1": this contains an array of names of single screen endpoints (the absence of a closing bracket for the HDX device names is deliberate).
- "2": this contains an array of names of dual screen endpoints (this array is empty by default).
- A built_in_denoising object that contains an array (empty by default) of endpoints that perform their own built-in audio denoising. This information is currently used for Google Meet interoperability only.
The endpoint names used in the arrays are those that are contained in the user agent string used by the endpoint, and can be seen in the Vendor field when viewing participant status information.
Pexip intends to maintain and update this file as appropriate in future software versions, however you may amend the contents of the arrays and provide your own vendordata.json file as part of a custom theme upload and then apply that theme to your platform, VMRs or rules in the normal way to override the default behavior. Ensure that you do not break the syntax of the JSON file; when adding endpoints to the empty arrays follow the format of the existing "1" (single screen endpoints) object.
The vendordata.json file must be UTF-8 encoded, therefore when editing the file you should use a UTF-8 capable editor. We recommend that you do not use Notepad on Windows computers.
Note that if you submit your own vendordata.json file you must also include (as a minimum) in your ZIP upload a themeconfig.json file that contains a "theme_version": 2 switch.
Customizing the splash screens
The splash screens are used when joining a conference (such as to capture a PIN), using a Virtual Reception or the Test Call Service, or to display an error such as insufficient licenses. Each splash screen consists of a background JPG file plus, on most screens, other SVG images or text elements that are overlaid onto the background image.
The themeconfig.json file offers a lot of flexibility when customizing the appearance of the splash screens. You can override the default background image, graphics and text elements that are used on each splash screen, and modify where those elements are positioned. Each splash screen can be configured by specifying a splash_screens object and associated elements within your themeconfig.json file, as described below.
Background image
By default the Base theme contains 3 background files:
| File name | Image size (width, height) | Content in Base theme | Notes |
|---|---|---|---|
| background.jpg | 1920 x 1080 pixels JPG (RGB mode only) |
|
The background image used by default on all splash screens except for those used by the Test Call Service. |
| background_test_call.jpg | 1920 x 1080 pixels JPG (RGB mode only) |
|
The background image (a dark screen) used by default on the Test Call Service splash screens. |
| background_reserved_slot.jpg | 1920 x 1080 pixels JPG (RGB mode only) |
|
The background image (a black screen) used by default on the reserved_slot splash screen when using participant pinning. |
You can replace either of these files with your own versions, or you have the flexibility to specify an alternative file to use on a specific splash screen. Ensure that the images display acceptably on both 16:9 endpoints and 4:3 endpoints (if applicable). For example, the original 1920 x 1080 pixel (16:9) images may have approximately 240 pixels cropped from both the left and right sides when displayed as 4:3. You should therefore check that any details on the far left or far right of the image are visible in both formats; for this reason we recommend keeping the image fairly central.
To specify an alternative file, use the background element to define the override and the path element to define the file to use. The filename must begin with "background". For example, to use an alternative background for the pin_entry splash screen:
{
"splash_screens": {
"screens": {
"pin_entry": {
"background": {"path": "background_pin_entry.jpg"},
...
Make sure that you include the specified background file (background_pin_entry.jpg in this example) in the theme ZIP file that you upload.
Alternatively, instead of specifying a path you can define a color, e.g. "background": {"color": "0x323232"}
Splash screens
The following table lists the splash screens that you can configure within a theme, and when that screen is shown. It also identifies the screen key to use in a screens object if you want to override the default behavior, and any default icon image and text label elements used on that screen.
All of the screens used when joining a conference use background.jpg as the default background image. The Test Call Service uses background_test_call.jpg during the call.
If you are using a theme to customize gateway calls only, then you only need to consider a subset of these screens, as indicated in the table below.
Many of the overlay icon SVG files that are used by the splash screens now contain empty/blank images by default. They are still referenced by each splash screen's elements configuration for backwards compatibility, but as they are blank by default they do not affect each screen's default appearance (from version 37 many screens typically only show a background image and a text label).
| Screen key | Default elements used | Usage | Used in gateway calls |
|---|---|---|---|
| welcome |
Label: welcome Icon: icon_welcome.svg (blank) |
Shown when there are no other participants in the conference. Also shown to a VTC-based participant that is being held in a Skype for Business meeting lobby.
|
|
| connecting |
Label: connecting Icon: icon_connecting.svg (blank) |
Shown briefly when placing a person-to-person call via the Infinity Gateway. |
|
|
waiting_for_host |
Label: waiting_for_host Icon: icon_waiting_for_host.svg (blank) |
Shown to Guests while waiting for a Host to either:
The length of time Guests can remain at this screen is configurable via the global Waiting for Host timeout option (). |
|
|
inlobby_status_unknown |
Label: inlobby_status_unknown Icon: icon_connecting.svg (blank) |
Shown when initially connecting to a Microsoft Teams meeting, while the participant's status is not yet known. | |
| inlobby |
Label: inlobby Icon: icon_is_in_lobby.svg (blank) |
This is shown:
|
|
|
other_participants_audio_only |
Label: other_participants_audio_only Icon: icon_other_participants_audio_only.svg (blank) |
Shown when all other participants are audio-only or presentation and control-only. |
|
| pin_welcome |
Label: please_enter_pin Icon: icon_pin_entry.svg |
The pin_ screens are shown to participants Participants entering PINs via these screens will be disconnected after three unsuccessful attempts. The length of time participants can remain at these screens is configurable via the global PIN entry timeout option ().
|
|
| pin_entry |
Icon: |
An icon_pin_entry_digit.svg icon is displayed as each number is entered, which can go up to 20 icons over 2 lines. See PIN digits element for controlling the layout of the PIN entry digit icons.
|
|
| pin_correct |
Label: pin_correct Icon: icon_welcome.svg |
Displayed when a correct PIN is entered.
|
|
| pin_invalid |
Label: invalid_pin Icon: icon_pin_invalid.svg |
Displayed when an incorrect PIN is entered.
|
|
|
virtual_reception_welcome |
Label: enter_conference_id Icon: icon_virtual_reception_welcome.svg (blank) |
Shown to participants |
|
|
virtual_reception_conference_id_entry |
Label: conference_id_entry Icon: icon_virtual_reception_conference_id_entry.svg (blank) |
Shown to participants |
|
|
virtual_reception_conference_id_invalid |
Label: conference_id_invalid Icon: icon_virtual_reception_conference_id_invalid.svg (blank) |
Shown to participants |
|
|
virtual_reception_connecting |
Label: virtual_reception_connecting Icon: icon_virtual_reception_connecting.svg (blank) |
Shown briefly to participants Note that the name of the destination VMR or matching Call Routing Rule is also overlaid onto this image, using the virtual_reception_connecting text label. |
|
| timeout |
Label: timeout Icon: icon_timeout.svg (blank) |
Shown briefly prior to disconnecting participants |
|
|
no_incoming_video |
Icon: icon_no_video.svg |
Shown when a participant's video stream is not available. The no_incoming_video and no_main_video screens both use the same icon image file (icon_no_video.svg) and the default background color is #323232 (dark gray), instead of background.jpg.
|
|
|
no_main_video |
Icon: icon_no_video.svg |
Used when streaming a conference to indicate that there is currently no main video. The no_incoming_video and no_main_video screens both use the same icon image file (icon_no_video.svg) and the default background color is #323232 (dark gray), instead of background.jpg.
|
|
| reserved_slot | Icon: icon_reserved_slot.svg |
Displayed in a reserved slot when it is not occupied by a participant when participant pinning is used.
|
|
| unused_screen |
Shown on a dual-screen system when the second screen is empty. A black screen is used by default. See Customizing the unused screen in a dual-screen system for more information. |
|
|
|
streaming_in_progress |
Label: streaming_in_progress Icon: icon_streaming_screen.svg (blank) |
Shown if there are no other participants in the conference other than a streaming participant. Alternatively, if you want to show a loopback of the presentation stream instead of this splash screen you need to insert "enable_solo_streaming_loopback" : true into your themeconfig.json file (see Additional settings). |
|
|
stream_waiting |
Label: stream_waiting Icon: icon_streaming_screen.svg (blank) |
A "holding" splash screen that can be sent to a streaming participant (e.g. YouTube broadcast) while you are waiting for people in the conference to get ready to start. | |
|
no_presentation |
Label: no_presentation Icon: icon_no_presentation.svg |
Used to indicate that there is currently no presentation stream.
|
|
|
error_capacity_exceeded |
Label: capacity_exceeded Icon: icon_error.svg (blank) |
Shown to participants |
|
|
error_insufficient_licenses |
Label: insufficient_licenses Icon: icon_error.svg (blank) |
Shown to participants |
|
|
error_insufficient_video_licenses |
Label: insufficient_video_licenses Icon: icon_error_insufficient_video_licenses.svg (blank) |
Shown to participants when they are unable to join a conference because all port (video) licenses are currently in use, but there was an audio license available. For more information, see Insufficient licenses. |
|
|
error_invalid_license |
Label: invalid_license Icon: icon_error.svg (blank) |
Shown to participants |
|
|
direct_media_welcome |
Label: welcome Icon: n/a |
Shown to a direct media participant who is waiting for the second participant to join the call. | |
|
direct_media_waiting_for_host |
Label: waiting_for_host Icon: n/a |
Shown to a direct media participant who is waiting for the conference host to join. | |
|
direct_media_other_participants_audio_only |
Label: other_participants_audio_only Icon: n/a |
Shown to a direct media participant when the other participant is audio only. | |
|
direct_media_escalate |
Label: direct_media_escalate Icon: n/a |
Shown as a notification message to a direct media participant who is being escalated to a transcoded conference.
|
|
|
direct_media_deescalate |
Label: direct_media_deescalate Icon: n/a |
Shown as a notification message to a direct media participant who is being de-escalated back to a direct media conference.
|
|
|
|
|||
These are the splash screens used by the Test Call Service:
| Screen key | Default elements used | Usage |
|---|---|---|
| test_call_welcome |
Label: test_call_welcome_header and test_call_welcome_text Icon: icon_test_call_welcome.svg |
Shown at the start of a call to a Test Call Service. (For more information, see Configuring the Test Call Service.)
|
|
test_call_in_progress |
Label: test_call_in_progress |
Shown during a call to a Test Call Service. Note that a large, live (with a short delay) video image of the test call participant is shown on top of this screen during a test call.
|
| test_call_complete |
Label: test_call_complete Icon: icon_test_call_complete.svg |
Shown briefly prior to automatically disconnecting the participant from a Test Call Service.
|
Default element configuration for each screen
If you define elements for a splash screen, whatever you specify will completely replace all of the default icon and text elements for that screen. For example, if you want to add a new line of text to a screen, your elements object for that screen must define the original (default) icon and text as well as your new text.Therefore it is useful to know how the icons and text elements are positioned on each splash screen by default. The default layout of all of the splash screens is available at theme_screen_defaults_v38.json. Note that this element configuration is not contained in the themeconfig.json file included within the Base theme that you download from the Management Node.
Text overlays (labels)
The labels object is referenced by every text element that is overlaid onto a splash screen and is used to define the actual text displayed to users. For example:
"splash_screens": {
"labels": {
"welcome": "Welcome",
"connecting": "Connecting...",
"timeout": "Time exceeded",
...The keys (e.g. "timeout") are used in text elements and the associated values (e.g. "Time exceeded") are the text strings that are shown on the screen. The text content can include \n newlines if you require multi-line capability (newlines must be explicitly used and are never applied automatically). On some splash screens, strings may also reference some predefined variables, such as "{conference_name}" which is used in the virtual_reception_connecting screen.
The default font size is 66px and the default color is 0xffffffff (white, defined in ARGB hexadecimal notation).
Note that the default text labels are not contained within the Base theme's themeconfig.json file that you can download from the Management Node, but you can override the default settings by adding the relevant labels into your own themeconfig.json file. The following table contains the default keys, the default text string for each key, and the screen in which that key is used:
These are the label keys and associated text strings and screens:
| Label key | Default text string (to overlay onto the screen background) | Associated screen (by default) |
|---|---|---|
| welcome | Welcome | welcome direct_media_welcome |
| connecting | Connecting... | connecting |
| timeout | Time exceeded | timeout |
| waiting_for_host | Waiting for the host... | waiting_for_host direct_media_waiting_for_host |
| other_participants_audio_only | Other participants\nare not sharing video | other_participants_audio_only direct_media_other_participants_audio_only |
| please_enter_pin | Please enter the PIN | pin_welcome |
| pin_correct | Welcome | pin_correct |
| invalid_pin | Invalid PIN\nPlease try again | pin_invalid |
| enter_conference_id | Enter conference ID | virtual_reception_welcome |
| conference_id_entry | {conference_id} | virtual_reception_conference_id_entry |
| conference_id_invalid | Conference ID invalid | virtual_reception_conference_id_invalid |
| virtual_reception_connecting | {conference_name} | virtual_reception_connecting |
| no_presentation | Waiting for presentation... | no_presentation |
| streaming_in_progress | Your video is\nbeing streamed | streaming_in_progress |
| stream_waiting | Streaming will begin shortly... | stream_waiting |
| inlobby_status_unknown | Call connecting... | inlobby_status_unknown |
| inlobby | Welcome to the lobby,\nyour meeting host will admit you soon | inlobby |
| capacity_exceeded | Capacity\nexceeded | error_capacity_exceeded |
| insufficient_licenses | Insufficient licenses | error_insufficient_licenses |
| insufficient_video_licenses | Insufficient video licenses\nYou can still share content and audio | error_insufficient_video_licenses |
| invalid_license | Invalid license | error_invalid_license |
| test_call_welcome_header | Live Test | test_call_welcome |
| test_call_welcome_text | Let's test your video and\naudio. Count out loud\nfrom one to three... | test_call_welcome |
| test_call_in_progress | You will see and hear yourself with a two second delay | test_call_in_progress |
| test_call_complete | If you have technical issues,\ncheck your settings or\ncontact your administrator | test_call_complete |
| direct_media_escalate | You are about to be transferred\ninto a multi-party conference | direct_media_escalate |
| direct_media_deescalate | You are about to be transferred\ninto a one-to-one call | direct_media_deescalate |
You can specify your own keys and text strings within the labels object and use them on any splash screen. For example, to specify a new label and use the associated text and an alternative graphic on the welcome screen:
"splash_screens": {
"labels": {
"my_label_key": "¡Hola!"
},
"screens": {
"welcome": {
"elements": [
{"type": "icon", "path": "icon_my_welcome_image.svg"},
{"type": "text", "label": "my_label_key"}
]
}
...If you want to use a theme where all of the strings are translated to a different language, you have the ability to change the wording of the text without modifying the layout itself, for example:
"splash_screens": {
"labels": {
"welcome": "Velkommen",
"connecting": "Kobler til",
...There is a small set of predefined variables that you can reference within your text strings:
| Variable name | Description and usage |
|---|---|
| {conference_id} | This variable is only supported on the virtual_reception_conference_id_entry screen, where it is normally used by the conference_id_entry label and it displays the number the user is entering into the Virtual Reception. |
| {conference_name} | Contains the name of the conference. This variable is used on the virtual_reception_connecting screen, where it is included in the virtual_reception_connecting label and it refers to the conference into which the user is being transferred. For example:
"labels": {"virtual_reception_connecting": "{conference_name}"}This variable can also be used in labels on the welcome, unused_screen and waiting_for_host screens. |
| {number_of_waiting_participants} | Used while a conference is in progress and contains the number of participants waiting to be let into a locked conference. It is normally used with the conference_locked_indicator_n_waiting_text setting in the themeconfig.json file (note that this is a setting and not a screen label). For example:
"conference_locked_indicator_n_waiting_text": "{number_of_waiting_participants} waiting for host" |
Splash screen elements (to control the size and position of text/graphics)

When customizing a splash screen you can define elements to control the appearance and position of images and text on that specific screen. The default screen layout and offsets are shown in this diagram (right).
If you define elements for a splash screen, whatever you specify will completely replace all of the default icon and text elements for that screen. For example, if you want to add a new line of text to a screen, your elements object for that screen must define the original (default) icon and text as well as your new text.
The following example shows the JSON structure for how you can define an icon and text type element for a splash screen (the welcome screen in this example). All width, height and offset positions are measured in pixels.
{
"theme_version": 2,
"splash_screens": {
"screens": {
"welcome": {
"elements": [
{
"type": "icon",
"path": "icon_welcome.svg",
"offset_y": 300,
...
},
{
"type": "text",
"label": "welcome",
"font_size": 66,
...
}
],
...The full set of keys that you can specify for each element type are described below.
Icon elements (for SVG files used on splash screens)
Icons are the SVG files that are overlaid onto a splash screen. They can be configured by the icon element, which controls the position and scale (size) of the SVG file, and which file to use.
To change the color of an SVG image, see Changing the color of the SVG image.
{
"type": "icon",
"path": "icon_virtual_reception_welcome.svg",
"width": 1920,
"height": 300,
"offset_y": 300,
"offset_x": 0
}| Key | Description |
|---|---|
| path | Name of the SVG file (where the filename matches the pattern "icon_[A-Za-z0-9_].svg"). This can be the name of a Base SVG file (where you can also optionally include a replacement file of the same name in the theme ZIP), or a new filename (where you must supply the associated SVG file of that name). |
width | Icon images are rendered proportionally scaled using the smallest value of width or height. The icon width defaults to 1920, which means that the icon size is normally controlled by the height. Width is normally specified only in a free-form layout when you want to restrict icon size based on width to ensure that there is no overflow on the x axis. The icon height is usually the attribute that controls the size of the icon. It defaults to 300px for most screens. If height is set to a larger value than width, then width controls the size of the icon. In vertical layouts, height is also used to calculate the y-axis coordinate of the element below it. Ultimately, the proportions of the image itself control how it is rendered, within a certain width or height constraint. Note that the icon is centered inside the bounding box; for example if you specify {"width": 1920, "height": 200} for a 1000x200 icon, it will display centered as expected, but if you then add, for example, offset_x: 500 the icon will get pushed to the right and cropped. |
| offset_x | The x-axis coordinate relative to the center in vertical layouts, and absolute in free_form layouts. It can be negative. |
| offset_y | The y-axis coordinate relative to the element above (or top edge) in vertical layouts, and absolute (from the top of the screen) in free_form layouts. It can be negative. |
You have full control over the positioning and style of a text string by using a text element. All measurements are in pixels. The default font for the in-conference display of participant names is Roboto (which cannot be changed), or if that is not available for the character set, Noto Sans.
{
"type": "text",
"label": "enter_conference_id",
"offset_y": 50,
"offset_x": 0,
"height": 200,
"width": 1920,
"color": "0xffffffff",
"font_size": 66,
"font": "Inter",
"letter_spacing": 0,
"line_spacing": -13,
"align": "center"
}| Key | Description |
|---|---|
| label | A reference to an item in the labels object, for example "enter_conference_id", to identify the actual text to display. |
| offset_x | The x-axis coordinate offset of the bounding box in vertical layouts, and the absolute coordinate of the bounding box in free_form layouts. |
| offset_y | The y-axis coordinate offset (from the top of the screen) of the bounding box in vertical layouts, and the absolute coordinate of the bounding box in free_form layouts. |
| width | Width of the bounding box. It usually defaults to 1920 in vertical layouts. |
| height | Height of the bounding box. |
| color | Color of the text. You can use either:
Default: 0xffffffff (white, fully opaque). You can specify a default color for all text elements by adding a text_color setting to the themeconfig.json file, for example adding "text_color": "0xff0000" would make all text elements red by default. |
| font_size | The font size in pixels. Default: 66px. |
| font | The font name. The supported fonts are: "Noto Sans", "Roboto", "Roboto Condensed", "GT Pressura", "GT Pressura Light", "Inter" and "Inter Medium". |
| letter_spacing | The spacing between letters. It can be negative. Default: 0. |
| line_spacing | The spacing between lines. It can be negative. Default: -13. |
| align | Alignment of text within the bounding box. Possible values: "center", "left", "right". Default: "center". |
The pin_digits element is a special element to render up to 20 icons (each 42x42 pixels by default) on 2 lines, and is only used for PIN entry on the pin_entry screen. For example (showing the default values):
{
"type": "pin_digits",
"path": "icon_pin_entry_digit.svg",
"digit_width": 42,
"digit_height": 42,
"digit_spacing": 10,
"offset_y": 50,
"offset_x": 0,
"height": 200,
"width": 1920,
"line_spacing": 25
}| Key | Description |
|---|---|
| path | Name of the PIN digit icon SVG file. |
| digit_width | The width of each individual PIN digit icon. |
| digit_height | The height of each individual PIN digit icon. |
| digit_spacing | The space between each PIN digit icon. |
| offset_x | The x-axis offset of the bounding box. |
| offset_y | The y-axis offset (from the top of the screen) of the bounding box. |
| height | Height of the bounding box. |
| width | Width of the bounding box. |
| line_spacing | Spacing between the lines of digits. There are always (up to) 10 digits per line, regardless of the size of the bounding box. You must ensure that the size of the bounding box is big enough to fit the digit icons (based on the maximum length of the PINs used in your deployment). |
Vertical and free form layouts
The splash screens support 2 types of layout: vertical (the default) and free form. Layouts are specified by the layout_type entry in the screen specification object.
For example, to specify a vertical layout for the error_invalid_license screen:
{
"splash_screens": {
"screens": {
"error_invalid_license": {
"layout_type": "vertical"
...Vertical layouts are centered layouts where the elements (icons and text) stack on top of each other top to bottom in the order they have been specified. The height and offset_y attributes determine the element's placement on the screen. All elements are centered by default and can be shifted left and right with the offset_x variable. For example, to include icon_welcome.svg on the welcome screen:
"splash_screens": {
"screens": {
"welcome": {
"layout_type": "vertical",
"elements": [
{"type": "icon", "path": "icon_welcome.svg", "height": 300, "offset_y": 400},
{"type": "text", "text": "welcome", "height": 200, "offset_y": 50}
...In this layout, the icon is centered on the screen, starting 400px from the top of the screen. The text element is placed 50px under the icon, placing it at y=750px (300px height + 400px offset of the icon + 50px offset of the text).
Free form layouts are, as the name implies, completely free form. This lets you design complex layouts, like the one used for the Test Call Service. In a free form layout, offset_x and offset_y are absolute coordinates on the screen and you are responsible for placing the elements correctly.
This example shows the layout of the test_call_complete screen (these are the actual values that are used by default):
{
"theme_version": 2,
"splash_screens": {
"screens": {
"test_call_complete": {
"layout_type": "free_form",
"background": {"path": "background_test_call.jpg"},
"elements": [
{
"type": "text",
"label": "test_call_complete",
"height": 300,
"offset_y": 361,
"offset_x": 308,
"align": "left",
"font_size": 50
},
{
"type": "icon",
"path": "icon_test_call_complete.svg",
"offset_x": 1259,
"offset_y": 305,
"height": 386,
"width": 380
},
{
"type": "icon",
"path": "icon_inactive_page.svg",
"offset_x": 872,
"offset_y": 985,
"width": 16,
"height": 16
},
{
"type": "icon",
"path": "icon_inactive_page.svg",
"offset_x": 952,
"offset_y": 985,
"width": 16,
"height": 16
},
{
"type": "icon",
"path": "icon_active_page.svg",
"offset_x": 1032,
"offset_y": 985,
"width": 16,
"height": 16
}
]
}
}
}
}Helper lines
To aid development, debugging and theme creation, you can display gridlines for a given splash screen by using the helper_lines object. Helper lines are added on top of the background and under the icons, text and other elements.
Example use of helper lines on the error_invalid_license screen:
{
"splash_screens": {
"screens": {
"error_invalid_license": {
"helper_lines": {
"horizontal": [300, 350, 432, 678],
"vertical": [660, 960, 1260]
}
...| Key | Description |
|---|---|
| horizontal | A list of coordinates (from the top of the screen) to put horizontal helper lines. |
| vertical | A list of coordinates to put vertical helper lines. |
Overlay SVG image files used on splash screens when joining a conference
When creating your own SVG image files for use on the splash screens, do not use tools such as Adobe Photoshop or Illustrator to convert JPG or PNG files into SVG format as they typically create complex files/paths that are resource-intensive to render, or in some cases may render incorrectly.
- Use a vector drawing program that uses SVG as its primary format, such as Inkscape.
- Do not create a single complex path — use multiple paths instead.
All of the overlay vector images in the Base theme are listed below. All of the images shown in the table below are white, except for icon_inactive_page.svg, and are shown here against a gray background. The table also lists any splash screens on which the overlay images are used by default.
| File name | Content in Base theme | Associated default splash screens |
|---|---|---|
| icon_active_page.svg | test_call_welcome | |
| icon_inactive_page.svg | test_call_welcome | |
| icon_pin_entry.svg | pin_welcome pin_entry | |
| icon_pin_entry_digit.svg | pin_entry | |
| icon_pin_invalid.svg | pin_invalid | |
| icon_reserved_slot.svg | reserved_slot | |
| icon_welcome.svg | pin_correct (also previously used on welcome screen) |
The following SVG image files are also included by default in the Base theme but they all contain blank/empty images. In version 36 and earlier they contained images and appeared on various splash screens. From version 37 these SVG files are still referenced by the nominated splash screens for backwards compatibility, but as they are blank by default they do not affect each screen's appearance (the screen only shows the associated background image and any text label). However, if you customize any of these files to include graphical content it will appear on the associated screen.
- icon_waiting_for_host.svg (referenced by the waiting_for_host screen)
- icon_virtual_reception_welcome.svg (referenced by the virtual_reception_welcome screen)
- icon_virtual_reception_connecting.svg (referenced by the virtual_reception_connecting screen)
- icon_virtual_reception_conference_id_invalid.svg (referenced by the virtual_reception_conference_id_invalid screen)
- icon_virtual_reception_conference_id_entry.svg (referenced by the virtual_reception_conference_id_entry screen)
- icon_timeout.svg (referenced by the timeout screen)
- icon_other_participants_audio_only.svg (referenced by the other_participants_audio_only screen)
- icon_error_insufficient_video_licenses.svg (referenced by the error_insufficient_video_licenses screen)
- icon_error.svg (referenced by the error_capacity_exceeded, error_insufficient_licenses and error_invalid_license screens)
- icon_is_in_lobby.svg (referenced by the inlobby screen)
- icon_connecting.svg (referenced by the connecting and inlobby_status_unknown screens)
- icon_streaming_screen.svg (referenced by the streaming_in_progress and stream_waiting screens)
If you want to reinstate the previous graphical images on the splash screens, the SVG icon files used in the previous versions of the default theme (with the original image content) are available for download at theme-svg-files.zip and can be included in a custom theme. Full information on the previous appearance and use of these files and splash screens is contained in our version 36 documentation.
Overlay SVG image files used by the Test Call Service
These overlay SVG image files are used only by the Test Call Service:
| File name | Content in Base theme | Associated default splash screens |
|---|---|---|
| icon_test_call_complete.svg | test_call_complete | |
| icon_test_call_welcome.svg | test_call_welcome |
Changing the color of the SVG image
The color in an SVG file is typically controlled by a fill property defined within the file itself. Most of the SVG images used in the Base Pexip theme are white (fill="#FFFFFF").
To change the color of an SVG image you can edit the SVG file in a simple text editor such as Notepad, and change the fill color as required. For example to change the color to red, you would specify fill="#ff0000".
Indicator graphics used within an ongoing conference
The following graphics may be used during a conference. The SVG indicators are rendered on top of a dark gray background (the color is 0x7f323232, where 7f is the alpha channel which makes the background slightly transparent). The gray background is not part of the actual SVG image itself and it cannot be customized. If you use your own customized SVG images, ensure that they look appropriate when displayed on sizes from 20x20px to 48x48px, and are recognizable when displayed as 12x12px for participants that use very low resolutions.
If you are using a theme to customize gateway calls only, then you only need to consider a subset of these images, as indicated in the table below.
These are the default graphics files that used during a conference:
| File name | Content in Base theme | Notes | Used in gateway calls |
|---|---|---|---|
| icon_no_presentation.svg | Used to indicate that there is currently no presentation stream. It is used by default on the no_presentation splash screen. | ||
| icon_no_video.svg | Shown when a video stream is not available. It is used by default on the no_main_video and no_incoming_video splash screens. It should look appropriate when displayed at sizes up to 400 x 400 pixels. |
| |
Various icon_notch57tp_<item>.svg files | <various> | These icon images are used to support the in-conference indicators, such as participant counts, audio participants, recording indicators and locked status that are shown at the top-center of the layout. We recommend that you do not customize these elements as we cannot guarantee compatibility with future versions of Pexip Infinity. | |
Shown next to the conference alias when using legacy Pexip apps, and as the contact avatar when using Skype for Business. When the image is used, the corners are cropped so that it can be displayed as a round image. It is a JPG image (RGB mode only) and should be 128 x 128 pixels. |
| ||
| no_powerpoint_live.jpg | ![]() | Used in Microsoft Teams interop calls to indicate that a Teams client is performing PowerPoint Live sharing, or is using any other non-supported content share sources, such as Excel or Whiteboard. | |
| raise_hand.png | ![]() | Used in the Teams-like layout to indicate that a participant in the Teams conference has raised their hand. This image only applies to Teams integrations, and it should not be customized. | |
| watermark_icon.png | Transparent image used for applying a watermark to the main speaker video in a conference. The default image is a white Pexip logo with 40% transparency and is shown here against a blue background. It is a PNG image and should be 200 pixels wide x 100 pixels high. See Video watermarking for more information. | ||
watermark_footer_icon.png | A watermark that is only used in the 1 + 33 layout (it appears at the bottom of the layout). It is the same size as the standard watermark_icon.png file, but it has inverted colors (so that it shows up on the white background of the layout). | ||
watermark_mute_icon.png | An overlay that is displayed to a participant when they have been administratively muted. It is shown under the conference indicators whenever the participant has been muted. It is a PNG image and should be 200 pixels wide x 100 pixels high. Note that:
|
| |
Video watermarking
Video watermarking overlays a small transparent image/logo onto the main speaker video during a conference. The logo watermarks are never added to calls placed via the Infinity Gateway, but the "Your mic has been muted" watermark icon can be overlaid on gateway calls. You can change the watermark images or disable watermarking completely.
The default logo watermark is a white "Pexip" logo
(shown here against a blue background) and is enabled by default.- The default "Your mic has been muted" watermark is
and is disabled by default.
When logo watermarking is enabled:
- The watermark_icon.png file is used as the watermark image.
- The top-left corner of the watermark is placed 56 pixels across and 40 pixels down from the top-left corner of the main speaker video, and the watermark area then extends 200 pixels across and 100 pixels down. These sizes are based on Full HD resolution — they will be smaller on lower resolutions.
- The size and position of the watermark area cannot be customized.
- The watermark is shown on the following splash screens: welcome, connecting, streaming_in_progress, stream_waiting, other_participants_audio_only, no_presentation, no_incoming_video, no_main_video.
When the "Your mic has been muted" watermark is enabled:
- The watermark_mute_icon.png file is used as the watermark image.
- It is shown under the conference indicators whenever the participant has been muted.
- The size and position of the watermark area cannot be customized.
Enabling or disabling watermarking
There are 2 settings in the themeconfig.json file that control whether watermarking is enabled or not:
- disable_watermark_icon: controls logo watermarking. Set it to false to enable watermarking, and to true to disable watermarking. By default, disable_watermark_icon is set to false.
- disable_watermark_mute_icon: controls the "Your mic has been muted" watermark. Set it to false to enable watermarking, and to true to disable watermarking. By default, disable_watermark_mute_icon is set to true.
Changing the logo watermark image
When creating your own logo watermark file (watermark_icon.png) for inclusion in a theme:
- The file must be PNG format and may include a transparent image (if it is not transparent the overlaid content will be fully opaque).
- We recommend that the watermark image is white with 40% transparency.
- The image should be 200 pixels wide x 100 pixels high. Larger images are automatically scaled to fit to the top left corner of the watermark area (and thus may lose some definition).
- There is an additional watermark file — watermark_footer_icon.png — which is used only on the 1 + 33 layout. It is the same size as the standard watermark_icon.png file, but it has inverted colors (so that it shows up on the white background of the layout).
Changing the "Your mic has been muted" watermark image
When creating your own "Your mic has been muted" watermark file (watermark_mute_icon.png) for inclusion in a theme:
- The file must be PNG format and may include a transparent image.
- The image should be a maximum of 200 pixels wide x 100 pixels high.
It is not always appropriate in all call scenarios to state that the user can unmute themself in this way, such as when the user has dialed in over WebRTC, or for Guest participants in a VMR where all Guests have been muted.
Customizing the unused screen in a dual-screen system
The second screen in a dual-screen system displays a black screen by default if it is not being used to display conference content.
You can brand this second screen to display a customized image or text by configuring the unused_screen splash screen element.
The unused_screen splash screen element is configured by specifying a splash_screens object within your themeconfig.json file.
For example, you could create your own overlay svg file (icon_unused_screen.svg) and a background image file (background_unused_screen.jpg) and then define them as follows:
"splash_screens": {
"screens": {
"unused_screen": {
"layout_type": "vertical",
"elements": [
{
"type": "icon",
"path": "icon_unused_screen.svg"
}
],
"background": {"path": "background_unused_screen.jpg"}
}
}
}
You can also use the {conference_name} variable within any text labels, for example:
"splash_screens": {
"labels": {
"unused_screen": "{conference_name}"
},
"screens": {
"unused_screen": {
"layout_type": "vertical",
"background": {"path": "background_unused_screen.jpg"},
"elements": [ {"type": "text", "label": "unused_screen"} ]
}
}
}Content classifications

When content classifications are configured in a theme, the specified classification text is overlaid (similar to a watermark) onto the video layout and splash screens during a conference (Virtual Meeting Rooms, Virtual Auditoriums, and the calling party in Infinity Gateway calls). It is positioned above any in-conference indicators, and is displayed in dark text on a light background by default.
- Classification indicators are text only.
- They are not included in the base theme. You must create and upload your own theme that includes your classification text strings.
- The colors can be customized, but you cannot configure the position, font or size of the message.
Configuring the classification messages
To configure your content classification strings you must add a classification object to your themeconfig.json file, for example:
"classification": {
"levels": {
"0": "Unclassified",
"1": "Official",
"2": "Official Sensitive",
"3": "RESTRICTED",
"4": {"text": "Confidential", "color": "0xff000000", "bgcolor": "0xffffffff"},
"5": "Secret",
"6": "Top Secret"
},
"default": 3
}- The level keys ("0", "1" etc.) must be numeric (but represented as strings). There's no limit to the number of levels, but the keys must be unique. The values must be strings, and can be set to display any message of your choice.
You can optionally specify colors for the text and background for each classification level. To do this, use the extended form:
"0": {"text": "classification level", "color": "0xff000000", "bgcolor": "0xffffffff"}
Both color settings are optional. You can use either RGB hexadecimal notation (in the format 0xnnnnnn) or ARGB hexadecimal notation (0xnnnnnnnn).
- The default level is specified explicitly, as shown in the example above, and its numeric value must be a valid key in the levels map.
- Themes without this additional configuration do not show any classification messages.
Dynamically changing the classification message
When a conference is in progress, and its theme contains a classification object, the default level message is automatically displayed.
To dynamically display a different message i.e. change the classification level, you must use the Pexip client API. A meeting Host must POST a JSON object to:
/api/client/v2/conferences/<conference>/set_classification_level
where the JSON object is as follows:
{"level": 4}
and where 4 — or the level of your choice — is a valid level key from the theme.
Hosts can also use the client API to obtain the set of available levels and the currently active level by sending a GET request to:
/api/client/v2/conferences/<conference>/get_classification_level
This returns a JSON document in the usual way, for example:
{
"status": "success",
"result": {
"levels": {
"0": "Unclassified",
"1": "Official",
"2": "Official Sensitive",
"3": "RESTRICTED",
"4": "Confidential",
"5": "Secret",
"6": "Top Secret"
},
"current": 1
}
}See Pexip client REST API for full details on using the client API.
Custom layouts
You can design your own layouts and use them in the same way as the standard layouts and example custom layouts that are shipped by default.
Each layout is specified through a JSON file that must be included in your theme package.
A customlayouts license is required to upload your own custom layout files.
By using this feature, Pexip may reserve its right to waive at least some of the obligations stated in paragraph 9 of your Service Provider Agreement related to this feature.
Designing the layout
The layout is designed via a grid of up to 10x10 cells. Within the grid you define up to 26 slots, which are used to display video participants or a presentation stream. A slot can occupy multiple cells i.e. the number of cells in the slot controls the size of the participant/presentation stream within that slot. The NxN grid and each slot must be a square dimension i.e. the same number of vertical and horizontal cells, to cater for a 16:9 aspect ratio.

The example image above shows a grid size of 4x4 (thus with 16 grid cells). This layout has 2 slots for video/presentation streams that are defined on the 4x4 grid, where 4 grid cells are used to define a single slot "1" and similarly 4 grid cells for slot "2". The 4 grid cells at the top and the 4 cells at the bottom are unused.
The layout must follow these rules:
- Slots cannot overlap each other.
- The maximum number of slots (i.e. video participants plus a presentation stream) that can be defined is 26.
- Any grid cells that are not used as slots will just be empty space in the layout (and display the background color).
- The grid size can be a maximum of 10x10.
- The grid size must be a square dimension, i.e. number of rows = number of columns.
Using the layout
After loading a layout as part of a theme, you can use them in the same way as the standard layouts that are shipped by default. Note that:
- The VMR (or the relevant conference service / gateway call) must have access to the theme that contains the custom layout. The layouts included in themes follow the standard theme inheritance rules.
- You refer to the custom layout via its specified name in the JSON file.
- You may want to consider adding the custom layout name to the dtmf_allowed_layouts list in the associated themeconfig.json file to enable DTMF cycling for that layout.
- You do not have to import or specify any related SVG file for the custom layout. The system generates the appropriate SVG file automatically and provides it to the web app for use on the tab.
Note that the base theme contains three example custom layouts (one_main_twelve_around, two_mains_eight_around and one_main_nine_around).
Layout designer tool
You can use our layout designer tool to create and maintain your own custom layouts, or configure them manually as described below. You can use the tool to:
- Load in existing layout files to edit and view layouts.
- Validate a layout file.
- Design new layouts from scratch, with visual validation.
- Export the designed layouts into a JSON file, for inclusion in your theme package.
- Export an SVG image of the layout (although this is not required by Pexip Infinity or the Pexip web app).
Ensure that you select the appropriate Pexip Infinity version when using the layout designer.
Manually creating a custom layout file
Each custom layout file must be named with a prefix of "custom_layout_" and be in a .json format, for example custom_layout_mylayout.json.
The JSON file has the following primary fields:
| Field name | Description |
|---|---|
| name | This is the name of the layout and is what is used to refer to the layout throughout the system, in API calls and in the Administrator interface. It is a string which is limited to a maximum of 50 alphanumeric and "_" characters and no spaces. |
| modes | This is a list of dictionaries that define the basic layout for displaying video participants. It must contain at least one valid mode. See below for more details. |
| pres_modes | This is an optional list of dictionaries that define the layout when a presentation is in progress and the layout is including the presentation content in the layout mix. See below for more details. |
| dual_screen_enabled | This is an optional boolean (false by default) that controls whether multiscreen is supported.
The layouts build out by filling one slot each per screen, alternating until each screen is full. |
| dual_screen_modes | Each mode pair is defined as per this schema: {
"primary_modes": list[modes],
"secondary_modes": list[modes]
}where modes have the same schema as the normal layout modes. Each screen can have its own layout configuration applied, up to a total of 26 participants (slots) across all screens. See the one_main_nine_around custom schema below for example usage. |
| remove_self | This is an optional boolean that controls whether "self view" is part of the layout mix. It is true by default (i.e. self view is removed from the mix, as per all of the standard layouts). |
| background_color | This is an optional string that defines the background color for the layout in RGB hexadecimal notation in the format #nnnnnn, for example: "background_color": "#fffff0" |
| watermark_position | Specifies where to place the watermark. Options are: "top-left", "top-right", "bottom-left", or "bottom-right". For example: "watermark_position": "top-right" |
| notch_color | Specifies either a "dark" (the default) or "light" mode choice for the information bar (notch) at the top-center of the layout. For example: "notch_color": "light" |
This is the basic schema:
{
"name": string,
"modes": [<basic mode>],
"pres_modes": [<presentation mode>],
"dual_screen_enabled": bool,
"dual_screen_modes":
{
"primary_modes": list[modes],
"secondary_modes": list[modes]
},
"remove_self": bool,
"background_color": string,
"watermark_position": string,
"notch_color": string
}Layout modes (basic and presentation)
A layout contains one or more modes. You must define one set of modes ("modes") for the basic layout (where there are only other video participants), and you can optionally define a set of modes for when a presentation is in progress ("pres_modes") and you want to include the presentation in the layout mix.
Each mode is defined for a minimum and maximum number of participants, and is used to determine how the layout is built as video participants are included or removed from the video mix, or when presentation content is received. For example, the basic Adaptive Composition layout has 4 modes: full screen with 1 slot (used when there is just 1 active video participant), side by side 2 slots (2 participants), 2+3 slots (3-5 participants), and finally 2+3+7 slots (6-12 participants).
When defining presentation modes, the presentation stream is always displayed as the 1st participant, and it then follows the same rules as a basic layout.
A mode dictionary has the following fields:
| Field name | Description | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| grid_size | Specifies the size (number of cells) of the grid. It is a tuple of integer values where both integers must be the same and a maximum of 10x10. | ||||||||||
| constraints | A dictionary containing min_slots and max_slots, where min_slots and max_slots are in the range 1-26 inclusive and min_slots <= max_slots. | ||||||||||
| slots | A list of slot dictionaries and must have the same number of slots as max_slots. The slots fill the layout in the order they are defined in the list. Each slot contains the following fields (mandatory unless stated otherwise):
| ||||||||||
| slot_padding | Optional field. This is a float value between 0 and 0.1 determining the spacing between slots. Default=0.001. |
This is the mode dictionary schema:
{
"grid_size": [int, int],
"constraints": {
"min_slots": int,
"max_slots": int
},
"slots": [
{
"start_x": int,
"start_y": int,
"width": int,
"is_speaker_slot": bool,
"is_presentation_slot": bool
}
],
"slot_padding": float
}Examples and default custom layouts
The base theme includes three custom layouts by default which are provided below as examples to show how to create the JSON layout file.
Large main speaker and up to 12 other participants
File name: custom_layout_one_main_twelve_around.json
Layout name: one_main_twelve_around
This layout has 2 modes: the first mode is for when there is 1 participant to display, the second mode is for 2-13 participants. It has dual screen enabled. (The image below is from our layout designer tool.)

It is configured via the following JSON file:
{
"name": "one_main_twelve_around",
"modes": [
{
"grid_size": [1, 1],
"slots": [
{
"start_x": 0,
"start_y": 0,
"width": 1
}
],
"constraints": {
"min_slots": 1,
"max_slots": 1
}
},
{
"grid_size": [4, 4],
"slots": [
{
"start_x": 1,
"start_y": 1,
"width": 2
},
{
"start_x": 0,
"start_y": 0,
"width": 1
},
{
"start_x": 1,
"start_y": 0,
"width": 1
},
{
"start_x": 2,
"start_y": 0,
"width": 1
},
{
"start_x": 3,
"start_y": 0,
"width": 1
},
{
"start_x": 0,
"start_y": 1,
"width": 1
},
{
"start_x": 3,
"start_y": 1,
"width": 1
},
{
"start_x": 0,
"start_y": 2,
"width": 1
},
{
"start_x": 3,
"start_y": 2,
"width": 1
},
{
"start_x": 0,
"start_y": 3,
"width": 1
},
{
"start_x": 1,
"start_y": 3,
"width": 1
},
{
"start_x": 2,
"start_y": 3,
"width": 1
},
{
"start_x": 3,
"start_y": 3,
"width": 1
}
],
"constraints": {
"min_slots": 2,
"max_slots": 13
}
}
],
"dual_screen_enabled": true
}Two main speakers and up to 8 other participants
File name: custom_layout_two_mains_eight_around.json
Layout name: two_mains_eight_around
This layout has 3 modes: the first mode is for when there is 1 participant to display, the second mode is for 2 participants, and the third mode is for 3-10 participants. It has dual screen enabled. (The image below is from our layout designer tool.)

It is configured via the following JSON file:
{
"name": "two_mains_eight_around",
"modes": [
{
"grid_size": [1, 1],
"slots": [
{
"start_x": 0,
"start_y": 0,
"width": 1
}
],
"constraints": {
"min_slots": 1,
"max_slots": 1
}
},
{
"grid_size": [4, 4],
"slots": [
{
"start_x": 0,
"start_y": 1,
"width": 2,
"is_speaker_slot": true
},
{
"start_x": 2,
"start_y": 1,
"width": 2,
"is_speaker_slot": true
}
],
"constraints": {
"min_slots": 2,
"max_slots": 2
}
},
{
"grid_size": [4, 4],
"slots": [
{
"start_x": 0,
"start_y": 1,
"width": 2,
"is_speaker_slot": true
},
{
"start_x": 2,
"start_y": 1,
"width": 2,
"is_speaker_slot": true
},
{
"start_x": 0,
"start_y": 0,
"width": 1
},
{
"start_x": 1,
"start_y": 0,
"width": 1
},
{
"start_x": 2,
"start_y": 0,
"width": 1
},
{
"start_x": 3,
"start_y": 0,
"width": 1
},
{
"start_x": 0,
"start_y": 3,
"width": 1
},
{
"start_x": 1,
"start_y": 3,
"width": 1
},
{
"start_x": 2,
"start_y": 3,
"width": 1
},
{
"start_x": 3,
"start_y": 3,
"width": 1
}
],
"constraints": {
"min_slots": 3,
"max_slots": 10
}
}
],
"dual_screen_enabled": true
}One main speaker and up to 9 other participants, with presentation in mix support and dual screen modes
File name: custom_layout_one_main_nine_around.json
Layout name: one_main_nine_around
This layout supports showing the presentation stream as part of the layout mix. It has:
- 4 basic modes: the first mode is for when there is 1 participant to display, the second mode is for 2-5 participants, the third mode is for 6 participants, and the fourth mode is for 7-10 participants.
- 4 presentation modes: the first mode is for when there is only one video stream to display (just the presentation stream, and no participant video streams), the second mode is for 2-5 video streams (presentation and participants), the third mode is for 6 streams, and the fourth mode is for 7-10 streams.
- It has dual screen enabled and has modes defined such that primary screen is the same as one_main_nine_around, whereas secondary screen is one_main_nine_around but flipped.
(The image below is from our layout designer tool.)

It is configured via the following JSON file:
{
"name": "one_main_nine_around",
"modes": [
{
"grid_size": [1, 1],
"slot_padding": 0.001,
"slots": [
{
"start_x": 0,
"start_y": 0,
"width": 1
}
],
"constraints": {
"min_slots": 1,
"max_slots": 1
}
},
{
"grid_size": [10, 10],
"slot_padding": 0.001,
"slots": [
{
"start_x": 2,
"start_y": 1,
"width": 8
},
{
"start_x": 0,
"start_y": 1,
"width": 2
},
{
"start_x": 0,
"start_y": 3,
"width": 2
},
{
"start_x": 0,
"start_y": 5,
"width": 2
},
{
"start_x": 0,
"start_y": 7,
"width": 2
}
],
"constraints": {
"min_slots": 2,
"max_slots": 5
}
},
{
"grid_size": [10, 10],
"slot_padding": 0.001,
"slots": [
{
"start_x": 2,
"start_y": 1,
"width": 8
},
{
"start_x": 0,
"start_y": 0,
"width": 2
},
{
"start_x": 0,
"start_y": 2,
"width": 2
},
{
"start_x": 0,
"start_y": 4,
"width": 2
},
{
"start_x": 0,
"start_y": 6,
"width": 2
},
{
"start_x": 0,
"start_y": 8,
"width": 2
}
],
"constraints": {
"min_slots": 6,
"max_slots": 6
}
},
{
"grid_size": [5, 5],
"slot_padding": 0.001,
"slots": [
{
"start_x": 1,
"start_y": 0,
"width": 4
},
{
"start_x": 0,
"start_y": 0,
"width": 1
},
{
"start_x": 0,
"start_y": 1,
"width": 1
},
{
"start_x": 0,
"start_y": 2,
"width": 1
},
{
"start_x": 0,
"start_y": 3,
"width": 1
},
{
"start_x": 0,
"start_y": 4,
"width": 1
},
{
"start_x": 1,
"start_y": 4,
"width": 1
},
{
"start_x": 2,
"start_y": 4,
"width": 1
},
{
"start_x": 3,
"start_y": 4,
"width": 1
},
{
"start_x": 4,
"start_y": 4,
"width": 1
}
],
"constraints": {
"min_slots": 7,
"max_slots": 10
}
}
],
"pres_modes": [
{
"grid_size": [1, 1],
"slot_padding": 0.001,
"slots": [
{
"start_x": 0,
"start_y": 0,
"width": 1,
"is_presentation_slot": true
}
],
"constraints": {
"min_slots": 1,
"max_slots": 1
}
},
{
"grid_size": [10, 10],
"slot_padding": 0.001,
"slots": [
{
"start_x": 2,
"start_y": 1,
"width": 8,
"is_presentation_slot": true
},
{
"start_x": 0,
"start_y": 1,
"width": 2
},
{
"start_x": 0,
"start_y": 3,
"width": 2
},
{
"start_x": 0,
"start_y": 5,
"width": 2
},
{
"start_x": 0,
"start_y": 7,
"width": 2
}
],
"constraints": {
"min_slots": 2,
"max_slots": 5
}
},
{
"grid_size": [10, 10],
"slot_padding": 0.001,
"slots": [
{
"start_x": 2,
"start_y": 1,
"width": 8,
"is_presentation_slot": true
},
{
"start_x": 0,
"start_y": 0,
"width": 2
},
{
"start_x": 0,
"start_y": 2,
"width": 2
},
{
"start_x": 0,
"start_y": 4,
"width": 2
},
{
"start_x": 0,
"start_y": 6,
"width": 2
},
{
"start_x": 0,
"start_y": 8,
"width": 2
}
],
"constraints": {
"min_slots": 6,
"max_slots": 6
}
},
{
"grid_size": [5, 5],
"slot_padding": 0.001,
"slots": [
{
"start_x": 1,
"start_y": 0,
"width": 4,
"is_presentation_slot": true
},
{
"start_x": 0,
"start_y": 0,
"width": 1
},
{
"start_x": 0,
"start_y": 1,
"width": 1
},
{
"start_x": 0,
"start_y": 2,
"width": 1
},
{
"start_x": 0,
"start_y": 3,
"width": 1
},
{
"start_x": 0,
"start_y": 4,
"width": 1
},
{
"start_x": 1,
"start_y": 4,
"width": 1
},
{
"start_x": 2,
"start_y": 4,
"width": 1
},
{
"start_x": 3,
"start_y": 4,
"width": 1
},
{
"start_x": 4,
"start_y": 4,
"width": 1
}
],
"constraints": {
"min_slots": 7,
"max_slots": 10
}
}
],
"dual_screen_enabled": true,
"dual_screen_modes": {
"primary_modes": [
{
"grid_size": [1, 1],
"slot_padding": 0.001,
"slots": [
{
"start_x": 0,
"start_y": 0,
"width": 1
}
],
"constraints": {
"min_slots": 1,
"max_slots": 1
}
},
{
"grid_size": [10, 10],
"slot_padding": 0.001,
"slots": [
{
"start_x": 2,
"start_y": 1,
"width": 8
},
{
"start_x": 0,
"start_y": 1,
"width": 2
},
{
"start_x": 0,
"start_y": 3,
"width": 2
},
{
"start_x": 0,
"start_y": 5,
"width": 2
},
{
"start_x": 0,
"start_y": 7,
"width": 2
}
],
"constraints": {
"min_slots": 2,
"max_slots": 5
}
},
{
"grid_size": [10, 10],
"slot_padding": 0.001,
"slots": [
{
"start_x": 2,
"start_y": 1,
"width": 8
},
{
"start_x": 0,
"start_y": 0,
"width": 2
},
{
"start_x": 0,
"start_y": 2,
"width": 2
},
{
"start_x": 0,
"start_y": 4,
"width": 2
},
{
"start_x": 0,
"start_y": 6,
"width": 2
},
{
"start_x": 0,
"start_y": 8,
"width": 2
}
],
"constraints": {
"min_slots": 6,
"max_slots": 6
}
},
{
"grid_size": [5, 5],
"slot_padding": 0.001,
"slots": [
{
"start_x": 1,
"start_y": 0,
"width": 4
},
{
"start_x": 0,
"start_y": 0,
"width": 1
},
{
"start_x": 0,
"start_y": 1,
"width": 1
},
{
"start_x": 0,
"start_y": 2,
"width": 1
},
{
"start_x": 0,
"start_y": 3,
"width": 1
},
{
"start_x": 0,
"start_y": 4,
"width": 1
},
{
"start_x": 1,
"start_y": 4,
"width": 1
},
{
"start_x": 2,
"start_y": 4,
"width": 1
},
{
"start_x": 3,
"start_y": 4,
"width": 1
},
{
"start_x": 4,
"start_y": 4,
"width": 1
}
],
"constraints": {
"min_slots": 7,
"max_slots": 10
}
}
],
"secondary_modes": [
{
"grid_size": [1, 1],
"slot_padding": 0.001,
"slots": [
{
"start_x": 0,
"start_y": 0,
"width": 1
}
],
"constraints": {
"min_slots": 1,
"max_slots": 1
}
},
{
"grid_size": [10, 10],
"slot_padding": 0.001,
"slots": [
{
"start_x": 0,
"start_y": 1,
"width": 8
},
{
"start_x": 8,
"start_y": 1,
"width": 2
},
{
"start_x": 8,
"start_y": 3,
"width": 2
},
{
"start_x": 8,
"start_y": 5,
"width": 2
},
{
"start_x": 8,
"start_y": 7,
"width": 2
}
],
"constraints": {
"min_slots": 2,
"max_slots": 5
}
},
{
"grid_size": [10, 10],
"slot_padding": 0.001,
"slots": [
{
"start_x": 0,
"start_y": 1,
"width": 8
},
{
"start_x": 8,
"start_y": 0,
"width": 2
},
{
"start_x": 8,
"start_y": 2,
"width": 2
},
{
"start_x": 8,
"start_y": 4,
"width": 2
},
{
"start_x": 8,
"start_y": 6,
"width": 2
},
{
"start_x": 8,
"start_y": 8,
"width": 2
}
],
"constraints": {
"min_slots": 6,
"max_slots": 6
}
},
{
"grid_size": [5, 5],
"slot_padding": 0.001,
"slots": [
{
"start_x": 0,
"start_y": 0,
"width": 4
},
{
"start_x": 4,
"start_y": 0,
"width": 1
},
{
"start_x": 4,
"start_y": 1,
"width": 1
},
{
"start_x": 4,
"start_y": 2,
"width": 1
},
{
"start_x": 4,
"start_y": 3,
"width": 1
},
{
"start_x": 4,
"start_y": 4,
"width": 1
},
{
"start_x": 3,
"start_y": 4,
"width": 1
},
{
"start_x": 2,
"start_y": 4,
"width": 1
},
{
"start_x": 1,
"start_y": 4,
"width": 1
},
{
"start_x": 0,
"start_y": 4,
"width": 1
}
],
"constraints": {
"min_slots": 7,
"max_slots": 10
}
}
]
},
"watermark_position": "top-right"
}Themes used by Call Routing Rules (gateway calls)
You can assign a theme to a Call Routing Rule. Only a subset of the theme's image files are used when they are applied to an Infinity Gateway call. Thus, you only need to customize a subset of the files for any themes that are only assigned to one or more Call Routing Rules.
Also, other than for Google Meet and Microsoft Teams integration scenarios, the audio files are not used in themes assigned to Call Routing Rules.

