- Python 97%
- Batchfile 2.6%
- Shell 0.4%
Add docs/agents issue tracker, triage label and domain doc config, and an Agent skills section in agents.md, as written by setup-matt-pocock-skills. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> |
||
|---|---|---|
| .github/workflows | ||
| docs/agents | ||
| plex_client | ||
| release | ||
| tests | ||
| tools | ||
| .gitattributes | ||
| .gitignore | ||
| agents.md | ||
| BUILD.md | ||
| build.sh | ||
| build_exe.bat | ||
| main.py | ||
| plexible.spec | ||
| README.md | ||
| requirements.txt | ||
Plexible
Plexible is a desktop Plex client built with wxPython and the latest python-plexapi fork. It supports browser-based authentication, browsing any Plex library, and streaming video or audio through an embedded VLC.
Questions, bugs, or release news? Join the SerrebiProjects Telegram group, the fastest place to get help.
Features
- Plex account sign-in using the official browser PIN flow.
- Automatic discovery of your Plex servers and libraries.
- Lazy-loaded navigation tree for large libraries (movies, shows, music, photos, and collections).
- Metadata viewer with quick playback controls.
- Embedded playback surface powered by LibVLC.
- Global search across all Plex libraries with
Ctrl+F, plus quick server switching from the File menu.
Getting Started
-
Run the application:
py -3.14 main.pyMissing dependencies are installed automatically on first launch. The script invokes
python -m pip install -r requirements.txtunder the hood and may restart itself once installation completes.Note: wxPython and the custom
python-plexapifork both require build tools on some systems. Refer to their documentation if installation fails. -
(Optional) Install dependencies manually if you prefer to control the environment:
python -m pip install -r requirements.txt -
Use File > Sign In... to launch the Plex browser login. After approving the request your libraries appear on the left.
-
Control playback using the toolbar above the video surface or the Player menu (play/pause, stop, volume slider, mute, and player selection). Use File > Global Search... (
Ctrl+F) to find content quickly, or File > Change Server... to switch Plex servers.
Development Notes
- Configuration and the Plex authentication token are stored in
config.jsonin the project root (next tomain.py). - The client id persists between runs to avoid repeated approval prompts.
- Playback uses the Plex stream URLs directly. Depending on codecs installed locally, videos may sometimes fall back to Plex's transcoding pipeline.
Troubleshooting
- If playback does not start, confirm that the stream URL opens in your default browser. Some file types may require additional codecs in Windows.
- LibVLC playback requires a local VLC installation that Python can discover. Install VLC and, if needed, set
VLC_PATH(for the desktop app) orPYTHON_VLC_MODULE_PATHto point at the VLC installation directory. - For MPC-HC/BE fallback, install MPC-HC (or MPC-BE) and optionally set
MPC_PATHto the player executable. - Signing out clears the cached token. If your token expires, simply sign out and sign back in.
Building
To build a standalone executable (directory-based for better compatibility):
Using the build script:
build_exe.bat build
Using PyInstaller directly:
py -3.14 -m PyInstaller plexible.spec
The output will be in the dist/Plexible folder. Run Plexible.exe from that directory.
Releases
The build script now supports automated releases and update metadata generation.
Prerequisites
- Python 3.14 installed. The batch script prefers
py -3.14; setPLEXIBLE_PYTHONif you need to point at a specific Python 3.14 executable. - Git and GitHub CLI (
gh) installed and authenticated (gh auth login). - Windows SDK signtool available (defaults to
C:\Program Files (x86)\Windows Kits\10\bin\10.0.26100.0\x64\signtool.exe). - Code signing certificate installed and accessible by signtool.
- Optional: set
SIGNTOOL_PATHto override the default signtool location. - Optional: set
SIGN_CERT_THUMBPRINTto force signtool to use a specific cert hash (self-signed is supported for testing/public builds). - Optional: set
SIGN_CERT_STORE(defaultMY) andSIGN_CERT_MACHINE=1for LocalMachine certs. - Optional: set
PLEXIBLE_TRUSTED_SIGNING_THUMBPRINTS(comma-separated) to allow additional update signatures during testing.
Commands
build_exe.bat release
Runs end-to-end: computes the next version, updates plex_client/version.py, builds via plexible.spec, signs Plexible.exe, zips the dist\Plexible folder, generates Plexible-update.json, commits the version bump, tags, pushes, and creates a GitHub release with the zip + manifest attached.
build_exe.bat build
Builds, signs, zips, and generates update metadata locally (no git tag or GitHub release).
build_exe.bat dry-run
Prints the actions without modifying git or creating releases.
build_exe.bat
Legacy behavior (clean + build only).
Updater
Plexible checks GitHub Releases for the latest tag and reads Plexible-update.json from the release assets.
It compares versions semver-style, downloads the release zip, validates its SHA-256 hash, and verifies the Authenticode signature before installing.
Updates are applied by a helper script that waits for Plexible to exit, swaps files with a staged copy, keeps a backup for rollback, and restarts the app.
For self-signed certificates, the updater accepts the pinned signing thumbprint if the OS trust chain is not available.
The updater requires a pinned publisher and rejects invalid signatures. The manifest's signing_thumbprint is informational and cannot add a trusted publisher. For self-signed certificates reported as UnknownError, Windows must confirm that the error is an untrusted root, rather than a damaged or expired signature.
Controls
- Help > Check for Updates... triggers a manual check.
- Help > Automatically Check for Updates toggles the startup auto-check (default on).
Test Plan (Manual)
- Build an older version (or edit
plex_client/version.pyto1.37.0) and run the app fromdist\Plexible\Plexible.exe. - Publish a release using
build_exe.bat release(ensures a newer version exists on GitHub). - In the older build, open Help > Check for Updates..., accept the update prompt, and confirm Plexible restarts on the new version.
- Validate that the update folder is created under
%LOCALAPPDATA%\Plexible\updatesand that the new exe is signed.
License
This project is provided without an explicit license. Adapt it to your needs or reach out if you require formal licensing terms.
##Submit bugs in issues, or join my Telegram group! (https://t.me/SerrebiProjects)