NoMercy MediaServer, the backend that handles encoding, metadata, and streaming
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-08-10 05:18:32 +02:00
.claude docs(encoder): the fluent FfMpeg API in CLAUDE.md has not existed for a while 2026-07-27 07:53:34 +02:00
.devcontainer release: v0.1.303 2026-03-18 01:24:39 +00:00
.github fix(ci): the release fold copies dev's tree instead of squash-merging it 2026-08-01 17:02:22 +02:00
assets chore(ci): normalize all line endings to LF per .gitattributes 2026-03-18 18:09:49 +01:00
benchmarks/NoMercy.Benchmarks fix(inbox): make Kitsu the single source of truth for anime vs tv 2026-08-06 07:11:46 +02:00
docker feat(encoder): encoder v3 2026-06-01 01:24:15 +02:00
docs release: v0.1.398 [skip ci] 2026-07-04 14:20:04 +00:00
libs fix(storage): vendor libnfs so releases bundle the NFS native library 2026-07-13 15:16:17 +02:00
packaging/macos feat(encoder): encoder v3 2026-06-01 01:24:15 +02:00
release-signing-patches release: v0.1.398 [skip ci] 2026-07-04 14:20:04 +00:00
scripts build(scripts): the dev install rebuilds the server, not only the plugin 2026-08-04 07:53:40 +02:00
src feat(i18n): add new entries for plugin status messages in Dutch 2026-08-10 05:18:32 +02:00
templates refactor(id): a plugin id is a ulid, like every id NoMercy issues 2026-08-04 07:26:25 +02:00
tests feat(i18n): add new entries for plugin status messages in Dutch 2026-08-10 05:18:32 +02:00
tools feat(encoder): encoder v3 2026-06-01 01:24:15 +02:00
.dockerignore chore(ci): normalize all line endings to LF per .gitattributes 2026-03-18 18:09:49 +01:00
.editorconfig Refactor tests to use pattern matching for claim and object assertions 2026-07-22 04:36:17 +02:00
.gitattributes release: v0.1.303 2026-03-18 01:24:39 +00:00
.gitignore fix(queue): the encoder queue stops storing a megabyte per track 2026-08-05 21:39:13 +02:00
CLAUDE.md release: v0.1.398 [skip ci] 2026-07-04 14:20:04 +00:00
CONTRIBUTING.md release: v0.1.303 2026-03-18 01:24:39 +00:00
Directory.Build.props Refactor tests to use pattern matching for claim and object assertions 2026-07-22 04:36:17 +02:00
Directory.Packages.props fix(build): settle the dependency graph the bulk bump left in conflict 2026-08-01 15:25:14 +02:00
docker-compose.amd.yml fix(docker): stop silently registering the container IP as the internal IP 2026-07-17 00:03:17 +02:00
docker-compose.intel.yml fix(docker): stop silently registering the container IP as the internal IP 2026-07-17 00:03:17 +02:00
docker-compose.nvidia.yml fix(docker): stop silently registering the container IP as the internal IP 2026-07-17 00:03:17 +02:00
docker-compose.yml fix(docker): stop silently registering the container IP as the internal IP 2026-07-17 00:03:17 +02:00
Dockerfile feat(encoder): encoder v3 2026-06-01 01:24:15 +02:00
Dockerfile.amd feat(encoder): encoder v3 2026-06-01 01:24:15 +02:00
Dockerfile.intel feat(encoder): encoder v3 2026-06-01 01:24:15 +02:00
Dockerfile.nvidia feat(encoder): encoder v3 2026-06-01 01:24:15 +02:00
dotnet-tools.json release: v0.1.303 2026-03-18 01:24:39 +00:00
LICENSE release: v0.1.303 2026-03-18 01:24:39 +00:00
NoMercy.Server.sln refactor(design): the component contract is its own assembly, so plugins can name it 2026-08-04 05:59:35 +02:00
NoMercy.Server.sln.DotSettings Refactor tests to use pattern matching for claim and object assertions 2026-07-22 04:36:17 +02:00
nuget.config release: v0.1.303 2026-03-18 01:24:39 +00:00
openapi-nm-components.yaml chore(ci): normalize all line endings to LF per .gitattributes 2026-03-18 18:09:49 +01:00
openapi-nm-design-system.yaml chore(design): regenerate the design vocabulary 2026-08-06 00:38:38 +02:00
README.md Update README.md 2026-07-26 21:14:49 +02:00
signalr-contracts.json release: v0.1.398 [skip ci] 2026-07-04 14:20:04 +00:00
THIRD_PARTY_NOTICES.md feat(encoder): encoder v3 2026-06-01 01:24:15 +02:00

Caution

Work in progress — use with caution. This repository is under active development and not yet stable.

NoMercy MediaServer

The Effortless Encoder.
Making owning movies, shows, and music just as easy as using a streaming service.

CI/CD Pipeline


Features

  • Automatic Encoding — Convert your media files into various formats effortlessly
  • Media Management — Organize and curate your library with rich metadata
  • Remote Streaming — Access your collection from anywhere via app.nomercy.tv
  • Server Switching — Separate watch histories and profiles across multiple servers
  • Trusted SSL — Built-in certificate for secure internal and external access
  • No DRM — Your files always stay on your storage, accessible regardless of account status

Screenshots

Click to expand

Home

nm_home_1

Info

nm_info_1 nm_info_2 nm_info_3

Custom Video and Trailer player

nm_trailer

Image Viewer

nm_image_viewer

Video Library

nm_movies

Movie Collection

nm_collection_1

Person

nm_person_1

Music

nm_music_albums nm_music_artist_1 nm_artist_albums_1

nm_music_playing

Screensaver 😍 (Suck it, Netflix! Mine's prettier)

nm_screensaver_1


Quick Start

1. Download the installer for your platform:

Platform File
Windows NoMercyMediaServer-windows-x64.exe
Linux NoMercyMediaServer-linux-x64
macOS NoMercyMediaServer-macos-x64.tar.gz

Note

Installers and standalone binaries are self-contained — no .NET installation required. Find all downloads on the Releases page.

2. Run the server and log in. On desktop, a browser window opens automatically for authentication. On headless servers, navigate to http://<your-server-ip>:7626/setup to complete setup.

3. Open app.nomercy.tv, add your media, and start streaming.

That's it — you're up and running.


Installation Options

Linux Package Repository

Install from repo.nomercy.tv:

Debian / Ubuntu
wget -O - https://repo.nomercy.tv/nomercy_repo.gpg.pub | sudo gpg --dearmor -o /etc/apt/keyrings/nomercy-archive-keyring.gpg
echo "deb [signed-by=/etc/apt/keyrings/nomercy-archive-keyring.gpg] https://repo.nomercy.tv/apt stable main" | sudo tee /etc/apt/sources.list.d/nomercy.list
sudo apt update && sudo apt install nomercy
Fedora / RHEL / CentOS
sudo dnf config-manager --add-repo https://repo.nomercy.tv/rpm/nomercy.repo
sudo rpm --import https://repo.nomercy.tv/nomercy_repo.gpg.pub
sudo dnf install nomercy
Arch Linux
echo -e "Server = https://repo.nomercy.tv/arch-packages/pool/x86_64" | sudo tee /etc/pacman.d/nomercy-mirrorlist
echo -e "\n[nomercy]\nInclude = /etc/pacman.d/nomercy-mirrorlist" | sudo tee -a /etc/pacman.conf
curl -o nomercy.gpg.pub https://repo.nomercy.tv/nomercy_repo.gpg.pub
sudo pacman-key --add nomercy.gpg.pub
sudo pacman-key --lsign-key B8CE23865511524D442F7DCF9A4B71002C09D6B8
sudo pacman -Sy nomercy

Docker

# Set your host LAN IP (required for container ↔ host communication)
export HOST_IP=$(hostname -I | awk '{print $1}')

# Pull and run — pick your variant:
docker compose up -d                                    # CPU only
docker compose -f docker-compose.nvidia.yml up -d       # NVIDIA GPU
docker compose -f docker-compose.intel.yml up -d        # Intel Quick Sync
docker compose -f docker-compose.amd.yml up -d          # AMD GPU

You can also pull images directly from the container registry:

docker pull ghcr.io/nomercy-entertainment/nomercymediaserver:latest    # CPU
docker pull ghcr.io/nomercy-entertainment/nomercymediaserver:nvidia    # NVIDIA
docker pull ghcr.io/nomercy-entertainment/nomercymediaserver:intel     # Intel
docker pull ghcr.io/nomercy-entertainment/nomercymediaserver:amd       # AMD

Important

Export HOST_IP before running — the compose files use it for NOMERCY_INTERNAL_IP. Edit the compose file to update media volume paths.

Important

The server derives a stable identity from the host machine-id, which the compose files mount read-only. If you run the image directly with docker run instead of compose, pass -v /etc/machine-id:/etc/machine-id:ro as well. Without it a recreated container reads an empty id and registers as a brand new server.

Build from Source

Requires the .NET 10.0 SDK.

git clone https://github.com/NoMercy-Entertainment/nomercy-media-server.git
cd nomercy-media-server
dotnet restore && dotnet build
dotnet run --project src/NoMercy.Service

Configuration

Port Forwarding

Forward port 7626 on your router to access your server from outside your home network.

Startup Flags

Flag Short Description
--loglevel -l Log level (Verbose, Debug, Information, Warning, Error, Fatal)
--seed Seed database with sample data
--internal-port -i Internal port (default: 7626)
--external-port -x External port (default: 7626)
--internal-ip Internal IP address override
--external-ip External IP address override
--pipe-name Named pipe (Windows) or Unix socket name for IPC
--service Run as a platform service (Windows SCM, systemd, launchd)

Credits

UI designed by AAOA — catch the design process live on YouTube and Twitch. Icons and design kit available at aaoa.lemonsqueezy.com.

Special thanks to Mark for donating hosting and the domain, and to Fill84 for programming contributions.

Repository Note

This repository was recreated in January 2026 due to repository bloat. The previous repo with full history is archived at NoMercyMediaServer-archive.

Contact

NoMercy.tv · Discord


Made with ❤️ by NoMercy Entertainment