Portal Configuration
Configuration options for the Nomad Media Content Portal
Sample configuration in JSON format
The following example shows a complete site-specific portal config. Fields that match the system defaults can be omitted — only values that differ from the defaults need to be provided.
{
"siteName": "Demo 3",
"logoImageUrl": "https://demo3.demos.media/config/19153421-e5f8-405c-8ed0-668e679c3c20/logo.svg",
"googleTagManager": "GTM-P6TZFLP",
"rootFolderId": "526a02d5-6539-46e5-ac6d-f3355b56a3aa",
"lookupsUrl": "https://demo3.demos.media/config/19153421-e5f8-405c-8ed0-668e679c3c20/lookups.json",
"contentDefinitionId": "3ff29f61-bd0b-4c17-b855-49db5a292aeb",
"showFolders": true,
"allowAnnotations": true,
"showTranscripts": true,
"favoriteUUID": "fa92d220-b494-4e63-a3d7-9b1dda9902b3",
"showFoldersInSearchResults": true,
"propertyPaneHeader": "mediaTypeDisplay",
"allowDownload": [
{ "image": true },
{ "video": true },
{ "audio": true },
{ "document": true },
{ "text": true }
],
"players": [
{ "format": "hls", "player": "bitmovin" },
{ "format": "dash", "player": "bitmovin" },
{ "format": "progressive", "player": "bitmovin" }
],
"assetProperties": [
{ "title": "Content Type", "property": "contentType", "order": 10, "type": "string" },
{ "title": "Asset ID", "property": "assetId", "order": 20, "type": "string" },
{ "title": "Size", "property": "contentLengthDisplay", "order": 30, "type": "string" },
{ "title": "Date", "property": "createdDate", "order": 40, "type": "dateTime" },
{ "title": "Language", "property": "language.translatedTitle", "order": 50, "type": "string" },
{ "title": "Duration", "property": "videoDuration", "order": 60, "type": "string" },
{ "title": "Video Height", "property": "videoHeight", "order": 70, "type": "number" },
{ "title": "Video Width", "property": "videoWidth", "order": 80, "type": "number" },
{ "title": "Video Format", "property": "videoFormat", "order": 90, "type": "text" },
{ "title": "Video Codec", "property": "videoCodec", "order": 100, "type": "text" },
{ "title": "Video Codec ID", "property": "videoCodecId", "order": 110, "type": "text" },
{ "title": "Audio Format", "property": "audioFormat", "order": 120, "type": "text" },
{ "title": "Audio Channels", "property": "audioChannels", "order": 130, "type": "number" },
{ "title": "Audio Duration", "property": "audioDuration", "order": 140, "type": "text" },
{ "title": "Full Caption", "property": "textCaptions.verbose", "order": 150, "type": "textCaption" },
{ "title": "Concise Caption","property": "textCaptions.concise", "order": 160, "type": "textCaption" }
],
"userRegistrationInstructionsTitle": "Registration Information",
"userRegistrationInstructions": "<div>Thank you for your interest in becoming a Demo 3 user. Please complete the information on the next screen and your subscription request will be submitted to the Demo 3 administration team.</div><br/><div>Your personal subscription information will only be used for the purpose of administration and for contacting you, if this becomes necessary. It will not be shared with others outside the Demo 3 management team.</div><br/><div>Please allow for at least 24 hours for the subscription approval process.</div>",
"userAttributes": [
{ "title": "First Name", "property": "firstName", "order": 1, "type": "string", "isRequired": true, "width": "half" },
{ "title": "Last Name", "property": "lastName", "order": 2, "type": "string", "isRequired": true, "width": "half" },
{ "title": "Employment Organization", "property": "organization", "order": 3, "type": "string", "isRequired": true },
{ "title": "Email", "property": "email", "order": 4, "type": "string", "validator": "email", "isRequired": true, "newRecordOnly": true, "width": "half", "forceLinebreak": true },
{ "title": "Country", "property": "country", "order": 5, "type": "lookup", "lookup": "country", "isRequired": true, "width": "half", "defaultLookupId": "cee90a86-ea42-4723-801b-568851296481" },
{ "title": "Address", "property": "address", "order": 6, "type": "string", "width": "full" },
{ "title": "Address2", "property": "address2", "order": 7, "type": "string", "width": "full" },
{ "title": "City", "property": "city", "order": 8, "type": "string", "width": "half" },
{ "title": "State", "property": "state", "order": 9, "type": "state", "lookup": "state", "lookupProperty": "stateId", "width": "half", "parentLookup": "country", "lookupParentId": "cee90a86-ea42-4723-801b-568851296481" },
{ "title": "Zip/Postal Code", "property": "postalCode", "order": 10, "type": "string", "width": "quarter", "forceLinebreak": true },
{ "title": "Phone (with country code)", "property": "phone", "order": 11, "type": "string", "width": "half" },
{ "title": "Phone Extension", "property": "phoneExt", "order": 12, "type": "string", "width": "quarter" },
{ "title": "Password", "property": "password", "order": 13, "type": "string", "description": "Password must be at least 12 characters have at least 1 upper case, 1 lower case, 1 number and one special character from !@#$%&*()", "validator": "password", "newRecordOnly": true, "width": "half" },
{ "title": "Password (Again)", "property": "password2", "order": 14, "type": "string", "validator": "passwordVerification", "newRecordOnly": true, "width": "half" }
],
"annotationAttributes": [
{ "title": "First Keyword", "property": "firstKeyword", "order": 1, "listOrder": 1, "type": "string", "isRequired": true, "width": "half" },
{ "title": "Second Keyword", "property": "secondKeyword", "order": 2, "listOrder": 2, "type": "string", "isRequired": true, "width": "half" },
{ "title": "Description", "property": "description", "order": 3, "listOrder": 3, "type": "string", "isRequired": true }
],
"authProviders": [
{ "name": "nomad", "priority": 1, "visible": true, "logoUrl": "assets/img/vendor/sign-in-nomad.png", "title": "Nomad" }
],
"loginDisabledMessage": "Your email account has been verified. We are in the process of verifying your user information.<br/>You will receive an email verification when your account has been activated."
}Configuration Documentation
Scalar properties
These fields control general portal behaviour. Where a default value is shown, the field can be omitted from the site config unless the value needs to change.
| Property | Type | Default | Description |
|---|---|---|---|
siteName | string | — | Display name of the portal, shown in the page title and header. |
logoImageUrl | string | — | URL to the site logo image shown in the top navigation bar. |
googleTagManager | string | — | Google Tag Manager container ID (e.g. GTM-XXXXXXX). Omit to disable GTM. |
rootFolderId | string | Zero-asset UUID | ID of the root folder to display in the asset browser. Falls back to the zero-asset UUID when not set. |
lookupsUrl | string | — | URL to the JSON file containing lookup values (countries, states, custom dropdowns). |
contentDefinitionId | string | 3ff29f61-… | Content definition ID used for standard assets. |
collectionContentDefinitionId | string | 20352932-… | Content definition ID used for collection assets. |
tagContentDefinitionId | string | c806783c-… | Content definition ID used for tag assets. |
application | string | Content Portal | Internal application name identifier. |
applicationId | string | fb398b44-… | Internal application UUID. |
showTags | boolean | true | Show the tags panel and tag-related UI. |
allowEditTags | boolean | true | Allow users to add and remove tags on assets. |
showFolders | boolean | true | Show the folder tree panel in the asset browser. |
allowAnnotations | boolean | true | Enable the annotations feature (required for the Annotations property panel). |
showTranscripts | boolean | true | Enable the transcript panel for video and audio assets. |
favoriteUUID | string | fa92d220-… | UUID of the Favorites collection. |
showFoldersInSearchResults | boolean | true | Include folders in search result listings. |
enableLlmSearch | boolean | false | Enable LLM-powered semantic / clip search. Also gates the Clip Search property panel. |
showLiveStreams | boolean | true | Show live streams in the asset browser. |
propertyPaneHeader | string | mediaTypeDisplay | Field used as the header in the properties panel. |
bitmovinLicenseKey | string | — | Bitmovin player license key. Required when using the Bitmovin player. |
userRegistrationInstructionsTitle | string | Registration Information | Title shown above the user registration instructions. |
userRegistrationInstructions | string | Default Nomad Media text | HTML content shown at the top of the user registration form. |
loginDisabledMessage | string | Default activation pending text | HTML message shown to users whose account has not yet been activated. |
Array properties and additive merging
The following config arrays are merged additively with system defaults. The site config does not need to redeclare all entries — only the entries that differ from the defaults.
| Array | Merged by key | Description |
|---|---|---|
assetProperties | property | Metadata fields shown in the asset Properties panel. |
userAttributes | property | Fields on the user registration and profile form. |
annotationAttributes | property | Fields on the annotation creation form. |
authProviders | name | Authentication providers available on the login screen. |
players | format | Video player engine assigned to each stream format. |
Merge behaviour: For each array, site entries are matched to defaults by the listed key. When a match is found the site entry is shallow-merged on top of the default, so only the fields provided in the site config are overridden. Entries in the site config whose key does not exist in the defaults are appended.
Disabling default array entries
Any entry in a merged array can be suppressed by setting "disabled": true on the matching item in the site config. The entry is excluded from the final config after merging.
{
"assetProperties": [
{ "property": "textCaptions.verbose", "disabled": true },
{ "property": "textCaptions.concise", "disabled": true }
],
"authProviders": [
{ "name": "nomad", "disabled": true }
]
}assetProperties
Defines the metadata rows displayed in the asset Properties panel. All entries below are included by default and do not need to be repeated in the site config unless a value needs to change.
Default title | property | type | order |
|---|---|---|---|
| Content Type | contentType | string | 10 |
| Asset ID | assetId | string | 20 |
| Size | contentLengthDisplay | string | 30 |
| Date | createdDate | dateTime | 40 |
| Language | language.translatedTitle | string | 50 |
| Duration | videoDuration | string | 60 |
| Video Height | videoHeight | number | 70 |
| Video Width | videoWidth | number | 80 |
| Video Format | videoFormat | text | 90 |
| Video Codec | videoCodec | text | 100 |
| Video Codec ID | videoCodecId | text | 110 |
| Audio Format | audioFormat | text | 120 |
| Audio Channels | audioChannels | number | 130 |
| Audio Duration | audioDuration | text | 140 |
| Full Caption | textCaptions.verbose | textCaption | 150 |
| Concise Caption | textCaptions.concise | textCaption | 160 |
assetProperties entry schema
| Field | Type | Required | Description |
|---|---|---|---|
property | string | Yes | Dot-notation path on the asset object (merge key). |
title | string | Yes | Column label. |
order | number | Yes | Sort position. Lower numbers appear first. |
type | string | Yes | Display type: string, number, text, dateTime, textCaption. |
disabled | boolean | No | Set to true to hide this property. |
allowDownload
Controls which media types users can download. Each entry is an object with a single key matching a media type name and a boolean value.
Default:
"allowDownload": [
{ "image": true },
{ "video": true },
{ "audio": true },
{ "document": true },
{ "text": true }
]players
Maps stream formats to video player engines.
Default:
"players": [
{ "format": "hls", "player": "bitmovin" },
{ "format": "dash", "player": "bitmovin" },
{ "format": "progressive", "player": "bitmovin" }
]| Field | Type | Required | Description |
|---|---|---|---|
format | string | Yes | Stream format identifier — merge key. Values: hls, dash, progressive. |
player | string | Yes | Player engine to use. Currently bitmovin. |
disabled | boolean | No | Set to true to disable playback for this format. |
authProviders
Defines the sign-in options shown on the login screen.
Default:
"authProviders": [
{ "name": "nomad", "priority": 1, "visible": true, "logoUrl": "assets/img/vendor/sign-in-nomad.png", "title": "Nomad" }
]| Field | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Provider identifier — merge key. |
title | string | Yes | Label shown on the sign-in button. |
priority | number | No | Display order. Lower numbers appear first. |
visible | boolean | No | Set to false to hide the provider without disabling it. |
logoUrl | string | No | Image URL for the provider logo on the sign-in button. |
disabled | boolean | No | Set to true to remove the provider entirely. |
userAttributes
Defines the fields on the user registration and profile form. See the sample config above for the full default entry list.
userAttributes entry schema
| Field | Type | Required | Description |
|---|---|---|---|
property | string | Yes | Field name on the user object (merge key). |
title | string | Yes | Form field label. |
order | number | Yes | Sort position within the form. |
type | string | Yes | Field type: string, lookup, state. |
isRequired | boolean | No | Makes the field mandatory. |
width | string | No | Layout width: half, quarter, full. |
validator | string | No | Validation rule: email, password, passwordVerification. |
newRecordOnly | boolean | No | Show the field only when creating a new user (not on edit). |
forceLinebreak | boolean | No | Insert a line break after this field in the form layout. |
lookup | string | No | Lookup set name (required when type is lookup or state). |
lookupProperty | string | No | Property on the user object that stores the lookup ID. |
parentLookup | string | No | Name of a parent lookup field for dependent dropdowns (e.g. state depends on country). |
lookupParentId | string | No | Default parent lookup ID for filtering child lookups. |
defaultLookupId | string | No | Pre-selected value for the lookup. |
description | string | No | Helper text displayed below the field. |
disabled | boolean | No | Set to true to remove this field from the form. |
annotationAttributes
Defines the fields on the annotation creation form. All three default entries are present unless disabled.
Default entries:
property | title | order / listOrder | type |
|---|---|---|---|
title | Title | 0 | string |
summary | Summary | 1 | string |
description | Description | 3 | string |
annotationAttributes entry schema
| Field | Type | Required | Description |
|---|---|---|---|
property | string | Yes | Field name on the annotation object (merge key). |
title | string | Yes | Form field label. |
order | number | Yes | Sort position in the form. |
listOrder | number | No | Sort position in the annotations list view. |
type | string | Yes | Field type (same values as userAttributes). |
isRequired | boolean | No | Makes the field mandatory. |
width | string | No | Layout width: half, quarter, full. |
disabled | boolean | No | Set to true to remove this field. |
Removed legacy properties
The following properties were removed from the config schema. They are no longer read or applied by the portal and should be removed from any existing config files.
| Removed property | Notes |
|---|---|
defaultLanguageCode | Language is now resolved from the languages lookup. |
watchlistUUID | Watchlist feature removed. |
allowSignups | Signup control moved to authentication provider configuration. |
allowBookmarkManagement | Bookmark management feature removed. |
allowSimilarSearches | Similar search feature removed. |
autoPlay | Auto-play removed. |
enableBulkDownload | Bulk download removed. |
enableCollections | Collections are always enabled when collectionContentDefinitionId is set. |
allowUpload | Upload permissions are now managed at the role level. |
allowLiveClipping | Live clipping is controlled by the Live Clipping configuration guide. |
allowMediaBuilder | Media Builder removed. |
allowTranscriptEditing | Transcript editing removed. |
showAllLiveStreams | Live stream visibility is now fully controlled by showLiveStreams. |
showVideoSubtitles | Subtitle display is now always enabled when subtitle tracks are present. |
hideFileExtensions | File extensions are now always hidden in the UI. |
allowContinueWatching | Continue Watching is always enabled. |
uploadAttributes | Upload metadata fields are now configured via the content definition. |
actions | Custom actions removed. |
actionMenuItems | Custom action menu items removed. |
assetPropertyOverrides | Replaced by disabled: true on items within assetProperties. |
annotationAttributeOverrides | Replaced by disabled: true on items within annotationAttributes. |
userAttributeOverrides | Replaced by disabled: true on items within userAttributes. |
authProviderOverrides | Replaced by disabled: true on items within authProviders. |
playersOverrides | Replaced by disabled: true on items within players. |
