Copy link to clipboard
Copied
Is there a way to find layered TIFF files in Bridge (or another method, perhaps scripting Bridge/Photoshop)?
This came up on another forum, where layered TIFF files may be accidentally saved when they should be layered PSD for this workflow.
The best that I have been able to do is use the Bridge FIND command to search all metadata excluding the keyword “Adobe Photoshop Camera Raw” as it appears that in CS6, a flat TIFF contains this phrase in XMP metadata, while a layered TIFF does not. Text layers can be found using the metadata keyword “layers”, however this does not find pixel or adjustment layers.
There are alternative options with ExifTool or ImageMagick/GraphicsMagick, however I was looking for a “standard” Adobe option.
Any ideas?
Here is a Bridge script, to be placed in the folder (Preferences-Startup Scripts (Reveal My Startup Scripts))
...#target bridge
if( BridgeTalk.appName == "bridge" ) {
tifLayers= MenuElement.create("command", "Tifs With Layers", "at the end of Tools");
}
tifLayers.onSelect = function () {
var fileList = Folder(app.document.presentationPath).getFiles("*.tif");
withLayers = new Array();
for(var x in fileList){
var file = fileList
; file.open("r");
file.encoding = 'BINARY';
var dat = file.read()
Copy link to clipboard
Copied
Moving to Bridge Scripting
~Rohit
Copy link to clipboard
Copied
Sad that there is no “Adobe” way to do this.
Apparently there is a relatively easy Mac OS/Unix way to do this, however I can’t take credit for the following shell script code (not sure if this would work in Windows using say Cygwin or similar):
#!/bin/bash
TIFFEXTENSIONONLY=0
cd "$(dirname "${BASH_SOURCE[0]}")"
SAVEIFS=$IFS
IFS=$(/bin/echo -n $'\n\b')
if [[ TIFFEXTENSIONONLY -eq 0 ]]; then
for N in $(find . -maxdepth 1 -type f ! -name '._*'); do
if [[ $(head -c 2 "$N") == II ]] || [[ $(head -c 2 "$N") == MM ]]; then
tiffutil -dump "$N" | grep '^37724 (0x935c)' > /dev/null
if [[ $? -eq 0 ]]; then
mkdir -p 'MULTIPLE LAYERS'
mv -n "$N" 'MULTIPLE LAYERS'
fi
fi
done
else
for N in $(find -E . -maxdepth 1 -iregex '.*tif(f){0,1}' ! -name '._*'); do
if [[ $(head -c 2 "$N") == II ]] || [[ $(head -c 2 "$N") == MM ]]; then
tiffutil -dump "$N" | grep '^37724 (0x935c)' > /dev/null
if [[ $? -eq 0 ]]; then
mkdir -p 'MULTIPLE LAYERS'
mv -n "$N" 'MULTIPLE LAYERS'
fi
fi
done
fi
IFS=$SAVEIFS
echo TIFF layer checking finished $(date)
Original topic thread here:
printplanet.com/forum/prepress-and-workflow/adobe/248476-identifying-layered-tifs-in-indesign
Copy link to clipboard
Copied
Here is a Bridge script, to be placed in the folder (Preferences-Startup Scripts (Reveal My Startup Scripts))
#target bridge
if( BridgeTalk.appName == "bridge" ) {
tifLayers= MenuElement.create("command", "Tifs With Layers", "at the end of Tools");
}
tifLayers.onSelect = function () {
var fileList = Folder(app.document.presentationPath).getFiles("*.tif");
withLayers = new Array();
for(var x in fileList){
var file = fileList
; file.open("r");
file.encoding = 'BINARY';
var dat = file.read();
file.close();
var result;
var pos = [];
var Text= [];
var rex = /Adobe Photoshop Document Data Block/g;
while ((result = rex.exec(dat)) != null) {
pos.push(result.index+(result[0].length));
}
if(pos.length>0) withLayers.push(new Thumbnail(fileList
)); dat=null;
}
if(withLayers.length >0){
var foundFiles = app.createCollection("Tifs With Layers");
app.addCollectionMember(foundFiles,withLayers);
}
};
Copy link to clipboard
Copied
Forgot to say, if any layered Tifs are found a Collection is created with all the layered tifs.
Copy link to clipboard
Copied
Great Stuff, thanks! I never had any feedback on whether my find solution excluding the keyword “Adobe Photoshop Camera Raw” worked outside of CS6, so it is good to have another method.
Copy link to clipboard
Copied
Its always good to have a backup
Copy link to clipboard
Copied
For the record, if anybody wishing to do similar via ExifTool, here is a conditional command that will overwrite .TIF files (change the -ext argument to .TIFF if needed rather than .TIF)… In this case adding a Bridge label of “Review” to the layered TIFF images:
Mac OS:
exiftool -r -overwrite_original_in_place -ext .tif -if '$IFD0:ImageSourceData' -label='Review' 'pathToDirectoryOrFile'
Win OS:
exiftool -r -overwrite_original_in_place -ext .tif -if "$IFD0:ImageSourceData" -label="Review" "pathToDirectoryOrFile"
Copy link to clipboard
Copied
Another ExifTool option that should be faster for many files is to create a text file listing the layered TIFF files. The input top level folder to scan is called ‘layers’ on the Desktop of the user Stephen Marsh, the text file is to be written to the same user’s Desktop:
exiftool -q -ext .tif -if '$IFD0:ImageSourceData' -filename -directory -r '/Users/stephenmarsh/Desktop/layers' > '/Users/stephenmarsh/Desktop/layersoutput.txt'
Windows users would swap the straight single quotes for straight double quotes and appropriate file paths.
Copy link to clipboard
Copied
Hi, I'm just finding this thread years later, and I've gotten the above script installed but nothing appears to work when I run it.
I'm using the CC 2019 version of Bridge. I have a test folder full of tiffs, some layered, some not. I'm selecting the script from the Tools menu yet it's either not running or it's failing to find any layered tiffs.
Is there something I'm missing?
Copy link to clipboard
Copied
When Adobe changed the forum software, the previous code was broken as variables in square brackets were lost, i.e. [x] became []. This should hopefully work:
#target bridge
if( BridgeTalk.appName == "bridge" ) {
tifLayers= MenuElement.create("command", "Tifs With Layers", "at the end of Tools");
}
tifLayers.onSelect = function () {
var fileList = Folder(app.document.presentationPath).getFiles("*.tif");
withLayers = new Array();
for(var x in fileList){
var file = fileList[x];
file.open("r");
file.encoding = 'BINARY';
var dat = file.read();
file.close();
var result;
var pos = [];
var Text= [];
var rex = /Adobe Photoshop Document Data Block/g;
while ((result = rex.exec(dat)) != null) {
pos.push(result.index+(result[0].length));
}
if(pos.length>0) withLayers.push(new Thumbnail(fileList[x]));
dat=null;
}
if(withLayers.length >0){
var foundFiles = app.createCollection("Tifs With Layers");
app.addCollectionMember(foundFiles,withLayers);
}
};
// https://forums.adobe.com/thread/1990912
/*
https://community.adobe.com/t5/bridge/how-to-check-if-image-includes-layers/m-p/11111182
How to check if image includes layers?
*/
#target bridge
if (BridgeTalk.appName == "bridge") {
layeredFiles = MenuElement.create("command", "Add Layered TIFF - PSD - PSB to Collection", "at the end of Tools");
}
layeredFiles.onSelect = function () {
var fileList = Folder(app.document.presentationPath).getFiles(/\.(tif|tiff|psd|psb)$/i);
withLayers = new Array();
for (var x in fileList) {
var file = fileList[x];
file.open("r");
file.encoding = 'BINARY';
var dat = file.read();
file.close();
var result;
var pos = [];
// var rex = /Adobe Photoshop Document Data Block/g; // Original code from 2016 for layered TIFF
var rex = /8BIMfxrp/g; // 2020 - "8BIMfxrp" property found using hex editor
while ((result = rex.exec(dat)) != null) {
pos.push(result.index + (result[0].length));
}
if (pos.length > 0) withLayers.push(new Thumbnail(fileList[x]));
dat = null;
}
if (withLayers.length > 0) {
var foundFiles = app.createCollection("TIFF - PSD - PSB Files with Layers");
app.addCollectionMember(foundFiles, withLayers);
}
};
Copy link to clipboard
Copied
THANKS!
worked like a charm
(bit of a spinning beachball, folder full of some 68 or so TIFFs, +some other files, so I was concerned at first, but it did work)
Copy link to clipboard
Copied
That's great news, yes it can be slow, ExifTool would be much faster as it is CLI based and only has to process metadata without all of the overhead found in Bridge.
Copy link to clipboard
Copied
This seems to be crashing for me on Bridge 2024 / Windows 10. Is there something I should update to get it working again?
Copy link to clipboard
Copied
This seems to be crashing for me on Bridge 2024 / Windows 10. Is there something I should update to get it working again?
By @Matthew31361620g7g0
Not that I'm aware of. The script could be modified to add a colour label, rating or keyword rather than creating a collection, perhaps that would work for you.
Copy link to clipboard
Copied
got it. I just went with your exiftool script to label "Review" and it works like a charm, thanks for that!