So, the first step is to convert the pdf files to pngs.  For that we use:

```
$CONVERT -density $PDF_DENSITY "$pdffile" -background white -alpha remove 
-colorspace Gray -channel R -separate "$directory/page-%d.png”
```

Variables are defined as:

$CONVERT: the name (perhaps with path) of ImageMagick’s conversion tool on your 
computer.  If using ImageMagick 6, this was convert.  In ImageMagick 7 it’s 
magick.
$PDF_DENSITY: The dpi at which the file will be converted.  The higher the 
number, the more pixels the visual comparison will have to work from.  We 
default to 
$pdffile: The pdf file being converted.
$directory: Where to put the pngs.  This command handles multi-page scores and 
each page gets its own image.

Once the scores are converted to png, they are compared with:

```
$COMPARE -metric NCC "$name" "$expected”
```

Variables are defined as:

$COMPARE: the name (perhaps with path) of ImageMagick’s comparison tool on your 
computer along with some.  If using ImageMagick 6, this was compare.  In 
ImageMagick 7 it’s magick compare.

This gives a numeric result (embedded within a longer report in ImageMagick 7) 
that is used to decide whether the images are close enough to be considered 
“the same” or “different.”  I.e. this is where we determine if a test is PASS 
or FAIL.  If they are different, we then generate the diff with:

```
$CONVERT "$name"  "$expected" \
                                        \( -clone 0,1 -compose difference 
-composite \) \
                                        \( -clone 0 -clone 2 -compose minus 
-composite \
                                            -background blue -alpha shape \) \
                                        \( -clone 1 -clone 2 -compose minus \
                                            -composite -background red -alpha 
shape \) \
                                        \( -clone 0,1 -fill white -colorize 80% 
\) \
                                        -delete 0-2 -reverse -background white \
                                        -compose over -flatten "diff-$name”
```

Variables are defined as:

$CONVERT: as above
$name: the “new” file.  Stuff present here but not in the old file will be 
blue.  This will also be used to name the diff file.
$expected: the “old” file.  Stuff present here but not in the new file will be 
red.

For multi-page scores, we iterate over each page using a for loop in bash.

You can skip the `$COMPARE` step if you know the scores are different (or don’t 
mind a diff that is just gray).  Our test bank includes around 600 image 
comparison tests, so we don’t want to be wasting cycles generating diffs for 
files that aren’t actually different.

✝✝✝✝✝✝✝✝✝✝✝✝✝✝✝✝✝✝✝✝✝✝✝✝✝✝
Fr. Samuel, OSB
(R. Padraic Springuel)
St. Anselm’s Abbey
4501 South Dakota Ave, NE
Washington, DC, 20017
202-269-2300
(c) 202-853-7036

PAX ☧ ΧΡΙΣΤΟΣ

> On Aug 14, 2026, at 1:36 PM, Mikko Kouhia <[email protected]> wrote:
> 
> On Thursday, 13 August 2026 21:17:32 Eastern European Summer Time Fr. Samuel 
> Springuel wrote:
>> The Gregorio project uses ImageMagik to visually compare scores as part of
>> our test suite. [...]
>> 
>> [...] If you’re interested though, I’ll post the series of ImageMagik
>> commands that it takes to generate the attached [...]
> 
> Hi, I'm interested to learn also this solution. When you have time, please do 
> post your script.
> 
> 
> -- 
> Mikko Kouhia
> 
> 
> 


Reply via email to