diff --git a/docs/dev/requirements.md b/docs/dev/requirements.md index 49d499c..dc231d3 100644 --- a/docs/dev/requirements.md +++ b/docs/dev/requirements.md @@ -179,6 +179,17 @@ card into the library. Both are needed. original filename) and by content hash, offering skip or import-as-new. Camera filenames wrap at `IMG_9999`, so filename alone is insufficient. Existing catalog duplicates are detectable on demand. +**FR-CAT-11a — Consolidating catalog duplicates.** Files already in the library more than once +(same root, camera, capture time and size) shall be listed on demand as groups, from the library +and from Settings. Before anything moves, each group shall be proved the same file by a stored full +digest or by a digest of the first and last megabyte of every copy, and its copies' develop edits +compared; a group that differs in either is left out and the review says why. One copy survives — +not under a backup-looking folder, then camera-named, then oldest, overridable per group — and the +others' collections, keywords, highest rating, agreed flag and label, and faces are merged onto it, +with disagreements reported rather than decided silently. Each group is merged and its other copies +moved to the trash (FR-CAT-15) in one transaction: wholly consolidated or untouched. Nothing is +deleted. + **FR-CAT-12 — Versions (virtual copies).** An image may carry multiple named `Version`s, each with an independent edit graph, without duplicating source data. Versions are creatable, nameable, deletable, and independently exportable; one is the default. diff --git a/docs/manual/README.md b/docs/manual/README.md index c615577..9752942 100644 --- a/docs/manual/README.md +++ b/docs/manual/README.md @@ -106,6 +106,37 @@ to have it show another, open it and click the ring on the frame you want. With faces indexed, narrowing the grid to a person puts `Eyes open` beside their name on the filter bar, which leaves out the frames where they blinked. +### Duplicate originals + +A library put together by hand often holds the same RAW more than once — a +dated folder, a `bck` folder beside it, a renamed copy another program +exported. When the catalog finds files with the same camera, capture time +and size in more than one place, `Duplicate originals` appears under the +trash in the sidebar with how many there are; Settings offers the same page +beside the other whole-library passes. + +The page lists each group with its picture and its paths. One copy is +marked `Stays`: the one outside a folder named like a backup (`bck`, +`backup`, `copy`, `old`…), then the one still named the way the camera named +it (`_MG_4623`, `IMG_0001`, `DSC_0042`), then the one catalogued first. Tap +another path to keep that copy instead, and untick `Include` to leave a +group alone. + +Nothing moves until `Check` has read the first and last megabyte of every +copy and each copy's sidecar. A group whose files differ, or whose copies +carry two different edits, is marked skipped and says why — two edits of +one frame are kept for virtual copies. What the check reads is kept, so a +second visit costs nothing. The line under each group says what the copy +that stays will gain: the highest rating, every keyword and collection, a +flag or label the copies agree on, faces and the names on them, and the +edit if only a copy had one. Where the copies disagree on a flag or a +label, the one that stays keeps its own and the line says so. + +`Move N copies to trash` does it, one group at a time: each group is merged +and its spare copies moved together, or not at all. The copies go to the +trash, not away — select them in the trash view and `Restore` puts them +back where they were. + ## Developing a photograph Click a thumbnail to open it. The column on the right is every adjustment;