MakeMKV — rip Blu-ray and DVD discs to MKV, streamed to your browser as a GUI. Deployed as a single host-networked Nomad service.
Needs nomad-pack on PATH. The script only adds the nomploy registry and runs this pack.
Source ↗ Project ↗ ★ 712 ⚑ Report an issue
Save as values.hcl, edit, then run:
# 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
}
| Name | Type | Default | Description |
|---|---|---|---|
| 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. |
No variables match.
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.
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.
nomad-pack registry add nomploy https://github.com/Nomploy/nomad-packs
nomad-pack run makemkv --registry=nomploy
| 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
devicesto your host's drive(s) and pin the job withconstraintsto 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.