GithubHelp home page GithubHelp logo

poppadum / dynquee Goto Github PK

View Code? Open in Web Editor NEW
5.0 1.0 0.0 7.48 MB

A dynamic digital marquee for Recalbox retro-gaming OS | Un marquee dynamique pour Recalbox

License: MIT License

Shell 20.57% Python 79.43%
raspberry-pi recalbox arcade-machine retrogaming marquee dynamic-marquee

dynquee's Introduction

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.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.