WDTV OSD: How to make a custom theme

In the following tutorial I’ll describe two methods to customize the WDTV’s OSD. This guide will just cover the basics, and details two methods to compile your theme. Method #1 entails providing all of the osd xml files and images, and is flexible enough to allow full customization using custom binaries. Method #2 is suitable for small themes where mainly just the xml files have been changed. If you use method #1 you’ll be required to keep the device containing the *.osd.bin file attached, as with many app.bin’s. Method #2 loads the provided files into memory and cleans up after itself, so once your wdtv has booted you may remove the device containing the theme and the theme will persist until the next time your wdtv is fully shut down / power cycled. In order to take advantage of this tutorial you’ll need to be running either WDLXTV or ext3-boot, and have access to a Linux computer or Linux filesystem tools.

Method #1 – Full theming via *.osd.bin

Step 1
Download the full stock theme.

cd /tmp
slimrat http://rapidshare.com/files/232291968/stock.osd-0.3.bin

Step 2
Rename it something unique and mount it somewhere.

# mv /tmp/stock.osd-0.3.bin /tmp/farscape.osd.bin
# mkdir /tmp/osd
# mount -o loop /tmp/farscape.osd.bin /tmp/osd

Note the directory contains *every* file from the original osd directory.

Step 3
Now lets change around some osd files and exchange out some images.

First I’ll take care of the images. Most of the images I’m using were provided by Farscape for a theme he made a while back. The red WDLXTV logo was made by Pennhaven to match Farcapes red color scheme. Thanks to Farscape & Pennhaven for the graphics!

I’ll take the group of images and overwrite the original OSD images.

# cp /tmp/farscape/osd/images/* /tmp/osd/image
# cp /tmp/pennhaven/welcome_logo.png /tmp/osd/image

Step 4
That was easy. Now lets modify the xml files to change the text from light blue to a darker red :)

We need to edit the following files:

  • audio_run.xml
  • basic_browse_thumb_video.xml
  • basic_browse_thumb_video.4.xml
  • basic_browse_thumb_video.8xml
  • basic_browse_thumb.xml
  • basic_browse.xml
  • basic_browse.4.xml
  • basic_browse.6.xml
  • chapter_list.xml
  • home.xml
  • inc_messagebox.xml
  • inc_thumb_browse.xml
  • inc_video_thumb_browse.xml
  • inc_video_thumb_browse.4.xml
  • inc_video_thumb_browse.8.xml
  • ip-about.asp
  • ip-welcome.asp
  • picture_run.xml
  • search_media_type.xml
  • search_result.xml
  • search_string.xml
  • search_target_type.xml
  • search_type.xml
  • setup_about.xml
  • setup_entry_basic.xml
  • setup_entry_item_basic.xml
  • setup_reset.xml
  • welcome.xml

This is a fairly inclusive theme, at a minimum you’ll usually want to edit at least the following:

  • basic_browse_thumb_video.xml
  • basic_browse_thumb_video.4.xml
  • basic_browse_thumb_video.8xml
  • basic_browse_thumb.xml
  • basic_browse.xml
  • basic_browse.4.xml
  • basic_browse.6.xml
  • home.xml
  • inc_thumb_browse.xml
  • inc_video_thumb_browse.xml
  • inc_video_thumb_browse.4.xml
  • inc_video_thumb_browse.8.xml

The parts we want to change look as follows:

<text text="Loading WDLXTV firmware..." x="320" y="420" w="680" h="38" fontsize="36" textcolor="0xFFFFFF" align="hcenter"/>
<text text="@@VERT_TITLE_TEXT_2" x="583" y="519" w="623" h="84" align="right" fontsize="76" textcolor="0x07B5FF"/>

The color codes 0xFFFFFF and 0x07B5FF are for white and baby blue respectively. We need to change all occurrences to 0xD70000, like below.

<text text="Loading WDLXTV firmware..." x="320" y="420" w="680" h="38" fontsize="36" textcolor="0xD70000" align="hcenter"/>
<text text="@@VERT_TITLE_TEXT_2" x="583" y="519" w="623" h="84" align="right" fontsize="76" textcolor="0xD70000"/>

I’ll use sed to edit all the files quickly.

# cd /tmp/osd
# sed -i -e 's/0xFFFFFF/0xD70000/i' -e 's/0x07B5FF/0xD70000/i' \
audio_run.xml basic_browse_thumb* basic_browse.* chapter_list.xml \
home.xml inc_messagebox.xml inc_thumb_browse.xml \
inc_video_thumb_browse.* ip-about.asp ip-welcome.asp \
picture_run.xml search_* setup_about.xml setup_entry* \
setup_reset.xml welcome.xml

Step 5
Now that we've changed the xml files we're basically done, all we have to do is umount our theme and copy farscape.osd.bin over to the root of a device and boot our WDTV with it connected.

# umount /tmp/osd
# cp /tmp/farscape.osd.bin /media/memstick

Does it work?
Yes, nice :)

Final product:
** farscape.osd.bin-0.1 **

Advanced features
So the changes I just made were fairly minor and it almost seems like providing the full overlay is overkill...well it is and thats what method #2 is for, but there are a few additional features you should be aware of with method #1. You may provide the following in the root of your *.osd.bin:

  • etc/init.d/SXX startup scripts which will be executed when the system starts up, with the rest of the init.d scripts.

  • additional binaries in directory bin/ to perform custom operations, they'll be added to PATH for system wide use.
  • addtional libraries in directory lib/ to support the binaries you provide in bin/.

Therefore you have a great amount of flexibility when creating an osd overlay of this type, there aren't many limitations. There is a developer currently working on a full OSD replacement using a php fuse filesystem, which could even be implemented using this method.

Now onto something more lightweight...

Method #2 - Selective theming with an app.bin

Ok, onto method #2. Selective theming is a bit different from full theming. Whereas in a full theme we must provide all of the OSD files, here we're just going to provide the files that we've changed. For many themes this will only entail 10-12 xml files and a handful of small images. The average theme will therefore only be ~1MB max, including all the images, which makes it a good candidate to load directly into memory. Loading a theme directly into memory allows us the luxury of removing the device containing the app.bin that we'll produce after the WDTV has booted. Once the theme has been loaded into memory the theme will persist until the WDTV has been completely shut down (aka no power) or its power cycled / rebooted.

Step 1
Download the selective-theme-skeleton app.bin I've provided and rename it something unique.

# cd /tmp
# slimrat http://rapidshare.com/files/232296608/selective-theme.skeleton.app.bin
# mv selective-theme-skeleton.app.bin farscape.app.bin

selective-theme-skeleton.app.bin is a skeleton template, it lacks any OSD xml files or images. What it includes is the osd directory structure and the necessary script to load the theme into memory. All you have to do is provide the xml & images and automagic theme!

Step 2
Mount farscape.app.bin (renamed selective-theme-skeleton) someplace.

# mkdir /tmp/selective-theme
# mount -o loop /tmp/farscape.app.bin \ /tmp/selective-theme

Step 3
Copy the xml files and images that make up your theme into the directory where you've mounted the app.bin. I'll use all of the xml files & images I produced for method #1.

# cd /tmp/osd
# cp audio_run.* basic_browse_thumb.* basic_browse.* chapter_list.xml \ home.xml inc_messagebox.xml inc_thumb_browse.xml inc_video_thumb.* \ ip-about.asp ip-welcome.asp picture_run.xml search_* setup_about.xml \ setup_entry* setup_reset.xml welcome.xml /tmp/selective-theme/osd
# cp /tmp/farscape/osd/image/* /tmp/selective-theme/osd/image

Step 4
Unmount the app.bin, copy it to the root of a device and boot your wdtv with the device attached.

# umount /tmp/selective-theme
# cp /tmp/farscape.app.bin /media/memstick

Does it work?
farscape.app.bin theme

Similar result (i didn't include all the images) as method #1, but now we may remove the device containing the app.bin without any detrimental affect :)

Final product:
** farscape.app.bin-0.1 **

End Notes

Go out and make some themes or complete OSD replacement for that matter, then post them in the theming thread at wdtvforum.

In review:

  • *.osd.bin - full OSD overlay with ability to supply additional binaries, libraries, & modules.

  • *.app.bin - selective theming; only replace modified xml/images, loads into memory, persists while wdtv is on, app.bin only required at boot.

May 13th, 2009 02:52

Wow, incredible work b-rad!

I will try it, thank you very much!

May 13th, 2009 10:44

Thanks for the tut B!

One question, once we start making our own themes can we share them with others simply by posting our .osd.bin’s?

<<< edit: of course :-D –b-rad >>>

May 20th, 2009 10:03

by executing the instruction I get the following error message. What am I doing wrong?

# mount -o loop /tmp/farscape.osd.bin /tmp/osd
NTFS signature is missing.
Failed to mount ‘/dev/loop6′: Invalid argument
The device ‘/dev/loop6′ doesn’t seem to have a valid NTFS.
Maybe the wrong device is used? Or the whole disk instead of a
partition (e.g. /dev/sda, not /dev/sda1)? Or the other way around?

<<< edit: those are meaningless errors printed as the kernel tries each filesystem until it finds the correct one…its really mounted ;) –b-rad >>>

June 2nd, 2009 20:49

I’ve been trying to open the .bin files to edit them but i can’t fig out how to get in them…I’ve tried it in xp and in linux…please help me

<<< edit: they are writeable ext3 filesystem images. just mount them somewhere on the command line using the loopback devices, like such:

mount -o loop <someimage.bin> <some.location>


Mr Lazy
June 16th, 2009 04:45

Is there an error in step 2? In step 1 you rename the app.bin to farscape, but in step 2 you still reference the original filename.

<<< edit: corrected it, cheers. –b-rad >>>

October 6th, 2009 02:13

Please b-rad, Could you recomended a good xml editor???

I would seeing the result of the edit before to put inside of the wdtv!!!


October 6th, 2009 05:50

Hello, I am having troubles making it to work properly… All I wanted to do, was to change the background to the “wood” one, and exchange french language file to mine native. I can do this from FTP level, but with every restart, it gets back to default – so I thought I may create additional app pack, containing those two modifications.

I went with #2, homever, I got the same error message as @mart – and I am not sure it gets mounted, since I can’t umount it afterwards.

#1 went smooth (though indeed it is overkill), I was able to change the background, and language files… homever, all that gets loaded with the newest WDlxTV is language – the background stays the same. To make sure I didn’t screw up, I loaded farscape theme 0.1, posted after #1, and the background stays the same (colors apparently changed). Then I found out that in S00custom-options there is a line for custom backgrounds, but uncommenting it didn’t work. I thought, that maybe event-osd screws it up, but it wasn’t it – it’s the same without it… any ideas?

<<< edit: Theres a hidden feature dealing with languages. If exists custom-language.01.mo, custom-language.03.mo, custom-language.03.mo, or custom-language.04.mo on a device at boot it will replace (respectively) chinese traditional, chinese simplified, korean, or japanese. As for custom welcome_background, well if you use a theme it’ll mess up supplying a custom background on a boot device, as themes will overwrite it. I’ve just tested out placing a custom welcome_background_bg.jpg on a boot device for boot-time replacement and it still works as it should. –b-rad >>>

October 6th, 2009 06:43

Well, adding line to s00custom-options copying the background from /opt/my to osd/image did the trick. Changing the language that way does not work, so I guess I will use both custom theme, and background being copied from opt/my, unless until I figure our better way.

November 5th, 2009 16:16

Great tutorial, but I got a problem. I am trying to get the “lilibabe.osd” onto your latest release but it does not seem to be working. I put it onto the root of my memory stick. What am I doing wrong?

<<< edit: with so few details, no clue. If you’re trying to load lilibabe on wdlxtv-live it won’t happen. If you’re trying on the original place it on a flash device, might have better luck. Otherwise ask in the forums. –b-rad >>>

December 6th, 2009 20:46

wow do I feel dum when I read some of these posts
I Wish that some body would provide a service for a fee, I send you my unit tell you what I want and pay you for your beautiful god given talent!!!!

<<< edit: Depending on what you’re looking for i do ;) –b-rad >>>

January 13th, 2010 05:59

i saw in the forums that some people had success to some extent with manually installing files and renaming the necesaary ones for lilibabe, b-rad have you tried this would love to hear your view on getting it to work.

March 23rd, 2010 01:38

Hi b-rad,

I was just wondering – does this mechanism work for modifying one of your firmware files as well? i.e. can I mount wdtvlive.bin, modify OSD files inside it and expect a “permanent” OSD change?


<<< absolutely not, the filesystem is read only NAND flash. –b-rad >>>

May 13th, 2010 23:30

Hi b-rad,

I tried to change just the welcome.xml and welcome_logo.png with the originals by using second method you mentioned. But they weren’t changed even I didn’t get any error. Do you have any suggestion ?

<<< edit: I suggest asking at forum.wdlxtv.com. –b-rad >>>

June 23rd, 2010 14:40

Hy b-rad,

greate guide. Thanks a lot.
I have a problem when I copy the farscape.osd.bin on a usbdriver a connect it to my wdtvlive. I only see the loadingscreen. The process dosen’t contiue. What did’t I wrong ?
I have the same problem when I change the backgroudimage myself.

Thanks for the help.

<<< edit: No clue without any details. Go to forum.wdlxtv.com and ask there. –b-rad >>>

August 5th, 2010 09:08

Hi BR,

Sorry if this a stupid question, but Im just a simple rookie in this kind of stuff: I would like to know if there existe the possibility to change the size of the subtitle under 24 (for instance 22, 20, etc.) due to in big screen can be disturbing 24 size.

On the other hand, I would like to know if this last release 1.02.21 allow to aboid the use of a Pendrive for flashing with sheets mode and finally (I mean, to avoid to modify S00custom-options and alwais use a boot-unit)

Sorry if this was explaining.

Thank you in advance for your reply,


<<< edit: You can try and supply 20 or 22 as a value, like in the other examples in S00custom-options. If it doesn’t work then I’ll add those values in a subsequent version. –b-rad >>>

September 8th, 2010 19:00

I installed the firmaware and have been using Msheets without a problem. Last night I got a red screen with the WD logo and after a few seconds I get “invalid format” error.
A few times I have removed and connected cables and somehow it worked again. Don’t know what I did. Red screen persists.
Any ideas?

<<< edit: Ask on forum.wdlxtv.com. –b-rad >>>

January 6th, 2011 20:58

B-rad, does 4.3.1 support the loading of app.bin files. I am trying to create a lighter version of my MovieSheets+ OSD by simply using the modified XML files\images I changed and creating a app.bin vs. the osd.bin.

I followed your APP.BIN creation instructions above using your skeleton template but the APP.BIN is not loading ( I can tell the stock XML files are still in place and my plugin can’t find the images I included in the APP.BIN).

January 7th, 2011 15:50

B-rad, I narrowed the issue down. In your script file you create a osd.mod directory. This is being created. Good so far. Then for each entry I provided in the OSD directory of the APP.BIN you copy it to osd.mod. This is also being done as I see the files. The next step is the mount -o bind of each file in this directory with the /osd directory. This doesn’t appear to be happening? If I try it manually it works. So something is failing on the mount (or is unmount’ing afterwards). Any thoughts why this is happening?

January 10th, 2011 14:26

B-rad, figured out the problem with the script you provided and corrected the issue. For some reason the very first XML file is not successfully being “mounted” with your file. So I manually mounted it (in the script) and that solved the issue.

Also you can’t mount images that don’t exist in the OSD image directory, which means you can’t add new images for theming. Figure out away around that as well.


January 20th, 2012 02:16

Link for selective-theme.skeleton.app.bin from method 2 is no longer avilable.
Can You post it again?
Is it compatible with newest build 5.1.1?

<< edit: You should be able to find the base theme material on the forums. –brad >>