how to change the background image based on the node (the hard way)
The simplest (not necessarily the cleanest) way to do this is:

function mytheme_preprocess_page(&amp;$vars) {
  $node = menu_get_object();
  if ($node-&gt;nid) {
    // We're on a node page
    if (isset($node-&gt;field_background_image[$node-&gt;language][0]['fid'])) {
      // Load the file object
      $file = file_load($node-&gt;field_background_image[$node-&gt;language][0]['fid']);

      // Get a web accessible URL for the image
      $path = file_create_url($file-&gt;uri);

      // Add the background to an inline CSS tag
      drupal_add_css('body { background:url(' . $path . ') left top no-repeat !important; }', 'inline');
    }
  }
}