Nomploy Nomad Packs

← All packs

convertx v0.1.0

Dev tools

ConvertX — a self-hosted file converter supporting 1000+ formats (images, documents, audio, video, and more) with a simple web UI. Deployed as a single host-networked Nomad service.

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

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

2 tasks http 3000 1 volume image ghcr.io/c4illin/convertx:latest tracks :latest image bumped today
Variables 11
values.hcl

Save as values.hcl, edit, then run:

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

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

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

# The ConvertX container image. Pin a tag in production.
image = "ghcr.io/c4illin/convertx:latest"

# Host port for the ConvertX web UI.
port = 3000

# Named volume mounted at /app/data (SQLite database + converted files).
data_volume = "convertx_data"

# Secret used to sign session tokens (JWT_SECRET). CHANGE THIS. Generate with: openssl rand -base64 36.
jwt_secret = "change-me-openssl-rand-base64-36"

# User ID that owns the files (PUID).
puid = 1000

# Group ID that owns the files (PGID).
pgid = 1000

# 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
"convertx"
The name of the Nomad job.
namespace string
"default"
The Nomad namespace to deploy into.
datacenters list
["*"]
The datacenters to deploy to.
image string
"ghcr.io/c4illin/convertx:latest"
The ConvertX container image. Pin a tag in production.
port number
3000
Host port for the ConvertX web UI.
data_volume string
"convertx_data"
Named volume mounted at /app/data (SQLite database + converted files).
jwt_secret set me string
"change-me-openssl-rand-base64-36"
Secret used to sign session tokens (JWT_SECRET). CHANGE THIS. Generate with: openssl rand -base64 36.
puid number
1000
User ID that owns the files (PUID).
pgid number
1000
Group ID that owns the files (PGID).
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 one Docker named volume: convertx_data

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/convertx_data/_data

rclone (sync to S3/R2)

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

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

convertx

ConvertX — a self-hosted file converter with a clean web UI. It supports 1000+ formats across images, documents, audio, video, ebooks and more (backed by tools like FFmpeg, ImageMagick, Pandoc, Calibre and libvips), converts multiple files at once, and keeps everything on your own server.

Single host-networked Nomad service with a persistent data volume.

Deploy

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

Configure

Variable Default Description
port 3000 Web UI port.
jwt_secret change-me-… Change this. Signs session tokens. openssl rand -base64 36.
image ghcr.io/c4illin/convertx:latest Container image. Pin a tag in production.
data_volume convertx_data /app/data — SQLite database and converted files.
puid / pgid 1000 / 1000 User/group that owns the files (PUID/PGID).
resources { cpu = 300, memory = 256 } Task resources. Bump for large video conversions.

First run: the first account you create becomes the admin; registration is then closed by default. A prestart init task chowns the data volume to PUID:PGID. Pin the job to the node holding the volume with constraints.