pixelReel
Fabric mod for Minecraft Java Edition 1.21.1 that lets you place televisions and cinema screens in your world and watch live TV and on-demand media together with friends.
Live channels come from a Tunarr (or any M3U + XMLTV) playlist. Movies and shows can come from Jellyfin, Emby, or Plex. Each display keeps its own channel or title, multiple screens can play at once, and audio is positional.
This branch targets the stable 1.21.1 Fabric toolchain. For the newer snapshot build, see the
26.3-snapshot-5branch / release.
Requirements
| Requirement | Notes |
|---|---|
| Java 21+ | Required by Minecraft 1.21.1 / this toolchain. |
| Minecraft 1.21.1 | Built against this release specifically. |
Fabric Loader >=0.19.3 |
Pinned in gradle.properties. |
| Fabric API | Use 0.116.15+1.21.1 (or the matching build in gradle.properties). |
| VLC (64-bit) | Needed on each client for video/audio. Install from videolan.org. |
Without VLC, menus, guide, commands, and multiplayer sync still work, but screens show a “video player unavailable” state instead of video.
If VLC is installed in a non-standard location, launch the game with:
-Dpixelreel.vlc.path=C:\Path\To\VLC
The mod runs on clients and servers (environment: *). For multiplayer, both sides need the mod. VLC is only required on clients.
Configuration
Created on first launch at config/pixelreel.json.
Tunarr (Live TV / M3U / XMLTV)
| Key | Default | Meaning |
|---|---|---|
m3uUrl |
"" |
Tunarr base URL or full M3U URL. A base like http://1.1.1.1:8000 expands to /api/channels.m3u. |
xmltvUrl |
"" |
XMLTV guide URL. Auto-filled from a Tunarr base as /api/xmltv.xml when empty. |
Tunarr Config
Jellyfin
Tip: create a dedicated Jellyfin user with access only to Movies and TV Shows, or Anime, then use that user’s API key here. It’s simpler and safer than pointing the mod at your admin account.
| Key | Default | Meaning |
|---|---|---|
jellyfinUrl |
"" |
Server URL (often port 8096). |
jellyfinApiKey |
"" |
API key. |
jellyfinUserId |
"" |
Optional user id. |
jellyfinMoviesEnabled |
true |
Show movies. |
jellyfinTvShowsEnabled |
true |
Show TV series. |
Emby
Tip: create a dedicated Emby user with access only to Movies and TV Shows, or Anime, then use that user’s API key here. It’s simpler and safer than pointing the mod at your admin account.
| Key | Default | Meaning |
|---|---|---|
embyUrl |
"" |
Server URL. |
embyApiKey |
"" |
API key. |
embyUserId |
"" |
Optional user id. |
embyMoviesEnabled |
true |
Show movies. |
embyTvShowsEnabled |
true |
Show TV series. |
Plex
Tip: prefer a Plex account/user that only has access to Movies, TV Shows, and/or Anime, then use that account’s token here instead of a full admin setup.
How to get plexToken
- Open your Plex web app and sign in.
- Click any movie or TV show (for example American Dad).
- Click the three dots → Get Info → View XML.
- In the address bar of the XML page, find
X-Plex-Token=— the value after it is your Plex token. - Paste that value into
plexTokenin the in-game GUI.
| Key | Default | Meaning |
|---|---|---|
plexUrl |
"" |
Server URL (often port 32400). |
plexToken |
"" |
Plex token (see steps above). |
plexMoviesEnabled |
true |
Show movies. |
plexTvShowsEnabled |
true |
Show TV series. |
Plex config
API keys and tokens stay server-side. Clients only receive non-secret public config.
Displays
| Block | Size | Audio range |
|---|---|---|
| Compact Television | 3 × 2 | 16 |
| Wall Television | 6 × 4 | 24 |
| Ultrawide Monitor | 8 × 4 | 24 |
| Cinema Screen | 14 × 8 | 80 |
| Curved Cinema Screen | 16 × 7 | 80 |
Using a curved cinema screen is the best way to watch 4K HDR content when creating your own home movie theater. (just my opinion)
Curved Screen with glasses
All are craftable, appear in the pixelReel creative tab, and are findable by searching television, TV, screen, cinema, or monitor.
Pixel Glasses are also craftable: wear them for a fullscreen overlay of a nearby playing screen (HUD hotbar/crosshair hidden while active).
Only the active screen area has collision — bezels stay buildable so you can frame screens with your own blocks. Breaking the center/controller removes the whole display; player builds are never touched.
- Right-click a display: open the media menu.
- Sneak + right-click: toggle power.
- Video is letterboxed/pillarboxed to the screen aspect (never stretched); it keeps its original aspect ratio.
Choose your sourceMedia selectorPosters MoviesPosters TV Shows
Commands
Most screen actions use these commands (look at a display when required):
/tv menu open the media menu
/tv channels list live channels
/tv channel <n or name> tune a live channel
/tv next | previous change channel
/tv guide now/next programme overview
/tv status power, channel, stream, and volume diagnostics
/tv retry restart playback
/tv reload re-download playlist/guide
/tv stop | resume pause/resume playback
/tv power on|off|toggle power control
/tv volume <0-100> per-display volume
/tv rebuild rebuild screen collision without touching builds
/tv jellyfin status|refresh|configure
Multiplayer
Display state (type, power, channel/media, facing, volume, playback position) is server-auth and synced to every client, including players who join later.
Each client decodes the stream locally with its own VLC. Credentials are never stored in world data.

