fonzarely/regine-photos-archiverpublic⑂ Fork 0
⑂ c3ddef8
Commits
⬇ Clone ▾
git clone https://git.rickub.com/fonzarely/regine-photos-archiver.git
git clone ssh://git@rickub.com/fonzarely/regine-photos-archiver.git

Host key fingerprint (ed25519): SHA256:iycHnxEyq0Q7uyVpB7JlznP0G7JrTPXLYRcAU5CSLhc — verify it before your first connect.

boitier

Fabien Champigny committed 2026-09-11T16:01:23+02:00 Browse files
c3ddef8 parent: dbc2bda
modified docs/archivage-photo-elements-cles.md +8 -2
@@ -79,6 +79,8 @@ Points à anticiper pour l'implémentation :
7979
8080 Cas d'usage : fin de journée de prise de vue, ou retour de vacances — intégrer le contenu d'une carte mémoire dans un ou plusieurs projets, en préparation de l'archivage (en amont du workflow de la section 9). Inclut le cas d'un voyage en plusieurs étapes (ex. plusieurs villes), où les imports successifs doivent pouvoir s'organiser en projet parent + sous-projets plutôt qu'en projets indépendants.
8181
82+**Profil de boîtiers** (prérequis pour le point 6) : à l'installation, l'utilisateur déclare les boîtiers qu'il possède (marque + modèle) ; ce profil reste modifiable à tout moment par la suite (achat, revente, prêt), pas figé une fois pour toutes. Il sert de base à la désambiguïsation entre sources au moment du renommage (point 6).
83+
8284 Séquence retenue :
8385
8486 1. **Copie brute vers un dossier temporaire local** (nom neutre, pas encore le nom final du projet), avec vérification checksum fichier par fichier pendant la copie. Ne jamais considérer la carte comme "sûre à effacer" tant que cette vérification n'est pas passée (idéalement tant qu'une deuxième copie n'existe pas non plus, cf. règle 3-2-1 en section 5).
@@ -89,7 +91,7 @@ Séquence retenue :
8991 4. **Destination de chaque groupe résultant** : pour chaque groupe issu du découpage, Régine demande explicitement où il doit aller, parmi quatre cas — posée à chaque import, sans état "voyage en cours" retenu en mémoire d'une fois sur l'autre :
9092 - **Nouveau projet simple** : comportement par défaut, structure à un seul niveau.
9193 - **Nouveau sous-projet dans un projet parent existant** : cas d'un voyage déjà en plusieurs étapes — Régine liste les projets existants pour que l'utilisateur choisisse le parent.
92- - **Fusion dans un projet existant** : ajout direct des fichiers à un projet déjà là, sans nouveau sous-dossier — cas de deux cartes mémoire (deux boîtiers, ou une carte de secours) couvrant la même sortie. Réutilise directement la désambiguïsation par `BodySerialNumber`/étiquetage manuel et la détection de doublons par checksum déjà prévues (point 2 ci-dessus et section 10 point 6). Si le projet ciblé est déjà archivé sur le NAS (pas seulement local), la fusion implique d'abord un checkout de ce projet (section 9) pour y intégrer les nouveaux fichiers avant de repousser l'ensemble via la réconciliation habituelle.
94+ - **Fusion dans un projet existant** : ajout direct des fichiers à un projet déjà là, sans nouveau sous-dossier — cas de deux cartes mémoire (deux boîtiers, ou une carte de secours) couvrant la même sortie. Réutilise directement la désambiguïsation par profil de boîtiers (point 6) et la détection de doublons par checksum déjà prévues (point 2 ci-dessus). Si le projet ciblé est déjà archivé sur le NAS (pas seulement local), la fusion implique d'abord un checkout de ce projet (section 9) pour y intégrer les nouveaux fichiers avant de repousser l'ensemble via la réconciliation habituelle.
9395 - **Nouveau projet parent avec sa première étape** : à choisir dès le tout premier import d'un ensemble qu'on sait multi-parties (ex. un voyage) — Régine crée directement la structure à deux niveaux (dossier parent + premier sous-dossier enfant) dès cet import, plutôt qu'un projet plat qu'il faudrait restructurer plus tard.
9496 - Pour proposer un choix pertinent (2ᵉ et 3ᵉ cas), Régine liste les projets existants aussi bien en local (espace de travail) que dans l'archive NAS (recherche par titre/date proche) — pas seulement une liste éphémère en mémoire de session.
9597 5. **Titre et nom de dossier** demandé pour chaque groupe, nettoyé pour servir de nom de dossier (espaces → underscores, interdiction des caractères invalides `/ \ : * ? " < >`), puis combiné à la plage de dates :
@@ -100,7 +102,10 @@ Séquence retenue :
100102 - vérification de collision avant de créer le dossier final : si un nom identique existe déjà, proposer un suffixe ou demander confirmation plutôt que d'écraser.
101103 6. **Renommage des fichiers** une fois le titre choisi, juste avant le push vers l'archive (le fichier arrive donc déjà sous son nom définitif) : chaque RAW est renommé en `date_titre_nomOrigine.ext`, en conservant le nom d'origine donné par l'appareil en suffixe (ex. `RD1234.RAF` → `2026-09-01_Paris_RD1234.RAF`). Ça donne un nom de fichier auto-descriptif, lisible même en dehors de l'application, tout en gardant la traçabilité de l'ordre de prise de vue au sein d'un même boîtier.
102104 - **Fichiers associés** : tout fichier partageant le même nom de base que le RAW (JPEG en mode RAW+JPEG, sidecar XMP/DOP) est renommé en même temps et de façon synchronisée, pour ne pas casser l'appariement.
103- - **Désambiguïsation entre boîtiers** : le compteur de nom de fichier est propre à chaque appareil, donc deux boîtiers différents (ou le même après un reset) peuvent produire le même nom d'origine. Utiliser en priorité le tag EXIF standard **BodySerialNumber** (`0xA431`, introduit par Exif 2.3) quand il est présent et exploitable (non vide, non valeur placeholder) pour distinguer les sources et ajouter un élément disambiguant seulement en cas de collision réelle (détectée par comparaison de checksum, pas juste par nom identique). Ce champ n'est pas garanti sur tous les boîtiers : fiable chez Canon et Nikon sur la plupart des modèles récents, inconsistant chez Sony, variable chez Fujifilm/Panasonic/Olympus selon le modèle. Repli quand le champ est absent ou vide : demander à l'utilisateur d'étiqueter la source (carte/boîtier) au moment de l'import plutôt que de dépendre uniquement de l'EXIF.
105+ - **Désambiguïsation entre boîtiers** : le compteur de nom de fichier est propre à chaque appareil, donc deux boîtiers différents (ou le même après un reset) peuvent produire le même nom d'origine.
106+ - **Mécanisme principal : le profil de boîtiers déclaré par l'utilisateur** (voir en tête de section), comparé au tag EXIF `Model` — quasi universellement renseigné, contrairement au `BodySerialNumber`. Ça suffit à distinguer deux sources dans l'immense majorité des cas (marques ou modèles différents), sans recourir au numéro de série ni redemander à chaque import. Un modèle détecté mais absent du profil déclenche un signalement ponctuel ("modèle non reconnu, l'ajouter au profil ?"), jamais un ajout silencieux.
107+ - **Repli**, réservé au cas plus rare de deux unités strictement identiques (même marque, même modèle) possédées en parallèle, où le `Model` seul ne suffit plus : le tag EXIF **BodySerialNumber** (`0xA431`, introduit par Exif 2.3) quand il est présent et exploitable (non vide, non valeur placeholder), sinon étiquetage manuel de la source à l'import. Ce champ n'est pas garanti sur tous les boîtiers : fiable chez Canon et Nikon sur la plupart des modèles récents, inconsistant chez Sony, variable chez Fujifilm/Panasonic/Olympus selon le modèle.
108+ - Dans tous les cas, un élément disambiguant n'est ajouté qu'en cas de collision réelle (détectée par comparaison de checksum, pas juste par nom de fichier identique).
104109 - **Ordre de prise de vue** : le nom d'origine en suffixe ne garantit l'ordre chronologique qu'au sein d'un même appareil. Pour un tri fiable entre plusieurs boîtiers dans un même projet, s'appuyer sur la date EXIF (déjà lue à l'étape 2), pas sur un tri alphabétique du nom de fichier renommé.
105110 7. Une fois le(s) dossier(s) finalisé(s) et les fichiers renommés en local, ils sont poussés vers l'archive NAS — même logique de copie vérifiée qu'à l'étape 1, plutôt qu'une copie directe carte → NAS (plus lente et plus fragile aux coupures réseau).
106111
@@ -173,6 +178,7 @@ Vérifié le 2026-09-11 (comportement Lightroom Classic et DxO PhotoLab) : la r
173178 - Gestion de niveaux de sélection (brut / sélection / édition finale).
174179 - Champs de droits/licence par photo ou par lot.
175180 - Workflow checkout (copie de travail locale) / réconciliation par hash avant réarchivage sur le NAS, plutôt que permissions NAS par type de fichier — cf. section 9.
181+- Profil de boîtiers configurable (déclaré à l'installation, modifiable à tout moment) comme mécanisme principal de désambiguïsation des sources par EXIF `Model`, `BodySerialNumber`/étiquetage manuel gardés en repli pour deux unités identiques du même modèle — cf. section 10, point 6.
176182 - Import carte mémoire avec quatre destinations possibles à chaque fois (nouveau projet simple, nouveau sous-projet d'un parent existant, fusion dans un projet existant, nouveau projet parent avec sa première étape), recherche des projets candidats en local et dans l'archive, structure voyage (parent `YYYY-MM_Titre` / étapes `YYYY-MM-DD_Titre_Lieu`), et transformation a posteriori d'un projet simple en sous-projet — cf. section 10.
177183 - Structure de projet par format créée à la demande (`raw/`, `jpeg/`, `tiff/`, `bmp/`, extensible à d'autres formats) avec sélection à la racine (promotion manuelle, par fichier), gérant uniformément prises de vue récentes, collections JPEG anciennes et scans TIFF/BMP — cf. section 11.
178184 - Interface de tri/culling propre à Régine : association visuelle RAW+JPEG même dans des dossiers différents, navigation multi-dossiers d'un même projet, checkout partiel (`jpeg/` seul) pour un tri rapide sans toucher aux RAW archivés, suppression de déchets évidents via la confirmation de réconciliation — cf. section 11.
@@ -79,6 +79,8 @@ Points à anticiper pour l'implémentation :
79 79
80 Cas d'usage : fin de journée de prise de vue, ou retour de vacances — intégrer le contenu d'une carte mémoire dans un ou plusieurs projets, en préparation de l'archivage (en amont du workflow de la section 9). Inclut le cas d'un voyage en plusieurs étapes (ex. plusieurs villes), où les imports successifs doivent pouvoir s'organiser en projet parent + sous-projets plutôt qu'en projets indépendants.80 Cas d'usage : fin de journée de prise de vue, ou retour de vacances — intégrer le contenu d'une carte mémoire dans un ou plusieurs projets, en préparation de l'archivage (en amont du workflow de la section 9). Inclut le cas d'un voyage en plusieurs étapes (ex. plusieurs villes), où les imports successifs doivent pouvoir s'organiser en projet parent + sous-projets plutôt qu'en projets indépendants.
81 81
82+**Profil de boîtiers** (prérequis pour le point 6) : à l'installation, l'utilisateur déclare les boîtiers qu'il possède (marque + modèle) ; ce profil reste modifiable à tout moment par la suite (achat, revente, prêt), pas figé une fois pour toutes. Il sert de base à la désambiguïsation entre sources au moment du renommage (point 6).
83+
82 Séquence retenue :84 Séquence retenue :
83 85
84 1. **Copie brute vers un dossier temporaire local** (nom neutre, pas encore le nom final du projet), avec vérification checksum fichier par fichier pendant la copie. Ne jamais considérer la carte comme "sûre à effacer" tant que cette vérification n'est pas passée (idéalement tant qu'une deuxième copie n'existe pas non plus, cf. règle 3-2-1 en section 5).86 1. **Copie brute vers un dossier temporaire local** (nom neutre, pas encore le nom final du projet), avec vérification checksum fichier par fichier pendant la copie. Ne jamais considérer la carte comme "sûre à effacer" tant que cette vérification n'est pas passée (idéalement tant qu'une deuxième copie n'existe pas non plus, cf. règle 3-2-1 en section 5).
@@ -89,7 +91,7 @@ Séquence retenue :
89 4. **Destination de chaque groupe résultant** : pour chaque groupe issu du découpage, Régine demande explicitement où il doit aller, parmi quatre cas — posée à chaque import, sans état "voyage en cours" retenu en mémoire d'une fois sur l'autre :91 4. **Destination de chaque groupe résultant** : pour chaque groupe issu du découpage, Régine demande explicitement où il doit aller, parmi quatre cas — posée à chaque import, sans état "voyage en cours" retenu en mémoire d'une fois sur l'autre :
90 - **Nouveau projet simple** : comportement par défaut, structure à un seul niveau.92 - **Nouveau projet simple** : comportement par défaut, structure à un seul niveau.
91 - **Nouveau sous-projet dans un projet parent existant** : cas d'un voyage déjà en plusieurs étapes — Régine liste les projets existants pour que l'utilisateur choisisse le parent.93 - **Nouveau sous-projet dans un projet parent existant** : cas d'un voyage déjà en plusieurs étapes — Régine liste les projets existants pour que l'utilisateur choisisse le parent.
92- - **Fusion dans un projet existant** : ajout direct des fichiers à un projet déjà là, sans nouveau sous-dossier — cas de deux cartes mémoire (deux boîtiers, ou une carte de secours) couvrant la même sortie. Réutilise directement la désambiguïsation par `BodySerialNumber`/étiquetage manuel et la détection de doublons par checksum déjà prévues (point 2 ci-dessus et section 10 point 6). Si le projet ciblé est déjà archivé sur le NAS (pas seulement local), la fusion implique d'abord un checkout de ce projet (section 9) pour y intégrer les nouveaux fichiers avant de repousser l'ensemble via la réconciliation habituelle.94+ - **Fusion dans un projet existant** : ajout direct des fichiers à un projet déjà là, sans nouveau sous-dossier — cas de deux cartes mémoire (deux boîtiers, ou une carte de secours) couvrant la même sortie. Réutilise directement la désambiguïsation par profil de boîtiers (point 6) et la détection de doublons par checksum déjà prévues (point 2 ci-dessus). Si le projet ciblé est déjà archivé sur le NAS (pas seulement local), la fusion implique d'abord un checkout de ce projet (section 9) pour y intégrer les nouveaux fichiers avant de repousser l'ensemble via la réconciliation habituelle.
93 - **Nouveau projet parent avec sa première étape** : à choisir dès le tout premier import d'un ensemble qu'on sait multi-parties (ex. un voyage) — Régine crée directement la structure à deux niveaux (dossier parent + premier sous-dossier enfant) dès cet import, plutôt qu'un projet plat qu'il faudrait restructurer plus tard.95 - **Nouveau projet parent avec sa première étape** : à choisir dès le tout premier import d'un ensemble qu'on sait multi-parties (ex. un voyage) — Régine crée directement la structure à deux niveaux (dossier parent + premier sous-dossier enfant) dès cet import, plutôt qu'un projet plat qu'il faudrait restructurer plus tard.
94 - Pour proposer un choix pertinent (2ᵉ et 3ᵉ cas), Régine liste les projets existants aussi bien en local (espace de travail) que dans l'archive NAS (recherche par titre/date proche) — pas seulement une liste éphémère en mémoire de session.96 - Pour proposer un choix pertinent (2ᵉ et 3ᵉ cas), Régine liste les projets existants aussi bien en local (espace de travail) que dans l'archive NAS (recherche par titre/date proche) — pas seulement une liste éphémère en mémoire de session.
95 5. **Titre et nom de dossier** demandé pour chaque groupe, nettoyé pour servir de nom de dossier (espaces → underscores, interdiction des caractères invalides `/ \ : * ? " < >`), puis combiné à la plage de dates :97 5. **Titre et nom de dossier** demandé pour chaque groupe, nettoyé pour servir de nom de dossier (espaces → underscores, interdiction des caractères invalides `/ \ : * ? " < >`), puis combiné à la plage de dates :
@@ -100,7 +102,10 @@ Séquence retenue :
100 - vérification de collision avant de créer le dossier final : si un nom identique existe déjà, proposer un suffixe ou demander confirmation plutôt que d'écraser.102 - vérification de collision avant de créer le dossier final : si un nom identique existe déjà, proposer un suffixe ou demander confirmation plutôt que d'écraser.
101 6. **Renommage des fichiers** une fois le titre choisi, juste avant le push vers l'archive (le fichier arrive donc déjà sous son nom définitif) : chaque RAW est renommé en `date_titre_nomOrigine.ext`, en conservant le nom d'origine donné par l'appareil en suffixe (ex. `RD1234.RAF` → `2026-09-01_Paris_RD1234.RAF`). Ça donne un nom de fichier auto-descriptif, lisible même en dehors de l'application, tout en gardant la traçabilité de l'ordre de prise de vue au sein d'un même boîtier.103 6. **Renommage des fichiers** une fois le titre choisi, juste avant le push vers l'archive (le fichier arrive donc déjà sous son nom définitif) : chaque RAW est renommé en `date_titre_nomOrigine.ext`, en conservant le nom d'origine donné par l'appareil en suffixe (ex. `RD1234.RAF` → `2026-09-01_Paris_RD1234.RAF`). Ça donne un nom de fichier auto-descriptif, lisible même en dehors de l'application, tout en gardant la traçabilité de l'ordre de prise de vue au sein d'un même boîtier.
102 - **Fichiers associés** : tout fichier partageant le même nom de base que le RAW (JPEG en mode RAW+JPEG, sidecar XMP/DOP) est renommé en même temps et de façon synchronisée, pour ne pas casser l'appariement.104 - **Fichiers associés** : tout fichier partageant le même nom de base que le RAW (JPEG en mode RAW+JPEG, sidecar XMP/DOP) est renommé en même temps et de façon synchronisée, pour ne pas casser l'appariement.
103- - **Désambiguïsation entre boîtiers** : le compteur de nom de fichier est propre à chaque appareil, donc deux boîtiers différents (ou le même après un reset) peuvent produire le même nom d'origine. Utiliser en priorité le tag EXIF standard **BodySerialNumber** (`0xA431`, introduit par Exif 2.3) quand il est présent et exploitable (non vide, non valeur placeholder) pour distinguer les sources et ajouter un élément disambiguant seulement en cas de collision réelle (détectée par comparaison de checksum, pas juste par nom identique). Ce champ n'est pas garanti sur tous les boîtiers : fiable chez Canon et Nikon sur la plupart des modèles récents, inconsistant chez Sony, variable chez Fujifilm/Panasonic/Olympus selon le modèle. Repli quand le champ est absent ou vide : demander à l'utilisateur d'étiqueter la source (carte/boîtier) au moment de l'import plutôt que de dépendre uniquement de l'EXIF.105+ - **Désambiguïsation entre boîtiers** : le compteur de nom de fichier est propre à chaque appareil, donc deux boîtiers différents (ou le même après un reset) peuvent produire le même nom d'origine.
106+ - **Mécanisme principal : le profil de boîtiers déclaré par l'utilisateur** (voir en tête de section), comparé au tag EXIF `Model` — quasi universellement renseigné, contrairement au `BodySerialNumber`. Ça suffit à distinguer deux sources dans l'immense majorité des cas (marques ou modèles différents), sans recourir au numéro de série ni redemander à chaque import. Un modèle détecté mais absent du profil déclenche un signalement ponctuel ("modèle non reconnu, l'ajouter au profil ?"), jamais un ajout silencieux.
107+ - **Repli**, réservé au cas plus rare de deux unités strictement identiques (même marque, même modèle) possédées en parallèle, où le `Model` seul ne suffit plus : le tag EXIF **BodySerialNumber** (`0xA431`, introduit par Exif 2.3) quand il est présent et exploitable (non vide, non valeur placeholder), sinon étiquetage manuel de la source à l'import. Ce champ n'est pas garanti sur tous les boîtiers : fiable chez Canon et Nikon sur la plupart des modèles récents, inconsistant chez Sony, variable chez Fujifilm/Panasonic/Olympus selon le modèle.
108+ - Dans tous les cas, un élément disambiguant n'est ajouté qu'en cas de collision réelle (détectée par comparaison de checksum, pas juste par nom de fichier identique).
104 - **Ordre de prise de vue** : le nom d'origine en suffixe ne garantit l'ordre chronologique qu'au sein d'un même appareil. Pour un tri fiable entre plusieurs boîtiers dans un même projet, s'appuyer sur la date EXIF (déjà lue à l'étape 2), pas sur un tri alphabétique du nom de fichier renommé.109 - **Ordre de prise de vue** : le nom d'origine en suffixe ne garantit l'ordre chronologique qu'au sein d'un même appareil. Pour un tri fiable entre plusieurs boîtiers dans un même projet, s'appuyer sur la date EXIF (déjà lue à l'étape 2), pas sur un tri alphabétique du nom de fichier renommé.
105 7. Une fois le(s) dossier(s) finalisé(s) et les fichiers renommés en local, ils sont poussés vers l'archive NAS — même logique de copie vérifiée qu'à l'étape 1, plutôt qu'une copie directe carte → NAS (plus lente et plus fragile aux coupures réseau).110 7. Une fois le(s) dossier(s) finalisé(s) et les fichiers renommés en local, ils sont poussés vers l'archive NAS — même logique de copie vérifiée qu'à l'étape 1, plutôt qu'une copie directe carte → NAS (plus lente et plus fragile aux coupures réseau).
106 111
@@ -173,6 +178,7 @@ Vérifié le 2026-09-11 (comportement Lightroom Classic et DxO PhotoLab) : la r
173 - Gestion de niveaux de sélection (brut / sélection / édition finale).178 - Gestion de niveaux de sélection (brut / sélection / édition finale).
174 - Champs de droits/licence par photo ou par lot.179 - Champs de droits/licence par photo ou par lot.
175 - Workflow checkout (copie de travail locale) / réconciliation par hash avant réarchivage sur le NAS, plutôt que permissions NAS par type de fichier — cf. section 9.180 - Workflow checkout (copie de travail locale) / réconciliation par hash avant réarchivage sur le NAS, plutôt que permissions NAS par type de fichier — cf. section 9.
181+- Profil de boîtiers configurable (déclaré à l'installation, modifiable à tout moment) comme mécanisme principal de désambiguïsation des sources par EXIF `Model`, `BodySerialNumber`/étiquetage manuel gardés en repli pour deux unités identiques du même modèle — cf. section 10, point 6.
176 - Import carte mémoire avec quatre destinations possibles à chaque fois (nouveau projet simple, nouveau sous-projet d'un parent existant, fusion dans un projet existant, nouveau projet parent avec sa première étape), recherche des projets candidats en local et dans l'archive, structure voyage (parent `YYYY-MM_Titre` / étapes `YYYY-MM-DD_Titre_Lieu`), et transformation a posteriori d'un projet simple en sous-projet — cf. section 10.182 - Import carte mémoire avec quatre destinations possibles à chaque fois (nouveau projet simple, nouveau sous-projet d'un parent existant, fusion dans un projet existant, nouveau projet parent avec sa première étape), recherche des projets candidats en local et dans l'archive, structure voyage (parent `YYYY-MM_Titre` / étapes `YYYY-MM-DD_Titre_Lieu`), et transformation a posteriori d'un projet simple en sous-projet — cf. section 10.
177 - Structure de projet par format créée à la demande (`raw/`, `jpeg/`, `tiff/`, `bmp/`, extensible à d'autres formats) avec sélection à la racine (promotion manuelle, par fichier), gérant uniformément prises de vue récentes, collections JPEG anciennes et scans TIFF/BMP — cf. section 11.183 - Structure de projet par format créée à la demande (`raw/`, `jpeg/`, `tiff/`, `bmp/`, extensible à d'autres formats) avec sélection à la racine (promotion manuelle, par fichier), gérant uniformément prises de vue récentes, collections JPEG anciennes et scans TIFF/BMP — cf. section 11.
178 - Interface de tri/culling propre à Régine : association visuelle RAW+JPEG même dans des dossiers différents, navigation multi-dossiers d'un même projet, checkout partiel (`jpeg/` seul) pour un tri rapide sans toucher aux RAW archivés, suppression de déchets évidents via la confirmation de réconciliation — cf. section 11.184 - Interface de tri/culling propre à Régine : association visuelle RAW+JPEG même dans des dossiers différents, navigation multi-dossiers d'un même projet, checkout partiel (`jpeg/` seul) pour un tri rapide sans toucher aux RAW archivés, suppression de déchets évidents via la confirmation de réconciliation — cf. section 11.