Detailed write instructions are available here (long story short: you can write Raspberry Slideshow with Balena Etcher to a micro-SD card of 8GB minimum – exactly as any other operating system for the Pi). Do not write to a USB key even if you own a Pi 4+.
Compatible with all Pis with an Ethernet port. Raspberry Slideshow 19+ builds are Raspberry Pi 5 compatible.
Some default images and videos (taken from the Web and YouTube) are included within the system for a quick functioning example: plug in the Ethernet cable (DHCP) for a full experience.
This “release” build of Raspberry Slideshow is limited is some functionality: please have a look at the donation page for the full access to the unrestricted versions of all of Binary Emotions’ operating systems.
SETUP: HOW TO USE
Documentation always refers to the latest operating system version.
1. Local media
Put image and/or video files into a USB stick with one only partition (or use its first partition), vFAT/NTFS or ext4 formatted. Files must be put in the root folder (not inside directories).
Plug the USB stick into the Raspberry Pi running Raspberry Slideshow and (re)boot.
That’s all – it’s that easy.
A configuration file, media.conf, can be saved in the USB key, configuring all the system functioning modes explained in the rest of this documentation.
A sample of the file is exemplified below and can be downloaded here.
You can combine any of the media.conf directives with each others and also save media into the USB key directly.
# Background music.
# Plays background-music.mp3 file, if exists in folder.
background-music: enable
# Remote media refresh.
# Values yes|no.
# If you 1) use only images and 2) do not use remote media or do not need remote media list to be re-read during the playback, please set this to no: images playback will be continuous without the blanks needed to check remote changements.
media.refresh: no
Set up the media.conf file in order to specify LAN or Internet URLs of remote images and/or videos hosted by a Web or FTP server, one per line, like the following example:
Plug the USB stick where you saved the media.conf file into the Raspberry Pi and (re)boot.
All remote media will be copied into the Pi’s internal card and slided (remember to connect Raspberry Slideshow to the network via a wired Ethernet cable, first).
Make your Web/FTP server host the inventory file (above, a LAN Web server is used), in the example named inventory.txt. inventory.txt file content is a simple list of URLs (one per line), for example:
Plug the USB stick where you saved the media.conf file into the Raspberry Pi and (re)boot (remember to connect Raspberry Slideshow to the network via a wired Ethernet cable, first).
This way, the media list can be managed server-side: enable the media.refresh directive (see below) and just modify the inventory file hosted by your server. Inventory’s content can be eventually generated by a server-side scripting logic, if needed.
Use only alphanumeric chars for the username and password fields.
Plug the USB stick where you saved the media.conf file into the Raspberry Pi and (re)boot. All remote media will be copied into the Pi’s internal card and slided (remember to connect Raspberry Slideshow to the network via a wired Ethernet cable, first).
Check that the Pi is able to connect to the share and fetch the media: SSH in as root (see below) and try connecting “manually”:
mount //serverIP/shareName -ousername=YOUR_USERNAME,password=YOUR_PASSWORD,vers=2.0 /mnt
If the previous mount command raises an error, try understanding what’s going on from that error log and, most important, have a look at your Windows server’s logs. Otherwise, if no error is printed, you should be able to see the remote share in the output of the command:
mount | grep mnt
If this is your case, you should also be able to list your mounted folder’s media by using:
ls -l /mnt
If you can see your media files, it means that the system is able to mount the shared folder, and the error must be searched somewhere else:
a). if you are using the USB key as a medium to “inject” files into the Pi, make sure that the USB key is formatted as vFAT/NTFS or ext4 and of course that you have a set up the media.conf file correctly;
b). make sure that the files are saved in the root folder of the key (not inside directories);
c). make sure that the files downloaded by Raspberry Slideshow during its functioning have a size greater than zero (which issue means there are errors during the transfer). You can accomplish this by SSH’ing in and have a look at $TEMP_MEDIA_FOLDER_SAMBA, which by default is /tmp/imgs3.
For this feature to work you need to set up dropbox_uploader, first.
SSH in as root (see below), then launch dropbox_uploader.sh and carefully follow the instructions. The folder APPLICATIONS/YOUR_DROPBOX_APP_NAME/ will be created in your Dropbox space. On languages different than English, “APPLICATIONS” could be translated.
Finally run dropbox_uploader.sh info to verify the login token is correct. Delete the /root/.dropbox_uploader file if you need to start from scratch.
Set up the media.conf file in order to enable the Dropbox feature:
# Dropbox.
dropbox: enable
Plug the USB stick where you saved the media.conf file into the Raspberry Pi and (re)boot: every file within APPLICATIONS/YOUR_DROPBOX_APP_NAME/ will be fetched and slided (remember of course to connect Raspberry Slideshow to the network via a wired Ethernet cable, first).
Config file created by dropbox_uploader: /root/.dropbox_uploader.
For this feature to work you need to set up rclone, first. Unfortunately this setup is a lot more tedious than the Dropbox one and requires the use of a Linux Debian 12 Bookworm/Ubuntu 23 Mantic desktop OS host or virtual machine with a desktop environment installed.
On Credentials, click Configure Consent Screen -> External -> Create -> give application name, user support email (yours), developer email (yours) -> Save
On OAuth Consent screen, add your email in Test users
On Credentials, Create credentials -> ID client OAuth -> desktop application -> Create
ID client and Client secret are going to be used in the following steps, keep them saved
Configure rclone
SSH in Raspberry Slideshow operating system as root (see below), then launch:
apt install rclone; rclone config
rclone will start a menu; select the following options:
New Remote (n); give it the name GoogleDrive
Select Google Drive (when I’m writing it’s number 18; shift + up key to scroll up)
Enter your created app’s CLIENT ID and SECRET
Scope: Read Only Access
root_folder_id and service_account_file: leave them blank
Edit advanced config? No
Remote config, use auto config? No
Now you will be requested to launch an rclone authorize command in the aforementioned Linux machine (a VirtualBox one is ok): install rclone (if not already installed), then copy and paste the command and follow the instructions. A browser will open: login to your Google account and accept all questions. Return to the console and copy the token. Paste it into Pi’s rclone as config token.
On older rclone versions (older Raspberry Slideshow builds), rclone is directly presenting you a link to copy/paste into your desktop browser. Lucky man.
If an error regarding a wrong number of argument is displayed, rclone is probably at an older version: uninstall and install from https://rclone.org/downloads/
Configure this as a team drive? No
Confirm (y) and quit (q)
Finally run rclone ls GoogleDrive: to verify the login token is correct
Set up the media.conf file in order to enable the Google Drive feature:
# Google Drive.
gdrive: enable
gdrive.folder: FOLDER_NAME_WHERE_TO_SLIDE_MEDIA_FROM
Plug the USB stick where you saved the media.conf file into the Raspberry Pi and (re)boot: every file within FOLDER_NAME_WHERE_TO_SLIDE_MEDIA_FROM/ in your Google Drive instance will be fetched and slided (remember of course to connect Raspberry Slideshow to the network via a wired Ethernet cable, first).
Config file created by rclone: /root/.config/rclone/rclone.conf.
Instagram media feature has got some strict limitations (due to Instagram policies) regarding concurrency and rate limit. Please consider it as an experimental feature.
At one time, Raspberry Slideshow‘s Instagram feature must be the only application that consumes requests, i.e. neither the Instagram browser interface, nor a mobile app must be running in parallel, and making calls often within short time is prone to cause a Too Many Request Instagram error. If this was not tedious enough, sometimes Instagram will detect some “Suspicious activity” and let you complete a CAPTCHA when logging into your account :-/
Trying to make this feature useful, Instagram-downloaded media differs from all the other runtime fetched ones: it’s never deleted but only updated when Raspberry Slideshow‘s Instagram functionality is started. In my tests, only profiles with a few media and only one update a day seem to work flawlessly.
That said, enable the feature configuring the following lines in media.conf:
You have to be logged into Instagram in order to be able to fetch profile‘s media. profile can be yours or someone else’s.
The refresh feature (use with 3., 4., 5., 6. and 7.) Raspberry Slideshow can refresh the media list (inventory linked media, network share and Dropbox/Google Drive/WebDav content) in order to slide images and videos according to any server change.
You can accomplish this by enabling the refresh directive in the media.conf file, like:
# Remote media refresh.
media.refresh: yes
System is smart enough to actually re-download remote media only when it detects changes: addition or deletion/renaming of a file.
In order to avoid frequent full re-downloads, while adding/deleting files and updating their names is always detected as a change, a simple change in the file content cannot be seen – yes, it’s a “broken by design” limitation.
Please note. If you (1) use only images and (2) don’t use remote media or don’t need remote media list to be re-read during the playback, please set media.refresh to no: images playback will be continuous without any blank.
Automatic photos rotation
An optional photos rotation based on their EXIF informations is available; enable in /etc/rs.conf via SSH as root (see below). This will increase the boot time.
Using SSH (donors’ build only)
You can perform an SSH login with the following clients:
*nix users will make use of the native ssh client – open the terminal emulator and type: ssh pi@RASPBERRY_IP.
Windows users will use Putty, MobaXTerm, any cygwin-derived program or the Linux Subsystem for Windows (preferred; in this case the syntax is identical as the *nix users’).
Use the following default credentails: user: pi password: live
then, once in, type: sudo -i for administrative rights (root)
If you need to modify a file, you can now use mc -e /path/to/file or nano /path/to/file.
Please change the default SSH password for your security.
All the above functioning modes have been detailed with the use of a USB key as the way to input media into the Pi’s filesystem, which is the simplest possible use case for most users. However, it’s also possible to load media files and the media.conf file via scp (you can use the same clients as when you connect via SSH).
Just remove the USB drive, put the files in /var/lib/rs/ and restart Systemd:
1. [on the Pi’s shell] Enable the SSH login via root directly: change the password for the root user while SSH’d in as pi (sudo passwd root), then modify /etc/ssh/sshd_config with PermitRootLogin yes. Finally restart ssh (sudo systemctl restart ssh).
2. [on your host system] Copy your files: scp /path/to/my/local/files/* root@RASPBERRY_IP:/var/lib/rs/ While for *nix users this is trivial, for Windows users this step could be a pain, without the right tools. Usage of MobaXTerm or the Linux Subsystem for Windows is advised.
Media file names must be alphanumerical without spaces – thanks to Clive Reynolds for the feedback.
Using sshfs
An advanced way of sharing files with Raspberry Slideshow, and make it play them, could be via sshfs. You can mount the system’s media folder (/var/lib/rs/) as an sshfs mount. Restart the Raspberry Slideshow service after a folder update, sudo systemctl restart rs.
Of course, if you only need to write the config file, just SSH in as root, then modify /var/lib/rs/media.conf with nano, mc or another text editor. scp or sshfs are not required in this case. Then restart the Raspberry Slideshow service after a folder update, sudo systemctl restart rs.
Ruleset
The following rules apply.
All the USB files (images, videos and media.conf) are copied into the internal Raspberry’s SD-CARD:
– if the USB key is inserted: at every reboot, SD-CARD files are updated and hence played according to the key’s content;
– if the USB key is not inserted: at every reboot, media are played from the internal cache. So, after the first run, you can unplug the USB key.
Functioning modes can be combined.
Media will be displayed in a name-based order, and in the following sequence: remote images, then inventory-related images, network share, Dropbox, Google Drive, WebDav, Instagram and then USB-contained images, followed by videos. So, images come first and then videos. This behaviour is by design and unmodifiable, because two different players are used.
Accepted image formats are jpeg (.jpeg or .jpg), png, gif. The slideshow player only works with JPG images in RGB format – thanks to Ethan Piliavin.
Accepted video formats are mostly mp4 files.
Background music
Save an mp3 file named background-music.mp3 into the USB stick and enable the related media.conf directive in order for a music to partner your images’ slideshow.
Debug mode (via SSH)
Debug is only possible by using SSH, no direct access to the terminal emulator is possible.
Setting DEBUG=”y” in /etc/rs.conf enables the debug mode.
System actions will then be logged in /var/log/rs.log, so you can use tail -f /var/log/rs.log or cat /var/log/rs.log.
A preferred way of debugging is however by directly launching the Raspberry Slideshow stack via SSH.
SSH in as root, stop the rs Systemd service (systemctl stop rs), enable the DEBUG mode, go to the folder where Raspberry Slideshow is installed (cd /usr/lib/rs) and launch rs.sh:
Where VALUE: 0: normal
1: 90 degrees
2: 180 degrees
3: 270 degrees
Modify the file via SSH or mount the SD-CARD into a running operating system and modify the file with a text editor. If some the aforementioned configuration, just try the tips for Pi4/5 here below as well, rotation on a Raspberry Pi OS Lite is becoming a pain…
For Pi4 and Pi5
Pi4 and Pi5 need a bit more work to accomplish the full rotation.
Step 1
Modify the /etc/rs.conf file adding the rotation information for the video player:
VIDEO_PLAYER="mpv --video-rotate=270"
Change rotation according to your needs.
Step 2
Images must be saved/sent rotated to Raspberry Slideshow.
Step 3; not mandatory, but it correctly rotates the system console upon bootstrap
Modify the file /boot/cmdline.txt or /boot/firmware/cmdline.txt (Raspberry Slideshow 20+) and add the following directives for 90 rotation at the end of the line:
The image player “will automagically pick a reasonable zoom factor when loading a new image”, so if the proportions of an image differ from the screen ones, some black borders will be visible.
To avoid this (and increase the zoom in one direction), add the -fitwidth in /etc/rs.conf, for example:
In order to make use of a Wi-Fi network with Raspberry Slideshow, follow the steps below.
Raspberry Pi 3 and upwards have got an internal 802.11 Wi-Fi adapter, no external wireless network adapter is needed.
In the case you are using Raspberry Pi 1/2 you have to plug a compatible USB Wi-Fi adapter in, then (if required) install the kernel module and firmware as well – just Google for that if uncertain.
Plug an Ethernet cable into the Raspberry Pi running Raspberry Slideshow and re/boot; find out the IP associated to your Raspberry Pi (it’s printed on screen upon boot) and connect to it from your client PC via SSH (as root) in a LAN environment.
The output of ifconfig -a or ip a must show a wlan0 interface.
Now give the following command:
rfkill unblock wifi; rfkill unblock all
and modify the /etc/network/interfaces file and put your network parameters in.
For example, with WPA-PSK and DHCP:
#
# loopback
#
auto lo
iface lo inet loopback
#
# ethernet
#
auto eth0
allow-hotplug eth0
iface eth0 inet dhcp
#
# wlan
#
auto wlan0
allow-hotplug wlan0
iface wlan0 inet dhcp
wpa-ssid "YOUR_ESSID"
wpa-psk "YOUR_WPA_PASSWORD"
If you do not know the name of your wireless network, you can find the above YOUR_ESSID parameter with the iwlist scanning command.
You also should run the iwlist scanning command in order to see if your wlan0 interface is able to “see” your Wi-Fi router/access point, first.
Then type in:
ifdown wlan0 && ifup wlan0
If no error is shown, you can verify everything is fine with ifconfig -a: make sure your wlan0 interface has an IP address associated.
If so, you can safely reboot (by using the reboot command – do not ever, ever, unplug the power cable) and then unplug the wired network cable.
If something is going wrong, you may need to debug what’s happening. Install the syslog first, with apt update && apt install rsyslog and then, in another terminal session, before doing a new attempt, launch:
tail -f /var/log/syslog
Connect to a Wi-Fi with no password (only MAC address autentication)
Content of the interfaces file:
auto wlan0
allow-hotplug wlan0
iface wlan0 inet dhcp
Content of /etc/wpa_supplicant/wpa_supplicant.conf:
Once written, system’s data storage size is about 4GB. If you own a larger SD card, it’s advised to enlarge the filesystem in order to use the entire space.
Ok, I know that, before the playback, media is copied into the internal SD card for the following boots, so I can remove the USB key after the first shot. Smart, but instead I want Raspberry Slideshow to play from my veeery big USB key. How to?
If the playback is broken, videos play only once (instead of endless slide) or strange colours during the playback are displayed, try setting gpu_mem=128 in /boot/config.txt.
If default (Verona) videos play well and your videos don’t and the GPU memory increase isn’t working, please check your videos encoding or try transcoding them to another format for the video player to be able to read them.
Thanks to Pete Cheyne.
PLAYERS’ ORCHESTRATION
So far, this page refers to one (only) Raspberry Pi unit. A web interface is also available for the purpose to command many Slideshow units (“players”).
Signage Orchestrator is a centralized web interface you can use to schedule Raspberry Slideshow players to slide media in a calendar-based timetable. More information here.
Full version // screen goes blank after about 10 min // there’s no SSH support
This “release” build of Raspberry Slideshow is limited is some functionality: please have a look at the donation page for the full access to the unrestricted versions of all of Binary Emotions’ operating systems.
More than twelve thousand installations all over the world put Binary Emotions’ operating systems as market leaders for your inexpensive digital signage.
Stay tuned
In order to stay tuned with the operating systems’ updates, please follow me on LinkedIn: I always make a post when a new release is out.
This website uses cookies to improve your experience AcceptRead More
Privacy & Cookies Policy
Privacy Overview
This website uses cookies to improve your experience while you navigate through the website. Out of these, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may affect your browsing experience.
Necessary cookies are absolutely essential for the website to function properly. These cookies ensure basic functionalities and security features of the website, anonymously.
Cookie
Duration
Description
cookielawinfo-checkbox-analytics
11 months
This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Analytics".
cookielawinfo-checkbox-functional
11 months
The cookie is set by GDPR cookie consent to record the user consent for the cookies in the category "Functional".
cookielawinfo-checkbox-necessary
11 months
This cookie is set by GDPR Cookie Consent plugin. The cookies is used to store the user consent for the cookies in the category "Necessary".
cookielawinfo-checkbox-others
11 months
This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Other.
cookielawinfo-checkbox-performance
11 months
This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Performance".
viewed_cookie_policy
11 months
The cookie is set by the GDPR Cookie Consent plugin and is used to store whether or not user has consented to the use of cookies. It does not store any personal data.
Functional cookies help to perform certain functionalities like sharing the content of the website on social media platforms, collect feedbacks, and other third-party features.
Performance cookies are used to understand and analyze the key performance indexes of the website which helps in delivering a better user experience for the visitors.
Analytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics the number of visitors, bounce rate, traffic source, etc.
Advertisement cookies are used to provide visitors with relevant ads and marketing campaigns. These cookies track visitors across websites and collect information to provide customized ads.