Skip to main content
frankw78750162
Inspiring
December 20, 2025
Question

Export data from Filemaker to Bridge

  • December 20, 2025
  • 2 replies
  • 103 views

I would like to export a field from a FileMaker database to Bridge.
More specifically:
I have about 100 photos in the FileMaker database, each with a detailed description (title, technique, size, etc.); the individual details are then combined in a formula to form an overall description for each image:
e.g., Bouquet of Flowers - Watercolor - 18x24
This formula field now needs to be exported for all 100 photos to a metadata field for the corresponding photo in Bridge, e.g., description, so that I can then access it in Lightroom or InDesign.
Is there a workflow for this?

2 replies

Stephen Marsh
Community Expert
Community Expert
December 22, 2025

@frankw78750162 

 

Options such as Bridge scripts for exporting and importing metadata (link below) or ExifTool commands can do this:

 

https://prepression.blogspot.com/2016/08/extracting-metadata-to-csv.html

Legend
December 22, 2025

You would need to use a third-party script, as Bridge does not have native import/export of metadata. There is an old script called DIY Metadata that might do what you need. You could also write your own script, adding to the Description field is fairly straightforward. Below is a sample script, you'd have to modify this to open and read your data file for each image (instead of creating a dialog) and apply it.

 

#target bridge
if(BridgeTalk.appName == 'bridge'){
    var descCmd = MenuElement.create('command', 'Edit Description...', 'after Thumbnail/Open', this.menuID); //add to Contextual menu
    }

descCmd.onSelect = function(){
    descMain();
    }

descMain = function(){
    try{
        var descThumbs = app.document.selections; //get selected thumbnails
        if(!descThumbs.length) return; //nothing selected
        var descr = '';
        if(!descThumbs[0].hasMetadata) return; //no metadata
        var descMeta = descThumbs[0].synchronousMetadata;
        var descXMP = new XMPMeta(descMeta.serialize());
        if(descXMP.doesPropertyExist(XMPConst.NS_DC, 'description')){
            descr = descMeta.read(XMPConst.NS_DC, 'description');
            descr = descr.toString();
            }
        else{
            descr = '';
            }
        descWindow = new Window ('palette', 'Edit Description', undefined);
        descPanel = descWindow.add('panel', undefined, '');
        descPanel.orientation = 'column';
        descPanel.alignChildren = ['left', 'top'];
        descPanel.lbl1 = descPanel.add('statictext', undefined, 'Description:');
        descPanel.lbl1.graphics.font = 'palette-bold';
        descPanel.txt1 = descPanel.add('edittext {justify:"left"}', undefined, '');
        descPanel.txt1.preferredSize = [350, 80];
        descPanel.txt1.text = descr;
        descPanel.grp1 = descPanel.add('group', undefined, '');
        descPanel.grp1.preferredSize = [350, 50];
        descPanel.grp1.orientation = 'row';
        descPanel.grp1.alignment = ['fill', 'fill'];
        descPanel.grp1.margins = [30, 20, 0, 0];
        descPanel.grp1.button1 = descPanel.grp1.add('button', undefined, 'Cancel', {name: 'cancel'});
        descPanel.grp1.button2 = descPanel.grp1.add('button', undefined, 'Apply Changes', {name: 'ok'});
        descPanel.grp1.button2.enabled = false;

        descPanel.txt1.onChanging = function(){
            descPanel.grp1.button2.enabled = true;
            }

        descPanel.grp1.button1.onClick = function(){
            descWindow.close();
            }

        descPanel.grp1.button2.onClick = function(){
            descr = descPanel.txt1.text;
            descWindow.close();
            for(var a in descThumbs){ //loop through thumbs
                if(!descThumbs[a].container){
                    try{
                        descMeta = descThumbs[a].synchronousMetadata;
                        descXMP = new XMPMeta(descMeta.serialize());
                        descXMP.deleteProperty(XMPConst.NS_DC, 'description');
                        descXMP.setLocalizedText(XMPConst.NS_DC, 'description', null, 'x-default', descr);
                        var descUpdatedPacket = descXMP.serialize(XMPConst.SERIALIZE_OMIT_PACKET_WRAPPER | XMPConst.SERIALIZE_USE_COMPACT_FORMAT);
                        descThumbs[a].metadata = new Metadata(descUpdatedPacket); //write to file
                        }
                    catch(e){
                        Window.alert(e + e.line);
                        }
                    }
                }
            }
        descWindow.layout.layout(true);
        descWindow.show();
        descPanel.txt1.active = true;
        }
    catch(e){
        Window.alert(e + e.line);
        }
    }