Skip to content

Operations

magicint1337 edited this page Sep 5, 2025 · 1 revision

Running and 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.


Contents

  • 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

Start the server

  1. Build backend and frontend (see: Installation)
  2. Prepare a valid config.toml (see: Configuration)
  3. Launch NovaSDR and pipe samples from your SDR capture tool

Basic pattern:

<your_sdr_tool> [args] - | ./build/spectrumserver --config config.toml

Examples (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.toml

Open the UI: http://localhost:9002 (or your configured port).


Command-line options

Run:

./build/spectrumserver --help

Useful flags:

  • -c, --config <file> — Path to config TOML (default config.toml)
  • -l, --log <file> — Log to a file
  • -d, --debug — Enable debug logging

Argument parsing and help text are handled in:


Logs and expected startup flow

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:

  1. Loads configuration (parse via toml++ in main())
  2. Validates required keys (e.g., sps, frequency, signal)
  3. Sets up the FFT pipeline and WebSocket endpoints in the server constructor:
  4. Starts listening for connections and processing samples

Performance tuning

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" and audio_compression = "flac"
    • Set input.fft_threads = 1 unless you’ve measured a benefit
  • Accelerators (only if compiled in and runtime installed):

  • FFT decimation and memory sizing are derived internally:


Waterfall visibility

If the waterfall looks too dark or too bright, adjust:

[input]
brightness_offset = -6   # try small steps like -6, -4, 0, +4

Default UI state

Default frequency and demodulation mode for new clients:

[input.defaults]
frequency = 100900000
modulation = "WBFM"   # AM | SAM | FM | WBFM | USB | LSB

Default passbands per mode and initial bin mapping are derived during setup:


Multi-user limits and markers

Limit concurrent connections:

[limits]
audio = 100
waterfall = 200
events = 200

Show other listeners’ markers:

[server]
otherusers = 1

Optional station listing

Enable 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:


System service (example)

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

Stop and shutdown

  • Ctrl+C in the terminal
  • Or, if running as a service:
sudo systemctl stop novasdr.service

Shutdown path ensures connections are closed and threads joined:

Clone this wiki locally