Samson Media Player is a universal media player built in PowerShell that allows you to play and manage all of your local or internet based media within a single app. Import playlists and media from Spotify, YouTube, Twitch and more.
The screenshot above is from a personalized and custom version made as a fun gift for a friend and his cat Samson, hence the name.
- Synopsis
- Project Status
- Current Features
- Other Features, Notes and Requirements
- Modules, Libraries and Credits
- Available Versions
- Installation and Configuration
- CLI Options
- Uninstalling
- Manually Building Source Files
This app is still under development and undergoing testing to address issues, so expect some rough edges. However, the app is ready for community testing and feedback to help identify remaining issues.
If you wish to help, see TESTERS for more information. Testers will get access to special private builds with extra features to make submitting feedback easier.
This project has been both educational and enjoyable, allowing me to explore the capabilities of PowerShell for complex development. The core functionality and a significant portion of the app are built entirely in PowerShell. While using other common languages would be more practical, this showcases PowerShells potential for unconventional yet powerful applications.
For a code line count and language breakdown, see Latest Code Count
- Play Spotify playlists and tracks from a valid Spotify Account
- Premium and free accounts supported (Free accounts require Spotify Windows client)
- Auto-sync Spotify playlists and playlist tracks to the apps media library
- Record Spotify media to local disk. Currently saves as FLAC, further customization options planned. (Basic/WIP)
- Supports EQ and audio filters (requires enabling EQ support for Web Players)
- Import and play YouTube playlists and videos from a valid YouTube account
- Auto-sync YouTube playlists and playlist videos to the apps media library
- Select preferred quality options, download YouTube videos to local disk (via YT-DLP) and more
- Alternate YouTube Web Player option using Invidious
- Supports playing YoutubeTV channels (currently channels must be added manually)
- Supports Youtube comments and live YouTube streams with chat integration (with built-in support for BetterTTV)
- Built-in support for SponsorBlock, with configurable options to skip or mute sponsored segments
- Supports EQ and audio filters when using Web Player
- Play Twitch live streams with native chat integration
- Import all followed/subscribed channels with valid Twitch account
- Auto-update/refresh followed streams and their status
- Display notifications for configured channels when they go live
- Multiple Twitch AD blocking solutions supported, including TTVLOL and luminous
- Can provide custom list of proxy servers that support TTVLOL and luminous
- BetterTTV support included for enhanced chat viewer
- Uses StreamLink by default for getting playback streams, with ability to specify preferred quality
- Add directory paths to scan and import all supported media into the apps media library
- Supports most media file types or URLs that VLC player proper supports
- Supports UNC/Network Mapped drives, external storage..etc
- Scan media file IDTags (via TagLib) to populate library with metadata
- Configurable scanning modes for 'Fast' import or 'Slow' to assist scanning storage devices that have slow read/write speeds (such as older external USB drives)
- Option to skip import/scan of duplicates
- Real-time file monitoring of provided directories. Automatically add, remove or update media files as they are changed in the file system when app is running
- Media library data-grids in a dock-able/tabbed UI (powered by AvalonDock) supporting advanced filtering, search and multi-level grouping
- Create custom playlists, combining media from any supported platform
- Playlists can be exported or imported for sharing or backup
- Add media via Drag-n-Drop of media files or URL links directly into app or for moving from library to playlists
- Drag-n-drop also supported when moving items between playlists or re-ordering within existing
- Start playback directly from playlists, library or add to the playback queue
- Supports auto-play, playback history tracking, shuffle, repeat and other playback options
- A small skinned UI with playback controls and shortcuts to various settings/features
- Can open quickly from system tray icon/menu, switch back and forth with main player skin or set to always start in mini-player mode
- Discord Rich Presence integration to display media playback info in your Discord status/profile
- Supports clickable label links when playing Spotify, YouTube and Twitch media
See FEATURES for a more exhaustive list of core features and important requirements
See CREDITS for a quick list of the various, external apps, components, modules or libraries used in this project as well as endorsement for each
- (NOT YET AVAILABLE TO PUBLIC - SOON™) Available builds will be listed under
Releases
or shared directly/privately to QA Testers - Prepackaged installer using Inno setup. Will be the primary and recommended version for regular usage
- NOTE: Using the prepackaged installer is not required, but highly recommended. It is used to provide a convenient way to package, deliver and configure.
- The installer also performs optimizations to improve app performance, such as installing assembles to the GAC and creating native images via ngen
- Using the installer also registers Samson as a 'proper' application which provides a few benefits. For example:
- GUI windows will appear in the task bar as its own application/icon. Otherwise all windows would just show as PowerShell.
- Samson will be listed in Add/Remove programs and can be uninstalled
- Taskbar features such as jump-lists are only available with the installed version
- PowerShell source files only version, main script to launch is Samson.ps1
- Source code is available via this repository or from installer once run and you choose an install folder
- Manually download and extract the files to desired location, then execute the main script
Samson.ps1
within the root folder- Alternatively, even without using the installed version, you can use
Samson.exe
in the root folder to launch the application Samson.exe
is just a simple self-executable launcher built in C#. Source code included undersrc\launcher
if you wish to build or inspect yourselfSamson.exe
allows the ability to enable some settings such asStart on Windows Login
which will not work if the exe is missing
- Alternatively, even without using the installed version, you can use
- If using installer, just run through install wizard, choosing location to install. Let it finish but do not launch yet
- If downloading source files, extract/copy to desired location
- Spotify, YouTube and Twitch features require additional setup for their respective API's.
- See API Setup and Configuration for set-by-step instructions on how to setup your own API accounts for these services, which are free.
- I really wanted to make this more seamless by including my own development APIs but there is just no way to do that securely
- If using installer, run Samson from shortcut created or via
Samson.exe
in the install folder - If you downloaded source files, execute
Samson.ps1
in the root folder from PowerShell (non-admin) - Upon running for the first time, the First Run Setup/Settings window will appear. Go through and configure as desired
- Highly recommend reading the help documentation for each setting, by clicking on the ? icon next to each
- After finishing setup, the app may restart. If it closes but doesn't restart on its own, wait a minute or so then just relaunch
- Uninstall is triggered by passing
-Uninstall
toSamson.exe
orSamson.ps1
. It is also triggered when uninstalling the package from windows or via the Inno Setupunins000.exe
- The uninstaller performs the removal of any installed external components (StreamLink, Chocolatey..etc), removes related files (including temp files) and removes any stored secrets from secure vault
- The uninstaller will prompt the user to decide if they also wish to remove user related data, such as media profiles, custom playlists, settings..etc
- Log files are NOT removed by the uninstaller
See CLI Options for available CLI parameters and other advanced options
See BUILDING for more information on manually compiling core assemblies and helper components