Displaying iTunes Album Art

This is an archive of older posts. You can't add topics - rather, create a new topic in one of the forums above. You can still reply to topics in this forum though we encourage you to start a new topic in the forums above instead.
ckeyes888
Posts: 2431
Joined: Thu Nov 26, 2009 2:41 pm
Location: Kalispell, MT

Re: Displaying iTunes Album Art

Post by ckeyes888 »

Tried compiling the entire script but get "Can’t set «class usTA» to false. Access not allowed."

It will compile and run with the Pandora Box sections removed but no artwork is saved.

Curious, when loading the script into Script Editor it prompts for the progressBar.app.
Is that something I should have installed?

Thanks,

Carl
gtreece
Posts: 171
Joined: Mon Sep 26, 2011 6:01 pm

Re: Displaying iTunes Album Art

Post by gtreece »

I don't have Pandora's Box, so I commented out the two Pandora-specific code blocks. The script compiled and ran, however it has no code to generate an image file, in the event the currently playing iTunes song has no artwork. You just don't get anything in that case.

I'd be curious about the down-scaling as well. It scales down based purely on resulting file size, rather than desired image dimensions. Seems like if you were using this for album art on a control page, you'd likely want consistent dimensions.

Here's a rework test that I did, that just deals with iTunes, uses a filler image file (need to create that yourself) in case the current song doesn't have artwork, and sets the resulting image to no more than 256 pixels on it's longest side. It's got quite a few comments in it. For the filler artwork (bogus.tiff), I just opened an existing album art file, filled it with a solid color and added "No Artwork" to it. You could use any tiff you wanted, as long as it was size appropriate.

Your mileage may vary. More for comparison purposes than anything else. I use this same general technique to produce a png file of the current SiriusXM channel logo playing on Pulsar, and reference that png file as a refreshing image on a control page.

Code: Select all

-- set the file paths to save the artwork in
-- tiff file is artwork coming from iTunes
-- png file holds converted artwork
-- bogus.tiff is just a filler artwork file, in case the song doesn't have artwork
property tiffFile : "/tmp/iTunes.tiff"
property pngFile : "/tmp/iTunes.png"
property bogusFile : "/tmp/bogus.tiff"

-- scale factor to reduce size of final image, if desired
property scaleFactor : 0.5

-- size to scale final image to (longest side), if desired
property targetSize : 256

-- call subroutine be sure iTunes is running
if isApplicationRunning("iTunes") then
	tell application "iTunes"
		-- if it is running, be sure a song is playing
		if (player state is playing) then
			-- call subroutine to get artwork for playing song
			set theResult to my writeITunesArtworkToFile()
		end if
	end tell
end if

-- convert the tiff file to a png file
tell application "Image Events"
	launch
	-- if artwork was found, we'll use the tiff file created
	if (theResult is equal to 1) then
		set theImageReference to open tiffFile
	else
		-- artwork was not found, so use a filler file
		set theImageReference to open bogusFile
	end if
	-- create the png file
	scale theImageReference to size targetSize
	save theImageReference as PNG in pngFile with icon
	close theImageReference
end tell


-- subroutine to check for running application
on isApplicationRunning(appName)
	tell application "System Events" to return (exists (some process where name is appName))
end isApplicationRunning

-- subroutine to write iTunes current track artwork to file
on writeITunesArtworkToFile()
	try
		tell application "iTunes"
			-- get song artwork
			set the_data to data of artwork 1 of current track
		end tell
		-- save the artwork to the tiff file
		set iTunesArtwork to (open for access tiffFile with write permission)
		write the_data to iTunesArtwork starting at 0
		close access iTunesArtwork
		-- return success code
		return 1
	on error
		-- couldn't get artwork for some reason, return error code
		return 0
	end try
end writeITunesArtworkToFile
Dewster35
Posts: 1030
Joined: Tue Jul 06, 2010 6:29 pm
Location: Petoskey, MI

Re: Displaying iTunes Album Art

Post by Dewster35 »

Carl,
Honestly I don't know much about what the script is actually doing. I'm no script writer. The developer of Pandora's box wrote it for me as a favor.

I do know I did not install anything new on my machine to be to make this work. I'm running the latest version mac OS (10.7.3) and the latest version of iTunes (10.6.1). It works for my purposes though... just to simply create the album art file if it's available from whatever is running and display it on my control page. Wish I could be more helpful. I do know he tried it and a couple of others have tried it and it does what they need as well.
ckeyes888
Posts: 2431
Joined: Thu Nov 26, 2009 2:41 pm
Location: Kalispell, MT

Re: Displaying iTunes Album Art

Post by ckeyes888 »

Thanks. Wish I could get it to work..still nothing. I'm running 10.5.

Code: Select all

-- set the file paths to save the artwork in
-- tiff file is artwork coming from iTunes
-- png file holds converted artwork
-- bogus.tiff is just a filler artwork file, in case the song doesn't have artwork
property tiffFile : "Library/Application Support/Perceptive Automation/iTunes.tiff"
property pngFile : "Library/Application Support/Perceptive Automation/iTunes.png"
property bogusFile : "Library/Application Support/Perceptive Automation//bogus.tiff"

-- scale factor to reduce size of final image, if desired
property scaleFactor : 0.5

-- size to scale final image to (longest side), if desired
property targetSize : 256

-- call subroutine be sure iTunes is running
if isApplicationRunning("iTunes") then
	tell application "iTunes"
		-- if it is running, be sure a song is playing
		if (player state is playing) then
			-- call subroutine to get artwork for playing song
			set theResult to my writeITunesArtworkToFile()
		end if
	end tell
end if

-- convert the tiff file to a png file
tell application "Image Events"
	launch
	-- if artwork was found, we'll use the tiff file created
	if (theResult is equal to 1) then
		set theImageReference to open tiffFile
	else
		-- artwork was not found, so use a filler file
		set theImageReference to open bogusFile
	end if
	-- create the png file
	scale theImageReference to size targetSize
	save theImageReference as PNG in pngFile with icon
	close theImageReference
end tell


-- subroutine to check for running application
on isApplicationRunning(appName)
	tell application "System Events" to return (exists (some process where name is appName))
end isApplicationRunning

-- subroutine to write iTunes current track artwork to file
on writeITunesArtworkToFile()
	try
		tell application "iTunes"
			-- get song artwork
			set the_data to data of artwork 1 of current track
		end tell
		-- save the artwork to the tiff file
		set iTunesArtwork to (open for access tiffFile with write permission)
		write the_data to iTunesArtwork starting at 0
		close access iTunesArtwork
		-- return success code
		return 1
	on error
		-- couldn't get artwork for some reason, return error code
		return 0
	end try
end writeITunesArtworkToFile

The code runs and creates a png but it's not the current track. The script wouldn't run unless i had
a iTunes.tiff file in the save location, so I made one and put it there but the png that is created is just a copy of the it,
not the currently playing art.

I realize this script isn't well understood....I'll plug away at it a bit more

Thanks,

Carl
gtreece
Posts: 171
Joined: Mon Sep 26, 2011 6:01 pm

Re: Displaying iTunes Album Art

Post by gtreece »

Hi Carl. You'll need a leading "/" in your file name properties. They need to be valid paths.

Code: Select all

property tiffFile : "/Library/Application Support/Perceptive Automation/iTunes.tiff"
And of course, write permission to any location you specify. You should be good with yours, once you fix the path.
Greg
User avatar
jay (support)
Site Admin
Posts: 18411
Joined: Wed Mar 19, 2008 11:52 am
Location: Austin, Texas
Contact:

Re: Displaying iTunes Album Art

Post by jay (support) »

There's a bug in the file paths in the script - they need to start with "/Library" not "Library". Also the path to the bogus.tiff file has two slashes (which shouldn't make any difference) but you'll want to make sure that file exists or the script will fail when the first song that doesn't have an image hits.

[EDIT] someone beat me to it... ;)
Jay (Indigo Support)
Twitter | Facebook | LinkedIn
ckeyes888
Posts: 2431
Joined: Thu Nov 26, 2009 2:41 pm
Location: Kalispell, MT

Re: Displaying iTunes Album Art

Post by ckeyes888 »

Fixed the paths but still no go. The png will update, and size correctly to however
I have it set in the script, but the tiff won't update to the currently playing artwork.

Should it matter that music is on an external drive?

Found this script that saves the current album as a pict file to the desktop. Seems to work fine.

Code: Select all

tell application "iTunes"
	set s to item 1 of (selection)
	set pd to data of first artwork of s
end tell
set fs to ("" & (path to desktop) & "MyArt.pict") as file specification
set rn to (open for access fs with write permission)
try
	set eof rn to 512
	write pd to rn starting at 513
	close access rn
on error err_mess
	close access rn
	error err_mess
end try

tell application "Finder"
	set file type of fs to "PICT"
	set creator type of fs to "????"
	activate
end tell
Would it difficult to mod it to scale the image and save as a png?


Thanks a bunch,

Carl

Thanks,

Carl
Last edited by ckeyes888 on Mon Apr 02, 2012 12:44 pm, edited 2 times in total.
gtreece
Posts: 171
Joined: Mon Sep 26, 2011 6:01 pm

Re: Displaying iTunes Album Art

Post by gtreece »

This is the part that gathers the iTunes artwork:

Code: Select all

try
      tell application "iTunes"
         -- get song artwork
         set the_data to data of artwork 1 of current track
      end tell
      -- save the artwork to the tiff file
      set iTunesArtwork to (open for access tiffFile with write permission)
      write the_data to iTunesArtwork starting at 0
      close access iTunesArtwork
      -- return success code
      return 1
It actually requires that two things happen successfully:
1 - that the current song actually has artwork (you'd be able to see it in iTunes)
2 - that the user running the script has write permission to the file specified for 'tiffFile'

So if you know the current song has artwork, then I'd say the script is failing to write it to the file (most likely either a permission issue, or the path is invalid). I didn't put anything in there to specifically alert if it had trouble writing the file to disk.

You might change the file path to the /tmp location that I used originally, to see if it yields different results. You can use the finder 'Go' menu to go to the /tmp folder to see the results.

Greg
ckeyes888
Posts: 2431
Joined: Thu Nov 26, 2009 2:41 pm
Location: Kalispell, MT

Re: Displaying iTunes Album Art

Post by ckeyes888 »

The tiff definitely has read write privileges but still no go. Tried a different path as well.
Odd for sure. Guess I'll try to rework the one that does work to scale and save as a png.

Thanks,

Carl
Dewster35
Posts: 1030
Joined: Tue Jul 06, 2010 6:29 pm
Location: Petoskey, MI

Re: Displaying iTunes Album Art

Post by Dewster35 »

I was told that pulling information out of iTunes was messy, even though it was possible. If you have some suggestions for improvements, I'd be happy to pass them along if I think they are worthwhile.
gtreece
Posts: 171
Joined: Mon Sep 26, 2011 6:01 pm

Re: Displaying iTunes Album Art

Post by gtreece »

That is odd, Carl. The functional differences between the script you found, and the one I posted are, a) where it writes the file, and b) the format it writes the file in (I don't know details, but the starting at 513 part is tied to creating a PICT).

Otherwise, the two are doing the same thing. There are slight differences in the way the two scripts address the artwork of the iTunes track, which could be version differences. There are many ways to say the same thing in Applescript, but they don't always work on every OS/App version.

I'm on 10.7.3. I don't have an earlier machine to test with at the moment, but I've run into similar oddities between major OS X versions before when working on Applescripts. Particularly with file/folder operations.
ckeyes888
Posts: 2431
Joined: Thu Nov 26, 2009 2:41 pm
Location: Kalispell, MT

Re: Displaying iTunes Album Art

Post by ckeyes888 »

Well my last attempt works great if you select the songs directly in iTunes...but does not work if I
change the songs using AS within Indigo.

Code: Select all

tell application "iTunes"
	set s to item 1 of (selection)
	set pd to data of first artwork of s
end tell
set fs to ("" & (path to desktop) & "MyArt.pict") as file specification
set rn to (open for access fs with write permission)
try
	set eof rn to 512
	write pd to rn starting at 513
	close access rn
on error err_mess
	close access rn
	error err_mess
end try

tell application "Finder"
	set file type of fs to "PICT"
	set creator type of fs to "????"
	activate
end tell

property pngFile : "/Library/Application Support/Perceptive Automation/iTunes.png"
property targetSize : 125

tell application "Image Events"
	launch
	set theImageReference to open fs
	-- create the png file
	scale theImageReference to size targetSize
	save theImageReference as PNG in pngFile with icon
	close theImageReference
end tell
Any idea how that could be? Controlling iTunes from the Indigo iTunes server works fine.

Thanks,

Carl
gtreece
Posts: 171
Joined: Mon Sep 26, 2011 6:01 pm

Re: Displaying iTunes Album Art

Post by gtreece »

The (selection) in iTunes will not be the same as the current track. A song is selected when it's highlighted, but any song could be playing.

That's why I went with:

Code: Select all

set the_data to data of artwork 1 of current track
Dewster35
Posts: 1030
Joined: Tue Jul 06, 2010 6:29 pm
Location: Petoskey, MI

Re: Displaying iTunes Album Art

Post by Dewster35 »

Just curious, is all this just to account for music that doesn't have album art in iTunes?
gtreece
Posts: 171
Joined: Mon Sep 26, 2011 6:01 pm

Re: Displaying iTunes Album Art

Post by gtreece »

Dewster35 wrote:Just curious, is all this just to account for music that doesn't have album art in iTunes?
Not exactly. I just know that the first time I tested the script you posted originally, I got no artwork. I'd rather have a custom graphic show if there's no artwork, so I checked for it in the script I patched together.

Most of this has been working with Carl, to get a script running at all. Neither yours, nor the shorter one I did, worked for him.
Post Reply

Return to “Archived Posts”