XMP sidecar snippet — what CULL writes
WED-0100.xmp next to WED-0100.jpg — and WED-0100.CR2.xmp next to its RAW sibling. Standard Adobe XMP, read by Lightroom / Bridge / Capture One.5 Green · <xmp:Rating>5</xmp:Rating> + <photoshop:Label>Green</photoshop:Label>
<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Photo-Cull Bundle 1.0">
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""
xmlns:xmp="http://ns.adobe.com/xap/1.0/"
xmlns:photoshop="http://ns.adobe.com/photoshop/1.0/">
<xmp:Rating>5</xmp:Rating>
<photoshop:Label>Green</photoshop:Label>
</rdf:Description>
</rdf:RDF>
</x:xmpmeta>
<?xpacket end="w"?>
Independent reader check: {"rating":5,"label":"Green"} — regex + xml.etree both see it.
Reject -1 · industry-standard rejected flag · never exported
<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Photo-Cull Bundle 1.0">
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""
xmlns:xmp="http://ns.adobe.com/xap/1.0/"
xmlns:photoshop="http://ns.adobe.com/photoshop/1.0/">
<xmp:Rating>-1</xmp:Rating>
</rdf:Description>
</rdf:RDF>
</x:xmpmeta>
<?xpacket end="w"?>
Keeper export skips any -1. Proven: WED-0105 not in output.
We write the same packet beside WED-0100.CR2 when a same-named RAW sits next to the JPEG. Your catalog sees the rating on the RAW without us parsing RAW.
<xmp:Rating>5</xmp:Rating> + <photoshop:Label>Green</photoshop:Label> — identical
Verified in kill test: WED-0100.CR2.xmp exists=True content={'rating':5,'label':'Green'}.
How to spot ours vs foreign
Our sidecars contain xmptk="Photo-Cull Bundle 1.0". If a foreign .xmp already existed, we back it up once as .xmp.photocull-backup and then write ours — never silently overwriting without a backup. Clearing (u) removes only our sidecar.
Next sample: keeper export folder → · ← Contact sheet · All 3 samples