I have been developing Visio-Display, a free and open-source digital signage platform released under the GPL-3.0 license.
The project started with a simple requirement: manage content across several screens from a central interface while retaining full control over the hosting, data, and display clients.
Over time, it grew beyond displaying images and videos. Visio-Display now covers a substantial part of the operational lifecycle of a signage infrastructure: content creation, scheduling, client deployment, monitoring, maintenance, backups, and updates.
The source code is available on GitHub:
https://github.com/woofix/visio_display
Architecture
The server is primarily built with:
- Python, Flask, and Gunicorn for the web application
- PostgreSQL for persistent application and account data
- Redis and RQ for caching and background jobs
- Docker Compose for deployment and service management
The entire platform is self-hosted. I run and validate it on my own infrastructure with real Linux display clients connected to the server.
Screen and content management
The web interface can manage multiple named screens, each with independent content and scheduling.
The media library supports images, videos, and PDF documents. Media can be organized into playlists with a defined order and a display duration for each item.
Scheduling rules can be applied by date and time. The platform also supports media groups and temporary priority campaigns. A priority campaign can temporarily replace the normal schedule and automatically return the screen to its usual playlist afterward.
Visio-Display includes a built-in 16:9 announcement editor. An administrator can quickly create a visual announcement and export it directly to the media library.
A QR code generator is also available for several use cases, including Wi-Fi access, URLs, contact information, map locations, messaging, and free-form text.
Linux kiosk client deployment
Visio-Display can prepare and remotely deploy Linux clients configured in kiosk mode, including deployment over SSH.
Each client stores its configuration and heartbeat token locally. A systemd service maintains communication with the server. The first heartbeat is sent approximately 15 seconds after startup, followed by another heartbeat every 30 seconds.
If a client loses power or network connectivity, the server simply marks it as offline after five minutes without a heartbeat. No manual re-pairing is required. When the machine restarts or reconnects to the network, its service resumes communication and the server recognizes the same client.
The administration interface displays client availability, system information, and screenshots. Remote maintenance operations include restart, shutdown, reinstallation, and updates.
Administration and operations
The platform includes:
- Users, roles, and permissions
- Activity logs
- Separate security tokens for different operations
- Manual and scheduled backups
- Restoration from the web interface
- Optional SMB backup copies
- A controlled server update mechanism
- An API used for client communication and administrative operations
The objective is not only to display media. It is to provide an operational platform that shows which screens are available, allows remote intervention, and helps restore service without manually connecting to every client.
One-command installation
To make testing and new deployments easier, Visio-Display provides a guided installer.
On a Linux server with Docker, Docker Compose, and Git, the installation can be started with one command:
bash <(curl -fsSL https://raw.githubusercontent.com/woofix/visio_display/main/server-install.sh)
The installer is available in French and English. It checks the prerequisites, clones the repository, generates secrets, prepares the environment, creates the administrator account, builds the containers, and starts the stack.
A manual Docker Compose installation is also documented for users who prefer to control every step.
Why I built it
Visio-Display has become a practical project combining web development, Linux, Docker, networking, automation, monitoring, and system administration.
I used ChatGPT/Codex as a development assistant for some code suggestions, reviews, testing support, and documentation tasks. I remain the project maintainer: I define the architecture, deploy the releases, and validate the features against the running application. This article was also prepared with AI assistance and reviewed against both the codebase and the deployed instance before publication.
I would particularly appreciate feedback from people who operate digital signage systems or interactive kiosks:
Which environments and hardware platforms should I test next?
Bug reports, testing, and contributions are welcome.
Top comments (0)