Documentation

Last updated: 2026-11-04

Everlock 0.13.0

The 0.13.0 release lets a photo instance catch up with a large library: captions run one photo after another, admin AI prompts no longer wait behind them, and each image instance gets job settings of its own. Binaries are on the download page; the container image is published as cr.everlock.sh/everlock:0.13.

Highlights

  • Captions catch up with large libraries. enhance-metadata captioned one photo per hourly run, about 24 a day, so a library of thousands of photos took months. It now runs continuously: one photo after another, with a 60-second pause after every job, for as long as photos are waiting. enhance-videos, which extracts cover frames for up to 20 videos per run, works the same way. A photo that fails to caption stays first in line, and every attempt leaves a failed run that names the photo and the error. From the second failure in a row the job waits two minutes, doubling up to an hour, and newer uploads go ahead of it.

  • Admin AI answers while photos are captioned. The model is loaded once and serves two lanes side by side: one for admin prompts, one for the captions of every image instance. A prompt no longer waits for a caption to finish. On Linux the caption lane runs at idle priority, so it gives up the CPU to anything else on the machine. A prompt that overlaps a caption needs about 0.9 GB more memory at its peak.

  • Job settings per image instance. /image set <name> job_cooldown=<seconds> sets the pause after every job, and job_schedule=<job>:<schedule> sets when one job runs: manual, continuous, minutely, quarter-hourly, hourly, daily or weekly. /image list shows both in its jobs column, /image unset returns them to the defaults, and a change applies right away. See job schedules.

  • Jobs take turns. An instance runs one job at a time, and the next one is the job that has been due longest, so a caption backlog does not hold up a sync. Several instances each run their own jobs side by side and share the machine; their captions take turns on the one caption lane.

Behavior changes

  • The machine stays busy while photos wait. With a caption backlog the server captions without a break other than the cooldown, where it used to caption once an hour. To go back to the old pace, run /image set <name> job_schedule=enhance-metadata:hourly.

  • Requested jobs wait their turn. A job requested from the web UI or the API joins the same queue as the scheduled ones instead of going first, and requesting a job that is already queued returns the queued run.

Fixes

  • A restart no longer blocks a background job for an hour. A job interrupted by a restart counts as failed, and it runs again after the cooldown.
  • Weekly jobs run weekly. Job history was cleared after three days, so detect-duplicates ran about every three days. Each job now keeps its last 100 runs.
  • A job scheduled more than an hour ahead runs. It used to be deleted before its time came.
  • Job settings take effect inside Everlock. The JOB_* environment variables are read only by the standalone apimeister-photos binary, so an image instance always ran the built-in schedules; /image set is where they are set now.

Upgrading

Self-updating servers pick 0.13.0 up on their daily check. For a manual upgrade, download the new binary (or pull the new image tag) and restart — stores, mail, and all versioned content carry over untouched. Captioning starts on the photos that are waiting right after the restart, so a server with a large library stays under load until it has caught up. Plan for the extra 0.9 GB of memory when an admin prompt runs during a caption, or set enhance-metadata back to hourly on a machine that has none to spare.

The full list of changes is in the changelog.

updates release photos ai