Tunebook generator

Last Updated or created 2022-11-21

I’m using below scripts to generate tunebooks.
These books I can print OR view on a tablet using my DIY bluetooth page turner. ( see other post )

I often work on tunes, add notes, text or write other versions.
So i needed a fast and simple way to re-generate a tunebook. ( hence the date on the title page and in the name, so i know whats the most recent version )
Now i have a separate tunebook for each instrument, with the same looks

What does this script?

  • Generates a title page using Latex
  • Generates a tune index, with page numbers ( works with multipage tunes )
  • Adds bookmarks to the tunes, so you can use the bookmark link in your reader.
  • Merges all pdf’s into one.

Todo: embed page numbers on every page?

BASH script:


nrpdf=$(ls *\.pdf | grep ^[A-Z]  | wc -l)
echo "Tune PDFs in directory : $nrpdf"
pages=$(( $nrpdf / 126 ))
pages=$(( $pages + 1 ))
echo "Needed index pages : $pages"

# Extra pages : Number 002-099
extrapages=$( ls 0*pdf | egrep -v "001|000" | wc -l)
echo "Extra pages : $extrapages"

nr=$(( 1 +  $extrapages + $pages ))
echo "Total pages for tunes : $nr"
echo "create column page as text"
nr=$(( $nr +1 ))
ls *\.pdf | grep ^[A-Z] | sort | while read ; do
echo "$nr $REPLY"
next=$(exiftool "$REPLY" | awk -F": " '/Page Count/{print $2}')
nr=$(( $nr + $next ))
done | cut -f1,3- -d" " | cut -f1 -d. | sed s/\ a$//g | sed s/\ b$//g | pr -2 -t > /tmp/col
echo "Create Index pdf"
vim /tmp/col -c "set printfont=courier:h12"  -c":let &printheader = \" \""   -c "hardcopy > 001aIndex.ps | q"; ps2pdf 001aIndex.ps

echo "Create title page pdf"
pdflatex "000 title.tex" 1>/dev/null


echo -n "Add bookmarks : "
ls *\.pdf | grep ^[A-Z] | sort | while read i ; do
    bookmarkTitle=$( echo $i | cut -f2- -d" " | rev | cut -f2- -d. | rev)
    bookmarkInfo="BookmarkBegin\nBookmarkTitle: $bookmarkTitle\nBookmarkLevel: 1\nBookmarkPageNumber: 1"
    pdftk "$i" update_info_utf8 <(echo -en $bookmarkInfo) output $tempPDF >/dev/null
    mv $tempPDF "$i"
    echo -n "."
echo ""
set +x
#ls *\.pdf | grep ^[A-Z] | sort > /tmp/pdflist
pdftk *pdf cat output ../tunebook_$(date +%Y%m%d).pdf

Needed tex file (named “000 title.tex”)

\usepackage[a4paper, total={6in, 8in}]{geometry}



    {\fontsize{50}{60}\selectfont Irish Tunes Test Tunebook}
	{\large Tunebook}\par
    {\itshape Henri - Exampletunes\par}
    {\scshape generated:} \\

File naming:

000 title
001 index
002 – 099 xyz (extra pages, not in index)
AAA – ZZZ Tunes (i take te first letters from the tune name)
example “BOR I was born for sports.pdf” is sorted under BOR from born

000 title.pdf
002 tuneinfo.pdf
BAT The Battle of Aughrim.pdf
BOR I was born for sports.pdf
CER Cerlew Jig.pdf
CHA Chanters Song.pdf
GAN Gander at the Pratie Hole.pdf
HON honeymoon.pdf
KIT Kitty Goes a-Milking.pdf
TER Terribus.pdf

51st highlanders I will name "AAA51 51st highlanders.pdf"

Output from the script

Tune PDFs in directory : 8
Needed index pages : 1
Extra pages : 1
Total pages for tunes : 3
create column page as text
Create Index pdf
Create title page pdf
Add bookmarks : ........

Needed software:

pdftk, pdflatex, vim, exiftool, texlive-fonts-recommended