Summary
The Roland VR-400UHD is a 4-channel digital video mixer with built-in audio mixer, multiviewer, DSK, PinP, still store, logo, and scaling. This spec covers remote control over LAN (TCP/IP via Telnet) and RS-232, using shared ASCII commands of the form set/get/ver with [lf] (0x0A) terminators.
Transport
protocols:
- tcp
- serial
addressing:
port: 8023
serial:
baud_rate: 9600 # source lists 9,600 and 38,400 bps; default not stated
alt_baud_rates: [38400]
data_bits: 8
parity: none
stop_bits: 1
flow_control: none # UNRESOLVED: flow control not stated; pinout shows DTR/DSR/RTS/CTS wired internally on the unit side
code_set: ASCII
auth:
type: password # UNRESOLVED: source states "password settings must be configured beforehand; enter the password you already set" but does not document the password format, challenge, or login sequence
Notes on transport:
- LAN uses Telnet over TCP/IP on port 8023.
- RS-232 uses a DB-9 male connector, synchronous/asynchronous full-duplex, ASCII code set.
- RS-232 cable must be crossover (null-modem): unit RXD↔controller RXD, unit TXD↔controller TXD, GND↔GND. Pins 4-6 and 7-8 are linked internally inside the VR-400UHD.
- Baud rate selectable between 9600 and 38400 bps; source does not state the factory default.
Traits
traits:
- routable # inferred: program/preset scene select, DSK source, PinP source, still source, scaler input/output
- queryable # inferred: `get` and `ver` commands return current values
- levelable # inferred: volume, AUX send, reverb send, pan, DSK/PinP blend, output fade
Actions
# All command strings are verbatim from the source command table. `[lf]` = ASCII 0x0A terminator.
# Numeric operands use decimal values per source parameter columns.
# Response column omitted from this spec; see Feedbacks section for ack/error/ver responses.
- id: select_program_scene
label: Select the program scene (PGM1 in DUAL mode)
kind: action
command: "set,97,46,0,{a}[lf]"
params:
- name: a
type: integer
range: [0, 63]
description: "Scene index 0-63 (maps to 1-1 - 8-8)"
- id: select_preset_scene
label: Select the preset scene (PGM2 in DUAL mode)
kind: action
command: "set,97,46,1,{a}[lf]"
params:
- name: a
type: integer
range: [0, 63]
description: "Scene index 0-63 (maps to 1-1 - 8-8)"
- id: press_cut
label: Press the [CUT] button
kind: action
command: "set,98,43,0,1[lf]"
params: []
- id: press_auto
label: Press the [AUTO] button
kind: action
command: "set,98,42,0,1[lf]"
params: []
- id: press_output_fade
label: Press the [OUTPUT FADE] button
kind: action
command: "set,97,25,{a},{b}[lf]"
params:
- name: a
type: integer
enum: { 0: "PGM (DUAL Mode: PGM1)", 1: "DUAL Mode: PGM2" }
- name: b
type: integer
enum: { 0: "OFF", 1: "ON" }
- id: set_dsk_onoff
label: Set the [DSK] button on/off
kind: action
command: "set,97,79,0,{a}[lf]"
params:
- name: a
type: integer
enum: { 0: "OFF", 1: "ON" }
- id: set_logo_onoff
label: Set the [LOGO] button on/off
kind: action
command: "set,97,63,0,{a}[lf]"
params:
- name: a
type: integer
enum: { 0: "OFF", 1: "ON" }
- id: switch_mix_wipe
label: Switch between MIX/WIPE
kind: action
command: "set,97,48,0,{a}[lf]"
params:
- name: a
type: integer
enum: { 0: "MIX", 1: "WIPE" }
- id: change_wipe_pattern
label: Change the WIPE pattern
kind: action
command: "set,97,49,0,{a}[lf]"
params:
- name: a
type: integer
range: [0, 3]
description: "0-3 (patterns 1-4)"
- id: set_transition_time
label: Set transition time
kind: action
command: "set,97,18,0,{a}[lf]"
params:
- name: a
type: integer
range: [0, 20]
description: "0.0-2.0 sec (units of 0.1 sec)"
- id: set_auto_transition_onoff
label: Set the [AUTO TRANSITION] button on/off
kind: action
command: "set,97,19,0,{a}[lf]"
params:
- name: a
type: integer
enum: { 0: "OFF", 1: "ON" }
- id: adjust_volume
label: Adjust the volume
kind: action
command: "set,97,139,{a},{b}[lf]"
params:
- name: a
type: integer
range: [0, 5]
description: "MIC1-MIC6 Channel"
- name: b
type: integer
range: [0, 127]
description: "Level"
- id: set_solo_onoff
label: Turn the solo function on/off
kind: action
command: "set,97,138,{a},{b}[lf]"
params:
- name: a
type: integer
range: [0, 5]
description: "MIC1-MIC6 Channel"
- name: b
type: integer
enum: { 0: "OFF", 1: "ON" }
- id: set_mute_onoff
label: Turn the mute function on/off
kind: action
command: "set,97,137,{a},{b}[lf]"
params:
- name: a
type: integer
range: [0, 5]
description: "MIC1-MIC6 Channel"
- name: b
type: integer
enum: { 0: "OFF", 1: "ON" }
- id: adjust_aux_send_level
label: Adjust the AUX send level
kind: action
command: "set,97,144,{a},{b}[lf]"
params:
- name: a
type: integer
range: [0, 5]
description: "MIC1-MIC6 Channel"
- name: b
type: integer
range: [0, 127]
description: "Level"
- id: adjust_pan
label: MIC1-MIC6 channel Adjust the pan
kind: action
command: "set,97,140,{a},{b}[lf]"
params:
- name: a
type: integer
range: [0, 5]
description: "MIC1-MIC6 Channel"
- name: b
type: integer
range: [-50, 50]
description: "L-C-R (-50 = full L, 0 = center, 50 = full R)"
- id: adjust_reverb_send_level
label: Adjust the reverb send level
kind: action
command: "set,97,141,{a},{b}[lf]"
params:
- name: a
type: integer
range: [0, 5]
description: "MIC1-MIC6 Channel"
- name: b
type: integer
range: [0, 127]
description: "Level"
- id: set_usb_send_onoff
label: Turn USB send on/off
kind: action
command: "set,97,143,{a},{b}[lf]"
params:
- name: a
type: integer
range: [0, 5]
description: "MIC1-MIC6 Channel"
- name: b
type: integer
enum: { 0: "OFF", 1: "ON" }
- id: set_aux_pre_post
label: Set AUX PRE/POST
kind: action
command: "set,97,145,{a},{b}[lf]"
params:
- name: a
type: integer
range: [0, 5]
description: "MIC1-MIC6 Channel"
- name: b
type: integer
enum: { 0: "PRE", 1: "POST" }
- id: set_dsk_source
label: Set DSK source
kind: action
command: "set,97,77,{a},{b}[lf]"
params:
- name: a
type: integer
enum: { 0: "DSK1", 1: "DSK2" }
- name: b
type: integer
range: [0, 5]
description: "Video input 1-6"
- id: set_dsk_key_source
label: Set DSK key source
kind: action
command: "set,97,78,{a},{b}[lf]"
params:
- name: a
type: integer
enum: { 0: "DSK1", 1: "DSK2" }
- name: b
type: integer
range: [0, 5]
description: "Audio input 1-6"
- id: set_dsk_blend
label: Set DSK blend
kind: action
command: "set,97,80,{a},{b}[lf]"
params:
- name: a
type: integer
enum: { 0: "DSK1", 1: "DSK2" }
- name: b
type: integer
range: [0, 127]
description: "Level"
- id: set_dsk_auto_fade
label: Set DSK auto fade
kind: action
command: "set,97,81,{a},{b},{c}[lf]"
params:
- name: a
type: integer
enum: { 0: "DSK1", 1: "DSK2" }
- name: b
type: integer
enum: { 0: "OFF", 1: "ON" }
- name: c
type: integer
range: [0, 20]
description: "Time"
- id: set_logo_position
label: Set LOGO position
kind: action
command: "set,97,64,{a},{b}[lf]"
params:
- name: a
type: integer
range: [0, 8]
description: "H position"
- name: b
type: integer
range: [0, 15]
description: "V position"
- id: set_logo_scale
label: Set LOGO scale
kind: action
command: "set,97,65,{a}[lf]"
params:
- name: a
type: integer
range: [0, 5]
description: "Scales 1-4"
- id: set_logo_fade
label: Set LOGO fade
kind: action
command: "set,97,66,{a},{b}[lf]"
params:
- name: a
type: integer
enum: { 0: "OFF", 1: "ON" }
- name: b
type: integer
range: [0, 20]
description: "Time"
- id: set_freeze
label: Set freeze
kind: action
command: "set,97,67,{a}[lf]"
params:
- name: a
type: integer
enum: { 0: "OFF", 1: "ON" }
- id: set_still_format
label: Set still format
kind: action
command: "set,97,68,{a}[lf]"
params:
- name: a
type: integer
enum: { 0: "FULL", 1: "LG", 2: "RG", 3: "CG" }
- id: set_still_source
label: Set still source
kind: action
command: "set,97,69,{a},{b}[lf]"
params:
- name: a
type: integer
enum: { 0: "STILL1", 1: "STILL2" }
- name: b
type: integer
range: [0, 5]
description: "Video input 1-6"
- id: set_pinp_source
label: Set PinP source
kind: action
command: "set,97,70,{a},{b}[lf]"
params:
- name: a
type: integer
enum: { 0: "PinP1", 1: "PinP2" }
- name: b
type: integer
range: [0, 5]
description: "Video input 1-6"
- id: set_pinp_position
label: Set PinP position
kind: action
command: "set,97,71,{a},{b},{c}[lf]"
params:
- name: a
type: integer
enum: { 0: "PinP1", 1: "PinP2" }
- name: b
type: integer
range: [-50, 50]
description: "H position"
- name: c
type: integer
range: [-50, 50]
description: "V position"
- id: set_pinp_size
label: Set PinP size
kind: action
command: "set,97,72,{a},{b}[lf]"
params:
- name: a
type: integer
enum: { 0: "PinP1", 1: "PinP2" }
- name: b
type: integer
range: [0, 100]
description: "Size"
- id: set_pinp_aspect
label: Set PinP aspect
kind: action
command: "set,97,73,{a},{b}[lf]"
params:
- name: a
type: integer
enum: { 0: "PinP1", 1: "PinP2" }
- name: b
type: integer
enum: { 0: "16:9", 1: "4:3" }
- id: set_pinp_border
label: Set PinP border
kind: action
command: "set,97,74,{a},{b},{c}[lf]"
params:
- name: a
type: integer
enum: { 0: "PinP1", 1: "PinP2" }
- name: b
type: integer
range: [0, 50]
description: "H position"
- name: c
type: integer
range: [0, 50]
description: "V position"
- id: set_pinp_auto_fade
label: Set PinP auto fade
kind: action
command: "set,97,75,{a},{b},{c}[lf]"
params:
- name: a
type: integer
enum: { 0: "PinP1", 1: "PinP2" }
- name: b
type: integer
enum: { 0: "OFF", 1: "ON" }
- name: c
type: integer
range: [0, 20]
description: "Time"
- id: set_pinp_blend
label: Set PinP blend
kind: action
command: "set,97,76,{a},{b}[lf]"
params:
- name: a
type: integer
enum: { 0: "PinP1", 1: "PinP2" }
- name: b
type: integer
range: [0, 127]
description: "Level"
- id: set_input_hd_sd
label: Input HD/SD
kind: action
command: "set,97,47,0,{a}[lf]"
params:
- name: a
type: integer
enum: { 0: "AUTO", 1: "HD", 2: "SD" }
- id: switch_video_input_format_output
label: Switch video input format (output)
kind: action
command: "set,97,3,0,{a}[lf]"
params:
- name: a
type: integer
description: "0-4 (Auto, 1080/59.94p, 1080/50p, 1080/29.97Hz, 1080/25Hz, 1080/24Hz, 1080/23.98Hz, 720/59.94p, 720/50p)"
# UNRESOLVED: source lists range "0-4" but enumerates 9 named formats. Mapping ambiguous; verify against device.
- id: set_scaler_input
label: Set scaler input
kind: action
command: "set,97,4,{a},{b}[lf]"
params:
- name: a
type: integer
range: [0, 5]
description: "Video input 1-6"
- name: b
type: integer
enum: { 0: "AUTO", 1: "480p/59.94", 2: "576p/50", 3: "1080p/59.94", 4: "1080p/50", 5: "1080p/29.97", 6: "1080p/25", 7: "1080p/24", 8: "1080p/23.98" }
- id: set_scaler_output
label: Set scaler output
kind: action
command: "set,97,5,0,{a}[lf]"
params:
- name: a
type: integer
enum: { 0: "Auto", 1: "480p/59.94", 2: "576p/50", 3: "720/59.94p", 4: "720/50p", 5: "1080/59.94p", 6: "1080/50p", 7: "1080/29.97p", 8: "1080/25p", 9: "1080/24p", 10: "1080/23.98p", 11: "2160/59.94p", 12: "2160/50p" }
- id: set_output_fade
label: Set output fade
kind: action
command: "set,97,6,0,{a}[lf]"
params:
- name: a
type: integer
range: [0, 100]
description: "0-100%"
notes: "Source response column shows ack as `ack,97,5,0,[a][lf]` (likely typo for 97,6)."
- id: set_pgm_output
label: Set PGM output
kind: action
command: "set,97,0,0,{a}[lf]"
params:
- name: a
type: integer
enum: { 0: "Program out", 1: "Multi view out" }
- id: set_pvw_output
label: Set PVW output
kind: action
command: "set,97,1,0,{a}[lf]"
params:
- name: a
type: integer
enum: { 0: "Program out", 1: "Multi view out" }
- id: set_multiview_layout
label: Set multi-view layout
kind: action
command: "set,97,2,0,{a}[lf]"
params:
- name: a
type: integer
enum: { 0: "2 divisions", 1: "3 divisions", 2: "4 divisions", 3: "5 divisions", 4: "6 divisions" }
- id: switcher_initialize
label: Switcher initialize
kind: action
command: "set,98,0,0,1[lf]"
params: []
- id: switcher_reset
label: Switcher reset
kind: action
command: "set,98,1,0,1[lf]"
params: []
- id: set_generic
label: Generic parameter set
kind: action
command: "set,{category},{id},{sub_id},{value}[lf]"
params:
- name: category
type: integer
description: "Category ID"
- name: id
type: integer
description: "Parameter ID"
- name: sub_id
type: integer
description: "Sub-ID"
- name: value
type: integer
description: "Value"
notes: "Generic form documented in source Command Format section; specific set commands enumerated above are preferred."
- id: get_model_name
label: Get model name
kind: query
command: "ver[lf]"
params: []
response: "ver,{model name},{software version}[lf]"
- id: get_generic
label: Generic parameter get
kind: query
command: "get,{category},{id},{sub_id}[lf]"
params:
- name: category
type: integer
- name: id
type: integer
- name: sub_id
type: integer
response: "set,{category},{id},{sub_id},{value}[lf]"
notes: "Generic form documented in source Command Format section."
Feedbacks
- id: ack_response
label: Acknowledgement
type: string
description: "Returned when a set command is correctly received. Form: `ack,{category},{id},{sub_id},{value}[lf]` mirroring the sent command."
values: ["ack,<echo of sent set command>"]
- id: err_response
label: Error response
type: string
description: "Returned when a command could not be correctly received."
values: ["err,{transmitted command}[lf]"]
- id: get_value_response
label: Get value response
type: string
description: "Returned in response to a `get` command, returning the current value."
values: ["set,{category},{id},{sub_id},{value}[lf]"]
- id: ver_response
label: Version response
type: string
description: "Returned in response to `ver`."
values: ["ver,{model name},{software version}[lf]"]
Variables
# All settable parameters are enumerated as Actions above (each maps to a single category/id/sub-id).
# Generic variable structure: { category, id, sub_id } -> integer value, read via `get` and written via `set`.
Events
# UNRESOLVED: source documents no unsolicited/notification events. All responses are solicited (ack/err/get-response/ver-response).
Macros
# Source documents one explicit operational sequence rule: "When sending a sequence of commands to the unit from a controller, after each one, be sure to verify that an 'ack' response is returned before sending the next command."
# No named multi-step macros are enumerated.
Safety
confirmation_required_for:
- switcher_initialize # source: "Switcher initialize" - initialize/reset; semantics not detailed
- switcher_reset # source: "Switcher reset" - destructive; semantics not detailed
interlocks: []
notes: |
Source states: "When sending a sequence of commands to the unit from a controller, after each one,
be sure to verify that an 'ack' response is returned before sending the next command." Treat as a
mandatory sequencing interlock for command chains.
# UNRESOLVED: source does not describe power-on sequencing, thermal interlocks, or explicit safety warnings.
Notes
- Device identity discrepancy: The user-supplied device name and source artifact filename identify this as a Roland V-4EX 4-Channel Digital Video Mixer, but the actual refined source text is the VR-400UHD Remote Control Guide. The front-matter
entity_idreflects the supplied V-4EX identifier;compatible_with.modelsreflects the source-stated VR-400UHD. The operator must reconcile this mismatch before publishing — either by sourcing the correct V-4EX manual or re-pointing the entity. - Command terminator:
[lf]is ASCII0x0A(LF). Source notes "H indicates a hexadecimal value." - Shared command set: Commands are common to LAN and RS-232 interfaces.
- Password auth: Source states password is required for LAN ("network and password settings must be configured beforehand; when connecting, enter the password you already set") but does not document the login sequence, password format, or challenge —
auth.type: passwordset but the protocol is UNRESOLVED. - Output fade typo: Source response column for
set,97,6,0,[a](output fade) readsack,97,5,0,...(likely a documentation typo for 97,6). Flagged on the action. - Video input format ambiguity: Source lists range "0–4" but enumerates 9 named formats — mapping is ambiguous and needs device verification.
- Baud rate: Source states both 9600 and 38400 bps are supported; factory default is not stated. Both are emitted.
Spec above. 49 actions enumerated (47 source-table rows + 2 generic `set`/`get` forms). Big flag: source identity mismatch V-4EX vs VR-400UHD — operator reconcile before publish.
## Provenance
```yaml
source_domains:
- static.roland.com
source_urls:
- https://static.roland.com/assets/media/pdf/VR-400UHD_Control_eng01_W.pdf
retrieved_at: 2026-07-13T20:40:06.148Z
last_checked_at: 2026-07-22T00:42:08.726Z
```
## Verification Summary
```yaml
verdict: verified
checked_at: 2026-07-22T00:42:08.726Z
matched_actions: 49
action_count: 49
confidence: medium
summary: "All 49 spec actions verified in source command table; explicit commands plus the generic set/get forms fully represented. (11 unresolved item(s) noted in Known Gaps.)"
```
## Known Gaps
```yaml
- "source text/file metadata describes the V-4EX; the actual document body is the VR-400UHD Remote Control Guide. The entity_id in front matter reflects the user-supplied V-4EX identifier; the model field reflects the source-stated VR-400UHD. Operator must reconcile which device this entity actually represents before publishing."
- "flow control not stated; pinout shows DTR/DSR/RTS/CTS wired internally on the unit side"
- "source states \"password settings must be configured beforehand; enter the password you already set\" but does not document the password format, challenge, or login sequence"
- "source lists range \"0-4\" but enumerates 9 named formats. Mapping ambiguous; verify against device."
- "source documents no unsolicited/notification events. All responses are solicited (ack/err/get-response/ver-response)."
- "source does not describe power-on sequencing, thermal interlocks, or explicit safety warnings."
- "device identity mismatch (V-4EX vs VR-400UHD) — operator reconciliation required."
- "auth login sequence / password format not documented."
- "RS-232 flow control not documented."
- "video input format (set,97,3,0) range/format mapping ambiguous."
- "firmware/software version not stated (returned dynamically via `ver`)."
```
---
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0