All Projects → pannal → Kitana

pannal / Kitana

Licence: other
A responsive Plex plugin web frontend

Programming Languages

python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to Kitana

PGMA-Modernized
An updated approach for Plex Gay Media Adult Agents for both Full Feature Films and Scenes
Stars: ✭ 59 (-76.59%)
Mutual labels:  plex, plex-media-server
plex-traefik
Plex media server with traefik 2 in docker and docker-compose
Stars: ✭ 30 (-88.1%)
Mutual labels:  plex, plex-media-server
rpi-nas
🌐👨‍💻💻 Setup your own NAS on a Raspberry Pi
Stars: ✭ 29 (-88.49%)
Mutual labels:  plex, plex-media-server
plex-api
.NET Core SDK for Plex Media Server
Stars: ✭ 70 (-72.22%)
Mutual labels:  plex, plex-media-server
UpdateTool
A tool to update the IMDB ratings for Plex libraries that contain movies/series and use the IMDB agent to receive ratings
Stars: ✭ 195 (-22.62%)
Mutual labels:  plex, plex-media-server
plex-music
Web/Desktop app for streaming music from your Plex Media Server
Stars: ✭ 42 (-83.33%)
Mutual labels:  plex, plex-media-server
PlexAutoSkip
Automatically skip content in Plex
Stars: ✭ 95 (-62.3%)
Mutual labels:  plex, plex-media-server
Ultimate Media Server Core
A bunch of scripts that I've collected, written, and forked for the ultimate administration & automation of your Media Server - Think of this as your "Media server in a box"
Stars: ✭ 188 (-25.4%)
Mutual labels:  plex, plex-media-server
multi-scrobbler
Scrobble plays from multiple sources to multiple clients
Stars: ✭ 54 (-78.57%)
Mutual labels:  plex, plex-media-server
PlexServerAutoUpdater
Automatically update Plex when running the Plex service.
Stars: ✭ 94 (-62.7%)
Mutual labels:  plex, plex-media-server
Youtube-DL-Agent.bundle
A plex metadata agent for Youtube-DL downloads
Stars: ✭ 92 (-63.49%)
Mutual labels:  plex, plex-media-server
plexmedia-downloader
Offline download media from Plex Media Server
Stars: ✭ 15 (-94.05%)
Mutual labels:  plex, plex-media-server
discord-rich-presence-plex
Display your Plex status on Discord using Rich Presence
Stars: ✭ 180 (-28.57%)
Mutual labels:  plex, plex-media-server
flixctl
A toolkit for controlling the infrastructure necessary for a true MaSaS (Movies and Shows as a Service) architecture.
Stars: ✭ 43 (-82.94%)
Mutual labels:  plex, plex-media-server
conv2mp4-py
Python script that recursively searches through a user-defined file path and converts all videos of user-specified file types to MP4 with H264 video and AAC audio using ffmpeg. If a conversion failure is detected, the script re-encodes the file with HandbrakeCLI. Upon successful encoding, Plex libraries are refreshed and source file is deleted. …
Stars: ✭ 37 (-85.32%)
Mutual labels:  plex, plex-media-server
plex-utills
Manage your Plex library automatically
Stars: ✭ 258 (+2.38%)
Mutual labels:  plex, plex-media-server
Media Docker
all-in-one deployment and configuration for an all-in-one media server, running on docker.
Stars: ✭ 148 (-41.27%)
Mutual labels:  plex, plex-media-server
Usenet Docker
Docker-compose configuration for Sabnzbd, CouchPotato, Plex, Sonarr, Plexpy, Nzbhydra, Muximux, Radarr, NZBGet and Ombi with a Nginx proxy.
Stars: ✭ 153 (-39.29%)
Mutual labels:  plex, plex-media-server
clusterplex
ClusterPlex is basically an extended version of Plex, which supports distributed Workers across a cluster to handle transcoding requests.
Stars: ✭ 123 (-51.19%)
Mutual labels:  plex, plex-media-server
BPfM
unofficial Plex web client wrapper for macOS
Stars: ✭ 15 (-94.05%)
Mutual labels:  plex, plex-media-server

Kitana

Maintenance Slack Status master

A responsive Plex plugin web frontend

If you like this, buy me a beer:
Donate
or become a Patreon starting at 1 $ / month

Introduction

What is Kitana?

Kitana exposes your Plex plugin interfaces "to the outside world". It does that by authenticating against Plex.TV, then connecting to the Plex Media Server you tell it to, and essentially proxying the plugin UI. It has full PMS connection awareness and allows you to connect locally, remotely, or even via relay.

It does that in a responsive way, so your Plugins are easily managable from your mobile phones for example, as well.

Running one instance of Kitana can serve infinite amounts of servers and plugins - you can even expose your Kitana instance to your friends, so they can manage their plugins as well, so they don't have to run their own Kitana instance.

Kitana was built for Sub-Zero originally, but handles other plugins just as well.

Isn't that a security concern?

Not at all. Without a valid Plex.TV authentication, Kitana can do nothing. All authentication data is stored serverside inside the current user's session storage (which is long running), so unwanted third party access to your server is virtually impossible.

The Plex plugin UIs still suck, though!

Yes, they do. Kitana does little to improve that, besides adding responsiveness to the whole situation.

Also, it isn't designed to. Kitana is an intermediate solution to the recent problem posed by Plex Inc. and their plans to phase out all UI-based plugins from the Plex Media Server environment.

Features

  • small footprint by using the CherryPy framework
  • heavy caching for faster plugin handling
  • full PMS connection awareness and automatic fallback in case the configured connection is lost
  • fully responsive (CSS3)
  • made to run behind reverse proxies (it doesn't provide its own HTTPS interface)
  • fully cross-platform

Screenshots

Imgur Gallery

Installation

Docker (the easy way, Windows included)

Install Docker

Standalone

This launches Kitana on port 31337:

  • docker run --name kitana --restart unless-stopped -v kitana_data:/app/data -d -p 0.0.0.0:31337:31337 pannal/kitana:latest -B 0.0.0.0:31337

Mount behind a reverse proxy (example: NGINX)

  • docker run --name kitana --restart unless-stopped -v kitana_data:/app/data -d -p 127.0.0.1:31337:31337 pannal/kitana:latest -B 0.0.0.0:31337 -P

Mount on /kitana and behind a reverse proxy (example: NGINX)

  • docker run --name kitana --restart unless-stopped -v kitana_data:/app/data -d -p 127.0.0.1:31337:31337 pannal/kitana:latest -B 0.0.0.0:31337 -p /kitana -P

Upgrading

  • docker stop kitana && docker rm kitana && docker pull pannal/kitana:latest, then re-run it with the command above

Docker-compose

  kitana:
    image: pannal/kitana:latest
    container_name: kitana
    volumes:
      - /FOLDER/TO/KITANA_DATA:/app/data
    ports:
      - 31337:31337
    links:
      - plex
    command: -B 0.0.0.0:31337 -p /kitana -P
    restart: unless-stopped

Manual installation

Requirements:

  • Python3.7

Installation:

  • go to the Kitana folder
  • pip3.7 install -r requirements.txt

Running:

  • python3.7 kitana.py

Windows

  • install Python 3.7 (preferrably ActivePython)
  • pip3.7 install -r requirements_win32.txt

Running:

  • python3.7 kitana.py (Note: asset proxying seems slow on win32, adding --shadow-assets=False is advised)

Running behind IIS:

  • %windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/proxy -preserveHostHeader:true /commit:apphost (Stackoverflow)

Deployment

I've included sample configs for running Kitana using supervisord, and an NGINX reverse-proxy sample config you can use.

Portainer

Usage

  • run kitana (see above)
  • open your browser and visit your Kitana instance (standalone: http://your-ip:31337)
  • authenticate against Plex.TV
  • select your server (non-owned may not work; local connections are preferred)
  • profit

Command line options (python kitana.py --help)

usage: kitana.py [-h] [-B HOST:PORT] [-a [BOOL]] [-i PLUGIN_IDENTIFIER]
                 [-l LANGUAGE] [-p PREFIX] [-P [BOOL]] [-PH [PROXY_HOST_VAR] |
                 -PB PROXY_BASE] [--shadow-assets [BOOL]] [-t TIMEOUT]
                 [-pt PLEXTV_TIMEOUT]

optional arguments:
  -h, --help            show this help message and exit
  -B HOST:PORT, --bind HOST:PORT
                        Listen on address:port (default: 0.0.0.0:31337)
  -a [BOOL], --autoreload [BOOL]
                        Watch project files for changes and auto-reload?
                        (default: False)
  -i PLUGIN_IDENTIFIER, --plugin-identifier PLUGIN_IDENTIFIER
                        The default plugin/channel to view on a server
                        (default: com.plexapp.agents.subzero)
  -l LANGUAGE, --plugin-language LANGUAGE
                        The language to request when interacting with plugins
                        (default: en)
  -p PREFIX, --prefix PREFIX
                        Prefix to handle; used for reverse proxies normally
                        (default: "/")
  -P [BOOL], --behind-proxy [BOOL]
                        Assume being ran behind a reverse proxy (default:
                        False)
  -A GLOBAL_AUTH_TOKEN, --global-token GLOBAL_AUTH_TOKEN
                        Token to access Plex. Can be the name of an
                        environment variable containing the token. Overrides
                        and disables any and all authentication. Effectively
                        enables local mode.
  -PH [PROXY_HOST_VAR], --proxy-host-var [PROXY_HOST_VAR]
                        When behind reverse proxy, get host from this var
                        (NGINX: "Host", Squid: "Origin", Lighty/Apache:
                        "X-Forwarded-Host", IIS: "Host" (see README))
                        (default: "Host")
  -PB PROXY_BASE, --proxy-base PROXY_BASE
                        When behind a reverse proxy, assume this base URI
                        instead of the bound address (e.g.: http://host.com;
                        no slash at the end). Do *not* include the :prefix:
                        here. (default: "Host (NGINX)")
  --shadow-assets [BOOL]
                        Pass PMS assets through the app to avoid exposing the
                        plex token? (default: True)
  -t TIMEOUT, --timeout TIMEOUT
                        Connection timeout to the PMS (default: 5)
  -pt PLEXTV_TIMEOUT, --plextv-timeout PLEXTV_TIMEOUT
                        Connection timeout to the Plex.TV API (default: 15)
  --allow-not-owned [BOOL]
                        Allow access to not-owned servers? (default: False)

BOOL can be:
True: "y, yes, t, true, True, on, 1"
False: "n, no, f, false, False, off, 0".

[BOOL] indicates that when the switch but no value is given, True is used.

Todo

  • use proper logging interface (as of now, print() is used)
  • add verbosity options
  • add HTTPS option
  • allow the use of config files instead of the command line options
  • add an auto update mechanism for everything but Docker
  • (implement a video player for video plugins?)
  • add theming engine
  • add service for win32

Acknowledgments

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].