Nomploy Nomad Packs

← All packs

damselfly v0.1.0

Media

Damselfly — a server-based digital asset manager for large photo collections, with AI object/face recognition, tagging and search. Deployed as a single host-networked Nomad service.

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

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

2 tasks http 6363 3 volumes image webreaper/damselfly:latest tracks :latest image bumped today
Variables 10
values.hcl

Save as values.hcl, edit, then run:

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

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

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

# The Damselfly container image. Pin a tag in production.
image = "webreaper/damselfly:latest"

# Host port for the Damselfly web UI.
port = 6363

# Named volume for the Damselfly database and config (/config).
config_volume = "damselfly_config"

# Named volume for generated thumbnails (/thumbs).
thumbs_volume = "damselfly_thumbs"

# Named volume for the photo library root (/pictures).
pictures_volume = "damselfly_pictures"

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

# The task resources. AI recognition benefits from extra memory.
resources = {
    cpu    = 1000
    memory = 2048
  }
NameTypeDefaultDescription
job_name string
"damselfly"
The name of the Nomad job.
namespace string
"default"
The Nomad namespace to deploy into.
datacenters list
["*"]
The datacenters to deploy to.
image string
"webreaper/damselfly:latest"
The Damselfly container image. Pin a tag in production.
port number
6363
Host port for the Damselfly web UI.
config_volume string
"damselfly_config"
Named volume for the Damselfly database and config (/config).
thumbs_volume string
"damselfly_thumbs"
Named volume for generated thumbnails (/thumbs).
pictures_volume string
"damselfly_pictures"
Named volume for the photo library root (/pictures).
constraints list
[]
Placement constraints. On a nomploy cluster: attribute = "$${meta.nomploy_control_plane}", operator = "=", value = "true".
resources object
{
    cpu    = 1000
    memory = 2048
  }
The task resources. AI recognition benefits from extra memory.
Back up this pack

This pack stores data in 3 Docker named volumes: damselfly_configdamselfly_thumbsdamselfly_pictures

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/damselfly_config/_data \
  /var/lib/docker/volumes/damselfly_thumbs/_data \
  /var/lib/docker/volumes/damselfly_pictures/_data

rclone (sync to S3/R2)

rclone sync /var/lib/docker/volumes/damselfly_config/_data backup:<bucket>/damselfly_config
rclone sync /var/lib/docker/volumes/damselfly_thumbs/_data backup:<bucket>/damselfly_thumbs
rclone sync /var/lib/docker/volumes/damselfly_pictures/_data backup:<bucket>/damselfly_pictures

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

damselfly

Damselfly is a server-based digital asset manager (DAM) built for very large collections of images — tens or hundreds of thousands of photos. It offers fast search, AI-powered object and face recognition, keyword tagging, basic editing and export, and a responsive web UI, all backed by SQLite so there's no external database to run.

This pack runs Damselfly as a single host-networked Nomad service.

Deploy

nomad-pack run damselfly --registry=nomploy

Open http://<node-ip>:6363. Point the /pictures volume at your photo library (or copy photos into it); Damselfly indexes the entire directory tree.

Configuration

Variable Default Description
image webreaper/damselfly:latest Container image (pin a tag in production).
port 6363 Host port for the web UI.
config_volume damselfly_config Volume for the SQLite database and config.
thumbs_volume damselfly_thumbs Volume for generated thumbnails.
pictures_volume damselfly_pictures Volume for the photo library root (/pictures).
resources 1000 MHz / 2048 MB CPU and memory (AI recognition wants memory).

A prestart init task fixes ownership on the volumes so Damselfly can write. The database, thumbnails and library persist across restarts and upgrades.