• DarkRoom 0.13.2 — The People screen answers at once
    Benchmarks / CPU and I/O (per commit) (push) Failing after 6m36s
    Benchmarks / Frame budget (on demand) (push) Skipped
    Build and test / Desktop (Linux) (push) Failing after 46s
    Build and test / Layer separation (push) Successful in 34s
    Traceability / Requirement traces (push) Failing after 40s
    🐳 Android image / Build and push (push) Successful in 2s
    Build and test / android-image (push) Successful in 2s
    🐳 Windows image / Build and push (push) Successful in 2s
    Build and test / windows-image (push) Successful in 2s
    Build and test / Android (aarch64) (push) Failing after 2m26s
    Build and test / Windows (x86_64, cross) (push) Failing after 3m7s
    Stable

    dtourolle released this 2026-09-20 09:07:45 +00:00 | 409 commits to master since this release

    file, a folder can be a library from its top level, and there is a manual.

    • Confirming a face costs a frame, not half a second. Every click on
      the face grid redrew the screen, and the redraw recomputed the coverage
      line — several scans of the whole catalog to answer a question a
      confirm cannot change — then re-read and re-decoded every crop of the
      selected person. On a 24,000-image library with 19,000 faces a click was
      ~530 ms of catalog work; it is ~15 ms. "Confirm all" and a split write
      their group in one transaction instead of one per face, and the rail is
      filtered in the query rather than after reading 17,000 empty groups.
      The coverage figure, when it is recomputed (opening the screen, ending a
      sweep), is served from new partial indexes — schema V19, applied on
      first open. CLAUDE.md records the patterns.
    • Deleting an image is one round trip. Each move to the trash asked
      the server to create the trash folder's whole ancestor chain first;
      the connection now remembers what it has confirmed exists.
    • A folder is a library from its top level. Confirming "/" in the
      picker used to leave "Open library" disabled; a folder is now shown as
      a LIBRARY, the subfolder question is optional, and the header names the
      folder.
    • Thumbnail shards sync from a snapshot, never the live file. A shard
      written moments earlier could upload as an empty file with its schema
      still in the WAL, and every other device failed with "no such table"
      on every pass.
    • A merged panorama is dated and sorted with its frames. The linear
      DNG the merge writes puts its IFDs after the pixels; the scan reads the
      tail as well as the head, and the composite takes the mean of its
      frames' capture times rather than the first.
    • The border filler is fine-tuned on projection-shaped voids. ~2 dB
      better in edges and corners than the stock model because it stops
      inventing objects; still experimental (docs/panorama.md has the
      measurements and what is left).
    • Smaller: the month headings in the grid are named on the row a month
      opens; a mask's tint shows only while masking; a category mask no
      longer widens the develop column past the window; a merge worker that
      dies out of GPU memory is reported instead of leaving the page on
      "Stop"; the keyword sheet takes focus; the empty trash says it is
      empty; the export settings no longer promise to ask for a folder.
    • A manual. docs/manual/README.md pictures every feature from the
      application itself; tools/manual/ regenerates the pictures.

    darkroom-0.13.2-arm64-v8a.apk is the release-signed Android build (API
    28+, arm64). darkroom-desktop-0.13.2-x86_64-linux is the desktop binary.
    SHA256SUMS covers both.

    Downloads