SKE Digital Signage Server
A modern, web-based digital signage management system built with Flask. This is a completely restructured and improved version of the original digiserver application.
Features
- Modern Architecture: Clean, modular Flask application structure
- User Management: Role-based authentication (admin/user)
- Player Management: Individual digital signage displays
- Group Management: Organize players into groups for synchronized content
- Content Management: Upload and manage images, videos, and documents
- RESTful API: For player clients to fetch playlists
- Docker Support: Easy deployment with Docker and Docker Compose
- Responsive UI: Bootstrap-based modern interface
- File Processing: Automatic conversion of PDFs, PowerPoint, and videos
- Audit Logging: Track all system actions
Quick Start with Docker
-
Clone and Navigate:
cd /home/pi/Ske_Signage -
Configure Environment (optional):
cp .env.example .env # Edit .env file with your preferred settings -
Build and Start:
docker-compose up -d -
Access the Application:
- Open your browser to
http://localhost:8880 - Default login:
admin/ChangeMe123!
- Open your browser to
Manual Installation
Prerequisites
- Python 3.11+
- SQLite3
- FFmpeg
- LibreOffice
- Poppler-utils
Installation Steps
-
Install System Dependencies (Ubuntu/Debian):
sudo apt-get update sudo apt-get install -y libreoffice poppler-utils ffmpeg \ libpoppler-cpp-dev libmagic1 libffi-dev libssl-dev \ g++ libjpeg-dev zlib1g-dev libxml2-dev libxslt-dev -
Create Virtual Environment:
python3 -m venv venv source venv/bin/activate -
Install Python Dependencies:
pip install -r requirements.txt -
Configure Environment:
cp .env.example .env # Edit .env with your settings -
Initialize Database:
python main.py # This will create the database and default admin user -
Run Application:
python main.py
Application Structure
Ske_Signage/
├── app/ # Main application package
│ ├── models/ # Database models
│ ├── routes/ # Flask blueprints/routes
│ ├── utils/ # Utility functions
│ ├── templates/ # Jinja2 templates
│ ├── static/ # Static files (uploads, assets)
│ ├── __init__.py # Application factory
│ └── extensions.py # Flask extensions
├── config.py # Configuration classes
├── main.py # Application entry point
├── requirements.txt # Python dependencies
├── Dockerfile # Docker image definition
├── docker-compose.yml # Docker Compose configuration
└── .env.example # Environment template
Configuration
The application uses environment variables for configuration. Key settings:
SECRET_KEY: Flask secret key for sessionsADMIN_USER/ADMIN_PASSWORD: Default admin credentialsDATABASE_URL: Database connection stringFLASK_CONFIG: Environment (development/production)HOST/PORT: Server binding
API Endpoints
Player API
GET /api/playlists: Get playlist for a playerGET /api/playlist_version: Check playlist versionPOST /api/player_status: Update player statusGET /api/health: Health check
Authentication
All API endpoints require player authentication via hostname and quickconnect code.
Usage
1. Create Players
- Login as admin
- Go to Dashboard
- Click "Add Player"
- Fill in player details (username, hostname, passwords)
2. Upload Content
- Click "Upload Content"
- Select target (player or group)
- Choose files (images, videos, PDFs, PowerPoint)
- Set display duration
- Upload
3. Manage Groups
- Create groups to synchronize content across multiple players
- Add players to groups
- Upload content to groups for synchronized playlists
4. Player Client
Players can connect using the API:
curl "http://server:8880/api/playlists?hostname=PLAYER_HOSTNAME&quickconnect_code=CODE"
File Processing
The application automatically processes uploaded files:
- Images: Resized and optimized
- Videos: Converted to web-compatible MP4 format
- PDFs: Converted to individual page images
- PowerPoint: Converted to images via LibreOffice
Development
Running in Development Mode
export FLASK_CONFIG=development
export FLASK_DEBUG=true
python main.py
Database Migrations
flask db init # Initialize migrations (first time)
flask db migrate # Create migration
flask db upgrade # Apply migration
Production Deployment
Docker Compose (Recommended)
- Use the provided
docker-compose.yml - Set strong passwords in environment variables
- Configure reverse proxy (nginx/traefik) for HTTPS
- Set up backup for persistent volumes
Manual Deployment
- Use a production WSGI server (gunicorn included)
- Set
FLASK_CONFIG=production - Configure proper database (PostgreSQL recommended for production)
- Set up log rotation
- Configure firewall and security
Security Considerations
- Change default admin credentials
- Use strong secret keys
- Enable HTTPS in production
- Regular backups
- Monitor logs for suspicious activity
- Keep dependencies updated
Troubleshooting
Common Issues
- File Upload Errors: Check file permissions and disk space
- Video Conversion Fails: Ensure FFmpeg is installed and accessible
- PDF Processing Issues: Verify poppler-utils installation
- Database Errors: Check database file permissions
Logs
- Application logs: Check console output or
logs/directory - Docker logs:
docker-compose logs -f
Migrating from Original digiserver
The new application uses a different database schema. To migrate:
- Export content from old system
- Create players and groups in new system
- Re-upload content through the new interface
License
This project is proprietary software for SKE Digital Signage.
Support
For issues and support, please contact the development team.