Documentation

Last updated: 2026-08-11

Everlock 0.6.2

The 0.6.2 release brings captions to photo frames and a round of substance fixes: self-update no longer needs three binaries' worth of memory, image previews cache like the immutable content they are, AI photo descriptions come out clean in every language, and AVX-512 processors finally run the integer inference kernels built for them. Binaries are on the download page; container images stay in the 0.6 tag family (cr.everlock.sh/everlock:0.6-qwen3, cr.everlock.sh/everlock:0.6-smolvlm).

Highlights

  • Photo frame captions. A frame that sends an X-Subtitle-Template header gets a caption drawn into the corner of every served image — a Handlebars template over the photo's capture time, AI-enriched location, description, and name, so {{year}} {{location}} labels every picture with when and where it was taken. Text and shadow colors flip with the luminance underneath, and the caption is rasterized before dithering so it renders crisply in the panel's native format. The photo frame captions post has the full story.

Fixes

  • Self-update runs in constant memory. The update job used to hold whole binaries in RAM — with an embedded model, peak demand reached roughly three times the binary size, enough to summon the OOM killer on small servers right after every release. Both the download and the apply now stream in fixed-size chunks; peak allocation is a 64 KiB buffer no matter how large the binary is, and the digest still covers every byte.
  • Image previews cache for a month. Preview pixels derive only from the uploaded original, so clients now keep them for 30 days instead of revalidating every image every day. Conditional requests match the HTTP spec — ETag lists and weak validators revalidate as a cheap 304 even behind proxies that rewrite ETags.
  • AI photo descriptions no longer leak reasoning. A non-English description run could store the model's English reasoning preamble as the photo description when reasoning overran its token budget. The retry that handles that overrun now produces the actual answer, and image captioning runs with a larger reasoning budget, so multilingual descriptions come out as descriptions.
  • AVX-512 processors use the integer inference kernels. The AVX512-VNNI matmul kernels shipped for months but never executed — a validation bug kept dispatch on the float AVX2 path. Kernel validation now compares integer kernels against integer references, and dispatch prefers AVX512-VNNI wherever the CPU offers it, which today means Zen 4.
  • /slug produces a working link — quotes around a positional shortcode argument are now syntax rather than content.

Upgrading

Self-updating servers pick 0.6.2 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. The full list of changes is in the changelog.

updates release photoframe ai performance