I have finished and (mostly) tested a dynamic Marquee setup using dual computers.
here is a quick video of it in action. I have batocera installed on a laptop USB drive, and a pi connected to the larger monitor behind it. sorry for the quick and sloppy video, I just wanted to put something up there so you all can see it in action
Dynamic Marquee
This setup requires the following:
- working Batocera V.33 install (or higher) connected to your local network (tested on x86-64 and pi ⅔/4 but should work on any platform with network connectivity)
- dedicated marquee computer (pi2, pi3 or pi zero for example) installed with Raspbian lite 32bit. Must also be connected to local network. Static IP address is preferred but as long as you know the IP it should be fine
Keep in mind that this should work on ANY computer/device that has linux installed, FFMPEG, and FBV installed. But - I have only tested it with pi2 and pi3 as the marquee display computer.
There are lots of tutorials on how to install Raspbian, how to find out your ip address, etc so I will let you figure that part out to keep this as short as possible so I am only listing the broad strokes here.
This tutorial assumes a PI based install, but again should work with most any linux computer.
**
Steps to take on pi**
Install Raspbian lite (32 bit) (download and burn to SD card) – Pi OS imager is a good solution
Run updates: sudo apt-get update && sudo apt-get upgrade
Install FFMPEG: sudo apt-get install ffmpeg
Install GIT (for installing FBV): sudo apt-get install git
FBV install
Dependencies first: sudo apt-get install libjpeg9-dev libjpeg9 libpng16-16 libpng-dev
Install FBV: sudo git clone https://github.com/godspeed1989/fbv.git
Cd fbv
sudo ./configure
Sudo make
Sudo make install
Create startup script on pi to launch NC at boot:
Sudo nano /etc/rc.local
Add to file (before the exit 0 line at the end.):
cd /home/pi
nc -vklp 5555 | /bin/bash &
Edit bootup file:
sudo nano /boot/cmdline.txt
change: console=tty1 to console=tty3**
add to end of line:** logo.nologo vt.global_cursor_default=0
Artwork must be loaded on the Marquee computer. For the pi it seemed best to keep it in the /home/pi directory. Here I created a subdirectory called Marquee.
In the “Marquee” folder you will need the following:
in the root of the marquee folder place your default.png file. This will be what is displayed when no artwork is found, and also at boot up.
optionally, you can create a subfolder for higher resolution artwork. I was able to find a marquee pack with 300 or so higher resolution images, so I made a subfolder called “hires” and placed them all there (in the root of the Marquee folder). This is the first place that the script checks for images before looking for a lower quality image and then eventually showing the default image.
For the images displayed while scrolling through the different gaming systems, you will need a folder called sysimages (located in the same Marquee folder) and add all of your system artwork there (using the same naming convention as batocera uses for the system names.)
Check below for a text representation of the file/folder structure
---———————————–
Scripts on Batocera machine:
---—–Game start
#!/bin/bash
Marqueeip=192.168.123.147
#enter your marquee computer ip address here.
case 1 in
gameStart)
romname={5##*/}
gamename=
${romname%.*}$
$echo ./marquee.sh GameStart$ 2 "\\"$gamename\"" | nc $Marqueeip 5555 >temp.log &
;;
gameStop)
echo sudo pkill ffmpeg | nc 192.168.123.147 5555 &
;;
esac
**——–game selected script. create script here:
/userdata/system/configs/emulationstation/scripts/game-selected/sel.sh
remember to make it executable! (**sudo chmod +x sel.sh)
#!/bin/bash
Marqueeip=192.168.123.147
#enter your marquee computer ip address here.
System=
$1 #system name
Romname=${2%.*} #romname
rom=${Romname##*/}
echo ./marquee.sh Gameselected
$System “\”$rom\"" | nc $Marqueeip 5555 >temp.log &
**——–system selected script. create script here:
/userdata/system/configs/emulationstation/scripts/system-selected/sys.sh
remember to make it executable! (**sudo chmod +x sys.sh)
#!/bin/bash
SMarqueeip=192.168.123.147
System=$1 #System name
echo ./marquee.sh Systemselected $System | nc $Marqueeip 5555 >temp.log &
**————-marquee.script, create this on the marquee computer in /home/pi/marquee.sh
remember to make it executable! (**sudo chmod +x /home/pi/marquee.sh)
#!/bin/bash
case $1 in
GameStart)
Systemname=$2
Romname="$3"
if [ -f "/home/pi/Marquee/hires/$Romname.jpg" ]
then
fbv "/home/pi/Marquee/hires/$Romname.jpg" -fel
elif [ -f "/home/pi/Marquee/
$Systemname/images/$Romname-marquee.png" ]
then
fbv "/home/pi/Marquee/
$Systemname/images/$Romname-marquee.png" -fel
else
fbv /home/pi/Marquee/default.png -fel
fi
;;
Gameselected)
Systemname=$2 #system name
Romname="$3" #romname
if [ -f "/home/pi/Marquee/
$Systemname/images/$Romname-marquee.png" ]
then
fbv "/home/pi/Marquee/
$Systemname/images/$Romname-marquee.png" -fel
else
fbv /home/pi/Marquee/default.png -fel
fi
;;
Systemselected)
imagepath="/home/pi/Marquee/sysimages/$2"
if [ -f "$imagepath.png" ]
then
fbv "$imagepath.png" -fel
else
fbv /home/pi/Marquee/default.png -fel
fi
;;
esac
Directory Structure
Marquee/
├─ Hires/
│ ├─ 1943.jpg
├─ Atari2600/
│ ├─ images/
│ │ ├─ Air Raid (USA)-marquee.png
├─ Mame/
│ ├─ images/
│ │ ├─ a51site4.png
├─ nes/
│ ├─ images/
│ │ ├─ Super Mario Bros. (World)-marquee.png
├─ sega32x/
│ ├─ images/
│ │ ├─ BC Racers (USA)-marquee.png
├─ Default.png
├─ Daphne/
│ ├─ images/
│ │ ├─ ace-marquee.png
├─ Sysimages/
│ ├─ fbneo.png
├─ 3do/
│ ├─ images/
│ │ ├─ Space Hulk - Vengeance of the Blood Angels (USA)-marquee.png