Main metadata loader is found here. These generally follow the Dublin Core namespace for XMP - see RDF/XML specification (base format) and Adobe's XMP specifications for a nice table of expected tags (<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 4.4.0-Exiv2">
).
These are the highest priority tags processed by pigallery2:
metadata.keywords = exif.dc.subject;
metadata.title = exif.dc?.title?.value;
metadata.caption = exif.dc?.description?.value;
metadata.creationDate = exif.DateTimeOriginalmetadata.creationDate;
metadata.rating = exif.xmp.Rating;
Minimum working example
<rdf:RDF>
<rdf:Description
xmp:Rating="5">
<dc:title>
<rdf:Alt>
<rdf:li xml:lang="x-default">Title</rdf:li>
</rdf:Alt>
</dc:title>
<dc:subject>
<rdf:Bag>
<rdf:li>Tag1</rdf:li>
<rdf:li>Tag2</rdf:li>
</rdf:Bag>
</dc:subject>
<dc:description>
<rdf:Alt>
<rdf:li xml:lang="x-default">Description</rdf:li>
</rdf:Alt>
</dc:description>
</rdf:Description>
</rdf:RDF>
Patched code
--- /app/src/backend/model/fileaccess/MetadataLoader.js.55a61ed
+++ /app/src/backend/model/fileaccess/MetadataLoader.js
@@ -101,20 +101,20 @@
metadata.creationDate = metadata.creationDate || 0;
try {
// search for sidecar and merge metadata
- const fullPathWithoutExt = path.join(path.parse(fullPath).dir, path.parse(fullPath).name);
- const sidecarPaths = [
- fullPath + '.xmp',
- fullPath + '.XMP',
- fullPathWithoutExt + '.xmp',
- fullPathWithoutExt + '.XMP',
- ];
- for (const sidecarPath of sidecarPaths) {
+ var sidecarPath;
+ while (true) {
+ sidecarPath = fullPath + '.xmp';
if (fs.existsSync(sidecarPath)) {
const sidecarData = await exifr.sidecar(sidecarPath);
if (sidecarData !== undefined) {
MetadataLoader.mapMetadata(metadata, sidecarData);
+ break;
}
}
+ fullPath = path.dirname(fullPath);
+ if (fullPath == '/app/data/images') {
+ break;
+ }
}
}
catch (err) {
@@ -205,14 +205,9 @@
}
try {
// search for sidecar and merge metadata
- const fullPathWithoutExt = path.join(path.parse(fullPath).dir, path.parse(fullPath).name);
- const sidecarPaths = [
- fullPath + '.xmp',
- fullPath + '.XMP',
- fullPathWithoutExt + '.xmp',
- fullPathWithoutExt + '.XMP',
- ];
- for (const sidecarPath of sidecarPaths) {
+ var sidecarPath;
+ while (true) {
+ sidecarPath = fullPath + '.xmp';
if (fs.existsSync(sidecarPath)) {
const sidecarData = await exifr.sidecar(sidecarPath, exifrOptions);
if (sidecarData !== undefined) {
@@ -221,6 +216,10 @@
break;
}
}
+ fullPath = path.dirname(fullPath);
+ if (fullPath == '/app/data/images') {
+ break;
+ }
}
}
catch (err)
Note that this is not the directory metadata feature request.