MCPcopy
hub / github.com/iBaa/PlexConnect

github.com/iBaa/PlexConnect @V0.7.5 sqlite

repository ↗ · DeepWiki ↗ · release V0.7.5 ↗
174 symbols 596 edges 24 files 3 documented · 2%
README

PlexConnect

or: "Plex @ aTV - think different..."

We all want the pleasure of Plex on the big screen - in this case driven by an AppleTV. Unfortunately there are officially no Apps allowed on AppleTV, most of the time a jailbreak is late (iOS 5.2?) or not available at all (aTV3).

This is a collection of files developed for the little project described in this Plex Forum thread. See also the discontinued ATVBrowser for a project with similar purpose, all javascript.

For more information, like detailed Installation Guides, FAQs and similar, visit the Wiki.

How does it work?

The basic idea is, to... - re-use an already available app (like YouTube, Vimeo, ... in this case: Apple Trailers) - re-route the request to your local Plex Media Server - re-work the reply to fit into AppleTV's XML communication scheme - let iOS do the rest

Requirements

  • Python 2.6.x with minor issues: ElementTree doesn't support tag indices.
  • Python 2.7.18 recommended.

Installation

# Installation
git clone https://github.com/iBaa/PlexConnect.git
# Updating
cd PlexConnect
git pull

If you don't have Git, you can download ZIP file and extract files to a local directory.

  • create HTTPS/SSL certificate
  • install certificate to assets/certificate/
  • install certificate on aTV

See the Wiki - Install Guide for additional documentation.

Usage

# Run with root privileges
sudo ./PlexConnect.py

Depending on your OS, you might only need PlexConnect.py. Or python PlexConnect.py or ...

  • set your AppleTV's DNS address to the computer running PlexConnect
  • run the Trailer App

See the Wiki - Advanced Settings for more details on configuration and advanced settings.

Support

End user support is provided in Plex forums https://forums.plex.tv/tags/c/third-party/apps-tools/plexconnect. Please do not open new issues unless instructed to do so by the development team.

More detailed Information about the files

  • PlexConnect.py - Main script file, invoking the DNSServer and WebServer into seperate processes.
  • PlexAPI.py - Collection of Plex Media Server/MyPlex "connector functions": Auto discovery of running PMSs: Good Day Mate! // XML interface to local PMSs // MyPlex integration
  • DNSServer.py - This is a small DNS server (hence the name) that is now called whenever aTV needs to resolve an internet address. To hijack the trailer App, we will intercept and re-route all queries to trailers.apple.com. Every other query will be forwarded to the next, your original DNS.
  • WebServer.py - This script provides the directory content of "assets" to aTV. Additionally it will forward aTV's directory requests to PMS and provide a aTV compatible XML back. Every media (video, thumbnails...) is URL-wise connected to PMS, so aTV directly accesses the Plex database.
  • XMLConverter.py - This script contains the XML adaption from Plex Media Server's response to valid aTV XML files.
  • Settings.py - Basic settings collection. Creates Settings.cfg at first run - which may be modified externally.
  • ATVSettings.py - Handles the aTV settings like ViewModes or Transcoder options. Stores aTV settings in ATVSettings.cfg.
  • Localize.py - Holds a couple of utility functions for text translation purposes. Uses dictionaries from assets/locales/.
  • Subtitle.py - Subtitle parser functions for PlexConnect's own renderer, converts subs to JSON for easy transfer to aTV.
  • PILBackgrounds.py - Modify and cache fanart images for use by aTV.

License and Disclaimer

This software is open-sourced under the MIT Licence (see license.txt for the full license). So within some limits, you can do with the code whatever you want. However, if you like and/or want to re-use it, we really appreciate a Donation.

The software is provided as is. It might work as expected - or not. Just don't blame us.

Core symbols most depended-on inside this repo

dprint
called by 242
Debug.py
getSetting
called by 60
Settings.py
getKey
called by 35
XMLConverter.py
log
called by 31
assets/js/utils.js
setSetting
called by 22
ATVSettings.py
getPMSProperty
called by 20
PlexAPI.py
getURL
called by 15
PlexAPI.py
getWord
called by 13
DNSServer.py

Shape

Function 110
Method 57
Class 7

Languages

Python76%
TypeScript24%

Modules by API surface

XMLConverter.py46 symbols
PlexAPI.py23 symbols
WebServer.py11 symbols
ATVSettings.py11 symbols
assets/js/application.js10 symbols
DNSServer.py10 symbols
assets/js/utils.js8 symbols
Settings.py7 symbols
PlexConnect.py7 symbols
assets/js/selectAudioAndSubs.js6 symbols
assets/js/photo.js5 symbols
PlexConnect_WinService.py4 symbols

For agents

$ claude mcp add PlexConnect \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact