Files
DarkRoom/models/LICENCE.md
T
dtourolle 54a80e688c Ship MI-GAN's bare 512 generator as the panorama border filler
Sargsyan et al., ICCV 2023; MIT code and weights (models/LICENCE.md),
exported by tools/export-migan.sh at a fixed 1×4×512×512 from the
authors' checkpoint — six operator types, 28 MB, in LFS like the rest.
The package installs it beside the scene model and the APK unpacks it
with the others.
2026-09-19 20:41:20 +02:00

120 lines
6.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Model weights — licensing
Two Ultralytics checkpoints ship here, both exported by
`tools/export-seg-model.sh`, each with its class vocabulary written out by the
same script:
| File | Checkpoint | Trained on | Used by |
|---|---|---|---|
| `segment/yolo26n-seg.onnx` | `yolo26n-seg.pt` | COCO, 80 *thing* classes | local adjustments, subject selection |
| `scene/yolo26s-sem-ade20k.onnx` | `yolo26s-sem-ade20k.pt` | ADE20K, 150 classes | the scene tab's per-category grades |
Both come from `https://huggingface.co/Ultralytics/YOLO26`. The face weights in
`face/` are a separate matter with a separate grant — see `face/README.md`.
The keypoint weights in `keypoints/` and the border filler in `inpaint/` are
the other two, and the easiest — see the last two sections.
## The grant
**Ultralytics releases YOLO under AGPL-3.0**, and the weights carry the same
grant as the framework — the HuggingFace repository declares `agpl-3.0` for the
checkpoints themselves, not merely for the training code. A commercial licence
is offered separately; DarkRoom does not use it and does not need it.
## What that means for DarkRoom
DarkRoom is GPL-3.0-or-later. **GPLv3 §13 explicitly permits combination with
AGPL-3.0 code**, so redistributing these weights inside this repository is
allowed — this is *not* the situation the InsightFace "buffalo" weights would
have created, where a non-commercial research grant is simply incompatible with
the project's licence and with F-Droid, Flatpak and Play distribution
(NFR-COMPAT-2, D13).
The consequence, and it is a real one: **the combined work is effectively
AGPL-3.0.** §13's permission runs one way — the AGPL's §13 network-use condition
attaches to the portion under that licence. For a local-first desktop and
Android photo editor that condition has no practical bite, because there is no
network service offering the combined work to remote users. It would acquire
bite the moment any hosted or server-side rendering appeared, and that is the
thing to remember rather than rediscover.
This was decided deliberately (D14), not arrived at by accident, and
`docs/segmentation.md` §7 records the reasoning.
## Class vocabulary — a caveat worth reading
`docs/segmentation.md` §4 specified YOLO **pretrained on ADE20K**, whose 150
classes include the *stuff* categories that matter most in photography — sky,
vegetation, water, wall, mountain.
**This was true when written and is not any more.** Checked 2026-08-21, no
YOLO/ADE20K combination existed: Ultralytics shipped YOLO26-seg on **COCO**
only, and the one HuggingFace repository claiming otherwise
(`laxmacl/yolov8-ade20k`) was empty. Re-checked 2026-08-30: Ultralytics now
ships a `semantic` task with ADE20K checkpoints
(`https://docs.ultralytics.com/tasks/semantic`), and `yolo26s-sem-ade20k` is
what `scene/` holds.
So the two vocabularies divide the work rather than compete:
- **`segment/`, COCO, 80 things.** Separates *instances* — clicking one of
three people selects that person. This is what local adjustments need, and a
semantic model cannot do it: it would return one "person" region covering all
three.
- **`scene/`, ADE20K, 150 classes.** Labels every pixel, including the *stuff*
COCO has no word for — sky, vegetation, water, mountain, wall. This is what
the scene tab's per-category grades need, and it does not care that instances
are merged, because a per-category grade applies to the whole category.
Neither replaces the other. Keeping both is the deliberate choice.
The loader treats each vocabulary as model metadata rather than compiled-in
knowledge, which is what made adding the second model a file plus a descriptor
rather than a code change — as this document predicted it would be.
## `keypoints/` — XFeat, Apache-2.0
| File | Source | Trained on | Used by |
|---|---|---|---|
| `keypoints/xfeat-1024.onnx` | `weights/xfeat.pt` from `https://github.com/verlab/accelerated_features` | MegaDepth + synthetic warps, by the authors | panorama alignment (FR-MRG-8), landscape frames |
| `keypoints/xfeat-768.onnx` | the same weights | — | the same, portrait frames |
Exported by `tools/export-xfeat.sh` at fixed grayscale inputs of 1024×768
and 768×1024 — the same weights twice, because tract needs a static shape
and a portrait frame in a landscape input wastes half of it. Only the
convolutional network is in each file; the keypoint decoding is Rust.
**The repository and its weights are Apache-2.0**, read on 2026-09-19 from the
`LICENSE` at its root, with no separate grant on the checkpoint and no
non-commercial clause anywhere in the tree. Apache-2.0 is GPLv3-compatible
one way — code and weights under it may be combined into a GPLv3 work — so
this is neither the InsightFace situation (D13, a use restriction that binds
every user) nor the Ultralytics one (D14, where the combined work becomes
AGPL). It is the licence position this document would have wanted for every
model in it, and it was chosen over stronger detectors partly for that reason:
SuperPoint and SuperGlue are non-commercial, R2D2 and SiLK are CC BY-NC.
The training data is the authors' concern, not a licence on the weights:
XFeat trains on MegaDepth, which is itself a research dataset, but the weights
are released under the repository's licence without a data-derived
restriction — unlike the gaze models §7 of the requirements declined, where
the dataset licence restricts models trained on it by name.
## `inpaint/` — MI-GAN, MIT
| File | Source | Trained on | Used by |
|---|---|---|---|
| `inpaint/migan-512.onnx` | `migan_512_places2.pt` from `https://github.com/Picsart-AI-Research/MI-GAN` (Sargsyan et al., ICCV 2023) | Places2, by the authors | the panorama border fill (FR-MRG-4) |
Exported by `tools/export-migan.sh`: the bare 512 generator at a fixed
`1×4×512×512`, six operator types. The tiling, the context and the blend are
Rust (`dr_pano::fill`).
**MIT, code and weights alike** — `LICENSE` and `LICENSE-WEIGHTS` in the
repository, both read on 2026-09-19, both the plain MIT text with no further
grant. GPL-compatible, store-compatible, nothing to read around: the cleanest
position of any model here. The training set is Places2, a research dataset,
but the weights are released under the repository's licence without a
data-derived restriction (contrast the gaze models §7 of the requirements
declined, and the InsightFace grant of D13).