Skip to content

Troubleshooting

Symptom: The app crashes immediately on launch, or shows a blank window.

Cause: Missing libwebkit2gtk-4.1 or libwebkit2gtk-4.0.

Fix:

Terminal window
# Ubuntu / Debian
sudo apt install libwebkit2gtk-4.1-0
# Older Ubuntu / Debian
sudo apt install libwebkit2gtk-4.0-37
# Fedora
sudo dnf install webkit2gtk4.1

Symptom: Tracks play (position advances) but no sound.

Steps:

  1. Go to SystemAudio Devices.
  2. Check that the Output bus is set to the correct device.
  3. Check that system volume is not muted.
  4. On Linux: check that PulseAudio or PipeWire is running.

Audio device not found after connecting hardware

Section titled “Audio device not found after connecting hardware”

Symptom: A USB audio interface or headset appears in system settings but not in brūhi.

Cause: brūhi enumerates audio devices at startup. Hot-plugged devices may not appear automatically.

Fix: Restart brūhi after connecting the device. Hot-plug re-enumeration is on the roadmap.


Symptom: JACK does not appear as an audio device option.

Cause: JACK must be running before brūhi starts.

Fix:

Terminal window
# Start JACK first
jackd -d alsa -r 48000 &
# Then start brūhi

If using PipeWire-JACK:

Terminal window
pw-jack bruhi-desktop

Symptom: A MIDI controller is connected but not showing in the MIDI mapping panel.

Steps:

  1. Confirm the MIDI device is detected by the OS (aconnect -l on Linux, Audio MIDI Setup on macOS).
  2. In brūhi, go to SystemMIDI and check the port list.
  3. If still not visible, restart brūhi (MIDI ports are enumerated at startup).

Symptom: SRT output shows as “connecting” or immediately disconnects.

Cause 1: libsrt is not installed on the host.

Fix: Install libsrt-dev (Linux) or the SRT binaries (Windows/macOS), then rebuild brūhi from source with --features srt.

Cause 2: Firewall blocking the SRT port (default 9000 UDP).

Fix: Open the UDP port in your firewall: sudo ufw allow 9000/udp


Symptom: Icecast/Shoutcast output reconnects every few minutes.

Steps:

  1. Check the Icecast server logs for the reason (too many listeners, source timeout, etc.).
  2. Increase the Icecast <source-timeout> setting in icecast.xml.
  3. Check network stability between brūhi and the Icecast server.
  4. Verify the Icecast <max-sources> limit has not been reached.

Symptom: Error dialog about database corruption or locked file.

Fix:

Terminal window
# macOS
cd ~/Library/Application\ Support/bruhi/
# Linux
cd ~/.local/share/bruhi/
# Windows
cd %APPDATA%\bruhi\
# Backup and remove the database to reset
cp bruhi.db bruhi.db.bak
rm bruhi.db

Restarting brūhi will create a fresh database. The library will need to be rescanned.


WebRTC connection drops after a few seconds

Section titled “WebRTC connection drops after a few seconds”

Symptom: DJ clicks “Go Live” and the stream appears active, but audio drops after 10–30 seconds.

Cause: WebRTC ICE renegotiation is not yet fully stable for connections longer than ~24 hours. Short drops during the same session may indicate NAT or firewall issues.

Workaround:

  1. Ensure the br\u016bhi dashboard is served over HTTPS (required for WebRTC in most browsers).
  2. Check that no firewall is blocking WebRTC ICE candidates (UDP ports typically in the 49152–65535 range).
  3. Consider restarting the station and reconnecting if the connection drops.

Symptom: Live audio stops and the station log shows a GStreamer error.

Steps:

  1. Retrieve the logs: GET /api/stations/{id}/logs?lines=200
  2. Look for ERROR or CRITICAL in the GStreamer output.
  3. Restart the station: POST /api/stations/{id}/restart

Common causes:

ErrorCauseFix
Could not initialize audiomixerGStreamer plugins missingRebuild or use the official Docker image
No such element 'webrtcbin'Missing gstreamer1.0-plugins-badAdd to Dockerfile
Stream ended unexpectedlyClient disconnected without ICE teardownRestart station; session cleanup in progress

Symptom: POST /api/stations/{id}/start returns an error about a port already in use.

Cause: The harbor port (8100 + N − 1) is already occupied by another process.

Steps:

Terminal window
# Find what's using the port (example: port 8100)
lsof -i :8100
# or
ss -tlnp | grep 8100

If the port is occupied by a previous br\u016bhi process, restart the container:

Terminal window
docker compose restart

Symptom: GET /api/stations/{id}/logs shows Liquidsoap errors immediately after start.

Common causes:

SymptomCauseFix
Syntax error in station.liqInvalid .liq fileCheck station config for typos
Could not open output to IcecastWrong Icecast password or hostCheck icecast.xml and .liq file match
harbor: Address already in usePort conflictCheck port availability (see above)
File not found: /app/playlists/station-N.m3u8Playlist file not created yetAdd tracks via the dashboard or API

Stream shows as offline even though DJ is live

Section titled “Stream shows as offline even though DJ is live”

Symptom: DJ is connected and on air in the dashboard, but listeners cannot connect.

Steps:

  1. Verify the Icecast mountpoint is active: open http://your-server:8005/status.xsl in a browser.
  2. Check the harbor port (8100 + N − 1) is open in the firewall.
  3. Confirm the Icecast output in the station’s .liq file has the correct mount, host, and password.
  4. Check station logs for output errors: GET /api/stations/{id}/logs.

Dashboard shows “Connection refused” after deploy

Section titled “Dashboard shows “Connection refused” after deploy”

Symptom: Opening http://your-server:8000 shows a connection error immediately after docker compose up.

Cause: The FastAPI server takes a few seconds to start. The container may not have fully initialized.

Fix:

Terminal window
# Wait for healthy status
docker compose ps
# Should show "healthy" after ~15 seconds
# Or check logs
docker compose logs bruhi

If it stays unhealthy, check docker compose logs for startup errors.