Skip to main content

Notice

Please note that most of the software linked on this forum is likely to be safe to use. If you are unsure, feel free to ask in the relevant topics, or send a private message to an administrator or moderator. To help curb the problems of false positives, or in the event that you do find actual malware, you can contribute through the article linked here.
Topic: Album Art Downloader XUI (Read 2035530 times) previous topic - next topic
0 Members and 3 Guests are viewing this topic.

Album Art Downloader XUI

Reply #2475
These scripts regularly break as the websites are changed, and I rely on people reporting when they don't work so I can fix them up with whatever changes have been made, or discontinue them if the website itself no longer works.

I want to report that the 'YesAsia' script isn't working anymore. When I select the 'yesasia'-script and search for "ayaka - Sing to the Sky" I don't get any results, when I search for the album on yesasia.com I get about 4 results showing the cover.

Album Art Downloader XUI

Reply #2476
I want to report that the 'YesAsia' script isn't working anymore. When I select the 'yesasia'-script and search for "ayaka - Sing to the Sky" I don't get any results, when I search for the album on yesasia.com I get about 4 results showing the cover.

Thanks for reporting that, I've fixed it now: yesasia.boo. Please let me know if you have any more problems with it.

Alex

Album Art Downloader XUI

Reply #2477
Thanks for fixing it. So far I haven't found any problems.

Album Art Downloader XUI

Reply #2478
Alex,
With the next version would you consider adding a filter function to look at the date time stamp on folder.jpg?

This would make it way easier to only update older files.

Thanks!

Album Art Downloader XUI

Reply #2479
Version 1.01
This release fixes a nasty Auto Downloader bug reported where the wrong album art could end up saved in the wrong album folder. I have also added a "Modified" column to the file browser which lists the last modified datestamp for the image file (if one is found). It's hidden by default, so to show it right click on any column header and choose it in the menu. By sorting by this column, you can then easily select or unselect newer or older files.

I have also brought all the scripts up to date. MegaMedia and Hyperion Records have been removed, but everything else should work now.

Download:
AlbumArtDownloaderXUI.exe (Installer. Recommended)
AlbumArtDownloaderXUI.zip (zip archive for those who don't like installers)
.NET Framework 3.5 SP1 (required, except for Windows 7 and 8)Donations

Album Art Downloader XUI

Reply #2480
When I try to install, Norton deletes the file. Something about WS.Reputation.1.

Album Art Downloader XUI

Reply #2481
When I try to install, Norton deletes the file. Something about WS.Reputation.1.

The MD5s are

AlbumArtDownloaderXUI-1.01.exe: 0f052926d69ad15bbdec2906e252a328
AlbumArtDownloaderXUI-1.01.zip: 7f3ea68300dab0e5e41a0b1e8a3b85ce
AlbumArt.exe (v1.01): 37a30b40fac5776b8965561188764d8f

If you downloaded it directly from SourceForge, and it has that checksum, then it's fine, and must be a false-positive from Norton - if that's the case, then please use their reporting system https://submit.symantec.com/false_positive/ to let them know.

Thanks,

Alex

Album Art Downloader XUI

Reply #2482
Hi all,

I am new to this forum so let me please say hello to everyone ! 

I recently decided to grab all the missing covers of my collection and gave a try to AAD.
The problem is that I get the memory error that crashes the app every time I begin the covers grab proedure. (app crashes after grabbing some covers automatically then shows a notepad log with the momery error).
I have checked and at last run it crashed after having performed 443 cover fixes. (I use automatic import with only amazon, bandcamp and lastfm sources.)
then I get a beautifull notepad showing me the error message.
I've run it on two different computers and the problem persists... 

As aad is the ONLY app that seems to be able to connect multiple sources, and therefore the most efficient, could someone tell me if he found a solution to this memory problem ???
Why is the app crashing ? is it because it keeps all the covers shown in the app ? and saturates the memory ? (I can't figure out anything else as the files are directly written on the disk...only the image previews persists in the app).

If yes, Is it possible to give me the CLI options that would perform a simple scan of all recursive folders and files, and add a cover.jpg file in all folder that do not contain any folder? (and this for amazon sites, discogs, beatport, bandcamp and lastFM covers).
Would be great to get some help here!!!
(OR, maybe an option to not show the previews would fix the issue (in case of auto import)). ?

A CLI would be even better as I could schedule a scan and run in the background once a while.
Oh, If someone managed to port the app under osx, it would be really welcome too...I tried to pack it using winebottler but it is desesperately crashing. (butthis is just a "bonus" of course...just sayin'...because my hdds are hfs and I currently have to unplug them and plug them on a pc to run the process...)

Thanks a LOT for the great piece of software !!!!

Album Art Downloader XUI

Reply #2483
I have checked and at last run it crashed after having performed 443 cover fixes. (I use automatic import with only amazon, bandcamp and lastfm sources.)
then I get a beautifull notepad showing me the error message.
I've run it on two different computers and the problem persists...

Hello - sorry to hear Album Art Downloader is crashing for you. If you let me know a few details, I can look into it for you. Is it always crashing when trying to download the same cover? Or is it always after exactly 443 no matter which covers it's looking for? Could you post the actual error that you get, it might give me a clue. Are you running it on a PC with an unusually small amount of memory, like a netbook or something?

I'm afraid the CLI doesn't have any media file scanning functionality, it's only for searching and downloading album art. If you have some other library management software that can handle recursively analysing your media collection to find albums, you could probably then get it to call the CLI version for each album that it finds to search for and download a cover for it. The intention of the CLI version is really to provide an easy point of integration like this for other software; it isn't a direct replacement for the main UI version.

Alex

Album Art Downloader XUI

Reply #2484
Hi Alex,

The two computer I used respectively have 3 and 4gb of RAM.
Nope it do not crash on the same directory (as I used two specific hdd's with different albums on each of them).
And yes I will make the app crash again tonight and send you the complete log !

Oh and, I do not think it's always crashing after 443 cover fetches...I can see the memory usage growing more and more, till the app crashes. I'm surprised this is not noticed by more users here as I can't imagine that no one already used the app to fix a large number of albums at once using the automatic procedure (that works veryn very well if you stick to main providers as amazon, discogs and lastfm).

I'll paste you the log tonight !

Thank you so much for helping me here !

Album Art Downloader XUI

Reply #2485
Version 1.01
I have also added a "Modified" column to the file browser which lists the last modified datestamp for the image file (if one is found). It's hidden by default, so to show it right click on any column header and choose it in the menu. By sorting by this column, you can then easily select or unselect newer or older files.


Alex,
You rock as always. The modified column works well. I would still prefer to see a filter option (ie exclude before date/ after date)

Album Art Downloader XUI

Reply #2486
Hi Alex,

here is the errorlog :

Album Art Downloader has encountered a fatal error, and has had to close.
If you wish to report this error, please include this information, which
has been written to the file: C:\Program Files\AlbumArtDownloader\errorlog.txt

App version: 1.0.1.0, running on Microsoft Windows NT 6.1.7601 Service Pack 1 (32 bit)

System.OutOfMemoryException: Mémoire insuffisante pour continuer l'exécution du programme.
  à System.Windows.Media.Imaging.BitmapSource.get_DUCECompatibleMILPtr()
  à System.Windows.Media.Imaging.BitmapSource.UpdateBitmapSourceResource(Channel channel, Boolean skipOnChannelCheck)
  à System.Windows.Media.Imaging.BitmapSource.UpdateResource(Channel channel, Boolean skipOnChannelCheck)
  à System.Windows.Media.Imaging.BitmapSource.AddRefOnChannelCore(Channel channel)
  à System.Windows.Media.Imaging.BitmapSource.System.Windows.Media.Composition.DUCE.IResource.AddRefOnCh
annel(Channel channel)
  à System.Windows.Media.RenderData.System.Windows.Media.Composition.DUCE.IResource.AddRefOnChannel(Chan
nel channel)
  à System.Windows.UIElement.RenderContent(RenderContext ctx, Boolean isOnChannel)
  à System.Windows.Media.Visual.UpdateContent(RenderContext ctx, VisualProxyFlags flags, Boolean isOnChannel)
  à System.Windows.Media.Visual.RenderRecursive(RenderContext ctx)
  à System.Windows.Media.Visual.UpdateChildren(RenderContext ctx, ResourceHandle handle)
  à System.Windows.Media.Visual.RenderRecursive(RenderContext ctx)
  à System.Windows.Media.Visual.UpdateChildren(RenderContext ctx, ResourceHandle handle)
  à System.Windows.Media.Visual.RenderRecursive(RenderContext ctx)
  à System.Windows.Media.Visual.UpdateChildren(RenderContext ctx, ResourceHandle handle)
  à System.Windows.Media.Visual.RenderRecursive(RenderContext ctx)
  à System.Windows.Media.Visual.UpdateChildren(RenderContext ctx, ResourceHandle handle)
  à System.Windows.Media.Visual.RenderRecursive(RenderContext ctx)
  à System.Windows.Media.Visual.UpdateChildren(RenderContext ctx, ResourceHandle handle)
  à System.Windows.Media.Visual.RenderRecursive(RenderContext ctx)
  à System.Windows.Media.Visual.UpdateChildren(RenderContext ctx, ResourceHandle handle)
  à System.Windows.Media.Visual.RenderRecursive(RenderContext ctx)
  à System.Windows.Media.Visual.UpdateChildren(RenderContext ctx, ResourceHandle handle)
  à System.Windows.Media.Visual.RenderRecursive(RenderContext ctx)
  à System.Windows.Media.Visual.UpdateChildren(RenderContext ctx, ResourceHandle handle)
  à System.Windows.Media.Visual.RenderRecursive(RenderContext ctx)
  à System.Windows.Media.Visual.UpdateChildren(RenderContext ctx, ResourceHandle handle)
  à System.Windows.Media.Visual.RenderRecursive(RenderContext ctx)
  à System.Windows.Media.Visual.UpdateChildren(RenderContext ctx, ResourceHandle handle)
  à System.Windows.Media.Visual.RenderRecursive(RenderContext ctx)
  à System.Windows.Media.Visual.UpdateChildren(RenderContext ctx, ResourceHandle handle)
  à System.Windows.Media.Visual.RenderRecursive(RenderContext ctx)
  à System.Windows.Media.Visual.UpdateChildren(RenderContext ctx, ResourceHandle handle)
  à System.Windows.Media.Visual.RenderRecursive(RenderContext ctx)
  à System.Windows.Media.Visual.UpdateChildren(RenderContext ctx, ResourceHandle handle)
  à System.Windows.Media.Visual.RenderRecursive(RenderContext ctx)
  à System.Windows.Media.Visual.UpdateChildren(RenderContext ctx, ResourceHandle handle)
  à System.Windows.Media.Visual.RenderRecursive(RenderContext ctx)
  à System.Windows.Media.Visual.UpdateChildren(RenderContext ctx, ResourceHandle handle)
  à System.Windows.Media.Visual.RenderRecursive(RenderContext ctx)
  à System.Windows.Media.Visual.UpdateChildren(RenderContext ctx, ResourceHandle handle)
  à System.Windows.Media.Visual.RenderRecursive(RenderContext ctx)
  à System.Windows.Media.Visual.Render(RenderContext ctx, UInt32 childIndex)
  à System.Windows.Media.CompositionTarget.Compile(Channel channel)
  à System.Windows.Media.CompositionTarget.System.Windows.Media.ICompositionTarget.Render(Boolean inResize, Channel channel)
  à System.Windows.Media.MediaContext.Render(ICompositionTarget resizedCompositionTarget)
  à System.Windows.Media.MediaContext.RenderMessageHandlerCore(Object resizedCompositionTarget)
  à System.Windows.Media.MediaContext.AnimatedRenderMessageHandler(Object resizedCompositionTarget)
  à System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Boolean isSingleParameter)
  à System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler)
  à System.Windows.Threading.Dispatcher.WrappedInvoke(Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler)
  à System.Windows.Threading.DispatcherOperation.InvokeImpl()
  à System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(Object state)
  à System.Threading.ExecutionContext.runTryCode(Object userData)
  à System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)
  à System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
  à System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
  à System.Windows.Threading.DispatcherOperation.Invoke()
  à System.Windows.Threading.Dispatcher.ProcessQueue()
  à System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
  à MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
  à MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
  à System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Boolean isSingleParameter)
  à System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler)
  à System.Windows.Threading.Dispatcher.WrappedInvoke(Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler)
  à System.Windows.Threading.Dispatcher.InvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Boolean isSingleParameter)
  à System.Windows.Threading.Dispatcher.Invoke(DispatcherPriority priority, Delegate method, Object arg)
  à MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
  à MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
  à System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
  à System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame)
  à System.Windows.Threading.Dispatcher.Run()
  à System.Windows.Application.RunDispatcher(Object ignore)
  à System.Windows.Application.RunInternal(Window window)
  à System.Windows.Application.Run(Window window)
  à System.Windows.Application.Run()
  à AlbumArtDownloader.App.AlbumArtDownloader.IPriorInstance.Run()
  à AlbumArtDownloader.InstanceMutex.RunAppAsServiceHost(IPriorInstance instance, String channelUri)
  à AlbumArtDownloader.App.Main(String[] args)

any idea ? I can't use the app atm...it crashes all the time

Album Art Downloader XUI

Reply #2487
any idea ? I can't use the app atm...it crashes all the time

Hmm. Nothing in that I can really work off, it's all in the WPF rendering code, not under my direct control. I was hoping it might indicate somewhere there was a leak, or be trying to do something weird that made it request an infinitely sized bitmap or something, but it doesn't look like it.

So I guess my best suggestion would be to do your automatic downloading in smaller chunks. Rather than send all your albums to the automatic downloader in one go, just select a couple of hundred or so and see how it gets on. Unless there's a leak somewhere, closing the automatic downloader window ought to release the memory it was using, so you wouldn't need to exit and re-load AAD for the next batch, just close the automatic downloader window before starting the next lot.

Alex

Album Art Downloader XUI

Reply #2488
Is there a problem with googleimage plugin?
Every other plugin finishes the search and the Google image progress bar keeps going.

Album Art Downloader XUI

Reply #2489
Is there a problem with googleimage plugin?

GoogleImage v0.15 is working fine for me. Perhaps you've been throttled by Google? They do try and detect automated usage, so if you're doing a lot of consecutive, or worse, simultaneous, searches with it, they might decide to throttle or temporarily block you.

Alex

Album Art Downloader XUI

Reply #2490
Hi Alex,

Just one little question as I still encounter crashes.
Did anyone already manage to port the app to osx ? Using winebottler or anything ?
I tried to make an executable .app but it crashes without even showing the start screen...any idea how I could proceed ?
Seeing the app running under osx would be such a great thing with all people that uses osx nowadays.

Thanks for the great support !

Album Art Downloader XUI

Reply #2491
Did anyone already manage to port the app to osx ? Using winebottler or anything ?
Not that I'm aware of. I know it won't run under Mono, because Mono doesn't support WPF. If anyone has or is working on a port, then they haven't mentioned it to me. I personally will not be going anywhere near OSX and have no interest in running that at all. I'd have more sympathy with porting it to Linux if it could be tweaked into running on Mono, but from what I can tell it would involve a re-write of the whole GUI, so I'm not going to do that.

Alex

Album Art Downloader XUI

Reply #2492
Hi Alex,

As specified, Linux port would be dope...and especially a command line tool.
I really have too much albums to be able to select each cover one by one. I prefer to let the "most trustable" album services sort out what the cover is...then, if I play the album and see it is not the correct match, I can still change it manually from within my madsonic / subsonic player interface.
The perfect tools would in my point of view point to a folder, scan it recursively, check for all the folders that do not contain an artwork, and do the job that aad does, directly from the command line.
This would permit to run it using a cron job, like, lets say, every night at 2am...
Actually there is already a tool that works pretty well that does that (called cover grabber: http://sourceforge.net/projects/covergrabber/  ) but it seems the development of the tool is slow, and it only supports lastFM...I do not know if it would be easy to implement other artwork provider easily to this piece of software...

I will try to contact cover grabber dev...and let you know what comes out of it ! 
For now, I give up scanning my albums 400 per 400...I will never finish the task this way unfortunately. Very disapointed because to be honest aad is really the most reliable and complete artowrk downloader around (and I can tell you i've tried a LOT of softs running under osx, linux and win...)

Album Art Downloader XUI

Reply #2493
Yep, I think you're right, the best approach would probably be to start with something native that can already do cover downloading, then add support for executing AAD scripts to it. AAD scripts are all written in boo, which will certainly run on Mono under Linux, and presumably OSX too. If anyone does decide to pick this up I'd be happy to provide any tips and information about how scripts are executed by AAD.

Alex

Album Art Downloader XUI

Reply #2494
actually, cover grabber is a pure python application. The grabbing scripts seems to be pretty "standard" (I am not a developer but reading the code of the lastfm_plugin.py file seemed clear :

import urllib
try:
    import xml.etree.cElementTree as ETree
except:
    import xml.etree.ElementTree as ETree

from cover_grabber.logging.config import logger


class LastFMDownloader(object):
    def __init__(self, album_name, artist_name):
        """ Initializes LastFM Downloader """

        self.LASTFM_API_KEY = "XXXXXXXXXXXXXXXXXXXXXXXX" # Please use your OWN LastFM API key
        self.LASTFM_URL = "http://ws.audioscrobbler.com/2.0/?method=album.search&album={album_name}&api_key=" + self.LASTFM_API_KEY
        self.album_name = album_name
        self.artist_name = artist_name
        self.url = self.format_url()

    def format_url(self):
        """ Sanitize and format URL for Last FM search """
        return self.LASTFM_URL.format(album_name=self.album_name.encode('utf8'))


    def search_for_image(self):
        """ Use LastFM's API to obtain a URL for the album cover art """
       
        logger.info(u'LastFM: Searching for "{artist_name} - {album_name}"'.format(artist_name=self.artist_name, album_name=self.album_name))
        response = urllib.urlopen(self.url).read() # Send HTTP request to LastFM
        xml_data = ETree.fromstring(response) # Read in XML data

        for element in xml_data.getiterator("album"):
            if (element.find('artist').text.lower() == self.artist_name.lower().encode("utf-8")):
                for elmnt in element.findall('image'):
                    if (elmnt.attrib['size'] == 'extralarge'):
                        url = elmnt.text
                        if url:
                            return url
                        else:
                            return None

any chance to get your own plugins to work with this kind of structure ?

Album Art Downloader XUI

Reply #2495
any chance to get your own plugins to work with this kind of structure ?
Not automatically. Someone would need to re-write them in python, and that certainly won't be me. I think a better approach would be to try and get python to compile as they are (in boo) and load the resulting managed assembly from python. A cursory glance suggests http://pythonnet.sourceforge.net/ might be able to do this, but I don't know enough (well, any, really) python to know for sure.

Alex

Album Art Downloader XUI

Reply #2496
mea, I am a Linux user, and have developed a cover art downloader in pure Python that may interest you.

It's a bit different from AAD, in that it's not interactive at all (by design), it tries its best to find the relevant image for a query (album, artist, cover size) in a fully automated way.

Features :
  • Currently supports 3 cover sources: Last.fm, Google Images and ecover.to (I have not found the need to add new sources with my library)
  • When the size of an image reported by a source is not reliable (ie. Google Images), automatically download the first kb of the file to get the real size
  • When a cover is found on a highly reliable source (ie. Last.fm), but at a size that is too small, automatically try to pin similar looking covers in other sources by doing simple pattern recognition (this one is a recent addition, but it's impressively efficient at removing irrelevant images)
  • Automatically crunch images with optipng or jpegoptim (can save 30% of filesize without any loss of quality, great for portable players)
  • Cache search results locally for faster future search
  • Does everything to avoid getting blocked by the sources: hides user-agent and automatically takes care of rate limiting
  • Automatically convert/resize image if needed
  • It's already pretty fast, but I plan to parallelize some network bound processing to speed it up even more
  • Easily expandable to support additional sources if you speak Python (just inherit a class, and register it)


It follows the Unix philosophy : "do one thing and do it well", so the script itself does not recurse on your music library. I am using another script (~100 lines of Bash) to parse my library, find albums without covers and call the album art downloader for each missing cover.

I am using it for my personal use for more than 2 years, it has evolved a lot and now it's pretty mature. They are still things that needs to be cleaned up (ie: dependency on GraphicsMagick executables, Python packaging), but that affects mainly portability.

I plan to release it on Github when I have fixed those issues (probably in a few weeks). PM me if you are interested for some testing.
Opus 96 kb/s (Android) / Vorbis -q5 (PC) / WavPack -hhx6m (Archive)

Album Art Downloader XUI

Reply #2497
Hey dutch !

You piece of software obviously interests me ! 
Can I give it a try ? Just have to re-port python and it will run ?
Do you have a man or integrated parameters help or can you provide me a way to run it the right way ?
And could you eventually tell me how I can make it work recursively ? (I have a shitload of subfolders, all contained on two hdds...I humanly can't scan every single folder one by one.)

Let me know!

anyway the features you listed sounds really promising. and I think we are missing such a cli unix tool !

Album Art Downloader XUI

Reply #2498
You piece of software obviously interests me ! 
Can I give it a try ? Just have to re-port python and it will run ?

The portability issues currently prevent a clean Python package install (with pip, setuptools or easy_install), but everything should work if you install manually the dependencies and put the needed files in the same directory.

Do you have a man or integrated parameters help or can you provide me a way to run it the right way ?

I use argparse, so getting help is a matter of typing '-h' in a prompt.

And could you eventually tell me how I can make it work recursively ? (I have a shitload of subfolders, all contained on two hdds...I humanly can't scan every single folder one by one.)

Let me know!

anyway the features you listed sounds really promising. and I think we are missing such a cli unix tool !

It's cool if it can be useful to other people

Anyway let's avoid polluting this topic with stuff that is not about AAD (which is awesome by the way), and use private messages instead.
Opus 96 kb/s (Android) / Vorbis -q5 (PC) / WavPack -hhx6m (Archive)

Album Art Downloader XUI

Reply #2499
I'm seeing something odd w/ the google image search script. Up above someone stated it might be some sort of hammer protection on google's side. While a good guess, testing seems to dictate otherwise. Google Image script will continuously fail on the same song over and over again - despite the results existing from a regular google image search. And while it will consistently fail (in a timed out fashion) on these songs, it will turn around and find hits for other songs without any issue.

I should note, however, that google image is not instantly failing w/ 0 hits, but instead timing out as it sits there w/ a progress bar. Very odd.