LCD/LED Marquees

Under construction.

Remember back in the physical arcades how game cabinets would proudly display the logo of the game they featured on the overhead billboards? Well, thanks to the aid of modern technology, it is now possible to replicate those banners! And since we're in Batocera, we can dynamically change those artworks to reflect the game that's being played at that current moment!

An article to build you own dmd at a lower cost : DIY_ZEDMD

The premier digital marquee manufacturers! Pixelcade has been integrated into Batocera since v33. Note that Pixelcade will still work with Batocera versions older than V33 with the limitation that Pixelcade will only update when a game has been launched vs. dynamically during scrolling through the Batocera front end.

Supported platforms include:

  • Raspberry Pi Zero 2
  • Raspberry Pi 3
  • Raspberry Pi 4
  • x86_64
  • Odroid N2+
  • Theoretically, any aarch64/32 and/or x86_64 platform that supports Batocera v33+, but these have not been tested yet.

Pixelcade offer their marquees in two flavors, Pixelcade LED (8-bit, low-res) and Pixelcade LCD (high res).

This may change as Pixelcade gets better integrated into Batocera.

Pixelcade LED marquees are based on LED panels for a low-res 128×32 display suited for 8-bit, pixel art marquee artwork. Pixelcade and the community has created and updates the Pixelcade LED artwork which you can browse here While not every game has an associated pixel art marquee, you'll find most of the iconic games and consoles have matching, pixel perfect artwork. Pixelcade LED comes in 6 sizes with mounts available for various arcade cabinets.

Installation is simple. Power on the Pixelcade panel and plug in its USB port into the Batocera machine:

Then SSH into Batocera and run the following:

curl -kLO -H "Cache-Control: no-cache" && chmod +x && ./

In case that doesn't work, the latest instructions for the LED panel can be found at

After the downloading and installation is complete, the 1941 game marquee will be displayed on the panel. Confirm the prompt in the terminal and reboot.

This may change as Pixelcade gets better integrated into Batocera.

This is the higher resolution LCD panel that's suited for high resolution marquee artwork in 1920 x 360 resolution. It supports Ethernet cables or Wi-Fi and sends its signals over the network instead of a USB cable.

To set up the Pixelcade LCD, plug its SD card into an already running OS (Batocera will do just fine) and then run the script from its root folder. For example, if doing this from a terminal and the SD card has mounted itself to /media/NO_LABEL:

cd /media/NO_LABEL

You will be asked a series of questions (FIXME what questions?). When the script is complete, safely remove the SD card and put it back into the Pixelcade LCD.

Power on the Pixelcade LCD and if you see the Pixelcade retrowave banner then the Pixelcade has successfully connected to the WiFi network:

Photo of the Pixelcade showing the mostly purple Pixelcade banner.

Once confirmed, finish setting up Batocera's side by SSH'ing into Batocera and running the following:

curl -kLO -H "Cache-Control: no-cache" && chmod +x && ./

In case that doesn't work, the latest instructions for the LCD panel can be found at and

If you have both panels and want to use them at the same time, it is possible to install both these scripts at once.

A simple web interface can be used to upload new artwork to the panel's SD card. Visit http://batocera.local:8080 (if that doesn't work, use http://<IP of Batocera>:8080) to bring it up.


By default, when es go in screensaver, the batocera logo is displayed on the dmd.

Put an image name in /userdata/system/dmd/screensaver.png or /userdata/system/dmd/screensaver.gif and it will be used instead.

System selected

By default, when you select a system in es, the system logo is displayed on the dmd.

Put an image in /userdata/system/dmd/systems/<system>.png (or gif) (replace <system> by snes, or nes or whatever) and it will be used instead.

Game selected

By default, when you select a game in es, the game marquee is displayed on the dmd (if scrapped, otherwise, the name is displayed).

Put an image in /userdata/system/dmd/games/<system>/<game>.png (or gif) (replace <system> by snes, or nes or whatever and <game> by the exact name, or the name simplified) and it will be used instead.

Name simplified is the name without any special char, any parenthesis and lowercase. (if your rome is Super Mario World (EU).smc, then, the image supermarioworld.png or .gif will work)


When you succeed to an achievement, batocera will display the WOUHOU text.

Put an image in /userdata/system/dmd/achievement.png (or gif) and it will be used instead.

Full custom scripts

If you don't like the behavior described upper, you can just create the following scripts to replace them:

  • /userdata/system/configs/emulationstation/scripts/screensaver-start/

This script has no parameter.

  • /userdata/system/configs/emulationstation/scripts/system-selected/

This script takes 1 argument : the name of the system (snes, nes, …)

  • /userdata/system/configs/emulationstation/scripts/game-selected/

This script takes 2 arguments : the name of the system (snes, nes, …), and the full name of the rom.

  • /userdata/system/configs/emulationstation/scripts/achievements/

This script has no parameter.

  • In menu > system > services, enable dmd_simulator service.
  • From a computer on your local network, go on http://batocera.local:8080
  • Enjoy

Pixelcade has a sophisticated API that can be used to make the marquee perform certain actions. These can be programmed into the regular Batocera scripts if desired, but it might be easier to use EmulationStation's scripts instead. The ES scripts installed by Pixelcade's installer can be found in /userdata/system/configs/emulationstation/scripts.

For instance, here's a simplified routine that displays the game's marquee when a game is launched by Batocera (if it were installed into the /userdata/system/configs/emulationstation/scripts/game-start folder and marked as executable):
# Save the arguments into variables.
# Convert an argument into another value.
if [[ "${system}" == "fbneo" ]]; then
# Switch case for certain systems.
case ${system} in
# Execute this part every time this event triggers.
curl -G \
        --data-urlencode "t=${romname}" \${system}/`basename ${rom}`

If you wish to simply see the events that are being fired off by Pixelcade's EmulationStation scripts as you're navigating the menus, run the commands below in an SSH terminal session on your Batocera device. This is also good for cases where artwork is missing for a particular game. Use the log output to know what specific filenames are being passed and then rename artwork accordingly following this guide for Pixelcade LED and this guide for Pixelcade LCD

For Pixlecade LED

curl localhost:8080/quit
cd /userdata/system/pixelcade && ./pixelweb

For Pixelcade LCD

killall java
/userdata/system/pixelcade/jdk/bin/java -jar /userdata/system/pixelcade/pixelweb.jar -b -e

Now you'll get the following debug output:

It is possible to use the two HDMI outputs on an RPi4, with one displaying Batocera and the other displaying the dynamic marquee. Link to the original forum post explaining this. Essentially, the Raspberry Pi draws images/videos directly to the framebuffer, which is still visible on the other display even though it's hidden by Batocera on the main display.

This has broken on v34 and higher. Stay on v33 or lower if you intend to use this.

Link to original forum post. Link to video demonstration.

This can be done using Batocera installed onto a device and another computer/Raspberry Pi connected to a separate display. So far, this has been tested successfully using Batocera installed on an x86_64 computer/Raspberry Pi with another Raspberry Pi acting as the marquee.

Pixelcade takes a few more moments after ES has started before it “kicks in”.

If it's still not working, it could be that it's simply not plugged in correctly. Ensure that the USB cable on both ends is firmly secure in their ports (or if using the LCD panel, that it's paired to the same Wi-Fi network as Batocera). On the Batocera machine itself, it might be worth checking if it's functional on a different port (such as a USB 3.0 port if you were using a 2.0 port, or vice-versa).

If it's still not working, try out the following:

  • If the Pixelcade software was installed before the 7th of February, 2022, a bug prevented the script from working on boot. The script at /userdata/system/ containing the Pixelcade instructions must be removed completely and then the installation run again. Choose “yes” to wanting to reinstall Pixelcade.
  • The script can be called manually with
    killall java && cd ~ && ./
    • If the marquee starts working then the problem is that the script itself is failing to launch. Ensure that it contains /userdata/system/jdk/bin/java -jar pixelweb.jar at least twice in the file. If it does not, it is outdated and will not work.
    • If the marquee still does not work, then this is (likely) not the issue.
  • A command can be sent to the marquee manually for testing purposes. For example:
    ~/jdk/bin/java -jar pixelcade.jar -m stream -c mame -g 1941
  • If using Pixelcade LED (not Pixelcade LCD), run ls /dev and search for ttyACM0 or ttyACM1. If neither are present, then your machine has not detected the Pixelcade LED device.

Refer to Pixelcade's how to sections on resetting the firmware and visit the Pixelcade forums.

  • hardware/lcd_led_marquees.txt
  • Last modified: 8 weeks ago
  • by nadenislamarre