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.

PropertyTypeDefaultDescription
siteNamestringDisplay name of the portal, shown in the page title and header.
logoImageUrlstringURL to the site logo image shown in the top navigation bar.
googleTagManagerstringGoogle Tag Manager container ID (e.g. GTM-XXXXXXX). Omit to disable GTM.
rootFolderIdstringZero-asset UUIDID of the root folder to display in the asset browser. Falls back to the zero-asset UUID when not set.
lookupsUrlstringURL to the JSON file containing lookup values (countries, states, custom dropdowns).
contentDefinitionIdstring3ff29f61-…Content definition ID used for standard assets.
collectionContentDefinitionIdstring20352932-…Content definition ID used for collection assets.
tagContentDefinitionIdstringc806783c-…Content definition ID used for tag assets.
applicationstringContent PortalInternal application name identifier.
applicationIdstringfb398b44-…Internal application UUID.
showTagsbooleantrueShow the tags panel and tag-related UI.
allowEditTagsbooleantrueAllow users to add and remove tags on assets.
showFoldersbooleantrueShow the folder tree panel in the asset browser.
allowAnnotationsbooleantrueEnable the annotations feature (required for the Annotations property panel).
showTranscriptsbooleantrueEnable the transcript panel for video and audio assets.
favoriteUUIDstringfa92d220-…UUID of the Favorites collection.
showFoldersInSearchResultsbooleantrueInclude folders in search result listings.
enableLlmSearchbooleanfalseEnable LLM-powered semantic / clip search. Also gates the Clip Search property panel.
showLiveStreamsbooleantrueShow live streams in the asset browser.
propertyPaneHeaderstringmediaTypeDisplayField used as the header in the properties panel.
bitmovinLicenseKeystringBitmovin player license key. Required when using the Bitmovin player.
userRegistrationInstructionsTitlestringRegistration InformationTitle shown above the user registration instructions.
userRegistrationInstructionsstringDefault Nomad Media textHTML content shown at the top of the user registration form.
loginDisabledMessagestringDefault activation pending textHTML 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.

ArrayMerged by keyDescription
assetPropertiespropertyMetadata fields shown in the asset Properties panel.
userAttributespropertyFields on the user registration and profile form.
annotationAttributespropertyFields on the annotation creation form.
authProvidersnameAuthentication providers available on the login screen.
playersformatVideo 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 titlepropertytypeorder
Content TypecontentTypestring10
Asset IDassetIdstring20
SizecontentLengthDisplaystring30
DatecreatedDatedateTime40
Languagelanguage.translatedTitlestring50
DurationvideoDurationstring60
Video HeightvideoHeightnumber70
Video WidthvideoWidthnumber80
Video FormatvideoFormattext90
Video CodecvideoCodectext100
Video Codec IDvideoCodecIdtext110
Audio FormataudioFormattext120
Audio ChannelsaudioChannelsnumber130
Audio DurationaudioDurationtext140
Full CaptiontextCaptions.verbosetextCaption150
Concise CaptiontextCaptions.concisetextCaption160

assetProperties entry schema

FieldTypeRequiredDescription
propertystringYesDot-notation path on the asset object (merge key).
titlestringYesColumn label.
ordernumberYesSort position. Lower numbers appear first.
typestringYesDisplay type: string, number, text, dateTime, textCaption.
disabledbooleanNoSet 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" }
]
FieldTypeRequiredDescription
formatstringYesStream format identifier — merge key. Values: hls, dash, progressive.
playerstringYesPlayer engine to use. Currently bitmovin.
disabledbooleanNoSet 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" }
]
FieldTypeRequiredDescription
namestringYesProvider identifier — merge key.
titlestringYesLabel shown on the sign-in button.
prioritynumberNoDisplay order. Lower numbers appear first.
visiblebooleanNoSet to false to hide the provider without disabling it.
logoUrlstringNoImage URL for the provider logo on the sign-in button.
disabledbooleanNoSet 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

FieldTypeRequiredDescription
propertystringYesField name on the user object (merge key).
titlestringYesForm field label.
ordernumberYesSort position within the form.
typestringYesField type: string, lookup, state.
isRequiredbooleanNoMakes the field mandatory.
widthstringNoLayout width: half, quarter, full.
validatorstringNoValidation rule: email, password, passwordVerification.
newRecordOnlybooleanNoShow the field only when creating a new user (not on edit).
forceLinebreakbooleanNoInsert a line break after this field in the form layout.
lookupstringNoLookup set name (required when type is lookup or state).
lookupPropertystringNoProperty on the user object that stores the lookup ID.
parentLookupstringNoName of a parent lookup field for dependent dropdowns (e.g. state depends on country).
lookupParentIdstringNoDefault parent lookup ID for filtering child lookups.
defaultLookupIdstringNoPre-selected value for the lookup.
descriptionstringNoHelper text displayed below the field.
disabledbooleanNoSet 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:

propertytitleorder / listOrdertype
titleTitle0string
summarySummary1string
descriptionDescription3string

annotationAttributes entry schema

FieldTypeRequiredDescription
propertystringYesField name on the annotation object (merge key).
titlestringYesForm field label.
ordernumberYesSort position in the form.
listOrdernumberNoSort position in the annotations list view.
typestringYesField type (same values as userAttributes).
isRequiredbooleanNoMakes the field mandatory.
widthstringNoLayout width: half, quarter, full.
disabledbooleanNoSet 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 propertyNotes
defaultLanguageCodeLanguage is now resolved from the languages lookup.
watchlistUUIDWatchlist feature removed.
allowSignupsSignup control moved to authentication provider configuration.
allowBookmarkManagementBookmark management feature removed.
allowSimilarSearchesSimilar search feature removed.
autoPlayAuto-play removed.
enableBulkDownloadBulk download removed.
enableCollectionsCollections are always enabled when collectionContentDefinitionId is set.
allowUploadUpload permissions are now managed at the role level.
allowLiveClippingLive clipping is controlled by the Live Clipping configuration guide.
allowMediaBuilderMedia Builder removed.
allowTranscriptEditingTranscript editing removed.
showAllLiveStreamsLive stream visibility is now fully controlled by showLiveStreams.
showVideoSubtitlesSubtitle display is now always enabled when subtitle tracks are present.
hideFileExtensionsFile extensions are now always hidden in the UI.
allowContinueWatchingContinue Watching is always enabled.
uploadAttributesUpload metadata fields are now configured via the content definition.
actionsCustom actions removed.
actionMenuItemsCustom action menu items removed.
assetPropertyOverridesReplaced by disabled: true on items within assetProperties.
annotationAttributeOverridesReplaced by disabled: true on items within annotationAttributes.
userAttributeOverridesReplaced by disabled: true on items within userAttributes.
authProviderOverridesReplaced by disabled: true on items within authProviders.
playersOverridesReplaced by disabled: true on items within players.