# Album art with GeekTool

After a few weeks of pretty constant work and overwork, today has been something of a goof-off day. For reasons I can’t quite remember, I came across this post on Mac OSX Hints, which describes a way of taking the iTunes album cover art of the currently playing song and putting on your desktop through GeekTool. I already had GeekTool set up to display the name, artist, and album of the current track--described here--but this seemed like a fun addition. The lower right corner of my desktop now looks like this:

The text comes from my previous GeekTool arrangement, and the album art is from today’s additions.

The setup is basically that described in the OSX Hints article, but I made a few changes:

• The original AppleScript converts the art from PICT to TIFF. The first comment to the article mentioned that this was unnecessary, and I altered the script to keep the art in PICT format.
• The original used a transparent TIFF to display when there was no album art--as when iTunes is off or paused. With the change to PICT, I decided that the “blank art” file should be a single pixel file with the color of the pixel set to match my desktop color.
• The original AppleScript would show the album cover of the current track even when iTunes was paused. I wanted the blank art displayed when iTunes was paused.
• The original script seemed a repetitive when it came to showing the blank art, so I streamlined the logic a bit.

My version of the AppleScript, called “iTunesArtwork.scpt,” is kept in my ~/Library/Scripts folder and looks like this:

-- Paths and stuff
set ArtworkFromiTunes to ((path to home folder) as text) & ¬
"Pictures:iTunes Artwork:From iTunes:albumArt.pict" as alias
set iTunesArtwork to ((path to home folder) as text) & ¬
"Pictures:iTunes Artwork:From iTunes:albumArt.pict"
set DefaultArtwork to ((path to home folder) as text) & ¬
"Pictures:iTunes Artwork:Default:albumArt.pict"
set displayArtwork to ((path to home folder) as text) & ¬
"Pictures:iTunes Artwork:albumArt.pict"

-- Unix versions of the above path strings
set unixITunesArtwork to the quoted form of POSIX path of iTunesArtwork
set unixDefaultArtwork to the quoted form of POSIX path of DefaultArtwork
set unixDisplayArtwork to the quoted form of POSIX path of displayArtwork

set whichArt to "blank"
tell application "System Events"
if exists process "iTunes" then -- iTunes is running
tell application "iTunes"
if player state is playing then -- iTunes is playing
set aLibrary to name of current playlist -- Name of Current Playlist
set aTrack to current track
set aTrackArtwork to null
if (count of artwork of aTrack) ≥ 1 then -- there's an album cover
"Running and playing and art"
set aTrackArtwork to data of artwork 1 of aTrack
set fileRef to ¬
(open for access ArtworkFromiTunes with write permission)
try
set eof fileRef to 512
write aTrackArtwork to fileRef starting at 513
close access fileRef
on error errorMsg
try
close access fileRef
end try
error errorMsg
end try

tell application "Finder" to ¬
set creator type of ArtworkFromiTunes to "????"
set whichArt to "iTunes"
end if
end if
end tell
end if
end tell

if whichArt is "iTunes" then
do shell script "ditto -rsrc " & unixITunesArtwork & space & unixDisplayArtwork
else
do shell script "ditto -rsrc " & unixDefaultArtwork & space & unixDisplayArtwork
end if


Update 9/16/09
I just updated the script to work with Snow Leopard. The line that sets the variable ArtworkFromiTunes used to end as file specification; now it ends as alias. I think as alias will work in Leopard, too, but I don’t have a good way to check right now.

I created a new “Shell” GeekTool entry to call this script every 10 seconds. The command is

osascript ~/Library/Scripts/iTunesArtwork.scpt


It doesn’t produce any output, so the location, size, font, color, etc. of the output area doesn’t matter.

In my ~/Pictures folder, I have a folder called “iTunes Artwork,” and its contents look like this:

The “albumArt.pict” file in the “Default” folder is the single-pixel PICT I mentioned before. If you want to use my version of the script unchanged, you’ll have to replicate this directory stucture and make a “blank art” file to match your desktop. Don’t worry about the other two “albumArt.pict” files; they’re created by the script when it runs.

I created a new “Picture” GeekTool entry to display the picture at Source URL

file:///Users/drang/Pictures/iTunes%20Artwork/albumArt.pict


every 10 seconds (you’ll have to change the user name, of course). The script makes that file a copy of the album cover art if a track is playing (and has cover art) and a copy of the single-pixel “blank art” otherwise. The display area is 150×150 pixels and the Picture Style is set to display Proportionally in the lower right corner of the display area.

Because the text and the artwork are controlled by three separate GeekTool entries that don’t necessarily run simultaneously, it’s not uncommon for the text and artwork to be out of sync for a few seconds when a new track begins playing. I could make them more closely synced by reducing the time between GeekTool calls, but the delay isn’t annoying enough to bother.

Update (5/11/09)
The scripts described in this post may lead GeekTool to eat up more memory the longer it runs. You may want to also run my GeekTool memory monitor script so you can track GeekTool’s memory use and restart it when necessary.