A multi-camera RTSP dashboard built with Python, OpenCV, and PyQt5.
This application allows you to:
- View multiple RTSP camera feeds
- Record camera streams
- Automatically reconnect disconnected cameras
- Store camera settings in a JSON configuration file
- Add new cameras directly from the GUI
- Automatically organize recordings by date and hour
- Automatically clean up old recordings when disk usage becomes too high
When the application launches for the first time:
- A PyQt setup dialog appears
- You enter:
- Camera IP
- Camera name
- Username
- Password
- The application automatically creates
camera_config.json
Passwords are masked during entry.
- Live camera dashboard
- Individual recording controls
- Start/Stop all recording buttons
- Dynamic camera addition using the
+button - Dark theme UI
- Automatic camera tile removal on repeated failures
Install system dependencies:
sudo apt update
sudo apt install python3 python3-pip python3-venv gitClone the repository:
git clone https://github.com/BleedingCodes/pyqt-camera-dashboard.git
cd pyqt-camera-dashboardCreate and activate a virtual environment:
python3 -m venv venv
source venv/bin/activateInstall Python dependencies:
pip install -r requirements.txtRun the app:
python camera_dashboard.pyClone the repository:
git clone https://github.com/BleedingCodes/pyqt-camera-dashboard.git
cd pyqt-camera-dashboardCreate and activate a virtual environment:
py -m venv venv
venv\Scripts\activateInstall dependencies:
pip install -r requirements.txtRun the app:
python camera_dashboard.pyOn first launch, the app creates:
camera_config.json
You will be prompted to enter:
- Number of cameras
- Camera IP address
- Camera display name
- Username
- Password
Passwords are masked in the setup dialog.
Do not upload camera_config.json to GitHub.
The application stores camera settings in:
camera_config.json
Example structure:
[
{
"name": "Front Door",
"ip": "192.168.1.100",
"username": "admin",
"password": "password123"
}
]Recordings are automatically organized like this:
recordings/
└── YYYY-MM-DD/
└── HH/
Example:
recordings/
└── 2026-05-17/
└── 14/
Do NOT upload camera_config.json to GitHub.
The .gitignore file is configured to prevent accidental uploads of credentials and recordings.
Ideas for future versions:
- Motion detection
- GPU acceleration
- H.265 support
- PTZ controls
- Web dashboard
- Docker support
- Encrypted credential storage
- Multi-monitor support
MIT License


