Exit
  • Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
  • 한국 커뮤니티
0

Description added to jpeg metadata in Bridge is not recognized by other applications.

New Here ,
Aug 05, 2025 Aug 05, 2025

I add metadata to raw files in Bridge (version 15.1.1.729), and then export them to jpeg. The problem is that if I make a change to the description metadata item in the jpeg file, using Bridge, other applications (including Preview on MacOS) still show the original description. To get it right I have to make the change on the raw files, delete the jpeg files, and then re-export them. This adds significant time to my workflow.
   Using the Jimpl.com metadata viewer I can see that the old description remains in the legacy IIM Caption-Abstract field, while the new one shows up in XMP description. The IPTC doc says that these two map to each other.
   The attached jpeg shows the edited description (T. Wicklund #22) in XMP description and the original description (Tim Wicklund #22) in IIM Caption-Abstract. I need to make sure the original description is removed and won't show up again.
   Since I cannot alter what is in Caption-Abstract (except by deleting and re-exporting), I can't set a revised description on a jpeg that will show up in the other applications! Sure looks like a defect to me.

Bug Unresolved
TOPICS
Metadata or Keywords
147
Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
4 Comments
Advocate ,
Aug 06, 2025 Aug 06, 2025

Image metadata is a mess. Each application implements its own choice of what namespaces to support and standards are all over the place.

You might look into using EXIFTool instead of Bridge to make changes, or write a Bridge script that modifies the needed fields.

Translate
Report
New Here ,
Aug 08, 2025 Aug 08, 2025

Thank you, I agree. But I wanted the report the software defect that exists in Bridge, in that two different methods yield different results: (1.) Input the description for the raw image and export it to jpeg. Exiftool shows that it has been placed into "Image Description" in IFD0, "Caption-Abstract" in IPTC, and "Description" in XMP-dc. (2.) Change the description for the exported jpeg file. Exiftool shows that only "Description" in XMP-dc is affected.

   Searching the raw data view that Bridge provides via File Info, neither the IFD0 Image Description nor the IPTC Caption-Abstract are shown. Bridge is the only tool I've used to input any metadata. So it is putting something in there that it won't show me or let me edit later.

   This is important: If a user mistakenly inputs a description that is not supposed to be revealed to the public, then corrects it and uploads the image to a public site, she will be unaware that people viewing the image might see the original description displayed, depending on the viewer they use and the metadata fields it shows.

Translate
Report
New Here ,
Aug 08, 2025 Aug 08, 2025

Today I have experienced Murphy's Law at work, meaning that after spending a number of hours on a workaround that uses EXIFTool, Bridge is working correctly. I revise the description in the IPTC panel for the jpeg image, and (as verified by EXIFTool), the revision is propagated to IFD0:ImageDescription and IPTC:Caption-Abstract as it should be.

   I still have a lot of jpegs where these fields are out of sync, but currently (in release 15.1.1.729) I can fix them without any workaround. Since I have always used Adobe Bridge, I can only guess that the behavior was different in a previous release. 

Translate
Report
Community Expert ,
Aug 11, 2025 Aug 11, 2025
LATEST

Just throwing this script out there in case it helps somebody:

 

/*
https://community.adobe.com/t5/bridge-discussions/find-and-replace-function-for-bridge/td-p/12947572
*/
#target bridge
if (BridgeTalk.appName == "bridge") {
    ReplaceDescription = new MenuElement("command", "Find and Replace Description/Caption", "at the end of tools");
}
// Load the XMP Script library
if (!xmpLib) {
    if (Folder.fs == "Windows") {
        var pathToLib = Folder.startup.fsName + "/AdobeXMPScript.dll";
    }
    else {
        var pathToLib = Folder.startup.fsName + "/AdobeXMPScript.framework";
    }
    var libfile = new File(pathToLib);
    var xmpLib = new ExternalObject("lib:" + pathToLib);
}
ReplaceDescription.onSelect = function () {
    var win = new Window('dialog', 'Find & Replace');
    //g = win.graphics;
    //var myBrush = g.newBrush(g.BrushType.SOLID_COLOR, [0.99, 0.99, 0.99, 1]);
    //var myBrush = g.newBrush(g.BrushType.THEME_COLOR, "appDialogBackground");
    //g.backgroundColor = myBrush;
    win.orientation = 'column';
    win.p1 = win.add("panel", undefined, undefined, { borderStyle: "black" });
    win.p1.preferredSize = [380, 100];
    win.g1 = win.p1.add('group');
    win.g1.orientation = "row";
    win.title = win.g1.add('statictext', undefined, 'Description/Caption Editor');
    win.title.alignment = "fill";
    var g = win.title.graphics;
    //g.font = ScriptUI.newFont("Georgia", "BOLDITALIC", 22);
    g.font = ScriptUI.newFont("dialog", "BOLD", 13);
    win.p6 = win.p1.add("panel", undefined, undefined, { borderStyle: "black" }); //Replace
    win.p6.preferredSize = [380, 100];
    win.g600 = win.p6.add('group');
    win.g600.orientation = "row";
    win.g600.alignment = 'fill';
    win.g600.st1 = win.g600.add('statictext', undefined, 'Replace');
    win.g600.st1.preferredSize = [75, 20];
    win.g600.et1 = win.g600.add('edittext');
    win.g600.et1.preferredSize = [200, 20];
    win.g610 = win.p6.add('group');
    win.g610.orientation = "row";
    win.g610.alignment = 'fill';
    win.g610.st1 = win.g610.add('statictext', undefined, 'With');
    win.g610.st1.helpTip = "Leave this field blank if you want to remove the characters";
    win.g610.st1.preferredSize = [75, 20];
    win.g610.et1 = win.g610.add('edittext');
    win.g610.et1.preferredSize = [200, 20];
    win.g620 = win.p6.add('group');
    win.g620.orientation = "row";
    win.g620.alignment = 'fill';
    win.g620.cb1 = win.g620.add('checkbox', undefined, 'Global');
    win.g620.cb1.helpTip = "Replace all occurrences of";
    win.g620.cb2 = win.g620.add('checkbox', undefined, 'Case Insensitive');
    win.g620.cb2.value = true;
    win.g620.cb3 = win.g620.add('checkbox', undefined, 'Remove any ()[]');
    win.g620.cb3.value = false;
    win.g1000 = win.p1.add('group');
    win.g1000.orientation = "row";
    win.g1000.alignment = 'center';
    win.g1000.bu1 = win.g1000.add('button', undefined, 'Process');
    win.g1000.bu1.preferredSize = [170, 30];
    win.g1000.bu2 = win.g1000.add('button', undefined, 'Cancel');
    win.g1000.bu2.preferredSize = [170, 30];
    win.g1000.bu1.onClick = function () {
        if (win.g600.et1.text == '') {
            alert("No replace value has been entered!");
            return;
        }
        win.close(0);
        var sels = app.document.selections;
        for (var a in sels) {
            var thumb = sels[a];
            // Get the metadata object 
            md = thumb.synchronousMetadata;
            // Get the XMP packet as a string and create the XMPMeta object
            var xmp = new XMPMeta(md.serialize());

            if (win.g620.cb1.value && !win.g620.cb2.value) var patt = new RegExp(win.g600.et1.text.toString(), "g");
            if (!win.g620.cb1.value && win.g620.cb2.value) var patt = new RegExp(win.g600.et1.text.toString(), "i");
            if (win.g620.cb1.value && win.g620.cb2.value) var patt = new RegExp(win.g600.et1.text.toString(), "gi");
            if (!win.g620.cb1.value && !win.g620.cb2.value) var patt = new RegExp(win.g600.et1.text.toString());

            // Read existing dc:description property
            var Caption = xmp.getArrayItem(XMPConst.NS_DC, "description", 1);
            // Change existing dc:description property based on user input
            var result = patt.test(Caption.toString());
            if (result == true) {
                var newCaption = Caption.toString().replace(patt, win.g610.et1.text.toString());
                if (win.g620.cb3.value) newCaption = newCaption.replace(/["'\(\)]/g, "");
            }
            // Delete the dc:description property
            xmp.deleteProperty(XMPConst.NS_DC, "description");
            // Populate the new dc:description property and set lang to x-default
            xmp.appendArrayItem(XMPConst.NS_DC, "description", newCaption, 0, XMPConst.ALIAS_TO_ALT_TEXT);
            xmp.setQualifier(XMPConst.NS_DC, "description[1]", "http://www.w3.org/XML/1998/namespace", "lang", "x-default");

            /*
                // Paul Riggott's original write method
            md.namespace =  "http://purl.org/dc/elements/1.1/";
            var Caption = md.description ? md.description[0] : "";
            if(Caption == "") continue;
            var result=patt.test(Caption.toString());
            if(result == true){
                var newCaption = Caption.replace(patt,win.g610.et1.text.toString());
                if(win.g620.cb3.value)  newCaption = newCaption.replace(/["'\(\)]/g, "");
                md.description='';
                md.description = newCaption;
                    }
             */
            // Write the packet back to the selected file
            var updatedPacket = xmp.serialize(XMPConst.SERIALIZE_OMIT_PACKET_WRAPPER | XMPConst.SERIALIZE_USE_COMPACT_FORMAT);
            thumb.metadata = new Metadata(updatedPacket);
        }
    }
    win.show();
    //app.document.chooseMenuItem("PurgeCacheForSelected");
};

 

https://prepression.blogspot.com/2017/11/downloading-and-installing-adobe-scripts.html

 

Translate
Report