Skip to content

poppadum/dynquee

Repository files navigation

dynquee: dynamic marquee for Recalbox
A dynamic digital marquee for Recalbox

Contents


About dynquee

What Is It?

dynquee (pronounced 'dinky') is a program to run a dynamic marquee for Recalbox. The name stands for dynamic marquee.

It was originally intended to run on a Raspberry Pi 4B with two displays, Recalbox using the primary display for games and dynquee driving a second display for the marquee, similar to the PiMarquee2 project for Retropie. But it can also run on Recalbox on PC, and on a separate device communicating with Recalbox via the network.

Click on the image below for a short demo of dynquee in use:
dynquee demo video thumbnail

Why?

I'm building a bartop arcade machine and I want to have a dynamic marquee which can change depending on which game system is selected and which game is being played.

I'm using Recalbox to run the machine on a Raspberry Pi 4. As the Pi4 has dual HDMI outputs I want to drive the marquee from the second HDMI output.

The marquee display I have is an ultrawide 19" 1920x360 LED panel which is the ideal size for my build. It was quite expensive and hard to obtain; another possiblity would be a cheaper 14.9" TN panel available from Amazon or ebay.

For testing I used a spare 19" TV running at 720p resolution.

This project is the result of my attempts to get a dynamic marquee working with Recalbox.

Goals

I wanted a solution which would be:

  • fairly lightweight: work with Recalbox's environment, ideally needing no extra software to be installed
  • flexible: allow most settings to be changed via a config file
  • reactive: change the marquee in response to user actions

How Does It Work?

It works very like Recalbox's built-in mini TFT support: it listens to Recalbox's MQTT broker for events, and displays still images or videos in response to those events.

On PC it uses mpv to display media on the secondary screen. On Raspberry Pi it writes media files direct to the framebuffer using fbv2 for still images and ffmpeg for videos.

With the Pi4's default KMS graphics driver both HDMI displays share a single framebuffer, so marquee images are also visible on the primary display for a second or two when an emulator launches or exits. While this is a bit annoying, it doesn't seem to break anything so I put up with it.

dynquee is written in Python 3 with a few supporting bash scripts.

Requirements

  • Recalbox v8.1.1 Electron or later
  • one of:
    • a Raspberry Pi 4B or Pi 400 with a second display connected to the Pi's second HDMI port
    • a PC with dual video outputs and two displays
    • a separate device with a connected display: an older Pi or Pi Zero W should be ideal

I have tested dynquee running on a different device on the same network as the Recalbox machine. It works fine but needs a few config file changes: see Running dynquee on a different device.

Status

dynquee is now pretty stable but there may still be bugs.

I've tried to minimise the risk of displaying the same image for a long period of time because I'm concerned about image persistence or burn-in (probably a habit I picked up in the 1980s). While this shouldn't be too much of a problem if you're using a modern LCD display for your marquee, I still recommend keeping an eye on it.

Tested Platforms

dynquee has been tested on the following platforms:

  • Running on Recalbox:

    • Recalbox v9.1, v9.0, v8.1.1 on Raspberry Pi 4B: working
    • Recalbox v9.1, v9.0.1 on PC: working
  • Running on a separate device:

    • Raspberry Pi Zero W: working
    • Raspberry Pi 1B: working, but too slow to be useable

Getting Started

Releases include a few media files to get started (see acknowledgements) but not a complete set. See the media README for suggestions of where to find media files.

Quick Installation

Follow these steps to install dynquee using the install script:

  1. Connect to your recalbox with ssh (the Recalbox wiki explains how)
  2. Copy and paste this command and press enter:
    bash -c "$(wget -qO - https://github.com/poppadum/dynquee/raw/main/install/install.sh)"
  3. If all goes well you should see the Installation complete message

Manual Installation

If you prefer to install everything manually, follow this guide for Raspberry Pi or this guide for PC.

Usage

Most settings can be configured in the config file dynquee.ini. Read the comments in that file and read the configuration guide for full details.


Help

If things aren't working, first check the log files in the logs/ directory:

  • logs/dynquee.log contains the summary log
  • logs/dynquee.debug.log contains the full debug log

The logs should provide some clues as to what is wrong.

If you are having trouble getting dynquee to start on PC, also check the file /tmp/dynquee_start.log.

If you still can't get it working, post on the Recalbox forum or message me on Discord and I will try to help. Please paste your config file and debug log file on pastebin and provide a link when reporting issues.


Contributing

Bug reports/fixes, improvements, documentation, & translations are welcome.

Acknowledgements

WaitableEvent class written by Radek Lát is used to wait for several events simultaneously.

For convenience, releases include some starter images collected from various sources. Most of these are not my work: credit remains with the original authors. See the artwork README file for sources.

Many thanks to @toniosj for Recalbox PC testing.

To Do

  • Genre matching is very dumb: make it more useful.
    Is there a master list of genres that Emulation Station uses somewhere?

Licence

This project is released under the MIT Licence.