PowerShell Photo Slideshow

GitHub Source

Project Description

Photo slideshow implemented in PowerShell -> Windows Forms

Simply target a (nested) folder of images. Local or LAN UNC path supported.  
 

Features:

  • task tray icon to start slideshow on demand...
  • otherwise kicks off after user defined idle timeout (honors running video)
  • good randomization - one soon realizes pleasantly random photos are the key want of a photo slideshow ... fortunately PowerShell has a readily available random commandlet that seems to do quite well
    • persists "lastShown" for each subfolder and avoids re-showing within XX days (currently 1 month)
  • image fade-in and slide for ambience
  • several hotkeys functional:
    • open current image folder
    • copy current image to _My Photos_
    • rotate current image (and save) - *generally honors EXIF rotation metadata where present, this option allows for manual correction where EXIF is missing*
    • reverse to previously shown photo (left cursor)
    • pause/play (space)
    • hotkey legend pops up on any other keypress
  • screen click functions:
    • double click in center hides slideshow
    • single click in center pauses slideshow
    • click arrows on far left and right for prev/next image
  • skips .hidden folders
  • plays videos via VLC
  • open to modification - it's just PowerShell 🙂 no compiling tools required

Install - basically just launch the ps1... here's some tips:

  1. only the ps1 and ico files are needed, download them to a folder
  2. ensure VLC.exe is in your path
  3. (see screenshot below) create a shortcut to the ps1 and tweak the target to include powershell before the ps1 filename...
  4. example full shorcut command line: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -WindowStyle Hidden \\beejquad\Dev\_PersonalProjects\PoShSlideshow\PoShSlideshow.ps1 -photoPath \\beejquad\photos -idleTimeout 2
  5. select Run: Minimized to make script launch more polished
  6. add -WindowStyle Hidden after powershell.exe on target command line for further polish
  7. then hit the Advanced button and select Run as administrator - this is only required for the powercfg /requests used to identify running video and avoid starting slideshow after user input idle timeout (wouldn't mind hearing a slicker approach???)
  8. script parameters:
    • add -photoPath {path\to\your\images} to the end of the shortcut path - UNC shared folder fair game, write permissions required to persist folder cache flat file
    • add -idleTimeout 2 to the end of the shortcut path - units are in minutes
  9. Copy this shortcut to shell:startup in Windows FileExplorer to automatically launch this script when you login to your desktop

Wishlist

  1. [done] show videos as well - thinking VLC convenient
  2. Right mouse to show commands menu same as keyboard
  3. Implement a Hide button akin to the forward back buttons
  4. Email current photo - on screen keyboard? fire gmail to get contacts
  5. blog request: Automatically update folder cache upon new items... to be clear, current approach automatically recognizes new files in existing folders since it only caches the list of folders from which it randomly grabs the next image. Thoughts - Seems pretty straightforward to throw in PowerShell FileWatcher configured to call the existing updateFolderCache function.
  • Kim Oppalfens

    If this would loop, and interrupt the slideshow to show a new file copied to the folder, and subsequently continue the loop it would be perfect 🙂

    Thanks for this post

    • Beej

      Added to wishlist; with implementation suggestion in case anybody wants to beat me to it, seems easy enough.