Nomploy Nomad Packs

← All packs

makemkv v0.1.0

Media

MakeMKV — rip Blu-ray and DVD discs to MKV, streamed to your browser as a GUI. Deployed as a single host-networked Nomad service.

nomad-pack run makemkv --registry nomploy
…or one line (add registry + run)
curl -fsSL https://packs.nomploy.com/install.sh | sh -s -- makemkv

Needs nomad-pack on PATH. The script only adds the nomploy registry and runs this pack.

1 task http 5800 2 volumes image jlesage/makemkv:latest tracks :latest image bumped today
Variables 13
values.hcl

Save as values.hcl, edit, then run:

nomad-pack run makemkv -f values.hcl --registry nomploy
# The name of the Nomad job.
job_name = "makemkv"

# The Nomad namespace to deploy into.
namespace = "default"

# The datacenters to deploy to.
datacenters = ["*"]

# The MakeMKV container image. Pin a tag in production.
image = "jlesage/makemkv:latest"

# Host port for the browser-streamed GUI (WEB_LISTENING_PORT).
port = 5800

# Named volume mounted at /config (settings).
data_volume = "makemkv_data"

# Named volume mounted at /output — ripped MKV files.
output_volume = "makemkv_output"

# Optical drive device paths to pass through, e.g. ["/dev/sr0", "/dev/sg2"]. SET THIS to your host's drive(s) — MakeMKV can't rip without them. Find them with: lsscsi -g.
devices = []

# User ID that owns the files (USER_ID).
user_id = 1000

# Group ID that owns the files (GROUP_ID).
group_id = 1000

# Container timezone (TZ), e.g. Europe/Bratislava.
tz = "UTC"

# Placement constraints. On a nomploy cluster: attribute = "$${meta.nomploy_control_plane}", operator = "=", value = "true".
constraints = []

# The task resources.
resources = {
    cpu    = 300
    memory = 256
  }
NameTypeDefaultDescription
job_name string
"makemkv"
The name of the Nomad job.
namespace string
"default"
The Nomad namespace to deploy into.
datacenters list
["*"]
The datacenters to deploy to.
image string
"jlesage/makemkv:latest"
The MakeMKV container image. Pin a tag in production.
port number
5800
Host port for the browser-streamed GUI (WEB_LISTENING_PORT).
data_volume string
"makemkv_data"
Named volume mounted at /config (settings).
output_volume string
"makemkv_output"
Named volume mounted at /output — ripped MKV files.
devices list
[]
Optical drive device paths to pass through, e.g. ["/dev/sr0", "/dev/sg2"]. SET THIS to your host's drive(s) — MakeMKV can't rip without them. Find them with: lsscsi -g.
user_id number
1000
User ID that owns the files (USER_ID).
group_id number
1000
Group ID that owns the files (GROUP_ID).
tz string
"UTC"
Container timezone (TZ), e.g. Europe/Bratislava.
constraints list
[]
Placement constraints. On a nomploy cluster: attribute = "$${meta.nomploy_control_plane}", operator = "=", value = "true".
resources object
{
    cpu    = 300
    memory = 256
  }
The task resources.
Back up this pack

This pack stores data in 2 Docker named volumes: makemkv_datamakemkv_output

restic

# Run on the node hosting this pack. Point restic at your repo first:
#   export RESTIC_REPOSITORY="s3:https://<account>.r2.cloudflarestorage.com/<bucket>"
#   export RESTIC_PASSWORD="<repo-password>"
#   export AWS_ACCESS_KEY_ID=<key>  AWS_SECRET_ACCESS_KEY=<secret>
restic backup \
  /var/lib/docker/volumes/makemkv_data/_data \
  /var/lib/docker/volumes/makemkv_output/_data

rclone (sync to S3/R2)

rclone sync /var/lib/docker/volumes/makemkv_data/_data backup:<bucket>/makemkv_data
rclone sync /var/lib/docker/volumes/makemkv_output/_data backup:<bucket>/makemkv_output

Paths assume the default Docker volume location (/var/lib/docker/volumes). Restore by stopping the job, restoring files into the same volume, and re-running the pack.

Readme

makemkv

MakeMKV — rip Blu-ray and DVD discs to MKV, preserving all tracks, streamed to your browser as a GUI (no VNC client needed). Pairs well with handbrake for a second transcode pass and a media server for playback.

Single host-networked Nomad service with config and output volumes, plus optical-drive passthrough.

Deploy

nomad-pack registry add nomploy https://github.com/Nomploy/nomad-packs
nomad-pack run makemkv --registry=nomploy

Configure

Variable Default Description
port 5800 Browser GUI port (WEB_LISTENING_PORT).
devices [] Set this. Optical drive device paths to pass through, e.g. ["/dev/sr0", "/dev/sg2"] (find with lsscsi -g).
image jlesage/makemkv:latest Container image. Pin a tag in production.
data_volume makemkv_data /config — settings.
output_volume makemkv_output /output — ripped MKV files.
user_id / group_id 1000 / 1000 File ownership (USER_ID/GROUP_ID).
tz UTC Container timezone (TZ).
resources { cpu = 300, memory = 256 } Task resources.

Needs a real optical drive: set devices to your host's drive(s) and pin the job with constraints to the node that has them. MakeMKV's beta key must be entered in the GUI (it changes periodically). The GUI has no auth by default — put it behind an authenticating reverse proxy if exposed.