Summary
The Video Storm NetPlay platform (NBX, VRX, NAB, NBX010, VTX) exposes a Telnet/TCP control socket for matrix switching, video encoding/decoding, transport, audio routing, IR/RS232/CEC bridging, and device configuration. This spec covers the command set published in the NetPlay Control guide (rev 8.0, 5/17/22) including the NetPlay general control socket and the NetPlay virtual matrix controller socket. All commands are ASCII strings terminated by a single <cr> (0x0D).
Transport
protocols:
- tcp
- serial
addressing:
port: 23
alternate_ports:
- 9091 # multi-connection Telnet
- 9092 # virtual matrix control (one per NetPlay Video system)
- 9090 # Squeezebox CLI / XBMC JSON
- 80 # HTTP coverart / vm_request.php
base_url: "http://<IP>" # coverart and vm_request.php over HTTP
serial:
baud_rate: 9600
data_bits: 8
parity: none
stop_bits: 1
flow_control: none
connector: "3.5mm stereo female (NBX100/VRX010); DB9 male via adapter (NAB); USB-RS232 adapter (NBX010)"
auth:
type: none # inferred: no auth procedure in source
Traits
traits:
- powerable # inferred from QLOWPOW and QRESTART/QHALT commands
- routable # inferred from Vaaabbb / Aaaabbb / SWaaa matrix switching commands
- queryable # inferred from QSTAT* / STAT / QSINK / QSRC query commands
- levelable # inferred from QASETVOL / Gaaabbb / Eaaabbb gain/volume commands
Actions
# All NetPlay commands. Commands are ASCII strings terminated by <cr> (0x0D).
# --- General / device configuration ---
- id: config_control
label: Config Control
kind: action
command: "QCF{a}{bb}{ccc}{z}"
params:
- name: a
type: enum
values: [C, R, S]
description: "C=config, R=renderer, S=server"
- name: bb
type: integer
description: "row index to modify"
- name: ccc
type: integer
description: "column index to modify (000 for single columns)"
- name: z
type: string
description: "data to store"
- id: set_static_ip
label: Set Static IP Address
kind: action
command: "QSETIP{ip}"
params:
- name: ip
type: string
description: "aaa.aaa.aaa.aaa"
- id: set_subnet_mask
label: Set Subnet Mask
kind: action
command: "QSETMK{mask}"
params:
- name: mask
type: string
description: "aaa.aaa.aaa.aaa"
- id: set_gateway
label: Set Gateway Address
kind: action
command: "QSETGW{gw}"
params:
- name: gw
type: string
description: "aaa.aaa.aaa.aaa"
- id: set_dns
label: Set DNS Address
kind: action
command: "QSETDN{dns}"
params:
- name: dns
type: string
description: "aaa.aaa.aaa.aaa"
- id: set_broadcast
label: Set Broadcast Address
kind: action
command: "QSETBC{bc}"
params:
- name: bc
type: string
description: "aaa.aaa.aaa.aaa"
- id: set_dhcp
label: Set DHCP Mode
kind: action
command: "QSETDHCP{x}"
params:
- name: x
type: enum
values: ["0", "1"]
description: "0=STATIC, 1=DHCP"
- id: set_wireless
label: Set Wireless On/Off
kind: action
command: "QSETWLAN{x}"
params:
- name: x
type: enum
values: ["0", "1"]
description: "0=wireless off, 1=wireless on (adapter required)"
- id: set_ssid
label: Set SSID
kind: action
command: "QSETSSID{ssid}"
- id: set_wpa_password
label: Set WPA PSK Password
kind: action
command: "QSETPWD{pwd}"
- id: stat_eth0
label: Request Ethernet Details
kind: query
command: "QSTATETH0"
- id: restart
label: Reboot Device
kind: action
command: "QRESTART"
- id: halt
label: Halt OS
kind: action
command: "QHALT"
notes: "Halt OS so power can be removed safely"
- id: update_firmware
label: Update Firmware
kind: action
command: "QUPDATEFW"
notes: "Updates firmware from web server and reboots"
- id: send_sddp
label: Send SDDP Identity Event
kind: action
command: "QSDDPI"
- id: stat_version
label: Request Device Version
kind: query
command: "QSTATVER"
- id: stat_config
label: Request Config Data
kind: query
command: "QSTATCONF{a}{bbb}"
params:
- name: a
type: enum
values: [C, R, S]
description: "C=config, S=server, R=renderer"
- name: bbb
type: integer
description: "row index (255 returns all rows with header)"
- id: stat_i2s
label: Request Audio Channel Info
kind: query
command: "QSTATI2S{a}"
params:
- name: a
type: integer
description: "optional output index; omit for all"
- id: stat_i2d
label: Request Virtual Channel Info
kind: query
command: "QSTATI2D{aa}"
params:
- name: aa
type: integer
description: "virtual channel 01-48"
- id: save_metadata
label: Save Current Song Metadata
kind: action
command: "QSAVE{a}"
params:
- name: a
type: integer
description: "audio channel number"
- id: stat_top
label: Request CPU Utilization
kind: query
command: "QSTATTOP"
- id: coverart
label: Request Coverart JPG
kind: query
command: "QCOVERART{#}"
params:
- name: channel
type: integer
description: "output channel number"
notes: "Returns base64 JPG framed by QCOVERART#<cr>OK<cr>width height size JPGDATA<cr>"
- id: delete_profile
label: Delete Source Profile
kind: action
command: "QDELP{###}"
params:
- name: p
type: string
description: "profile number; omit to delete all"
- id: read_profile
label: Read Source Profile
kind: query
command: "QREADP{###}"
params:
- name: p
type: string
description: "profile number; omit to read all"
# --- Transport controls ---
- id: play
label: Play
kind: action
command: "QPLAY{#}"
params:
- name: channel
type: integer
description: "output channel 1-8 (NBX010/VRX010 is always 1)"
- id: stop
label: Stop
kind: action
command: "QSTOP{#}"
params:
- name: channel
type: integer
description: "output channel 1-8"
- id: disconnect
label: Disconnect (NDCN not issued)
kind: action
command: "QDSCN{#}"
params:
- name: channel
type: integer
description: "output channel 1-8"
notes: "Same as stop but NDCN is not issued"
- id: pause
label: Pause
kind: action
command: "QPAUSE{#}"
params:
- name: channel
type: integer
description: "output channel 1-8"
- id: play_pause_toggle
label: Toggle Play/Pause
kind: action
command: "QPLPAUSE{#}"
params:
- name: channel
type: integer
description: "output channel 1-8"
- id: skip_forward
label: Skip Forward
kind: action
command: "QSKIPFW{#}"
params:
- name: channel
type: integer
description: "output channel 1-8"
- id: skip_back
label: Skip Backward
kind: action
command: "QSKIPBK{#}"
params:
- name: channel
type: integer
description: "output channel 1-8"
- id: signal_pause
label: Start Pause Timer
kind: action
command: "QSIGPS{#}"
params:
- name: channel
type: integer
description: "output channel 1-8"
notes: "Starts pause timer but does not pause"
- id: seek_forward
label: Seek Forward (video)
kind: action
command: "QSEEKFW{xxx}"
params:
- name: seconds
type: integer
description: "seconds to seek forward"
- id: seek_backward
label: Seek Backward (video)
kind: action
command: "QSEEKBW{xxx}"
params:
- name: seconds
type: integer
description: "seconds to seek backward"
- id: low_latency
label: Set Low Latency Mode
kind: action
command: "QLOWLAT"
- id: high_latency
label: Set High Latency Mode (default)
kind: action
command: "QHIGHLAT"
# --- Decoder volume / EQ / delay (NetPlay Audio) ---
- id: set_volume
label: Set Decoder Volume
kind: action
command: "QASETVOL{xxx}"
params:
- name: vol
type: integer
description: "0-256 (192 nominal)"
- id: set_balance
label: Set Decoder Balance
kind: action
command: "QASETBAL{xxx}"
params:
- name: bal
type: integer
description: "0-256 (128 nominal)"
- id: set_bass
label: Set Decoder Bass
kind: action
command: "QASETBASS{xxx}"
params:
- name: bass
type: integer
description: "0-256 (128 nominal)"
- id: set_treble
label: Set Decoder Treble
kind: action
command: "QASETTREB{xxx}"
params:
- name: treb
type: integer
description: "0-256 (128 nominal)"
- id: set_audio_delay
label: Set Decoder Audio Delay
kind: action
command: "QASETDEL{xxx}"
params:
- name: delay
type: integer
description: "0-256 (1/4 frame per tick)"
# --- Audio transmit (NAB audio return, NBX/VRX rebroadcast) ---
- id: at_play
label: Start Audio Stream (RTSP)
kind: action
command: "QATPL{#} {rtsp_url}"
params:
- name: channel
type: integer
description: "output I2S channel number"
- name: rtsp_url
type: string
description: "RTSP source URL (e.g. rtsp://ip:8554/input1)"
- id: at_stop
label: Stop Audio Stream
kind: action
command: "QATSP{#}"
params:
- name: channel
type: integer
description: "output I2S channel number"
# --- Video decode controls ---
- id: video_play_first
label: Play First URL (video)
kind: action
command: "QVMPF {options} {url}"
params:
- name: options
type: string
description: "options string"
- name: url
type: string
description: "media URL"
notes: "This command STOPS any current streams"
- id: video_play_url
label: Play URL (video)
kind: action
command: "QVMPL {options} {url}"
params:
- name: options
type: string
description: "options string"
- name: url
type: string
description: "media URL"
- id: xbmc_on
label: XBMC GUI On
kind: action
command: "QXBMCON"
- id: xbmc_off
label: XBMC GUI Off
kind: action
command: "QXBMCOFF"
- id: toggle_debug_osd
label: Toggle Debug OSD
kind: action
command: "QSTATOSD"
- id: stat_video
label: Request Currently Playing Video Info
kind: query
command: "QSTATVID"
# --- Video encode controls ---
- id: venc_play
label: Start Video Encode Stream
kind: action
command: "QVENCPL {#a} {dest_ip} {options}"
params:
- name: input
type: integer
description: "input number + stream#*2"
- name: dest_ip
type: string
description: "udp://IP:Port or rtp://IP:port/ttl"
- name: options
type: string
description: "encode options"
- id: venc_stop
label: Stop Video Encode Stream
kind: action
command: "QVENCSTOP {#a} {dest_ip}"
params:
- name: input
type: integer
description: "input number (optional; omit to stop all)"
- name: dest_ip
type: string
description: "destination IP (optional; omit to stop all streams from input)"
- id: stat_encode
label: Request Encode Stream Info
kind: query
command: "QSTATENC"
# --- Video encode config ---
- id: venc_edid_mask
label: Set Encoder EDID Mask
kind: action
command: "QVENCEDIDM{a}{x}"
params:
- name: a
type: integer
description: "input 0 or 1"
- name: x
type: string
description: "4-bit bitfield: bit0=AC3, bit1=DDP, bit2=DTS, bit3=MCA; 0=nothing masked"
- id: venc_audio_out_mode
label: Set Encoder Audio Output Mode
kind: action
command: "QVENCAOUTM{a}{b}"
params:
- name: a
type: enum
values: ["0", "1"]
description: "0=analog output, 1=optical output"
- name: b
type: enum
values: ["0", "1", "2", "3", "4"]
description: "0=audio same as hdmi out, 1=delayed feed through, 2=both hdmi (L=ch1, R=ch2), 3=delay hdmi1, 4=delay hdmi2"
# --- RS232 control ---
- id: rs232_send_base64
label: Send Base64 RS232 Data
kind: action
command: "QSRS{base64_data}"
params:
- name: data
type: string
description: "base64 encoded payload"
# --- IR controls (decoder) ---
- id: ir_pulse
label: Pulse IR (decoder)
kind: action
command: "QSIRPULSE R={repeat} {hex_code}"
params:
- name: repeat
type: integer
description: "repeat count"
- name: hex_code
type: string
description: "proto format hex code"
- id: ir_start
label: Start IR (decoder)
kind: action
command: "QSIRSTART {hex_code}"
params:
- name: hex_code
type: string
description: "proto format hex code"
- id: ir_stop
label: Stop IR (decoder)
kind: action
command: "QSIRSTOP {hex_code}"
params:
- name: hex_code
type: string
description: "proto format hex code"
# --- IR controls (source; a = 0 or 1) ---
- id: ir_pulse_source
label: Pulse IR (source)
kind: action
command: "QSIRPULSE{a} R={repeat} {hex_code}"
params:
- name: a
type: integer
description: "source index 0 or 1"
- name: repeat
type: integer
- name: hex_code
type: string
- id: ir_start_source
label: Start IR (source)
kind: action
command: "QSIRSTARE{a} {hex_code}"
params:
- name: a
type: integer
description: "source index 0 or 1"
- name: hex_code
type: string
notes: "Source uses spelling QSIRSTARE in the source document"
- id: ir_stop_source
label: Stop IR (source)
kind: action
command: "QSIRSTOP{a} {hex_code}"
params:
- name: a
type: integer
description: "source index 0 or 1"
- name: hex_code
type: string
# --- CEC controls ---
- id: cec_on
label: CEC TV On
kind: action
command: "QCECON"
- id: cec_off
label: CEC TV Off
kind: action
command: "QCECOFF"
- id: cec_select
label: CEC Select This HDMI Input
kind: action
command: "QCECSEL"
- id: cec_vol_up
label: CEC Amp Volume Up
kind: action
command: "QCECVOLU"
- id: cec_vol_down
label: CEC Amp Volume Down
kind: action
command: "QCECVOLD"
- id: cec_mute_toggle
label: CEC Amp Mute Toggle
kind: action
command: "QCECMUTE"
- id: cec_tx
label: Send Generic CEC Command
kind: action
command: "QCECTX {cmd}"
params:
- name: cmd
type: string
description: "raw CEC command"
# --- OSD / Power ---
- id: set_osd
label: Set OSD
kind: action
command: "QSETOSD -d {duration} -t {text}"
params:
- name: duration
type: integer
description: "seconds; 0 for always"
- name: text
type: string
description: "text to display"
- id: low_power
label: Set Low Power Mode
kind: action
command: "QLOWPOW{x}"
params:
- name: x
type: integer
description: "optional subdevice to power down"
notes: "Normal mode restored by any switching command"
# --- Virtual matrix commands ---
- id: vm_video_output
label: VM Video Output Control
kind: action
command: "V{aaa}{bbb}"
params:
- name: sink
type: integer
description: "001-999"
- name: source
type: integer
description: "001-999"
- id: vm_audio_return
label: VM Audio Return Channel Output
kind: action
command: "A{aaa}{bbb}"
params:
- name: sink
type: integer
description: "001-999"
- name: decoder
type: integer
description: "001-999"
notes: "VTX audio output must also be bound as SINK"
- id: vm_macro
label: VM Macro Control
kind: action
command: "MACRO{aa} {b} {c} {d} {e} {f} {g}"
params:
- name: macro_id
type: integer
description: "01-99"
- name: b
type: string
description: "optional param; convention: sink number"
- name: c
type: string
- name: d
type: string
- name: e
type: string
- name: f
type: string
- name: g
type: string
- id: vm_matrix_display
label: VM Video Output - Matrix Display
kind: action
command: "SW{aaa} {x} {bbb} {ccc} {ddd} {eee} ..."
params:
- name: output
type: integer
description: "001-999"
- name: layout
type: integer
description: "display layout number"
- name: inputs
type: string
description: "one or more input numbers 001-999"
- id: vm_matrix_subwindow
label: VM Matrix Subwindow
kind: action
command: "SWS{aaa} {x} {bb} {ccc}"
params:
- name: output
type: integer
description: "001-999"
- name: layout
type: integer
- name: subwindow
type: integer
description: "01-16"
- name: input
type: integer
description: "001-999"
- id: vm_audio_output_gain
label: VM Audio Output Gain
kind: action
command: "G{aaa}{bbb}"
params:
- name: output
type: integer
description: "001-999"
- name: gain
type: string
description: "000-255 (000=mute), or U/D/MT/MF/M on firmware 1.5+"
- id: vm_audio_input_gain
label: VM Audio Input Gain
kind: action
command: "E{aaa}{bbb}"
params:
- name: input
type: integer
description: "001-MAX"
- name: gain
type: integer
description: "000-255 (128 nominal)"
- id: vm_audio_output_balance
label: VM Audio Output Balance
kind: action
command: "M{aaa}{bbb}"
params:
- name: input
type: integer
description: "001-MAX"
- name: balance
type: integer
description: "000-255 (128 nominal)"
- id: vm_audio_bass
label: VM Audio Bass
kind: action
command: "B{aaa}{bbb}"
params:
- name: input
type: integer
description: "001-MAX"
- name: bass
type: integer
description: "000-255 (128 nominal)"
- id: vm_audio_treble
label: VM Audio Treble
kind: action
command: "T{aaa}{bbb}"
params:
- name: input
type: integer
description: "001-MAX"
- name: treb
type: integer
description: "000-255 (128 nominal)"
- id: vm_audio_input_delay
label: VM Audio Input Delay
kind: action
command: "X{aaa}{bbb}"
params:
- name: input
type: integer
description: "001-MAX"
- name: delay
type: string
description: "000-255 (0.25 frame step), or U/D"
- id: vm_audio_output_delay
label: VM Audio Output Delay
kind: action
command: "D{aaa}{bbb}"
params:
- name: output
type: integer
description: "001-MAX"
- name: delay
type: string
description: "00-255 (0.25 frame step), or U/D"
- id: set_hdhr_channel
label: Set HDHomeRun Channel
kind: action
command: "SETCHAN{aaa}{bbb}"
params:
- name: output
type: integer
description: "001-MAX"
- name: channel
type: string
description: "001-999, or UP, DN, UPF, DNF"
- id: stat_outputs
label: Request VM Device Status
kind: query
command: "STAT"
- id: stat_audio_settings
label: Request VM Audio Settings
kind: query
command: "STATL"
- id: flash_modes
label: Flash Modes Control
kind: action
command: "F{aa}{b}"
params:
- name: slot
type: integer
description: "01-99"
- name: b
type: enum
values: [S, R]
description: "S=save, R=recall"
- id: vm_stat_sinks
label: Request Sinks Status
kind: query
command: "QSINK"
- id: vm_stat_sources
label: Request Sources Status
kind: query
command: "QSRC"
- id: vm_read_profiles
label: Get Profile Info From All Sinks
kind: query
command: "QREADP"
notes: "Return data can take up to 1 minute"
- id: vm_regen_profiles
label: Regenerate Source Profiles On All Sinks
kind: action
command: "QREDOP"
notes: "Takes 30 seconds * sources * sinks to complete"
- id: vm_get_source_ip
label: Get Source IP
kind: query
command: "QSGETIP{xxx}"
params:
- name: source
type: string
description: "source identifier"
- id: vm_get_decoder_ip
label: Get Decoder IP
kind: query
command: "QDGETIP{xxx}"
params:
- name: decoder
type: string
description: "decoder identifier"
- id: vm_set_decoder_id
label: Set Decoder ID OSD
kind: action
command: "QSETDID"
notes: "Sets the OSD on each decoder to display the decoder ID"
- id: vm_stat_hdhr_lineup
label: Request HDHomeRun Channel Lineup
kind: query
command: "QSTATHDHRLUP"
# --- VM XBMC ---
- id: vm_xbmc_on
label: VM XBMC GUI On
kind: action
command: "QXBMCON{xxx}"
params:
- name: target
type: string
description: "decoder or source #"
- id: vm_xbmc_off
label: VM XBMC GUI Off
kind: action
command: "QXBMCOFF{xxx}"
params:
- name: target
type: string
description: "decoder or source # (000 = all)"
notes: "Sent automatically when V command used"
# --- VM IR (decoder) ---
- id: vm_ir_pulse_decoder
label: Pulse IR (decoder, VM)
kind: action
command: "QDIRPULSE{xxx} R={repeat} {hex_code}"
params:
- name: target
type: string
- name: repeat
type: integer
- name: hex_code
type: string
- id: vm_ir_start_decoder
label: Start IR (decoder, VM)
kind: action
command: "QDIRSTART{xxx} {hex_code}"
params:
- name: target
type: string
- name: hex_code
type: string
- id: vm_ir_stop_decoder
label: Stop IR (decoder, VM)
kind: action
command: "QDIRSTOP{xxx}"
params:
- name: target
type: string
notes: "Stops all IR codes"
# --- VM IR (source) ---
- id: vm_ir_pulse_source
label: Pulse IR (source, VM)
kind: action
command: "QSIRPULSE{xxx} R={repeat} {hex_code}"
params:
- name: target
type: string
- name: repeat
type: integer
- name: hex_code
type: string
- id: vm_ir_start_source
label: Start IR (source, VM)
kind: action
command: "QSIRSTART{xxx} {hex_code}"
params:
- name: target
type: string
- name: hex_code
type: string
- id: vm_ir_stop_source
label: Stop IR (source, VM)
kind: action
command: "QSIRSTOP{xxx}"
params:
- name: target
type: string
notes: "Stops all IR codes"
# --- VM IR (zone) ---
- id: vm_ir_pulse_zone
label: Pulse IR (zone, VM)
kind: action
command: "QFIRPULSE{xxx} R={repeat} {hex_code}"
params:
- name: zone
type: string
- name: repeat
type: integer
- name: hex_code
type: string
notes: "Sent to source currently selected by zone xxx"
# --- VM Ethernet ---
- id: vm_send_url_decoder
label: Send URL To Sink
kind: action
command: "QDETH{xxx} {url}"
params:
- name: target
type: string
- name: url
type: string
description: "URL-encoded Ethernet control URL"
- id: vm_send_url_source
label: Send URL To Source
kind: action
command: "QSETH{xxx} {url}"
params:
- name: target
type: string
- name: url
type: string
description: "URL-encoded Ethernet control URL"
# --- VM IR/ETH database ---
- id: vm_ir_code_decoder
label: Predefined IR Code (decoder, VM)
kind: action
command: "QDIRCODE{xxx}{yyy} R={repeat}"
params:
- name: target
type: string
- name: code_id
type: string
- name: repeat
type: integer
- id: vm_ir_code_source
label: Predefined IR Code (source, VM)
kind: action
command: "QSIRCODE{xxx}{yyy} R={repeat}"
params:
- name: target
type: string
- name: code_id
type: string
- name: repeat
type: integer
- id: vm_ir_code_zone
label: Predefined IR Code (zone, VM)
kind: action
command: "QFIRCODE{xxx}{yyy} R={repeat}"
params:
- name: zone
type: string
- name: code_id
type: string
- name: repeat
type: integer
notes: "Sent to source currently selected by zone xxx"
# --- VM Delay (macros/scripts) ---
- id: vm_wait
label: Wait (VM macro)
kind: action
command: "WAIT {x}"
params:
- name: seconds
type: integer
notes: "Used in macros/scripts only"
- id: vm_time
label: Pause Until UTC Time (VM macro)
kind: action
command: "TIME {h} {m} {s}"
params:
- name: h
type: integer
- name: m
type: integer
- name: s
type: integer
notes: "Used in macros/scripts only"
- id: vm_day
label: Pause Until Day Of Week (VM macro)
kind: action
command: "DAY {d}"
params:
- name: d
type: integer
description: "Sunday is day 1, UTC time"
notes: "Used in macros/scripts only"
# --- VM RS232 ---
- id: vm_rs232_send
label: Send Base64 RS232 To Sink
kind: action
command: "QSRS{xxx}{base64_data}"
params:
- name: target
type: string
- name: data
type: string
description: "base64 encoded payload"
# --- VM CEC ---
- id: vm_cec_on
label: VM CEC TV On
kind: action
command: "QCECON{xxx}"
- id: vm_cec_off
label: VM CEC TV Off
kind: action
command: "QCECOFF{xxx}"
- id: vm_cec_select
label: VM CEC HDMI Select
kind: action
command: "QCECSEL{xxx}"
- id: vm_cec_vol_up
label: VM CEC Amp Volume Up
kind: action
command: "QCECVOLU{xxx}"
- id: vm_cec_vol_down
label: VM CEC Amp Volume Down
kind: action
command: "QCECVOLD{xxx}"
- id: vm_cec_mute
label: VM CEC Amp Mute Toggle
kind: action
command: "QCECMUTE{xxx}"
- id: vm_cec_tx
label: VM CEC Send Generic
kind: action
command: "QCECTX{xxx} {cmd}"
params:
- name: target
type: string
- name: cmd
type: string
# --- VM OSD ---
- id: vm_set_osd
label: VM OSD
kind: action
command: "QSETOSD{xxx} -d {duration} -t {text} -w {window}"
params:
- name: target
type: string
description: "000 for all sinks"
- name: duration
type: integer
- name: text
type: string
- name: window
type: string
description: "x1 y1 x2 y2"
- id: vm_video_osd
label: VM Video OSD (PIP)
kind: action
command: "QVOSD{xxx}{yyy} {z} {d} {o}"
params:
- name: sink
type: string
- name: source
type: string
- name: format
type: integer
description: "1-8"
- name: duration
type: integer
- name: overlay
type: enum
values: ["0", "1", "2"]
description: "0=Netplay/Android PIP, 1=passive, 2=interactive"
- id: vm_stop_video_osd
label: VM Stop Video OSD (PIP)
kind: action
command: "QVOSSP{xxx}"
params:
- name: sink
type: string
- id: vm_pip_swap
label: VM Swap PIP / Fullscreen
kind: action
command: "QPIPSWAP{xxx}"
params:
- name: sink
type: string
- id: vm_pip_full
label: VM PIP Video To Fullscreen
kind: action
command: "QPIPFULL{xxx}"
params:
- name: sink
type: string
# --- VM Latency / Profile / Power ---
- id: vm_low_latency
label: VM Set Low Latency
kind: action
command: "QLOWLAT{xxx}"
params:
- name: target
type: string
- id: vm_high_latency
label: VM Cancel Low Latency
kind: action
command: "QHIGHLAT{xxx}"
params:
- name: target
type: string
- id: vm_reprofile
label: VM Re-profile All Inputs
kind: action
command: "QPROFILE{xxx}"
params:
- name: output
type: string
description: "999 = all outputs"
- id: vm_low_power
label: VM Low Power All Devices
kind: action
command: "QLOWPOW"
notes: "Normal mode restored by any switching command"
# --- VM Encoder settings ---
- id: vm_venc_edid_mask
label: VM Set EDID Mask On Source
kind: action
command: "QVENCEDIDM{aaa}{x}"
params:
- name: source
type: string
- name: mask
type: string
description: "4-bit bitfield"
- id: vm_venc_aout_mode
label: VM Set Audio Output Mode On Source
kind: action
command: "QVENCAOUTM{aaa}{b}{c}"
params:
- name: source
type: string
- name: a
type: string
- name: b
type: string
- id: vm_aset_delay
label: VM Set Audio Output Delay On Source
kind: action
command: "QASETDEL{aaa}{xxx}"
params:
- name: source
type: string
- name: delay
type: integer
# --- Audio delay device ---
- id: qdddevs
label: Return Audio Delay Device Settings
kind: query
command: "QDDDEVS"
- id: qddset
label: Set Audio Delay Device Config
kind: action
command: "QDDSET{xx} {Y} {Z} {H}"
params:
- name: device
type: string
- name: Y
type: integer
description: "delay in ms"
- name: Z
type: enum
values: ["0", "1"]
description: "0=analog, 1=digital"
- name: H
type: enum
values: ["0", "1"]
description: "0=48Khz, 1=44.1Khz"
# --- Dynamic URL ---
- id: set_tmp_url
label: Set Dynamic Source URL
kind: action
command: "QSETTMP{aaa} {url}"
params:
- name: source
type: string
- name: url
type: string
notes: "Reset by reload, reboot, or next QSETTMP. .png/.jpg/.jpeg -> Image URL type; .mp4/.mkv/.ts -> Video URL type."
Feedbacks
# Query responses documented in the source. Specific framing strings reproduced verbatim.
- id: eth0_status
label: eth0 Interface Details
description: "ifconfig details on eth0 framed by QSTATETH0<cr>OK<cr>Data"
source_command: "QSTATETH0"
- id: version
label: Device Version
description: "Version string framed by QSTATVER<cr>OK<cr>"
source_command: "QSTATVER"
- id: config_data
label: Config Row Data
description: "All data columns of the requested row framed by QSTATCONFabbb<cr>OK<cr>Data"
source_command: "QSTATCONF"
- id: i2s_status
label: I2S Audio Status
description: "Header with column labels + 8 rows of data framed by QSTATI2S<cr>OK<cr>"
source_command: "QSTATI2S"
- id: i2d_status
label: Virtual Channel Status
description: "1 line of data in the I2S format"
source_command: "QSTATI2D"
- id: cpu_top
label: CPU Utilization (top output)
description: "top output framed by QSTATTOP<cr>OK<cr>Data"
source_command: "QSTATTOP"
- id: coverart_jpg
label: Coverart JPG
description: "QCOVERART#<cr>OK<cr>width height size JPGDATA<cr>; JPGDATA is base64 encoded"
source_command: "QCOVERART"
- id: profile_info
label: Source Profile Info
description: "Profile_number num_streams video_res video_aspect audio0_channels audio1_channels"
source_command: "QREADP"
- id: vm_sinks
label: VM Sinks Status
description: "Status of all sinks in order separated by <cr>"
source_command: "QSINK"
- id: vm_sources
label: VM Sources Status
description: "Status of all sources in order separated by <cr>"
source_command: "QSRC"
- id: vm_video_info
label: Active Video Stream Info
description: "One line per active video stream: url options latency state media_time duration"
source_command: "QSTATVID"
- id: vm_encode_info
label: Active Encode Stream Info
description: "One line per active video stream: Source instance _DEST_IP details_"
source_command: "QSTATENC"
- id: vm_status
label: VM Device Status
description: "Vaaabbb for each output"
source_command: "STAT"
- id: vm_audio_status
label: VM Audio Settings Status
description: "All audio settings for each input and output"
source_command: "STATL"
- id: vm_hdhr_lineup
label: HDHomeRun Channel Lineup
description: "num/name separated by <cr>"
source_command: "QSTATHDHRLUP"
- id: audio_delay_device_settings
label: Audio Delay Device Settings
description: "Returned by QDDDEVS"
source_command: "QDDDEVS"
Variables
# UNRESOLVED: source describes parameter ranges and units but does not publish a
# structured variable catalog. Ranges are documented inline on each action.
# Removed section per spec policy; see action params for ranges.
Events
# UNRESOLVED: source does not document unsolicited device-initiated event
# notifications. All responses are framed replies to queries.
Macros
# The VM MACRO command runs numbered macros (01-99) defined in the VM driver.
# Macro bodies are not enumerated in the source; only the invocation form is.
- id: vm_macro_run
label: VM Macro Invocation
command: "MACRO{aa} {b} {c} {d} {e} {f} {g}"
params:
- name: macro_id
type: integer
description: "01-99"
- name: b
type: string
description: "parameter (b-g optional; inside macros \"bbb\" is replaced by passed parameter)"
source: "NetPlay VM Controls section"
Safety
# Source explicitly states:
# - QHALT halts the OS so power can be removed safely (power-down sequencing).
# - STOPPING the service causes disconnection and prevents restart via this interface.
# - Pausing keeps the connection active for up to 5 minutes before disconnecting.
# - Live streams have limited transport control.
confirmation_required_for:
- "QHALT" # source: power can be removed only after this command
- "QRESTART" # source: reboots device
- "QUPDATEFW" # source: updates firmware and reboots
- "QLOWPOW" # source: places device in low power mode
- "VM QLOWPOW" # source: places all devices in low power mode
interlocks:
- "QHALT must be issued before removing power to prevent filesystem corruption (inferred from \"Halt NBX OS so power can be removed safely\")."
# UNRESOLVED: no formal interlock matrix or safety warning table is published
# in the source; the list above is restricted to statements the source makes
# explicitly.
Notes
- All commands are terminated by a single
<cr>(0x0D). The source emphasizes that<cr>refers to the ASCII character, not the four-character string. - NBX/VRX echo back all characters sent to it; the echo is the easiest cable check. NBX does not add
<lf>after<cr>. Echo is only sent for valid commands terminated by<cr>. - Ports: 23 (single-connection Telnet), 9091 (multi-connection Telnet), 9092 (virtual matrix control), 9090 (Squeezebox CLI / XBMC JSON), 80 (HTTP coverart and
vm_request.php). - NetPlay general commands start with
Qand end with<cr>. VM commands do not use theQprefix except for the query variants (QSINK,QSRC,QREADP,QREDOP, etc.). - For NBX/VRX, unrecognized data is forwarded unaltered to RS232 TX. For NAB, unrecognized data is forwarded to the CMX microprocessor prefixed with
&. NAB also accepts an explicit/Fforwarding directive. - HTTP control URL:
http://<VMM-IP>/vm_request.php?cmd=PROTOCOLCMD(PROTOCOLCMD must be URL-encoded). - Cover art URL:
http://<NBA-IP:80>/coverart<#>where#is the output channel. - The source documents the device family as NetPlay, with hardware variants NBX100, VRX010, NBX010 (USB-RS232), NAB (CMX1616A2 / CMX3838A1 internal board), and VTX. A single spec covers all variants because they share the same command set; behaviour differences (e.g. NBX100 has no server file) are noted inline.
- Audio transmit URL conventions: VRX audio return is
rtsp://ip:8554/input1; NAB inputs arertsp://ip:8554/input1..input8; virtual channels arertsp://ip:8554/inputv01..inputv48; test signal isrtsp://ip:8554/test. Default encoding L16-44100;/aac_xfor AAC;/raw_xfor raw bitstream.
Spec written to `/tmp/video_storm_netplay_video_spec.md` and shown above. 134 distinct action rows enumerated, no values fabricated, gaps marked.
## Provenance
```yaml
source_domains:
- video-storm.com
source_urls:
- https://www.video-storm.com/Downloads/NetPlay_protocol.pdf
retrieved_at: 2026-06-01T23:33:35.496Z
last_checked_at: 2026-06-04T06:32:25.671Z
Verification Summary
verdict: verified
checked_at: 2026-06-04T06:32:25.671Z
matched_actions: 134
action_count: 134
confidence: medium
summary: "All 134 spec actions matched verbatim command tokens in source; transport parameters verified; comprehensive coverage. (8 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "source covers both NetPlay Audio and NetPlay Video under the same guide; only the video-side commands are emphasized in the device name, but the audio commands are included for completeness."
- "source describes parameter ranges and units but does not publish a"
- "source does not document unsolicited device-initiated event"
- "no formal interlock matrix or safety warning table is published"
- "firmware version compatibility ranges are not stated in the source. The \"1.5 and up\" remark on the VM `G` command is the only firmware-bound feature mentioned."
- "voltage, current, and power specifications are not stated in the source."
- "protocol version numbers for the control socket are not stated in the source."
- "timing requirements beyond \"echo on valid commands\" and \"STATL can take up to 1 minute\" / \"QREDOP = 30s * sources * sinks\" are not stated."
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0