msx-knowledge-base

In-App Settings Reference

Media Station X has its own native Settings screen — a scene inside the app itself, separate from the JSON content a page author builds. It draws on:


1. How this screen relates to JSON building

Although the Settings screen itself isn’t JSON, it is fully reachable from JSON and from plugins — and it is itself built out of ordinary MSX content items:


2. Settings screen map

The Settings scene is two content pages. This is the actual navigation tree, reconstructed from the scene’s own item list (labels and action strings) — not every entry sets a value; several just navigate to a sub-panel or another scene.

Page 1

Item Action Notes
Start Parameter settings:start Only enabled if the start parameter is changeable.
About settings:about Not the About project page — an app/content info panel, detailed below.
Volume volume Only enabled if the platform’s volume setting is not 0/Off; otherwise shows a “TV Control” badge (volume is handled by the TV/device instead).
Application dialog:application An application-actions panel (Reload/Restart/Cleaning always shown; Fullscreen/Leave/Exit shown only if the corresponding Framework Setting allows it), detailed below.
Visual Effects settings:visual_effects Groups Animations (settings:animate), Transformations (settings:transform), Visual Execution (settings:visual_execution).
Resolution settings:resolution Groups Layout (settings:layout), Scale Factor (settings:scale), Zoom Factor (settings:zoom).
Screen Saver settings:screen_saver Groups Sleep Timeout (settings:sleep_timeout), Eject Timeout (settings:eject_timeout).
Validate Links settings:validate_links  
Random Playback settings:random_playback  
Slideshow Interval settings:slideshow_interval  

Page 2

Item Action Notes
Welcome Pages dynamic (menu:data:start:welcome, or the stored welcome/start-action parameter) Shows/edits what loads when no start parameter is set.
Content Guide menu:data:guide:menu Same menu as examples/guide/menu.json, just with real http:// links instead of the internal *:data:{ID} addressing.
Log log  
Reset Settings settings:reset  
Input Type settings:input Only enabled if the input setting is changeable.
Remote Control settings:remote Only enabled if the remote setting is changeable.
Hover Effect settings:hover_effect  
Menu Button settings:menu_button  
Rounded Style settings:rounded_style  
Immersive Mode settings:immersive_mode Hidden by default — shown only when relevant (e.g. on devices without a 16:9 screen ratio, per its 0.1.151 release-note description).

settings:visual_effects, settings:resolution, and settings:screen_saver are grouping panels: the top-level Settings scene shows one combined entry, which opens a sub-panel where each underlying field is set individually via its own settings:{FIELD}:{VALUE} action (documented in Application Settings and Framework Settings below).

A note on menu:data:guide:menu, menu:data:start:welcome, and similar actions: these {prefix}:data:{ID} strings call an internal link — an undocumented, internal-only addressing scheme, not a documented action pattern for JSON authors to use. Instead of fetching over HTTP, they resolve to JSON bundled inside the app itself, mainly for the app’s built-in Guide (the in-app help menu) and the Welcome Pages entry to cross-link their own bundled pages. These internal loads do show up in the app’s own Log (see the Log entry in the Page 2 table above) — e.g. as a message like “Request data for entry ‘{TYPE}’ with ID ‘{ID}’” — but that’s a debugging trace, not a documented feature. Do not use this *:data:{ID} syntax in your own JSON — it has no documented meaning outside the app’s own bundled content.


3. Application Settings

These ten fields make up MSXAttachedApplicationSettings. All ten are Settings-screen-only (no launch-time URL parameter equivalent).

Immersive Mode — immersiveMode (settings:immersive_mode)

Rounded Style — roundedStyle (settings:rounded_style)

Hover Effect — hoverEffect (settings:hover_effect)

Screen Saver — sleepTimeout / ejectTimeout (settings:screen_saver → settings:sleep_timeout, settings:eject_timeout)

Visual Execution — visualExecution (settings:visual_execution)

Random Playback — randomPlayback (settings:random_playback)

Slideshow Interval — slideshowInterval (settings:slideshow_interval)


4. Framework Settings — the two tiers

These 21 fields make up MSXAttachedFrameworkSettings. Only 7 of the 21 are also exposed in the Settings screen; the rest are launch/start-parameter only.

Where these values come from. All 21 are platform-preconfigured: the TVX Framework sets a default for every one of them once per platform, before the app is ever used (e.g. the exit function is wired up differently on Samsung vs. Android vs. HbbTV). MSX then copies exactly the 7 fields below (animate, transform, input, remote, and the layout/scale/zoom trio) into its own Application-level settings, specifically because it makes sense to let the user retune them afterward; that copy is what the Settings screen exposes in 4a below. The other 14 (4b below) are platform-preconfigured the same way, but deliberately left unchangeable in the running app, because the platform itself dictates them (e.g. the exit and volume functions).

URL parameters lock these values. Setting a URL parameter is a TVX Framework mechanism, not an MSX one — it pre-configures a value for a specific deployment (e.g. to hand a platform a ready-made URL) rather than letting the app pick it at runtime. A value set this way always wins (highest priority over anything stored internally) and, once set, can no longer be changed from within the running app — including for the 7 fields that would otherwise be user-adjustable via the Settings screen. This locking mechanism also covers two further MSX-specific values that aren’t part of MSXAttachedFrameworkSettings at all: the Start Parameter (start) and the Dictionary Parameter (dictionary). A few further URL parameters (e.g. init, platform, t) configure one-off launch behavior and don’t correspond to any setting at all. See URL Parameters.

The Welcome Parameter (welcome) is the one exception — a fallback, not a lock. Setting welcome overrides MSX’s own built-in default Welcome Pages (the app’s out-of-the-box greeting/intro screens with sample screenshots, otherwise reachable via Settings → Welcome Pages), but unlike the values above it does not unconditionally override a configured start parameter:

The two mechanisms don’t cover the same ground. URL parameters mainly target the raw TVX Settings — all 21 Framework Settings, plus the 3 MSX-only launch params above. Internal settings:* actions, on the other hand, can only ever set MSX Settings — the 10 Application Settings and the 7 copied-from-TVX fields in 4a — never the other 14 raw TVX Settings in 4b directly, because those were never copied into the MSX settings object in the first place. That’s the structural reason those 14 have no settings:{FIELD}:{VALUE} action at all, not just a design choice to hide a panel.

4a. Runtime-adjustable AND launch-configurable (7 fields)

Both a settings:{PANEL}:{VALUE} action and a same-named URL parameter exist. Internally, the app tracks a change flag for six of these seven — Transform, Layout, Scale, Zoom, Input, Remote — matching exactly the six whose description below states a reload is required, and exactly the six guarded by the settings-validation panel described in How this screen relates to JSON building above: a bad value for any of them can make the whole UI unusable, so a restart forces a confirm-or-revert check. Animations, whose description carries no such note, has no change flag and isn’t validated.

Visual Effects (settings:visual_effects groups the three below) — “The settings for visual effects. Depending on the platform, changing these values may increase or decrease the performance.”

Why both fields have multiple non-Off options, not just an on/off switch. These trace back to MSX’s earliest Smart TV days. Many TVs (especially budget models — some still today) simply couldn’t run animations at acceptable performance, which is why Off exists and still matters. Beyond that, on some TV platforms JS-driven animations proved more reliable, and sometimes even faster, than CSS transitions — hence the JS/CSS choice rather than one fixed implementation. Transformations followed the same pattern: older TVs often couldn’t do CSS transforms at all (Off), and among those that could, some manufacturers’ devices ran 3D transforms faster than 2D while others were the reverse — a browser-engine rendering-path difference, per a TV WebKit engineer consulted at the time, though the exact cause varies by platform. MSX preconfigures the right values per platform automatically (typically everything off on older devices, CSS animations plus 2D or 3D transforms on newer ones) — this is the same platform-preconfiguration mechanism described above.

Resolution (settings:resolution groups the three below) — “The resolution settings of the user interface. Please note that these settings do not affect the video resolution (e.g. if the layout resolution is set to 720p, 1080p or higher resolution videos can still be watched). It is recommended to keep the preset values.”

In practice, a given platform rarely shows both Scale Factor and Zoom Factor at once — usually only one of them appears, or neither: mobile devices typically expose Scale Factor (a viewport setting), desktop devices typically expose Zoom Factor (a CSS zoom setting), and TV devices typically expose neither, since they run at a fixed 720p/1080p resolution.

Input Type vs. Remote Control — what’s the difference? Input Type governs how mouse/touch gestures act directly on the UI itself (clicking, swiping, dragging items to navigate). Remote Control governs a separate on-screen virtual remote overlay (D-pad/Back/Menu/Eject/Player buttons drawn on top of the UI) — historically the predecessor mechanism, for devices/situations with no direct mouse/touch interaction with the UI at all. Now that Input Type covers direct interaction well, the virtual remote is mostly needed only for a few special functions (Back, Menu) that direct gestures don’t cover — which is why the smallest Remote Control option is the default on most platforms.

Input Type — input (settings:input), since 0.1.0. “The type of the on-screen input. If you control the application with a standard remote control, you can ignore this setting. A reload of the application is required.” Values: 0 Off · 1 Remote Only · 2 Click & Swipe · 3 Drag & Drop · 4 Move & Execute (added 0.1.153).

Remote Control — remote (settings:remote), since 0.1.0. “The type of the on-screen remote control. If you control the application with a standard remote control, you can ignore this setting. A reload of the application is required.” Values: 0 Off · 1 Minimalistic · 2 Navigation Frame (updated 0.1.160) · 3 Corner Controls (added 0.1.148) · 4 Complex (added 0.1.148).

4b. Launch/start-parameter only (14 fields)

These exist only as URL Parameters (which the app’s own start-parameter setup UI also writes to); no settings:{PANEL} internal action exists for any of them, so a JSON action string cannot toggle them at runtime.

Field What it controls
back Back-button function: off, or use web history
background Screen background: transparent or opaque
busy Busy indicator: off, delayed, or instant
caption Options/menu caption visibility in the lower-right corner (added 0.1.157) — a global on/off toggle only; it does not set the indicator’s text. The displayed text itself is a separate, per-content mechanism: the JSON caption/captionUnderlay properties on the Content Root/Page Object (see Glossary: Options). This Framework Setting can hide that indicator entirely, independent of what text those properties would otherwise show.
center Whether the UI is aligned top-left or centered
exit Exit-button behavior (9 variants, incl. “direct execution during back navigation”)
fullscreen Fullscreen availability: off, always on, or toggleable
leave Whether a “leave” function (web-history back) is shown, for apps that opened MSX from elsewhere
playback What happens to video/audio when the app sleeps: stop, pause-only, pause/play, or keep playing
pointer Which pointer input is handled: off, mouse, touch, merged, switch, or combi (added 0.1.160)
secure http://→https:// upgrade behavior for JSON/plugins/media
speed Whether the playback-speed button is enabled, for video/audio/both
suspend How app suspend/resume is detected: off, visibility handler, or system handler
volume Volume control: off, on, or mute-only

5. Other Settings-scene entries and safety mechanisms

Not values to configure, but part of the same scene:


6. What is not covered by any native setting

The sources describe no global, app-level setting for language selection, subtitles, parental controls, buffer/cache size, video quality, or similar. Subtitle language and similar preferences are instead handled per-plugin as extended item properties (e.g. html5x:subtitle:{lang}:{Label}, see HTML5X Plugin) or per-platform (e.g. tizen:subtitle:style:*, see Tizen Player) — not as a native Settings-screen entry. Do not assume such a global setting exists; if a question needs one, say it is not documented rather than inventing a panel.

Why these aren’t native settings. MSX is deliberately generic — a single white-label shell used for wildly different kinds of content and services. A one-size-fits-all setting for something as use-case-specific as parental controls, buffer/cache size, or video quality wouldn’t fit most services at all, so none of these were built into the native Settings screen. Language selection is a special case of the same reasoning: in the end, a JSON author’s content must either support multiple languages via Dictionary Inline Expressions/Dictionary Structure, or simply be written directly in one target language — there’s no third option a generic app-level language switch could meaningfully drive. That’s also why the entire language feature was deliberately externalized into the Dictionary mechanism instead of a native setting: MSX gives JSON authors several ways to build multi-language content (dictionary lookups, server-side language detection/selection, dictionary:{URL} at runtime, etc.), but leaves the actual design to them.

The practical takeaway: for exactly these use-case-specific needs, build your own settings inside your own JSON/service instead of expecting MSX to provide one. Two proven patterns:


See Also