tofa, Plex, Emby and Jellyfin benchmarks
Same machine, same five films, 20 and 21 October 2026. Playback numbers are the median across the five films.
We make tofa, so we ran every server with default settings on the same machine and show where the others come out ahead. These are results from one machine with processor-only video conversion; other hardware, hardware conversion and larger libraries can give different numbers. If you run your own comparisons, we would like to see them, including where tofa does worse: share them on Discord or through support.
Time to start playback
Pressing play until 10 s of 1080p video is ready.
Show the numbers
| Server | Median | Big Buck Bunny | Cosmos Laundromat | Elephants Dream | Sintel | Tears of Steel |
|---|---|---|---|---|---|---|
| tofa | 1.07 s | 1.17 s (11 runs) | 0.24 s (15 runs) | 0.22 s (16 runs) | 1.65 s (16 runs) | 1.07 s (16 runs) |
| Plex | 1.23 s | 1.30 s (16 runs) | 0.33 s (16 runs) | 0.32 s (16 runs) | 1.78 s (16 runs) | 1.23 s (16 runs) |
| Emby | 1.42 s | 1.49 s (3 runs) | 0.38 s (3 runs) | 0.26 s (3 runs) | 1.98 s (3 runs) | 1.42 s (3 runs) |
| Jellyfin | 1.68 s | 1.68 s (3 runs) | 0.36 s (3 runs) | 0.35 s (3 runs) | 2.38 s (3 runs) | 1.87 s (3 runs) |
Start time on a TV
NVIDIA SHIELD TV Pro, pressing play until the first frame is on screen.
Show the numbers
| Film | tofa | Plex | tofa delivered it as | Plex delivered it as |
|---|---|---|---|---|
| Big Buck Bunny | 1.19 s | 5.77 s | Converted | Direct play |
| Cosmos Laundromat | 0.65 s | 4.03 s | Direct play | Direct play |
| Elephants Dream | 0.67 s | 3.71 s | Direct play | Direct play |
| Sintel | 0.99 s | 2.63 s | Repackaged, no conversion | Video converted |
| Tears of Steel | 0.82 s | 2.27 s | Repackaged, no conversion | Audio converted |
One device. Plex converted Sintel's video and Tears of Steel's audio; tofa converted Big Buck Bunny.
Time to seek
Jumping to 5:00 until 10 s of video is ready again.
Show the numbers
| Server | Median | Big Buck Bunny | Cosmos Laundromat | Elephants Dream | Sintel | Tears of Steel |
|---|---|---|---|---|---|---|
| tofa | 1.31 s | 1.31 s (11 runs) | 0.55 s (15 runs) | 0.24 s (16 runs) | 1.84 s (16 runs) | 2.24 s (16 runs) |
| Plex | 1.41 s | 1.41 s (16 runs) | 0.54 s (16 runs) | 0.32 s (16 runs) | 1.88 s (16 runs) | 2.25 s (16 runs) |
| Emby | 1.70 s | 1.70 s (3 runs) | 0.77 s (3 runs) | 0.42 s (3 runs) | 2.07 s (3 runs) | 2.64 s (3 runs) |
| Jellyfin | 2.21 s | 2.21 s (3 runs) | 1.09 s (3 runs) | 0.63 s (3 runs) | 2.83 s (3 runs) | 2.84 s (3 runs) |
Picture quality
Nine clips converted to 1080p. VMAF, out of 100: how close the result looks to the original.
| tofa | Plex | |
|---|---|---|
| Picture quality (VMAF), median | 95.1 | 93.1 |
| Bitrate, median | 2,974 kbps | 2,833 kbps |
| Clips with the higher score | 8 of 9 | 1 of 9 |
Plex scored higher on the Cosmos Laundromat seek: 88.6 vs 82.0.
Show the numbers
| Clip | tofa VMAF | Plex VMAF | tofa kbps | Plex kbps |
|---|---|---|---|---|
| Big Buck Bunny, start | 95.1 | 93.6 | 3,591 | 2,778 |
| Big Buck Bunny, seek | 90.4 | 90.2 | 5,216 | 5,482 |
| Cosmos Laundromat, seek | 82.0 | 88.6 | 2,974 | 4,859 |
| Elephants Dream, start | 90.1 | 65.3 | 1,073 | 2,813 |
| Elephants Dream, seek | 91.0 | 78.3 | 1,283 | 2,833 |
| Sintel, start | 98.0 | 96.8 | 2,626 | 1,880 |
| Sintel, seek | 99.2 | 98.0 | 5,595 | 3,990 |
| Tears of Steel, start | 95.5 | 94.8 | 1,053 | 875 |
| Tears of Steel, seek | 96.3 | 93.1 | 7,773 | 5,572 |
Library scan
Time to scan and match 1,013 files, 14 October. Accuracy is under Matching.
Show the numbers
| Server | Scan time | Correct | Wrong | Unmatched | Right show, no episode |
|---|---|---|---|---|---|
| tofa | 2.1 min | 996 | 8 | 9 | 0 |
| Plex | 3.8 min | 976 | 10 | 27 | 0 |
| Emby | 23.1 min | 930 | 67 | 16 | 0 |
| Jellyfin | 22.0 min | 938 | 13 | 17 | 45 |
Memory
Busiest moment of the playback tests, file cache not counted.
Show the numbers
| Server | In all | Server | Database | Video converter |
|---|---|---|---|---|
| tofa | 1,059 MiB | 31 MiB | 295 MiB | 733 MiB |
| Plex | 1,011 MiB | 355 MiB | inside the server | 656 MiB |
| Emby | 921 MiB | 199 MiB | inside the server | 722 MiB |
| Jellyfin | 1,297 MiB | 387 MiB | inside the server | 909 MiB |
tofa's database is PostgreSQL, a separate process; the others use SQLite inside the server. Each library here is under 1 MB on disk, so this is the databases' own working memory, not library data. At idle: tofa 214 MiB (database 179), Plex 59 MiB.
Matching accuracy
Share of 1,013 files identified correctly, 14 October. Highest in each row in bold.
Files tagged with an ID in the folder or file name, like Dune (2021) {imdb-tt1160419} from Radarr or Sonarr, are matched directly by all four servers when the tag uses the format that server reads. This test uses names without IDs, which is where the servers differ.
| Category | Files | tofa | Plex | Emby | Jellyfin |
|---|---|---|---|---|---|
| Kind of title | |||||
| Popular films and shows | 397 | 100.0% | 99.5% | 92.4% | 98.2% |
| Less-known films and shows | 344 | 98.8% | 97.1% | 94.5% | 98.0% |
| Obscure films | 150 | 92.0% | 96.0% | 90.0% | 90.0% |
| Films sharing a title with another film | 77 | 98.7% | 98.7% | 87.0% | 98.7% |
| TV episodes | 240 | 100.0% | 92.5% | 93.8% | 98.8% |
| Anime episodes | 45 | 100.0% | 60.0% | 80.0% | 100.0% |
| How the file is named | |||||
| Title (Year) | 408 | 98.8% | 99.3% | 97.1% | 98.3% |
| Release name, like Dune.2021.1080p.BluRay | 348 | 98.9% | 99.4% | 87.1% | 97.4% |
| Original title, like Otto e mezzo (1963) | 59 | 94.9% | 94.9% | 96.6% | 93.2% |
| No year in the name | 79 | 96.2% | 89.9% | 84.8% | 89.9% |
| Lowercase, like dune-2021-720p.mp4 | 74 | 97.3% | 95.9% | 95.9% | 97.3% |
| All files | |||||
| Total | 1,013 | 98.3% | 96.3% | 91.8% | 97.0% |
Jellyfin identified the show for all 45 anime files but set no episode numbers; counted as matched. tofa 0.12: 97.3% on a newer 1,002-file set, other servers not yet run on it.
Apple TV playback
tofa from our own tests. Plex and Jellyfin as their Apple TV apps document it.
| On Apple TV 4K | tofa | Plex | Jellyfin (Swiftfin) |
|---|---|---|---|
| Dolby Vision Profile 7 with the enhancement layer | ✓ | ✕plays as HDR10 | ✕plays as HDR10 |
| TrueHD Atmos and DTS:X height channels | ✓up to 7.1.4 | ✕audio converted | ✕ |
Subtitles
Sintel with English text subtitles on. Burning subtitles in means converting the video.
| Server | How the subtitle reached the player | Video converted for the subtitle | Start, subtitle on | Seek, subtitle on |
|---|---|---|---|---|
| tofa | Separate subtitle file | No | 1.64 s | 1.38 s |
| Plex | Burned into the video | Yes | 1.78 s | 1.49 s |
| Emby | Separate subtitle file | No | – | – |
| Jellyfin | Separate subtitle file | No | – | – |
Other measurements
| Measurement | tofa | Plex | Emby | Jellyfin |
|---|---|---|---|---|
| Direct play response, median | 8 ms | 5 ms | 4 ms | 15 ms |
| Processor time to start playback, median | 6.5 s | 5.9 s | 7.8 s | 11.6 s |
Test setup
- Machine
- AMD Ryzen 7 9800X3D, 8 cores, 32 GB. Converted on the processor.
- Versions
- tofa 0.12.0, Plex 1.43.4, Emby 4.10.1, Jellyfin 12.2.0. Default settings, no paid tiers.
- Films
- Big Buck Bunny, Cosmos Laundromat, Elephants Dream, Sintel, Tears of Steel.
- Runs
- Up to 16 per film for tofa and Plex, 3 for Emby and Jellyfin; runs disturbed by other work were repeated. SHIELD: 5 per film.