VitalRecorder manages device, bed, and filter settings through a single configuration file called vr.conf. This document describes the file structure and how to write it.
| Platform | Path |
|---|---|
| Windows | %APPDATA%\VitalRecorder\vr.conf |
| Linux | ./vr.conf > ~/vr.conf > /boot/vr.conf (searched in order) |
--conf <path> on the command line to specify an alternate configuration file.--conf - to read the configuration from standard input (no file needed). In this mode, settings are treated as read-only β VitalRecorder will not write back to any .conf file, so the original on-disk configuration is preserved. Useful for ad-hoc tests and containerized runs.# Run with a piped-in config (Git Bash / Linux shell)
./Vital.exe --console --conf - <<'EOF'
SAVEDIR=/tmp/vr_out
[BED/TEST]
[DEV/BIS]
type=BIS
port=127.0.0.1:4343
EOF
The file follows an INI-like format consisting of global settings and sections.
# Global settings (top of file)
KEY=VALUE
# Bed (tab) definition
[BED/bedname]
# Device under this bed
[DEV/devicename]
type=DeviceType
port=PortSpec
# Filter under this bed
[FILT/filter_module_name]
Rules:
KEY=VALUE pair per line[[DEV/...] and [FILT/...] sections belong to the preceding [BED/...][BED/...] can contain multiple devices and filtersSettings placed before any [BED/...] section.
| Key | Default | Description |
|---|---|---|
SAVEDIR | (system default) | Recording file save directory |
VRCODE | (auto-generated) | VitalRecorder identification code |
DEBUG | 0 | Debug mode (0: off, 1: on) |
FILENAME_TEMPLATE | %r_%y%m%d_%h%i%s | Recording filename template |
AUTO_DETECT | 0 | Detect serial devices automatically (0: off, 1: on). See Automatic Device Detection |
| Key | Default | Description |
|---|---|---|
RECORD_WHEN_START | 1 | Auto-record on launch (0: off, 1: on) |
CUT_FILE | 1 | Split file at patient boundaries (0: off, 1: on) |
CUT_HOURLY | 0 | Split file every hour (0: off, 1: on) |
CUT_BY | (none) | Signal for file split trigger (e.g., spo2, hr, any) |
PT_WAITING_TIME | 5 | Patient waiting time in minutes |
| Key | Default | Description |
|---|---|---|
SERVER_IP | (none) | VitalDB server address (IP:port) |
UPLOAD_SERVER_IP | (none) | File upload server address |
MONITOR_SERVER_IP | (none) | Web monitoring server address |
SEND_WEB | 1 | Send data to web server (0: off, 1: on) |
CLOUD_UPLOAD | 0 | Enable cloud upload (0: off, 1: on) |
VitalRecorder can verify the server TLS certificate for all HTTPS uploads and WebSocket monitoring connections, or it can accept any certificate (legacy behavior).
Note for the 1.x line: the default is
TLS_INSECURE=1(verification off). Many hospital deployments use private/self-signed CAs that are not installed system-wide, so forcing verification would break existing uploads. Sites that do have a trusted CA chain can opt in by settingTLS_INSECURE=0. Vital Recorder 2.0 is planned to flip this default.
| Key | Default | Description |
|---|---|---|
TLS_INSECURE | 1 | 1 skips peer and hostname verification (1.x default β preserves compatibility with private/self-signed hospital certificates). 0 enables full TLS verification using the system trust store (and TLS_EXTRA_CA if provided). |
TLS_EXTRA_CA | (none) | Absolute path to an additional CA bundle file (PEM). Added to the trust store on Linux/macOS (OpenSSL/curl). On Windows the system certificate store is used β install the hospital CA there instead; this key has no effect under WinInet. Only applies when TLS_INSECURE=0. |
Typical scenarios
TLS_INSECURE=0. The system CA store already trusts the server; no other setup required.TLS_INSECURE=0 and have the hospital IT team install the proxy's root CA into the Windows certificate store (Group Policy distribution is the normal path). On Linux/macOS/Raspberry Pi builds, point TLS_EXTRA_CA at the PEM file provided by IT.# Example β enable TLS verification, using a hospital-provided CA bundle on Linux/RPi
TLS_INSECURE=0
TLS_EXTRA_CA=/etc/vitalrecorder/hospital-root-ca.pem
# Example β enable TLS verification using only the Windows system certificate store
TLS_INSECURE=0
| Key | Default | Description |
|---|---|---|
START_MAXIMIZED | 1 | Start maximized |
START_MINIMIZED | 0 | Start minimized |
OPTION_MIN_TO_TRAY | 0 | Minimize to system tray |
OPTION_ALWAYS_ON_TOP | 0 | Always on top |
PLAY_SOUND | 1 | Play alarm sounds |
Up to 30 event preset labels can be defined with EVT_TEXT_0 through EVT_TEXT_29.
EVT_TEXT_0=Induction
EVT_TEXT_1=Intubation
EVT_TEXT_2=Incision
Defines a bed (tab). Multiple beds can be defined in a single configuration file.
[BED/OR1]
BED/ (e.g., OR1, ICU_BED3)Devices are added under a [BED/...] section.
[DEV/devicename]
type=DeviceType
port=PortSpec
| Key | Required | Description |
|---|---|---|
type | Yes | Device type (e.g., BIS, Intellivue, Solar8000) |
port | Yes | Connection port (see Port Formats below) |
company | No | Manufacturer (e.g., Nihon Kohden) |
readonly | No | Read-only mode (0: off, 1: on) |
| Format | Example | Description |
|---|---|---|
| COM port | COM1, COM3 | Windows serial port |
| TCP/IP | 192.168.1.100:4343 | Network device (IP:port) |
| Port number | 4343 | localhost TCP port |
| RPi serial | F1-F4 | Raspberry Pi AMA ports |
| RPi USB | LU, LU1-LU4 | USB Left Upper |
| RPi USB | RU, RU1-RU4 | USB Right Upper |
Setting AUTO_DETECT=1 in the global settings lets VitalRecorder work out what is connected to each serial port on its own, so you do not have to write a [DEV/...] section for serial devices at all.
AUTO_DETECT=1
[BED/OR1]
# no [DEV/...] needed for serial devices - they are found and recorded automatically
Devices you list explicitly always win. A port named in a [DEV/...] section is never touched by detection, so you can leave some devices declared and let the rest be found. This also means you can turn detection on for an existing configuration without changing anything else.
Detection runs continuously in the background. A device that is switched on later, or moved to a different port, is picked up within a couple of minutes without a restart.
Supported so far: Philips IntelliVue, DrΓ€ger (Medibus and Medibus.X β Primus, Atlan, and others), GE/Datex-Ohmeda S/5, Masimo Radical-7/Root, Daiwha DS-5000, Fresenius Kabi Link+. Devices outside this list still need a [DEV/...] section.
Network and USB-identified devices are unaffected. TCP ports, Bluetooth devices and anything addressed by IP still come from the configuration file as before.
Detection asks the port itself rather than guessing from the port name:
line, so a device is found even if it is not on the rate you would expect.
and one is accepted only when it decodes real, checksum-valid data. A driver that merely opens the port is not enough.
was found and where, for example [autodetect] AMA2 -> Datex-Ohmeda.
Because acceptance requires decoded data, a port with nothing attached simply stays empty rather than being assigned to the wrong device.
Keyword and IP filters can be appended to the port value.
port=PORT#keyword1 keyword2#keyword3@IP_SUFFIX
| Delimiter | Description |
|---|---|
# | Keyword OR group separator |
| (space) | AND condition within the same # group |
@ | IP address suffix filter |
Examples:
COM1#BIS -- accept only frames containing "BIS" on COM14343#HR SpO2#BP -- "HR AND SpO2" or "BP"[email protected] -- accept only connections from IPs ending in 10.1For ADC (Analog-to-Digital Converter) devices, per-channel settings are available.
| Key | Description |
|---|---|
srate | Sampling rate (Hz) |
parname1, parname2, ... | Parameter name for each channel |
gain1, gain2, ... | Voltage-to-physical-unit conversion gain for each channel |
[DEV/SNUADC]
type=SNUADC
port=COM3
srate=500
parname1=ECG
gain1=1.0
parname2=ART
gain2=100.0
Devices that use the Datex DRI protocol (S5, Solar8000, Bx50, B1x5M, Canvas) support per-device options to choose which waveforms are requested from the monitor.
| Key | Description |
|---|---|
wavs | Comma-separated list of waveforms to request (up to 8) |
waveonly | 1 = waveforms only, no numeric values; 0 = both (default) |
Available waveform names: ECG1, ECG2, PLETH (alias PPG), CO2, O2, N2O, AWP, IABP1βIABP8, EEG1, EEG2, EEGBIS, EEGENT, EEGENT400.
Invasive arterial pressure (ART) waveform: Use
IABP1βARTandINVP1are not recognized. The first invasive pressure channel (commonly labeled ART on the monitor screen) is mapped toIABP1.
Default waveforms when wavs is not set:
| Device | Default waveforms |
|---|---|
B1x5M (B105M / B115M / B125M) | ECG1, PLETH only β the B1x5M family cannot keep up with the full S5 stream, so the default is intentionally reduced |
| All other S5 / Solar8000 / Bx50 / Canvas | ECG1, PLETH, IABP1, CO2, AWP |
If you need additional waveforms on a B1x5M (e.g., invasive arterial pressure), list them explicitly:
[DEV/B1x5M]
type=B1x5M
port=LU
wavs=ECG1,PLETH,IABP1,CO2,AWP
Adds a real-time signal processing filter. Filter definitions are loaded from the filter server.
[FILT/filter_module_name]
modname of a filter registered on the server.Filter runtime (1.18.37+) β VitalRecorder downloads a slim Python 3.11 runtime (~27 MB) on first filter use, replacing the previous 121 MB pyvital-based bundle. The local server is provided by openvital (numpy + stdlib http.server, no async/web framework deps). Basic ECG / PPG / EEG filters work out of the box; ML-heavy filters (HPI, beat noise detector, rhythm classifier, dlapco SV) are gated behind the Install ML filters button in the Add Filter dialog, which runs pip install openvital[all] silently (no command window) and pulls PyTorch / TensorFlow only on demand.
vr --conf <path> Specify configuration file path
vr --console Run in console mode (no GUI)
vr --debug Console + debug mode
vr --debug test.conf Debug mode with specified config file
vr --version Show version info
vr --devtypes List supported device types
vr --help Show help
SAVEDIR=D:\VitalData
[BED/OR1]
[DEV/Solar8000]
type=Solar8000
port=COM1
SAVEDIR=D:\VitalData
VRCODE=OR1_PC
[BED/OR1]
[DEV/Intellivue]
type=Intellivue
port=192.168.1.100:4343
[DEV/BIS]
type=BIS
port=COM3
[DEV/Primus]
type=Primus
port=COM4
SAVEDIR=D:\VitalData
[BED/OR1]
[DEV/Solar8000]
type=Solar8000
port=COM1
[BED/OR2]
[DEV/Philips]
type=Intellivue
port=192.168.1.101:4343
SAVEDIR=C:\Users\lucid\Desktop
DEBUG=1
[BED/test]
[DEV/NK EGA]
type=EGA
company=Nihon Kohden
port=9001
[BED/OR1]
[DEV/Solar8000]
type=Solar8000
port=COM1
[FILT/pleth_spi]