Skip to main content

JellyProxy

A proxy that sits between jellyfin-mpv-shim and mpv to filter and control IPC commands.

What it does

Jellyfin-mpv-shim sometimes overrides your carefully configured mpv settings. JellyProxy prevents this by intercepting commands between JMS and mpv, letting you block unwanted changes while keeping the features you want.

Installation

pip install jellyproxy

Quick Start

  1. Generate a config file:

    jellyproxy --generate-config > ~/.config/jellyproxy/conf.json
    
  2. Edit the config to block commands you don't want. The example config blocks set_property commands that override your settings.

  3. Update your JMS config to point to the proxy socket:

    {
      "mpv_ext": true,
      "mpv_ext_ipc": "/tmp/mpvSockets/spoof",
      "mpv_ext_start": false,
      "mpv_ext_path": null,
    }
    

    Note, mpv_ext_ipc should match your spoof_socket path in ~/.config/jellyproxy/conf.json, if you've changed it.

  4. Run it:

    jellyproxy
    

That's it. JellyProxy will start mpv and JMS automatically, and your mpv settings won't get clobbered anymore.

Configuration

The config file uses JSON with two main filtering lists:

  • blacklist - Commands to block
  • whitelist - Commands to explicitly allow (overrides blacklist)

Each rule matches commands using regex patterns:

{
  "blacklist": [
    {
      "#": "Block JMS from changing OSC setting",
      "command": ["set_property", "osc", ".*"]
    }
  ],
  "whitelist": [
    {
      "#": "But allow subtitle color changes",
      "command": ["set_property", "sub-color", ".*"]
    }
  ]
}

Command Line Options

jellyproxy --help                    # Show all options
jellyproxy --config myconfig.json    # Use custom config
jellyproxy --debug                   # Enable debug logging
jellyproxy --validate               # Check config for errors

Config Reloading

JellyProxy watches your config file and restarts automatically when you make changes. No need to manually restart.

Logging

All IPC traffic gets logged so you can see what commands JMS is sending. Use --debug for extra detail, or edit the logging section in your config.

Socket Paths

By default:

  • JMS connects to /tmp/mpvSockets/spoof (the proxy)
  • Proxy connects to /tmp/mpvSockets/real (actual mpv)

Change these in the config if needed.

Troubleshooting

JMS can't connect: Check that the socket paths match between your JMS config and JellyProxy config.

Commands not being filtered: Run with --debug to see the exact commands being sent and whether they match your rules.

Config errors: Use jellyproxy --validate to check for problems.

Multiple JMS instances: The old config reloading had a bug that left processes running. This is fixed now.

Requirements

  • Python 3.8+
  • python-mpv-jsonipc (pip install python-mpv-jsonipc)
  • A working jellyfin-mpv-shim setup

License

GPL-3.0

Metadata

Release files for jellyproxy 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for jellyproxy 0.1.1
File Size Uploaded Provenance
jellyproxy-0.1.1.tar.gz 18.1 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for jellyproxy 0.1.1
File Interpreter ABI Platform
jellyproxy-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 33.7 kB

Release files / jellyproxy-0.1.1.tar.gz

Download URL jellyproxy-0.1.1.tar.gz
Size 18.1 kB
Tags Source
SHA-256 checksum
How to use checksums
1b73305c5693043beeca726f017420b3d7725d451854e28e6886fbc374378d52
BLAKE2b-256 checksum
How to use checksums
d0b1d6eebe7c61ddb6fbc61fd585f71ee801bee3a84238ba1c6e34a898d0be10
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.3

Release files / jellyproxy-0.1.1-py3-none-any.whl

Download URL jellyproxy-0.1.1-py3-none-any.whl
Size 15.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
fe6ba3c2f902b3c4ddfec793959237668ff9c7f07ab2aae14ab67508bbc698d3
BLAKE2b-256 checksum
How to use checksums
2e3f58ed3285c731d0b45f69021bd3b37ea4d76ea2ef70527da7dd26414d82c9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.3

Security for jellyproxy 0.1.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page