DEV Community

Odilon HUGONNOT
Odilon HUGONNOT

Posted on • Originally published at web-developpeur.com

ShareBox v5 — GPU transcoding, Netflix-style grid, and why I don't need Plex anymore

I wanted to send a movie link to a friend. Plex wanted me to scan a library, create an account, configure metadata agents. Jellyfin was lighter but still required a database server. Emby wanted a subscription.

All I needed: point at a file, get a link, let the other person click play. So I built ShareBox — a self-hosted media server in pure PHP, no framework, no dependencies. Version 5 just shipped.

25 MB of RAM, no scan, no plugins

ShareBox is a lightweight self-hosted alternative to Plex and Jellyfin. Point at a folder, launch Docker, it's online. No library scan (the filesystem is the library), no external database, no plugins. PHP 8 + SQLite + ffmpeg, that's it.

ShareBox Netflix-style grid view with TMDB posters, series and movie navigation

The grid view pulls TMDB posters automatically, with season navigation for TV shows. The built-in player handles subtitles (SRT, ASS, PGS), multiple audio tracks, and Picture-in-Picture. I covered the zero-dependency philosophy in the v1 article — that hasn't changed.

What's new in v5

GPU hardware transcoding — auto-detected, zero config

This is the big one. ShareBox auto-detects available hardware and picks the best encoder:

  • Intel VAAPI — Synology NAS, mini-PCs, most servers. Available whenever an Intel iGPU is present.
  • NVIDIA NVENC — desktop/laptop GPUs via Docker with the NVIDIA runtime. A dedicated docker-compose.nvidia.yml is included.
  • Raspberry Pi V4L2M2M — the Pi 4's hardware codec. Good enough for real-time 720p on a 2 GB Pi.

If the GPU fails (missing driver, unsupported format), ShareBox falls back to software transcoding automatically. No config, no flags to toggle. The fallback is transparent.

Continue Watching

A "Continue Watching" row appears at the top of the browse page, showing the last 8 videos in progress with progress bars. Stored in localStorage on the client — no user account needed. Close the browser, come back, pick up where you left off.

9 security fixes

Path traversal on mark_watched, IDOR letting non-admins delete system links, XSS via error responses and search queries, race condition on the download counter, HTTP host header injection. Every fix is documented in the CHANGELOG.

52 Playwright e2e tests + CI

Browse, posters, admin, player, ZIP, search, security — all covered. Tests run on GitHub Actions against the Docker demo container on every push and every PR. Combined with the 159 PHPUnit unit tests, that's 211 tests total.

Installation guides

Docs now cover Docker, Raspberry Pi, Synology NAS, Unraid, and bare metal installation. With exact commands, not just "check the documentation".

How it compares

ShareBox

Plex

Jellyfin

Setup

30 seconds

15-30 min

10-20 min

RAM

25 MB

500 MB - 2 GB

300 MB - 1 GB

Media library scan

None

Required

Required

File sharing links

Built-in

No

No

GPU transcoding

Auto-detected

Plex Pass required

Built-in

Raspberry Pi

Yes (2 GB)

Barely

Yes (4 GB)

Cost

Free (MIT)

Freemium

Free (GPL)

ShareBox doesn't replace Plex for everyone. If you need multi-device sync, live TV, or music management, Jellyfin or Plex are better fits. But for sharing files and streaming videos without maintaining a media library, it's the simplest option.

Try it in 30 seconds

git clone https://github.com/ohugonnot/sharebox.git && cd sharebox
docker compose up -d
Enter fullscreen mode Exit fullscreen mode

Open http://localhost:8080/share — it's live. Demo content is included so you can test without configuring anything.

For NVIDIA GPU owners:

docker compose -f docker-compose.nvidia.yml up -d
Enter fullscreen mode Exit fullscreen mode

The live demo is here: Films grid — and the admin panel with admin / demo2026.

ShareBox admin panel with link management and system monitoring dashboard

Conclusion

ShareBox started from a simple need — sending a link — and it still does exactly that, just faster and more solid. GPU transcoding is the game changer on modest hardware: a Raspberry Pi that could barely software-transcode can now serve real-time 720p via V4L2M2M.

The repo is on GitHub. Star it if you find it useful. PRs are welcome — especially if you've dealt with ffmpeg remux audio sync issues.

Top comments (0)