Mike Slinn

Emby is Better Than Plex

Published 2025-03-24.
Time to read: 2 minutes.

This page is part of the posts collection.

I have been using Plex on one of my home Ubuntu servers for years to serve movies and images. The experience has been OK; however, I would prefer a platform that I could customize. I also do not like that Plex charges a monthly fee for simple features, like the ability to restrict access to selected media for certain users. The Plex menu is awkwward to work with when there are many items.

I previously reviewed and rejected Jellyfin.

I installed Emby on my Ubuntu 24.04 server, which was already running Plex server. Gojira has 12 TB SSD, 64 GB RAM, on a MSI Z790 motherboard, and has two GPUs: the Intel Raptor Lake GPU integrated with the Intel Core i7-14700K, and a GeForce GTX 760 video card. The TV I usually watch video content runs Roku.

Installation

Shell
$ VER=4.8.11.0
$ wget -O emby-server-deb_${VER}_amd64.deb \ https://github.com/MediaBrowser/Emby.Releases/releases/download/$VER/emby-server-deb_${VER}_amd64.deb
$ sudo dpkg -i emby-server-deb_$VER_amd64.deb --2025-03-24 17:56:40-- https://github.com/MediaBrowser/Emby.Releases/releases/download/4.8.11.0/emby-server-deb_4.8.11.0_amd64.deb Resolving github.com (github.com)... 140.82.113.4 Connecting to github.com (github.com)|140.82.113.4|:443... connected. HTTP request sent, awaiting response... 302 Found Location: https://objects.githubusercontent.com/github-production-release-asset-2e65be/25282228/316b78a0-57a6-4077-8041-24ab36d8af11?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=releaseassetproduction%2F20250324%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250324T215537Z&X-Amz-Expires=300&X-Amz-Signature=cde72c7cdba61ff051bc0c6a0bc3a4ab4c838dd14bf7b777df594ea2c43a518b&X-Amz-SignedHeaders=host&response-content-disposition=attachment%3B%20filename%3Demby-server-deb_4.8.11.0_amd64.deb&response-content-type=application%2Foctet-stream [following] --2025-03-24 17:56:40-- https://objects.githubusercontent.com/github-production-release-asset-2e65be/25282228/316b78a0-57a6-4077-8041-24ab36d8af11?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=releaseassetproduction%2F20250324%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250324T215537Z&X-Amz-Expires=300&X-Amz-Signature=cde72c7cdba61ff051bc0c6a0bc3a4ab4c838dd14bf7b777df594ea2c43a518b&X-Amz-SignedHeaders=host&response-content-disposition=attachment%3B%20filename%3Demby-server-deb_4.8.11.0_amd64.deb&response-content-type=application%2Foctet-stream Resolving objects.githubusercontent.com (objects.githubusercontent.com)... 185.199.109.133, 185.199.111.133, 185.199.108.133, ... Connecting to objects.githubusercontent.com (objects.githubusercontent.com)|185.199.109.133|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 173043244 (165M) [application/octet-stream] Saving to: ‘emby-server-deb_4.8.11.0_amd64.deb’
emby-server-deb_4.8.11.0_amd64.deb 100%[=====================================================================================>] 165.03M 54.2MB/s in 3.0s
2025-03-24 17:56:43 (54.2 MB/s) - ‘emby-server-deb_4.8.11.0_amd64.deb’ saved [173043244/173043244]

The above installed Emby in /opt/emby-server/. CSS files live in subdirectories within system/dashboard-ui/.

Images

Emby handles image libraries better than Plex in the following ways:

  • Emby photo libraries can display animated GIFs.
  • The length of time that Emby slideshows display each image can be customized.

However, Plex automatically sizes images so they fill the screen. Emby does not do this by default. Unlike Plex, Emby can use custom CSS. To make slideshows fill the screen without distoring the aspect ratio, modify the CSS.

Slideshow CSS files live within modules/slideshow/style.css. The full path for Slideshow CSS is /opt/emby-server/system/dashboard-ui/modules/slideshow/style.css This is a compressed file. I used the node-js-beautify to uncompress (format) the CSS so I could work on it more easily.

Shell
$ sudo apt install node-js-beautify

This is the css-beautify help message:

Shell
$ css-beautify -h
css-beautify@1.14.7
CLI Options: -f, --file Input file(s) (Pass '-' for stdin) -r, --replace Write output in-place, replacing input -o, --outfile Write output to file (default stdout) --config Path to config file --type [js|css|html] ["js"] -q, --quiet Suppress logging to stdout -h, --help Show this help -v, --version Show the version Beautifier Options: -s, --indent-size Indentation size [4] -c, --indent-char Indentation character [" "] -t, --indent-with-tabs Indent with tabs, overrides -s and -c -e, --eol Character(s) to use as line terminators. [first newline in file, otherwise "\n] -n, --end-with-newline End output with newline --indent-empty-lines Keep indentation on empty lines --templating List of templating languages (auto,none,django,erb,handlebars,php,smarty) ["auto"] auto = none in JavaScript, all in html --editorconfig Use EditorConfig to set up the options -b, --brace-style [collapse|expand] ["collapse"] -L, --selector-separator-newline Add a newline between multiple selectors. -N, --newline-between-rules Add a newline between CSS rules.

Rename style.css to style.css- and then save the formatted version as style.css:

$ cd /opt/emby-server/system/dashboard-ui/modules/slideshow
$ mv style.css{,-}
$ css-beautify \ -LN \ -s 2 \ -f style.css- \ -o style.css

Now edit style.css and change these lines, then save:

/opt/emby-server/system/dashboard-ui/modules/slideshow/style.css
.coveredImage {
  object-fit: cover;
}

.slideshowCardImage {
  width: auto !important;
  height: inherit !important;
}

Emby will serve the modified CSS the next time a slideshow starts.

Firewall and Ports

Like Jellyfin, Emby can be accessed via port 8096.

If your server has a firewall, you need to open the appropriate ports. Ubuntu 8.04 introduced the ufw firewall, and today it is the default firewall for Ubuntu.

The default ports used by Emby are:

  • 8096/tcp is the default for HTTP traffic. You can change this in the dashboard.
  • 8920/tcp is the default for HTTPS traffic. You can change this in the dashboard.
  • 8920/udp is used for secure (https) service auto-discovery. This is not configurable.
  • 7359/udp is used for server discovery by client apps. This is not configurable.

I had already been using ufw before installing Emby. At that time, the ufw status was:

Shell
$ sudo ufw status
Status: active
To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx Full ALLOW Anywhere 9000 ALLOW Anywhere 9443 ALLOW Anywhere 32400 ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx Full (v6) ALLOW Anywhere (v6) 9000 (v6) ALLOW Anywhere (v6) 9443 (v6) ALLOW Anywhere (v6) 32400 (v6) ALLOW Anywhere (v6)

To open the default ports that Emby needed on my server, I typed:

Shell
$ sudo ufw allow 8096,8920/tcp
Rule added
Rule added (v6) 
$ sudo ufw allow 7359/udp Rule added Rule added (v6)

Now the status was:

Shell
$ sudo ufw status
Status: active
To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx Full ALLOW Anywhere 9000 ALLOW Anywhere 9443 ALLOW Anywhere 32400 ALLOW Anywhere 8096/tcp ALLOW Anywhere 8920/tcp ALLOW Anywhere 7359/udp ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx Full (v6) ALLOW Anywhere (v6) 9000 (v6) ALLOW Anywhere (v6) 9443 (v6) ALLOW Anywhere (v6) 32400 (v6) ALLOW Anywhere (v6) 8096/tcp (v6) ALLOW Anywhere (v6) 7359/udp (v6) ALLOW Anywhere (v6)

Like any service, you can start it, stop it, and restart it. To stop it, type:

Shell
$ sudo service emby stop

Clients

Wow, the web app is much better than Plex and Jellyfin. All my wishes came true.

* indicates a required field.

Please select the following to receive Mike Slinn’s newsletter:

You can unsubscribe at any time by clicking the link in the footer of emails.

Mike Slinn uses Mailchimp as his marketing platform. By clicking below to subscribe, you acknowledge that your information will be transferred to Mailchimp for processing. Learn more about Mailchimp’s privacy practices.