-
Notifications
You must be signed in to change notification settings - Fork 12
Operations
Operational guidance for starting NovaSDR, pairing it with your SDR capture tool, verifying status, and tuning performance. NovaSDR serves its UI itself; no external web servers are required.
Note
NovaSDR was previously called "PhantomSDR-Plus". You may still see legacy names in logs. Functionality is unchanged.
- Start the server
- Command-line options
- Logs and expected startup flow
- Performance tuning
- Waterfall visibility
- Default UI state
- Multi-user limits and markers
- Optional station listing
- System service (example)
- Stop and shutdown
- Build backend and frontend (see: Installation)
- Prepare a valid
config.toml(see: Configuration) - Launch NovaSDR and pipe samples from your SDR capture tool
Basic pattern:
<your_sdr_tool> [args] - | ./build/spectrumserver --config config.tomlExamples (ensure input.driver.format matches the tool output):
- RTL‑SDR (
u8):
rtl_sdr -g 48 -f 100900000 -s 2048000 - | ./build/spectrumserver --config config.toml- HackRF (
s8):
hackrf_transfer -r - -f 100900000 -s 10000000 | ./build/spectrumserver --config config.toml- Airspy HF+ (
s16):
airspy_rx -r - -f 648000 -s 912000 | ./build/spectrumserver --config config.toml- SDRplay RSP1A (
s16):
rx_sdr -d driver=sdrplay -f 7100000 -s 2000000 - | ./build/spectrumserver --config config.toml- RX888 MK2 real (
s16,signal=real):
rx888_stream -s 6000000 | ./build/spectrumserver --config config.tomlOpen the UI: http://localhost:9002 (or your configured port).
Run:
./build/spectrumserver --helpUseful flags:
-
-c, --config <file>— Path to config TOML (defaultconfig.toml) -
-l, --log <file>— Log to a file -
-d, --debug— Enable debug logging
Argument parsing and help text are handled in:
On startup, NovaSDR prints:
- A banner (includes version string)
- Config summary: port, station name, grid locator, chat status, registration status
- The UI URL (for example,
http://localhost:9002)
The program then:
- Loads configuration (parse via toml++ in
main()) - Validates required keys (e.g.,
sps,frequency,signal) - Sets up the FFT pipeline and WebSocket endpoints in the server constructor:
- Starts listening for connections and processing samples
Tip
If CPU usage is high at idle or you see “Out of memory” at startup, first reduce input.fft_size, then input.sps.
-
Lower CPU usage:
- Reduce
input.sps(sample rate) - Reduce
input.fft_size(e.g., 131072 → 65536) - Keep
waterfall_compression = "zstd"andaudio_compression = "flac" - Set
input.fft_threads = 1unless you’ve measured a benefit
- Reduce
-
Accelerators (only if compiled in and runtime installed):
-
accelerator = "opencl"for OpenCL -
accelerator = "cuda"for NVIDIA -
accelerator = "mkl"for MKL - Selection is validated during startup in
broadcast_server::broadcast_server()
-
-
FFT decimation and memory sizing are derived internally:
- See calculations near
broadcast_server::broadcast_server()
- See calculations near
If the waterfall looks too dark or too bright, adjust:
[input]
brightness_offset = -6 # try small steps like -6, -4, 0, +4Default frequency and demodulation mode for new clients:
[input.defaults]
frequency = 100900000
modulation = "WBFM" # AM | SAM | FM | WBFM | USB | LSBDefault passbands per mode and initial bin mapping are derived during setup:
Limit concurrent connections:
[limits]
audio = 100
waterfall = 200
events = 200Show other listeners’ markers:
[server]
otherusers = 1Enable periodic station updates to https://sdr-list.xyz:
[websdr]
register_online = true
name = "NovaSDR Station"
antenna = "Discone"
grid_locator = "JO62"
hostname = ""The background registration thread runs every ~60 seconds:
Example systemd unit (RTL‑SDR pipeline):
[Unit]
Description=NovaSDR (RTL-SDR)
After=network.target
[Service]
WorkingDirectory=/opt/novasdr
ExecStart=/bin/bash -lc 'rtl_sdr -g 48 -f 100900000 -s 2048000 - | ./build/spectrumserver --config config.toml'
Restart=on-failure
RestartSec=5
User=novasdr
Group=novasdr
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
Reload and enable:
sudo systemctl daemon-reload
sudo systemctl enable --now novasdr.service- Ctrl+C in the terminal
- Or, if running as a service:
sudo systemctl stop novasdr.serviceShutdown path ensures connections are closed and threads joined: