Benchmarks / CPU and I/O (per commit) (push) Successful in 13m30s
Benchmarks / Frame budget (on demand) (push) Skipped
Build and test / android-image (push) Successful in 3s
🐳 Android image / Build and push (push) Successful in 3s
Build and test / Layer separation (push) Successful in 46s
Traceability / Requirement traces (push) Failing after 1m36s
Build and test / Desktop (Linux) (push) Failing after 24h17m53s
Build and test / Android (aarch64) (push) Canceled after 0s
A bug fix release. Nothing here changes what DarkRoom is for since 0.10.0; it changes how often it does the thing it already claimed to do. The edits that went missing. A subject or category layer was stored as identity alone, on the reasoning that the pixels were reproducible by re-running the model — true, but nothing re-runs one except a photographer pressing "find subjects". So a reopened photograph rendered without its local adjustments and then saved that state back, and a batch export wrote three hundred files without the edits their photographer had made, over a log warning. The coverage now travels in the sidecar. Export also learned to write the photograph rather than the canvas, and to carry the photograph's header when the export is made from develop. Face indexing was reading previews. It ran against a proxy and then recorded the result as though it had seen the photograph, so faces smaller than the proxy could resolve were not missed, they were *concluded absent*. Indexing now runs on the native render, runs made against proxies too small to find a face are forgotten rather than trusted, and a sweep that fails everything says so instead of reporting a clean pass. Where you were. The photo roll opens on the frame it opened with, develop returns you to the photograph you were editing, the grid keeps its place when another screen covers it, and the photographer's position now travels between devices rather than being rediscovered on each. Startup. The catalog opens on a worker and the bundled models unpack on one, so a launch is no longer a page-by-page read on the way to the first frame; the app says it is starting before there is anything to say it with. The People rail builds the rows you can see, keeps portraits off the blocking path, and withholds the empty groups that used to fill it. Segmentation gained the half it was missing: the colour gate decided what belonged to a category and had no way to decide where its edge fell, so a refined sky kept the model's blocky outline no matter how the control was set. A marker-based watershed now puts each contour onto a real edge, and the refinement is a per-layer slider. Coverage 70.4% -> 70.6% (127/180). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
92 lines
4.3 KiB
Bash
92 lines
4.3 KiB
Bash
# Maintainer: Duncan Tourolle <duncan@tourolle.paris>
|
|
#
|
|
# Builds from the local checkout rather than a release tarball, which is what
|
|
# makes `makepkg -si` in this directory install what you are actually working
|
|
# on. Swap `source` for a tagged tarball when there is something to release.
|
|
pkgname=darkroom
|
|
pkgver=0.10.1
|
|
# Back to 1 with the version: a new pkgver is a new archive name, so there is
|
|
# nothing for makepkg to reuse and nothing for a release number to disambiguate.
|
|
pkgrel=1
|
|
pkgdesc="Non-destructive RAW photo library and editor"
|
|
arch=('x86_64')
|
|
url="https://gitea.tourolle.paris/dtourolle/DarkRoom"
|
|
license=('GPL-3.0-or-later')
|
|
# Runtime: Vulkan for wgpu, and a Secret Service implementation for the
|
|
# Nextcloud credentials (FR-NC-2) — gnome-keyring or kwallet both provide it.
|
|
depends=('vulkan-icd-loader' 'fontconfig' 'libxkbcommon')
|
|
makedepends=('cargo' 'git')
|
|
optdepends=('gnome-keyring: store Nextcloud credentials'
|
|
'kwallet: store Nextcloud credentials')
|
|
options=('!lto') # the workspace sets its own LTO in Cargo.toml
|
|
|
|
_repo="$(cd "${startdir}/.." && pwd)"
|
|
|
|
build() {
|
|
cd "${_repo}"
|
|
export RUSTUP_TOOLCHAIN=stable
|
|
export CARGO_TARGET_DIR="${_repo}/target"
|
|
cargo build --release --locked -p darkroom-desktop
|
|
}
|
|
|
|
package() {
|
|
cd "${_repo}"
|
|
install -Dm755 "target/release/darkroom-desktop" \
|
|
"${pkgdir}/usr/bin/darkroom-desktop"
|
|
|
|
install -Dm644 "packaging/paris.tourolle.darkroom.desktop" \
|
|
"${pkgdir}/usr/share/applications/paris.tourolle.darkroom.desktop"
|
|
|
|
# The same AppStream file the Flatpak installs, so a software centre
|
|
# describes the two packages identically instead of falling back to the
|
|
# desktop entry's one-line Comment for this one. Installed here rather than
|
|
# written twice: the description, the licence fields and the OARS rating
|
|
# are facts about the application, not about how it was packaged.
|
|
install -Dm644 "packaging/paris.tourolle.darkroom.metainfo.xml" \
|
|
"${pkgdir}/usr/share/metainfo/paris.tourolle.darkroom.metainfo.xml"
|
|
|
|
# The icon's *name* is the contract, not its path: the desktop entry says
|
|
# `Icon=paris.tourolle.darkroom` and the compositor resolves that through
|
|
# the hicolor theme. Installed under 256x256 because that is the source's
|
|
# actual size — lying about it makes scaled-down icons look wrong.
|
|
install -Dm644 "ui/dr-ui/ui/app-icon.png" \
|
|
"${pkgdir}/usr/share/icons/hicolor/256x256/apps/paris.tourolle.darkroom.png"
|
|
|
|
install -Dm644 "README.md" "${pkgdir}/usr/share/doc/${pkgname}/README.md"
|
|
|
|
# The face models, into the last directory the app searches. A pair the
|
|
# user placed in their own data directory outranks these, so installing
|
|
# them cannot override a deliberate choice of weights.
|
|
#
|
|
# These live in LFS; a checkout without `git lfs pull` has ~130-byte
|
|
# pointers here. Installing one produces a package whose face indexing
|
|
# fails inside the graph loader on the user's machine, so refuse instead.
|
|
for _m in scrfd_500m_640.onnx arcface_mbf_b1.onnx; do
|
|
_src="models/face/${_m}"
|
|
if [[ "$(stat -c%s "${_src}")" -lt 100000 ]]; then
|
|
echo "error: ${_m} is an LFS pointer, not a model — run: git lfs pull" >&2
|
|
return 1
|
|
fi
|
|
install -Dm644 "${_src}" "${pkgdir}/usr/share/darkroom/models/${_m}"
|
|
done
|
|
|
|
# The scene model, for the per-category grades. Unlike the face weights
|
|
# this one is in the repository — AGPL, and GPLv3 §13 permits the
|
|
# combination (models/LICENCE.md) — so it is installed unconditionally and
|
|
# a pointer here is a broken checkout rather than a licence decision.
|
|
#
|
|
# Three files: the graph, its vocabulary, and the category descriptor
|
|
# grouping ADE20K's 150 classes into what the tab shows. All three, because
|
|
# dr_ui::library::scene_model reports the tab unavailable without any one
|
|
# of them. Only the graph gets the pointer check — the other two are
|
|
# legitimately a few kilobytes.
|
|
_src="models/scene/yolo26s-sem-ade20k.onnx"
|
|
if [[ "$(stat -c%s "${_src}")" -lt 100000 ]]; then
|
|
echo "error: the scene model is an LFS pointer — run: git lfs pull" >&2
|
|
return 1
|
|
fi
|
|
for _m in yolo26s-sem-ade20k.onnx yolo26s-sem-ade20k.classes.json categories.txt; do
|
|
install -Dm644 "models/scene/${_m}" "${pkgdir}/usr/share/darkroom/models/${_m}"
|
|
done
|
|
}
|