SonyEricsson/Theme Files

SonyEricsson phones (most notably the T610, K700, the Z1010 and V800) support theme (.thm) files that allow you to re-skin a number of aspects of the phone - all sorts of backgrounds, text and control colors and the occasional highlight image.

Update: This page has been rendered largely obsolete by the recent release of updated Windows and Mac OS X versions of the Sony Ericsson Theme Creator. Nevertheless, the information below may be of use to someone. The latest known theme file version is 4.0.

What You Can't Do

Operator-branded or generic items (like the main menu icons and some softkey images) are not affected by theming. Those are stored (and overidden) in the phone's firmware.

Theme File Structure and Handling

Theme files are nothing but standard UNIX .tar files that contain an XML description of the theme and all the associated JPEG or PNG images. So essentially, to look at a theme, you just:

$ tar -xvf theme.thm

...and to re-pack one (I usually work inside a directory containing all the images and create the theme file one level above) you just do:

$ tar -cvf ../theme.thm *.*

File names are irrelevant, as far as I've established. The phone will simply pick up the first XML file inside the tar archive and reference the images from that.

Version 3.0 Theme

Here is a sample XML file taken from a Z1010 theme (it's the base skeleton I'm using for a Mac OS X theme I'm creating for it):

$ cat theme.xml

<?xml version="1.0"?>
<Sony_Ericsson_theme version="3.0">
<Background Color="0xffffff"/>
<Background_image Source="background_image.jpg"/>
<Desktop Color="0xffffff"/>
<Desktop_image Source="desktop_image.png"/>
<Desktop_title_text Color="0x000000"/>
<Highlight_text Color="0x000000"/>
<Highlight Color="0x666666"/>
<Highlight_image Source="highlight_image.png"/>
<Highlight_small_image Source="highlight_small_image.png"/>
<Popup_text Color="0x000000"/>
<Popup Color="0xffffff"/>
<Popup_frame Color="0x4f4f4f"/>
<Popup_highlight_text Color="0x000000"/>
<Popup_highlight Color="0xffffff"/>
<Popup_highlight_image Source="popup_highlight.png"/>
<Popup_scrollbar_background Color="0xc0c0c0"/>
<Popup_scrollbar_slider Color="0x585858"/>
<Popup_title_text Color="0x000000"/>
<Popup_title Color="0xc0c0c0"/>
<Popup_title_image Source="popup_title_image.jpg"/>
<Scrollbar_background Color="0xc0c0c0"/>
<Scrollbar_slider Color="0x585858"/>
<Softkeys_text Color="0xffffff"/>
<Softkeys Color="0xbcbcbc"/>
<Softkeys_image Source="softkey.png"/>
<Standby_image Source="standby_image.png"/>
<Standby_operatorname_text Color="0x000000"/>
<Standby_operatorname_outline Color="0xffffff"/>
<Standby_softkey_image Source="standby_softkey.png"/>
<Standby_time Color="0x000000"/>
<Standby_time_outline Color="0xffffff"/>
<Tab_text Color="0xffffff"/>
<Tab Color="0xdadada"/>
<Tab_image Source="tab_image.png"/>
<Tab_selected_image Source="tab_selected_image.png"/>
<Tab_unselected_image Source="tab_unselected_image.png"/>
<Text Color="0x000000"/>
<Title_image Source="title_image.png"/>
<Title_small_image Source="title_small_image.png"/>
<Title_text Color="0xffffff"/>
<Title Color="0xc0c0c0"/>
<Wapbrowser_underline Color="0x808080"/>
<Wapbrowser_tableborder Color="0x808080"/>
</Sony_Ericsson_theme>

Version 3.1 Theme

This is the structure of a V800 theme. Note the new version number (3.1) and the new attributes for the external screen. Image dimensions are indicated inline:

<?xml version="1.0"?>
<Sony_Ericsson_theme version="3.1">
<Background Color="0xrrggbb">
<Background_image Source="176x142.png">
<Desktop Color="0xrrggbb">
<Desktop_image Source="176x182.png">
<Desktop_title_text Color="0xrrggbb">
<Highlight_text Color="0xrrggbb">
<Highlight Color="0xrrggbb">
<Highlight_image Source="170x50.png">
<Highlight_small_image Source="170x28.png">
<Popup_text Color="0xrrggbb">
<Popup Color="0xrrggbb">
<Popup_frame Color="0xrrggbb">
<Popup_highlight_text Color="0xrrggbb">
<Popup_highlight Color="0xrrggbb">
<Popup_highlight_image Source="144x28.png">
<Popup_image Source="150x150.png">
<Popup_scrollbar_background Color="0xrrggbb">
<Popup_scrollbar_slider Color="0xrrggbb">
<Popup_title_text Color="0xrrggbb">
<Popup_title Color="0xrrggbb">
<Popup_title_image Source="150x32.png">
<Scrollbar_background Color="0xrrggbb">
<Scrollbar_slider Color="0xrrggbb">
<Second_display_background Source="80x101.png">
<Second_display_background Color="0xrrggbb">
<Second_display_operator_text Color="0xrrggbb">
<Second_display_operator_text_outline Color="0xrrggbb">
<Second_display_text Color="0xrrggbb">
<Second_display_time_text Color="0xrrggbb">
<Second_display_time_text_outline Color="0xrrggbb">
<Softkeys_text Color="0xrrggbb">
<Softkeys Color="0xrrggbb">
<Softkeys_image Source="176x22.png">
<Standby_image Source="176x182.gif">
<Standby_operatorname_text Color="0xrrggbb">
<Standby_operatorname_outline Color="0xrrggbb">
<Standby_softkey_image Source="176x22.png">
<Standby_statusbar_image Source="176x16.png">
<Standby_time Color="0xrrggbb">
<Standby_time_outline Color="0xrrggbb">
<Statusbar_image Source="176x16.png">
<Tab_text Color="0xrrggbb">
<Tab Color="0xrrggbb">
<Tab_image Source="176x40.png">
<Tab_selected_image Source="31x22.png">
<Tab_unselected_image Source="31x20.png">
<Text Color="0xrrggbb">
<Title_image Source="176x40.png">
<Title_small_image Source="176x19.png">
<Title_text Color="0xrrggbb">
<Title Color="0xrrggbb">
<Wapbrowser_underline Color="0xrrggbb">
<Wapbrowser_tableborder Color="0xrrggbb">
</Sony_Ericsson_theme>

Version 3.2 Theme

The V800 also supports an "Organic" animation (little translucent balls that follow the cursor), which are present in version 3.2 themes (one wonders why they don't use Flash or SVG for theming yet). There is also a Ring_signal attribute, which I never noticed before (it might have been there on other phones):

<?xml version="1.0"?>
<Sony_Ericsson_theme version="3.2">
 <Popup_title_image Source="150x32.png">
 <Popup_highlight_image Source="144x28.png">
 <Popup_image Source="150x150.png">
 <Tab_image Source="176x40.png">
 <Tab_selected_image Source="31x22.png">
 <Tab_unselected_image Source="31x20.png">
 <Title_image Source="176x40.png">
 <Title_small_image Source="176x19.png">
 <Softkeys_image Source="176x22.png">
 <Highlight_image Source="170x50.png">
 <Highlight_small_image Source="170x28.png">
 <Ring_signal Source="ring.midi">

<!-- Animation -->
 <Organic_background Color="0xrrggbb">
 <Organic_foreground Color="0xrrggbb">

 <Standby_operatorname_text Color="0xrrggbb">
 <Standby_operatorname_outline Color="0xrrggbb">
 <Standby_time Color="0xrrggbb">
 <Standby_time_outline Color="0xrrggbb">
 <Desktop_title_text Color="0xrrggbb">
 <Softkeys Color="0xrrggbb">
 <Softkeys_text Color="0xrrggbb">
 <Title Color="0xrrggbb">
 <Title_text Color="0xrrggbb">
 <Text Color="0xrrggbb">
 <Highlight Color="0xrrggbb">
 <Highlight_text Color="0xrrggbb">
 <Scrollbar_background Color="0xrrggbb">
 <Scrollbar_slider Color="0xrrggbb">
 <Popup_title Color="0xrrggbb">
 <Popup_title_text Color="0xrrggbb">
 <Popup Color="0xrrggbb">
 <Popup_text Color="0xrrggbb">
 <Popup_highlight Color="0xrrggbb">
 <Popup_highlight_text Color="0xrrggbb">
 <Popup_scrollbar_background Color="0xrrggbb">
 <Popup_scrollbar_slider Color="0xrrggbb">
 <Popup_frame Color="0xrrggbb">
 <Tab Color="0xrrggbb">
 <Tab_text Color="0xrrggbb">
 <Second_display_background Color="0xrrggbb">
 <Second_display_text Color="0xrrggbb">
 <Second_display_operator_text Color="0xrrggbb">
 <Second_display_operator_text_outline Color="0xrrggbb">
 <Second_display_time_text Color="0xrrggbb">
 <Second_display_time_text_outline Color="0xrrggbb">
 <Wapbrowser_underline Color="0xrrggbb">
 <Wapbrowser_tableborder Color="0xrrggbb">
</Sony_Ericsson_theme>

Utilities

The dump above was generated by the following Perl script, which may be of use for future phones:

#!/usr/bin/perl

while(<>) {
  if( /^(.+)Source="(.+)\.(.+)"/ ) {
    # this uses ImageMagick's identify and head to grab the size of
    # each image (or the first frame of animated GIFs)
    $line = `identify -verbose '$2.$3' | grep Geometry | head -1`;
    chomp( $line );
    ($dummy, $size) = split( /: /, $line );
    print "$1Source=\"$size.$3\">\n";
  }
  elsif( /^(.+)Color="(.+)"/ ) {
    print "$1Color=\"0xrrggbb\">\n";
  }
  else {
    chomp();
    print "$_\n";
  }
}

Final Notes

Image sizes and formats vary, but I've already established that both the Z1010 and the V800 support 32-bit PNG images - which means creative people can use transparency to create some pretty cool effects.