Skip to content

Repository files navigation

RTSlideShow - A simple slideshow and live presentation program for pics and videos (for Windows)

This is a weird homegrown program I wrote to help me do a presentation many years ago, then to run a cafe tv kiosk that allows remote control of audio and hue lighting as well as display custom livestream setups. I then used it to create a presentation for youtube.

It just makes it easy to move, zoom, and markup images and videos live. Setting up a presentation is as easy as copying the files to the slides directory. (order is determined by the filename)

Features:

  • Can move/scale/copy/paste multiple images and movies (can play everything VLC can) concurrently
  • Can draw on images and videos
  • Use arrow keys or gamepad for prev/next slide. Hold shift to not remove the previous slide
  • Can set timer for slides to auto-change (good for kiosk type setup)
  • Virtual canvas of 1080P, so positioning is still the same on different screen resolutions/window sizes
  • Can display a message when a current time (like 9 PM etc) is reached

Mostly undocumented features:

  • Very basic scripting system can be used to setup images, animations, display livestreams
  • Can run scripts by sending a command to socket at port 8095 (the app opens this and listens)
  • Can control hue lights
  • Can enable on-screen clock and "now playing" song display (via text file or web browser playing via using spotify on same computer)
  • Can pause/resume audio playing on foobar or spotify (that's playing in a browser on same machine) (using foobar requires beefweb component)

Latest Changes in release V1.10 (March 29th 2024)

  • bmp, rttex and wav filetypes are now also supported
  • Can drag and drop a file (or files) into the app while it's running
  • Video and audio files now have playback/vol/progress controls
  • No longer auto-scales images to fit the screen, I should probably have that as an option though
  • BUGFIX: Resizing the window/toggling fullscreen no longer messes up the markup overlays
  • BUGFIX: Can correctly load local audio/video files with umlauts/etc in the name

Download latest version here: https://www.rtsoft.com/files/RTSlideShow_Win64.zip (230 MB) (.exe signed by Robinson Technologies)

How to use it

  1. Download it, extract it somewhere, then navigate into its SlideShow folder.
  2. To learn the basics, click RunTutorialSlideShow.bat. It'll show you how to use the program.
  3. Ready to make your own slideshow? Throw some images/videos into the "slides" directory and then run RTSlideShow.exe. That's it! Oh, the order slides are shown is based on their filename.

Keyboard shortcuts

  • Alt-F4 Exit app
  • Left/right arrow keys - Previous/next slide (gamepad works too)
  • Shift+Left/right arrow keys - Previous/next slide without removing the previous slide
  • Right mouse button - markup and draw on image or video
  • [ and ] - change size of pen (note: there is no way to change the color yet. uhhh...)
  • Alt-enter - Toggle native fullscreen mode. note: you can also drag the window to resize it

Left mouse button to drag. While dragging, you can also use the following to modify the selected image/video:

  • Mouse wheel - Zoom in/out
  • Space - Pause/unpause video
  • -/= - Decrease/increase volume on video
  • M - Mute/unmute video
  • S - Stamp additional copy at the current size/position (and roughly the same location in a video)
  • DEL - Delete selected image/video
  • C - Clear markup on selected image/video

How to use the scripting system

Currently undocumented. Although I included a directory called "example_scripts" which shows some advanced usage.

Remote control

It listens at port 8095 for commands that will trigger existing scripts such as ID0_ButtonA.txt, etc. Arduino things like the M5 stick can be made to wirelessly trigger these commands. (example code to do this in this repo's M5StickButtonArduinoCode directory)

Oh, you can press 1 or 2 on the keyboard to fake remote button presses for testing. They run the included ID0_ButtonA.txt and ID1_ButtonA.txt scripts which pop up a "correct" or "incorrect" graphic as well as play a sfx.

WiFi controller setup (ESP32 / M5 devices)

The PlatformIO firmware for the physical controllers lives in SlideShowButtonClientFourButton (M5StickC Plus2 buttons), M5DialVolume (M5Dial volume knob), and M5StickButtonArduinoCode (original M5StickC Plus lit-button remote). To keep WiFi passwords out of git, each project reads its credentials from an untracked include/secrets.h:

  1. In the project folder, copy include/secrets.example.h to include/secrets.h.
  2. Edit secrets.h with your WiFi SSID, password, and the IP(s) of the PC(s) running RTSlideShow. (If you only use one PC, point all three SERVER_HOST entries at the same IP.)
  3. Build and upload with PlatformIO as usual.

secrets.h is gitignored, so your real credentials are never committed.

Mesh WiFi reliability (important for multi-node systems like TP-Link Deco)

ESP32 devices do not roam, and the Arduino default scan connects to the first AP it finds, not the closest one. On a multi-node mesh this can leave a controller stuck on a far/weak node (drops, lag). The firmware now scans all channels and picks the strongest node, caps security at WPA2 (to dodge WiFi 6E/WPA3/PMF handshake issues), and shows live link quality. Recommended setup:

  • Put the controllers on a dedicated 2.4 GHz, WPA2 SSID (on Deco: More > IoT Network) and use that SSID/password in secrets.h.
  • In the Deco app, pin each controller to the closest node: Clients > select device > Connection Preference > turn off Auto > choose the node + 2.4 GHz. (Requires Deco firmware 1.6.0+.) Turning off per-client "Mesh Technology" also stops forced steering.
  • Each device shows its hostname (RTSlideShow-VolumeDial / RTSlideShow-Buttons), IP, and MAC on screen at boot so you can find it among many clients in the Deco app, plus a live RSSI/node readout (red when the signal is weak).
  • Optional hard lock: if the mesh still misbehaves, set WIFI_BSSID in secrets.h to the exact BSSID shown on the device screen (after pinning it to the desired node) to force it onto that one radio. Leave it commented out for automatic strongest-node selection.

The config file

Edit config.txt to change the default settings. The file itself has some basic descriptions of its options.

Command line options

You can add -fullscreen to force fullscreen mode. An additional parm can be the config file to use, this way many different kinds of kiosks/presentations can be ready to go from the same directory. Example: RTSlideShow.exe myconfig.txt

How to compile it from source

  • It's a Proton SDK project so it works like those, put this repo as a subdir of proton, ie proton/RTSlideShow
  • The huestuff uses hueplusplus which I've included in this repo as I think I've made a few mods
  • You'll need to link to Win64 binaries of the libVLC SDK. I can't remember if I compiled mine myself or downloaded them somewhere

Anyway, I've sort of done the minimum amount of work needed to share this little app, but if you have any questions please use the Discussions area or open an issue. I'll try to help if I can.

Things I should add, probably

  • Add a way to change markup pen color
  • Allow dragging and dropping images/videos from explorer into the app

License

BSD style attribution, see LICENSE.md

FAQ

Q. I ran it, but it's just a blank screen?! TF??!

A. It's probably running fine, but you need to put some images or videos in the "slides" directory and restart it. The order they are shown is based on their filename. For a demo/tutorial, try running RunTutorialSlideShow.bat instead.

Q. Does this only run on Windows?

A. Yes. It could be ported as long as libVLC works on the target platform but meh, I only need it on Windows personally. For now.

Q. My firewall popped up, are you hacking me?

A. Nope. The app listens at port 8095 for commands that will trigger existing RTSlideShow scripts. It should be pretty safe even if your computer's ports were accessible from outside your network as it strips things like ../ and ..\ from the filename of the script being requested to be run, and appends ".txt".

Even if an attacker could trigger a pre-existing script, scripts are just text files that can move SlideShow images around and stuff in the app. It can't do anything to your computer or retrieve/send information of any kind.

If you don't need RTSlideShow scripts being run remotely, it's fine to tell Windows Firewall "no, this app can't use net stuff". This app does not send or collect any kind of data, it's just listening for script triggers.

Credits

Created by Seth A. Robinson

Media: The included example video used in the "tutorial" was created by me (it's on my junk channel) and the music it uses is "Urban Lullaby" from youtube's royalty free music.

Libs used:

About

Stupidly simple interactive slideshow/presentation app for Windows - pics and movies can be dragged, scaled, stamped and drawn on.

Resources

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages