Wednesday, October 17, 2007

FlickrSave: Upload your photos to Flickr from within GIMP

Summary


FlickrSave is a GIMP plugin which adds an option to directly upload a picture to Flickr. It uses Christophe Beauregard's flickr_upload tool as a backend. The plugin supports setting title, description, tags and privacy, and works in both GIMP-2.2 and GIMP-2.4RC under Linux.

More background on the plugin can be found at the end of the post, in the "Motivation" section.

In all honesty, this is more of a ugly hack than a full-fledged plugin, but it works OK. And maybe it will inspire somebody to write a better plugin. In the meantime, please use and enjoy it!

The obligatory screenshot


FlickrSave screenshot
This shows FlickrSave in action. You can see the dialog, allowing you to choose title, description and tags for the image, and the added option in the menu.


Installing the plugin



Here are step by step installation instructions:

What you need


  • Any Unix-based OS. I have used Ubuntu, but any current distro will do. This hack won't work on Windows because there are some hardcoded paths on it (and, also, running scripts is much more awkward).

  • The GIMP (doh), with a working Gimp-Python installation. Your distro has it. I used the 2.4 release candidate, which is current in Gutsy, and have tried it with 2.2 also.

  • flickr_upload, Cristophe Beauregard's tool for uploading photos to Flickr. As of this writing, Version 1.29 is current and works perfectly with FlickrSave. (You don't need to download the file unless you are willing to install it by hand)

  • FlickrSave, the plugin and wrapper script. Grab it from Google Code. The current version is flickrsave-0.1d.

  • Firefox as a web browser and xterm for a terminal. Chances are you already have them installed. You may change the default program choice by editing the wrapper script (see below).


Step 1: Installing flickr_upload



The plugin depends on flickr_upload and, unfortunately, most distros don't package it. There are two possibilities for installing this tool. The recommended one is using CPAN, which only needs running a single command:
  • Open a terminal and run the following command (you'll need root privileges for this, either by using sudo or su:
    $ sudo perl -MCPAN -e 'install Flickr::Upload'


  • If you haven't used CPAN before, Perl will ask you whether you are ready for manual CPAN configuration:
    CPAN is the world-wide archive of perl resources. It consists of about
    100 sites that all replicate the same contents all around the globe.
    Many countries have at least one CPAN site already. The resources
    found on CPAN are easily accessible with the CPAN.pm module. If you
    want to use CPAN.pm, you have to configure it properly.

    If you do not want to enter a dialog now, you can answer 'no' to this
    question and I'll try to autoconfigure. (Note: you can revisit this
    dialog anytime later by typing 'o conf init' at the cpan prompt.)

    Are you ready for manual configuration? [yes] _

    I recommend typing no and pressing Enter. CPAN will then use its default setup, which is sensible enough for most situations.

  • CPAN will then begin working, downloading files as it goes. If your system lacks a dependency of flickr_upload, it will ask you whether you want to install it. Press Enter to accept:
    ---- Unsatisfied dependencies detected during [C/CP/CPB/Flickr-Upload-1.29.tar.gz] -----
    XML::Parser::Lite::Tree
    Flickr::API
    Shall I follow them and prepend them to the queue
    of modules we are processing right now? [yes]


    You'll probably need XML::Parser::Lite::Tree and Flickr::API. In addition to that, XML::Parser::Lite::Tree depends on XML::Parser::Lite, part of SOAP:Lite. If that happens, press Enter again:
    ---- Unsatisfied dependencies detected during [I/IA/IAMCAL/XML-Parser-Lite-Tree-0.03.tar.gz] -----
    XML::Parser::Lite
    Shall I follow them and prepend them to the queue
    of modules we are processing right now? [yes]

    If you install SOAP::Lite in this way, it may want to ask you some configuration questions. Press Enter three times to accept the defaults.

  • That's it. Once the command returns, flickr_upload will be installed on your system.


If you don't want to use CPAN, you can read the manual installation instructions here. Follow the steps outlined in that post and return here once you are done.

Step 2: Authenticating flickr_upload



  • Once Flickr-Upload has been installed, you need to authenticate it. Type the following command in the terminal:
    $ flickr_upload --auth

  • flickr_upload will respond with a huge URL. You'll need to open it with a web browser. (In gnome-terminal, you can open it by right-clicking, so you can avoid the awkward copy&paste operation). This will take you to a Flickr page, where you will be asked to authorize Flickr::Upload. Accept the authorization; you may then close the browser window.

  • Return to the terminal and press Enter. Then, flickr_upload will give you an "authentication token" (a bunch of hexadecimal digits strung together). Copy the token to the clipboard.

  • Use your favourite editor to create a ~/.flickrrc file (as in gedit ~/.flickrrc, for example). You only need the following line on it:
    auth_token=<token>

    If you prefer, you may run the following command from the terminal instead:
    $ echo auth_token=<token> >> ~/.flickrrc
    In both cases, substitute <token> for the authentication token you copied to the clipboard a moment ago.

  • Flickr-Upload should now be correctly configured. You may test it by typing something like flickr_upload somefile.jpg on a terminal (provided that somefile.jpg exists). If everything is working, you should see the file appear on your Flickr photostream.


Step 3: Installing FlickrSave


Once the dependencies have been met, the actual installation of the plugin is the simplest part, so you are almost there.

FlickrSave has two parts. The wrapper, flickr_upload_gimp_helper, is a shell script which does most of the work associated with calling flickr_upload. (Incidentally, editing this script will allow you to change the chosen terminal and browser program). The GIMP plugin, flickrsave.py (for GIMP-2.4RC) or flickrsave-2.2.py (for GIMP-2.2), provides the GIMP interface. You only need to copy the files to their correct places and you'll be good to go.

  • Uncompress the flickrsave-0.1d.tar.gz file you downloaded somewhere and get into the corresponding directory:
    $ tar xvzf flickrsave-0.1d.tar.gz
    $ cd flickrsave-0.1d

  • Ensure that all scripts (flickrsave.py, flickrsave-2.2.py and flickr_upload_gimp_helper) are world executable:
    $ chmod a+rx flickr*

  • Copy flickr_upload_gimp_helper somewhere in your $PATH. The exact point does not matter; I recommend /usr/local/bin. Unless ~/bin is an option, you will need to copy the file with root privileges, either by using sudo or su.
    $ sudo cp flickr_upload_gimp_helper /usr/local/bin

  • Now for the final step (phew!), copying flickrsave.py (or flickrsave-2.2.py) to your GIMP plugin directory (note that it's NOT your script directory). There are two options:

    • Local copy (recommended): Install the plugin to your user's private plugin directory. That way you don't need root privileges and you don't mess with your main GIMP installation. For GIMP 2.4RC, the correct command is:
      $ cp flickrsave.py ~/.gimp-2.4/plug-ins
      For GIMP-2.2 and earlier, the flickrsave.py plugin won't work directly due to some incompatibilities; a working version for GIMP-2.2, flickrsave-2.2.py, is included in the package. So the correct command would be:
      $ cp flickrsave-2.2.py ~/.gimp-2.2/plug-ins

    • Global copy: Copy the plugin to your global GIMP plugin directory, which in my case is /usr/lib/gimp/2.0/plug-ins. You'll need root privileges for that. This will make it available by default to every user, although they will still need to have a correct ~/.flickrrc file for it to work (flickr_upload depends on it). For GIMP 2.4, the command is (the following should be all in a single line):
      $ sudo cp flickrsave.py /usr/lib/gimp/2.0/plug-ins

      And for GIMP 2.2:
      $ sudo cp flickrsave-2.2.py /usr/lib/gimp/2.0/plug-ins


  • That's all! The plugin is now fully installed.

Usage


Not much to say here. Right click on your image and choose File, or use File from the drop-down menu. The very last option is "Save to Flickr..." Choose it and a dialog will pop up asking you for the image title, description, tags and desired privacy settings. Click Accept and the plugin will do its bidding automatically. A terminal window will pop up briefly as the image is uploaded, and, if everything goes well, the Flickr photo edit page will be opened on Firefox once it is available in your photostream.

Motivation


I love taking lots of photographs, up to the point that it has become somewhat of an obsession. It's only fitting, then, than from the moment I signed up for a pro Flickr account, I never looked back. In addition to having almost 10,000 pictures uploaded (and counting), I find myself more and more involved in the community. In particular, I'm very active in A3B, a challenge-style group where I am a moderator and enthusiastic participant.

As you can guess from the number of pictures, I use Flickr for archival purposes, not as a showcase. I upload the raw pictures as they come out from the camera. Occasionally, be it as a reply to a challenge or just because I feel like it, I download a picture, retouch it and re-upload it in its newly found glory. (I have a whole bunch of photos I took from the Sears Tower on a very foggy day; they are very bland, but I recently discovered that, with some tricks, you can get gorgeous B&W pictures out of them, and I'm busy with that at the moment).

I love GNU/Linux, so the natural option for photo retouching is GIMP. However, a big pet peeve of mine was the fact that the integration between GIMP and Flickr is nil. At least, you can use the "Open Location..." option on the GIMP File menu (or the corresponding option on your browser) to save yourself the hassle of downloading the image, saving it to disk and hunting for it from within GIMP. However, there is no way you can save your images to Flickr: you have to save the image to disk and use whatever tool rows your boat to upload it. This makes the process cumbersome, to say the least.

I spent some days searching for a plugin that would add an option to GIMP to save to my Flickr account, but couldn't find any. Therefore I concocted my own solution. As I didn't have much of a clue with Python, I wrote a very simple GIMP plugin which presents an interface and invokes an external shell script which does the magic, invoking Christophe Beauregard's flickr_upload to do the hard work.

Acknowledgements


Thanks to Raphael Quinet for the CPAN suggestion.

Contact


You can reach me in andvaranaut AT gmail . com, or just leave a comment in this post. Enjoy!

Monday, October 8, 2007

Manual installation of perl_upload

These are the instructions for manually installing perl_upload. Using CPAN is much simpler and is recommended instead.

Step 1: Installing flickr_upload prerequisites


(Note: You may skip this section and go directly to "Step 2: Installing flickr_upload", below. If you run into prerequisite problems, you may return to this section then).

The flickr_upload package has a few dependencies which may not be fulfilled by default on your Perl installation. This includes Flickr::API and XML::Parser::Lite::Tree, which in turn depends on SOAP::Lite.

In Ubuntu Gutsy, you can install these modules by using the following command:
$ sudo apt-get install libxml-parser-lite-tree-perl libflickr-api-perl


If your distro does not provide these packages (as is the case, for instance, in Ubuntu Feisty), you'll have to install them manually. Follow these instructions:
  • Download the SOAP-Lite Perl module, which includes the XML::Parser::Lite class. As of this writing, the current version is SOAP-Lite-0.69.

  • Open a terminal and go wherever the file was saved. Uncompress the file you just downloaded and generate the Makefile by using the following commands:
    $ tar xvzf SOAP-Lite-0.69.tar.gz
    $ cd SOAP-Lite-0.69
    $ perl Makefile.PL


    You'll be asked for some configuration options. Just press Enter three times to accept the default values. Then use these two commands to install the module:
    $ make
    $ sudo make install

    You will need to do the installation (the very last step) as root. I used sudo, because I'm using Ubuntu; you might need to use su instead.


  • Next in line is XML::Parser::Lite::Tree, which depends on XML::Parser::Lite (which is in turn provided by SOAP-Lite, which we just installed). Download the file (the current version as of this writing is XML-Parser-Lite-Tree-0.03.tar.gz), open a terminal, go to wherever the file was downloaded and run the following commands:
    $ tar xvzf XML-Parser-Lite-Tree-0.03.tar.gz
    $ cd XML-Parser-Lite-Tree-0.03
    $ perl Makefile.PL
    $ make
    $ sudo make install


  • Finally, for Flickr::API, the procedure is exactly the same. The current version as of this writing is Flickr-API-0.08.
    $ tar xvzf Flickr-API-0.08.tar.gz
    $ cd Flickr-API-0.08
    $ perl Makefile.PL
    $ make
    $ sudo make install

That's it. Once you are done with the installation, you may remove the directories that were within the compressed files to save space.

Step 2: Installing flickr_upload


  • Save the Flickr-Upload-1.29.tar.gz file somewhere. Open a terminal, go to the directory where the file is located, and follow the instructions below:

    $ tar xvzf Flickr-Upload-1.29.tar.gz
    $ cd Flickr-Upload-1.29
    $ perl Makefile.PL

    At this point, Perl may complain that some prerequisites are not met:
    cepe@Imago:~/Flickr-Upload-1.29$ perl Makefile.PL
    Checking if your kit is complete...
    Looks good
    Warning: prerequisite Flickr::API 0.07 not found.
    Warning: prerequisite XML::Parser::Lite::Tree 0.03 not found.

    Writing Makefile for Flickr::Upload

    If that's the case, you need to follow the steps outlined in Section 1 before returning here. You have been warned ;) If not, continue reading.

  • Make and install flickr_upload by running the following commands (stilll within the Flickr-Upload-1.29 directory):
    $ make
    $ sudo make install

    You will need to do the installation (the very last step) as root. I used sudo, because I'm using Ubuntu; you might need to use su instead.


You may now continue with the instructions for FlickrSave installation.