Skip to content

Latest commit

 

History

History
64 lines (45 loc) · 2.99 KB

README.md

File metadata and controls

64 lines (45 loc) · 2.99 KB

Update 2019-01-17 - The Emby team has deleted the relevant GitHub isuses in an attempt to hide community backlash. Below are archived versions of those issues:

Announcing Jellyfin - An Emby Fork! - I am now focusing my time on Jellyfin: a free software fork of Emby. For those using the emby-unlocked image - a drop-in replacement of Jellyfin is available on Docker Hub as jellyfin/jellyfin.

⚠ This was spurred from Emby's decision to move to a proprietary license [source]. ⚠


emby-unlocked

Emby with the premium Emby Premiere features unlocked.

Note - I'm not going to be devoting much time to into maintaining emby-unlocked from here on. The upstream project is too hostile towards the free software community.

  • reliance upon proprietary blobs
  • missing build scripts
  • missing licenses
  • missing source code

Releases

Releases including the patch are available below:

Help! Premiere feature x does not work.

While this patch makes your local server believe Emby Premiere features are unlocked, some features may still not function. For example, both tv.emby.media and the mobile apps rely upon validation with the Emby-owned mb3admin.com server.

Modifications

PluginSecurityManager.cs.patch

Before compilation, simply patch the existing file:

patch -N -p1 -r - Emby.Server.Implementations/Security/PluginSecurityManager.cs < ../PluginSecurityManager.cs.patch

connectionmanager.js

Not really sure what this unlocks outside of removing the nag on the Sync screen. Sync doesn't seem to work afterwards. Regardless - your own Emby server has zero need to contact the Emby-owned validation URL: https://mb3admin.com/admin/service/registration/validateDevice.

The included version of this in the source distribution is minified. Thus, making a patch is difficult. The only difference boils down to replacing self.getRegistrationInfo with this:

self.getRegistrationInfo = function (feature, apiClient, options) {
    var cacheKey = getCacheKey(feature, apiClient, options);
    appStorage.setItem(cacheKey, JSON.stringify({
        lastValidDate: new Date().getTime(),
        deviceId: self.deviceId()
    }));
    return Promise.resolve();
};