WEB_INTERFACE_GUIDE.md - Web UI port: 5050 -> 5000 (4 occurrences) - Tab list was almost entirely fictional. Documented tabs: General Settings, Display Settings, Durations, Sports Configuration, Plugin Management, Plugin Store, Font Management. None of these exist. Real tabs (verified in web_interface/templates/v3/base.html: 935-1000): Overview, General, WiFi, Schedule, Display, Config Editor, Fonts, Logs, Cache, Operation History, plus Plugin Manager and per-plugin tabs in the second nav row. Rewrote the navigation section, the General/Display/Plugin sections, and the Common Tasks walkthroughs to match. - Quick Actions list referenced "Test Display" button (doesn't exist). Replaced with the real button list verified in partials/overview.html:88-152: Start/Stop Display, Restart Display Service, Restart Web Service, Update Code, Reboot, Shutdown. - API endpoints used /api/* paths. The api_v3 blueprint mounts at /api/v3 (web_interface/app.py:144), so the real paths are /api/v3/config/main, /api/v3/system/status, etc. Fixed. - Removed bogus "Sports Configuration tab" walkthrough; sports favorites live inside each scoreboard plugin's own tab now. - Plugin directory listed as /plugins/. Real default is plugin-repos/ (verified in config/config.template.json:130 and display_controller.py:132); plugins/ is a fallback. - Removed "Swipe navigation between tabs" mobile claim (not implemented). WIFI_NETWORK_SETUP.md - 21 occurrences of port 5050 -> 5000. - All /api/wifi/* curl examples used the wrong path. The real wifi API routes are at /api/v3/wifi/* (api_v3.py:6367-6609). Fixed. - ap_password default was documented as "" (empty/open network) but config/wifi_config.json ships with "ledmatrix123". Updated the Quick Start, Configuration table, AP Mode Settings section, and Security Recommendations to match. Also clarified that setting ap_password to "" is the way to make it an open network. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
12 KiB
Web Interface Guide
Overview
The LEDMatrix web interface provides a complete control panel for managing your LED matrix display. Access all features through a modern, responsive web interface that works on desktop, tablet, and mobile devices.
Quick Start
Accessing the Interface
-
Find your Raspberry Pi's IP address:
hostname -I -
Open a web browser and navigate to:
http://your-pi-ip:5000 -
The interface will load with the Overview tab displaying system stats and a live display preview.
Note: If the interface doesn't load, verify the web service is running:
sudo systemctl status ledmatrix-web
Navigation
The interface uses a two-row tab layout. The system tabs are always present:
- Overview — System stats, quick actions, live display preview
- General — Timezone, location, plugin-system settings
- WiFi — Network selection and AP-mode setup
- Schedule — Power and dim schedules
- Display — Matrix hardware configuration (rows, cols, hardware mapping, GPIO slowdown, brightness, PWM)
- Config Editor — Raw
config.jsoneditor with validation - Fonts — Upload and manage fonts
- Logs — Real-time log streaming
- Cache — Cached data inspection and cleanup
- Operation History — Recent service operations
A second nav row holds plugin tabs:
- Plugin Manager — browse the Plugin Store section, install plugins from GitHub, enable/disable installed plugins
- <plugin-id> — one tab per installed plugin for its own
configuration form (auto-generated from the plugin's
config_schema.json)
Features and Usage
Overview Tab
The Overview tab provides at-a-glance information and quick actions:
System Stats:
- CPU usage and temperature
- Memory usage
- Disk usage
- Network status
Quick Actions (verified in web_interface/templates/v3/partials/overview.html):
- Start Display / Stop Display — control the display service
- Restart Display Service — apply configuration changes
- Restart Web Service — restart the web UI itself
- Update Code —
git pullthe latest version (stashes local changes) - Reboot System / Shutdown System — confirm-gated power controls
Display Preview:
- Live preview of what's currently shown on the LED matrix
- Updates in real-time
- Useful for remote monitoring
General Tab
Configure basic system settings:
- Timezone — used by all time/date displays
- Location — city/state/country for weather and other location-aware plugins
- Plugin System Settings — including the
plugins_directory(defaultplugin-repos/) used by the plugin loader - Autostart options for the display service
Click Save to write changes to config/config.json. Most changes
require a display service restart from Overview.
Display Tab
Configure your LED matrix hardware:
Matrix configuration:
rows— LED rows (typically 32 or 64)cols— LED columns (typically 64 or 96)chain_length— number of horizontally chained panelsparallel— number of parallel chainshardware_mapping—adafruit-hat-pwm(with PWM jumper mod),adafruit-hat(without),regular, orregular-pi1gpio_slowdown— must match your Pi model (3 for Pi 3, 4 for Pi 4, etc.)brightness— 0–100%pwm_bits,pwm_lsb_nanoseconds,pwm_dither_bits— PWM tuning- Dynamic Duration — global cap for plugins that extend their display time based on content
Changes require Restart Display Service from the Overview tab.
Plugin Manager Tab
The Plugin Manager has three main sections:
- Installed Plugins — toggle installed plugins on/off, see version info. Each installed plugin also gets its own tab in the second nav row for its configuration form.
- Plugin Store — browse plugins from the official
ledmatrix-pluginsregistry. Click Install to fetch and install. Filter by category and search. - Install from GitHub — install third-party plugins by pasting a GitHub repository URL. Install Single Plugin for a single-plugin repo, Load Registry for a multi-plugin monorepo.
When a plugin is installed and enabled:
- A new tab for that plugin appears in the second nav row
- Open the tab to edit its config (auto-generated form from
config_schema.json) - The tab also exposes Run On-Demand / Stop On-Demand controls to render that plugin immediately, even if it's disabled in the rotation
Per-plugin Configuration Tabs
Each installed plugin has its own tab in the second nav row. The form
fields are auto-generated from the plugin's config_schema.json, so
options always match the plugin's current code.
To temporarily run a plugin outside the normal rotation, use the Run On-Demand / Stop On-Demand buttons inside its tab. This works even when the plugin is disabled.
Fonts Tab
Manage fonts for your display:
Upload Fonts:
- Drag and drop font files (.ttf, .otf, .bdf)
- Upload multiple files at once
- Progress indicator shows upload status
Font Catalog:
- View all available fonts
- See font previews
- Check font sizes and styles
Plugin Font Overrides:
- Set custom fonts for specific plugins
- Override default font choices
- Preview font changes
Delete Fonts:
- Remove unused fonts
- Free up disk space
Logs Tab
View real-time system logs:
Log Viewer:
- Streaming logs from the display service
- Auto-scroll to latest entries
- Timestamps for each log entry
Filtering:
- Filter by log level (INFO, WARNING, ERROR)
- Search for specific text
- Filter by plugin or component
Actions:
- Clear: Clear the current view
- Download: Download logs for offline analysis
- Pause: Pause auto-scrolling
Common Tasks
Changing Display Brightness
- Open the Display tab
- Adjust the Brightness slider (0–100)
- Click Save
- Click Restart Display Service on the Overview tab
Installing a New Plugin
- Open the Plugin Manager tab
- Scroll to the Plugin Store section and browse or search
- Click Install next to the plugin
- Toggle the plugin on in Installed Plugins
- Click Restart Display Service on Overview
Configuring a Plugin
- Open the plugin's tab in the second nav row (each installed plugin has its own tab)
- Edit the auto-generated form
- Click Save
- Restart the display service from Overview
Setting Favorite Sports Teams
Sports favorites live in the relevant plugin's tab — there is no separate "Sports Configuration" tab. For example:
- Install Hockey Scoreboard from Plugin Manager → Plugin Store
- Open the Hockey Scoreboard tab in the second nav row
- Add your favorites under
favorite_teams.<league>(e.g.favorite_teams.nhl) - Click Save and restart the display service
Troubleshooting Display Issues
- Navigate to the Logs tab
- Look for ERROR or WARNING messages
- Filter by the problematic plugin or component
- Check the error message for clues
- See TROUBLESHOOTING.md for common solutions
Real-Time Features
The web interface uses Server-Sent Events (SSE) for real-time updates:
Live Updates:
- System stats refresh automatically every few seconds
- Display preview updates in real-time
- Logs stream continuously
- No page refresh required
Performance:
- Minimal bandwidth usage
- Server-side rendering for fast load times
- Progressive enhancement - works without JavaScript
Mobile Access
The interface is fully responsive and works on mobile devices:
Mobile Features:
- Touch-friendly interface
- Responsive layout adapts to screen size
- All features available on mobile
Tips for Mobile:
- Use landscape mode for better visibility
- Pinch to zoom on display preview
Keyboard Shortcuts
Use keyboard shortcuts for faster navigation:
- Tab: Navigate between form fields
- Enter: Submit forms
- Esc: Close modals
- Ctrl+F: Search in logs
API Access
The web interface is built on a REST API that you can access programmatically:
API Base URL:
http://your-pi-ip:5000/api/v3
The API blueprint mounts at /api/v3 (see
web_interface/app.py:144). All endpoints below are relative to that
base.
Common Endpoints:
GET /api/v3/config/main— Get main configurationPOST /api/v3/config/main— Update main configurationGET /api/v3/system/status— Get system statusPOST /api/v3/system/action— Control display (start/stop/restart, reboot, etc.)GET /api/v3/plugins/installed— List installed pluginsPOST /api/v3/plugins/install— Install a plugin from the storePOST /api/v3/plugins/install-from-url— Install a plugin from a GitHub URL
Note: See REST_API_REFERENCE.md for complete API documentation.
Troubleshooting
Interface Won't Load
Problem: Browser shows "Unable to connect" or "Connection refused"
Solutions:
-
Verify the web service is running:
sudo systemctl status ledmatrix-web -
Start the service if stopped:
sudo systemctl start ledmatrix-web -
Check that port 5000 is not blocked by firewall
-
Verify the Pi's IP address is correct
Changes Not Applying
Problem: Configuration changes don't take effect
Solutions:
- Ensure you clicked "Save Configuration"
- Restart the display service for changes to apply:
sudo systemctl restart ledmatrix - Check logs for error messages
Display Preview Not Updating
Problem: Display preview shows old content or doesn't update
Solutions:
- Refresh the browser page (F5)
- Check that the display service is running
- Verify SSE streams are working (check browser console)
Plugin Configuration Not Saving
Problem: Plugin settings revert after restart
Solutions:
- Check file permissions on
config/config.json:ls -l config/config.json - Ensure the web service has write permissions
- Check logs for permission errors
Security Considerations
Network Access:
- The interface is accessible to anyone on your local network
- No authentication is currently implemented
- Recommended for trusted networks only
Best Practices:
- Run on a private network (not exposed to internet)
- Use a firewall to restrict access if needed
- Consider VPN access for remote control
- Keep the system updated
Technical Details
Architecture
The web interface uses modern web technologies:
- Backend: Flask with Blueprint-based modular design
- Frontend: HTMX for dynamic content, Alpine.js for reactive components
- Styling: Tailwind CSS for responsive design
- Real-Time: Server-Sent Events (SSE) for live updates
File Locations
Configuration:
- Main config:
/config/config.json - Secrets:
/config/config_secrets.json - WiFi config:
/config/wifi_config.json
Logs:
- Display service:
sudo journalctl -u ledmatrix -f - Web service:
sudo journalctl -u ledmatrix-web -f
Plugins:
- Plugin directory: configurable via
plugin_system.plugins_directoryinconfig.json(defaultplugin-repos/); the loader also searchesplugins/as a fallback - Plugin config:
/config/config.json(per-plugin sections)
Related Documentation
- PLUGIN_STORE_GUIDE.md - Installing and managing plugins
- REST_API_REFERENCE.md - Complete REST API documentation
- TROUBLESHOOTING.md - Troubleshooting common issues
- FONT_MANAGER.md - Font management details