Introduction: Centrally Controlled Digital Picture Frame
me as I explain why this one is different.
These are the features that make my frame fairly unique from other DIY frames I have seen:
- My frame runs completely from memory
- It boots from CD
- There is no hard drive and therefore operation is completely silent after initial boot
- Photos are loaded from a centralized file share (connected over Wi-Fi)
- If for any reason the file share cannot be found, a “default” set of photos will be loaded into memory from the CD
- The actual frame never needs to be touched unless powering on (you can even shut down, reboot, and change basic functionality remotely)
- You can have different “libraries” of photos and change between them from your central file share. For example, during Christmas I load a library of past and present Christmas related photos, during Birthday Parties I load photos of past parties and “Happy Birthday” banners to be shown, etc.
- Adding photos takes seconds and again, you don’t need to touch the frame
- It can load a custom designed weather page at given times during the day. I have it load and display the weather first thing in the morning and around dinner time every night. We used it to decide how to get the kids dressed for the day!
- Basic operation of the frame, including displaying websites, online photo slideshows, etc. can be changed remotely from the central file share. I change ours to show the Santa NORAD tracker from NASA every Christmas Eve. The kids really get a kick out of watching it throughout the day.
- Depending on your BIOS, the laptop can be set to automatically shutdown at night and turn back on in the morning
Step 1: Overview
Because all laptops are different and you probably won't have the exact model I'm using, the hardware section will be higher level guidance that should apply to most build scenarios.
The complexity comes in the software used to control it all. I just want to point that out because many of the existing frames on Instructables.com are more hardware than software focused. I spent many days writing scripts and tweaking the 3rd party software to get it all working just right. Hopefully the detail in this area this will save you time in the end.
Why do this?
You are probably asking yourself, is it worth the effort to do this?
The answer is: It Depends.
You can buy a digital picture frame of this size for around $120 today. Smaller frames can be as cheap as $40. That said, a frame with this kind of functionality and flexibility could easily run about $300 - $450.
So why would you want to do this?
- I don't have the money lying around, but I do have a laptop with a dead hard drive and keyboard, but perfectly good display.
- Most commercial frames available today have very limited storage. Most cameras today take very high resolution photos (resulting in very large file sizes). This means you have to worry about the number of photos that you put on your frame. You end up never updating your frame because it is a pain. I don't have these worries because photos are located on a central file server with plenty of storage.
- You need to physically "touch" the frame to update the pictures. So much for hanging it above your fireplace. With my project the photos are stored on a completely different system and are accessed via my home wireless network. How cool is that?
- You can add your own "features" over time. Want the ability to show the weather on your frame when you push a button on the side? Implement it! The options are endless if you have the time to tinker with it.
- You are creating a conversation piece! Your family and friends won't believe you were able to build one yourself (and may be slightly afraid of you at future holiday gatherings).
- It takes time. You need to enjoy doing this kind of stuff. Hacking, tinkering, whatever you want to call it.
- It's not thin or small like a commercial photo frame. If you want a small photo frame for your desk then I would suggest buying one. If you want a large one to hang on the wall in a living room or over a fireplace, this project is ideal!
- My project requires a decent amount of computer knowledge. You need to know how to setup a file share and how to deal with the occasional problems that come up related to this. You also need to know how to copy your photos off your camera, put them in a specified folder on your "central" PC, and run an update script which will update the photo frame wherever it lives in your house.
- You need more hardware than meets the eye. My project also requires a home wireless network (doesn't everyone have one by now?) and another PC to act as your centralized photo storage server.
- If you're looking for the ability to simply walk up to the frame, plug in a memory stick and view your photos with no interaction, this isn't for you. While it would be completely possible to implement such features with a bit more work, I find no personal use in doing this. My TV does that today if I want to.
Now finally..on to the build...
Step 2: Requirements
- Hardware / Materials (for frame)
- Centralized Server
- Old laptop w/power supply. Does not need working hard drive or keyboard. Requires working CD or DVD-ROM drive and ability to boot from disc (found in your BIOS).
- This build was based on an old Dell C600. It is a 750MHz Mobile Pentium III machine with 512MB of RAM and a 14.1” LCD display.
- Shadowbox Picture Frame
- This build is based on a 16” x 20” x 2” shadowbox picture frame. Mine was picked up from a local craft store for $26. I’m sure they could be found cheaper (please let me know if you find a good source online).
- White Mat Material (to match your frame)
- This build used a 16” x 20” white mat material (~$3.00)
- Wooden yard stick (or similar sized piece of wood)
- A few misc. blocks of wood (I used thick balsa wood which is super easy to cut to size)
- Hot glue gun (or hot-melt as some people call it)
- Momentary-on power switch for back of frame. Any low profile momentary-on switch will do but I used Radio Shack Model # 275-644
- Windows XP CD (or media on hard drive), ideally with latest patches and service packs installed
- BartPE (http://www.nu2.nu/pebuilder/#download)
- Various BartPE plugins (will be detailed later)
- Optional: VMWare Player or Server (both are FREE for personal use)
- I can’t recommend this enough for development of your boot CD
- It allows you to virtually test everything out before burning a CD or CD-RW. It was crucial to have this during my “trial and error” testing but may not be as important if you want to simply follow my guidance
- VMWare Player is best suited for this testing. Follow this tutorial on how to create a vmx file that will allow you to use within VMWare Player to boot CD.
- Any home PC with sufficient storage for your photos running a MS Windows OS
- This build is based on a system running Windows XP with access via a Wi-Fi network.
- Could also use any other type of dedicated networked file share. Anything that can have a drive “mapped” to a Windows UNC name (such as \\servername\folder) would work just fine.
Step 3: Where to Begin?
Option 1 - Build the Hardware
You could start by building the hardware first. This consists of dissecting the laptop and putting it in a frame. Why would you want to do this?
- There is an obvious risk that you might destroy the laptop while transforming it into a picture frame. Why continue with the software build (the most complex part) if you end up with hardware that won't work?
You could start by building (and testing) the boot CD first.
Why would you want to do this?
- You can test the frame functionality while the laptop is still together. In "laptop form", it's easier to insert the CD over and over again while testing, type on the laptop or external keyboard, etc.
- If you can't get the software to work properly, why bother with the rest of the project?
Step 4: Hardware Build - Laptop Disassembly
This will vary from laptop to laptop. For me the basics consisted of:
- The hard drive
- The keyboard
- The Motherboard "casing" (including hinges)
- The touch-pad
- Misc. panels on the bottom of the laptop (memory door, etc.)
You'll also want to temporarily remove things like the battery, CD-ROM, or other modular devices that can be re-installed later.
I personally left the laptop speakers attached as well. This is optional, but keep in mind that you could also use the frame to display video and for that you may want audio to go along with it.
Continue until all you're left with is the LCD (connected by now very fragile ribbon cables) and the motherboard.
Step 5: Hardware Build - Does It Still Work?
- Make sure you're working on a non-conductive static free surface.
- Plug in the removable CD ROM (if applicable in your machine)
- Plug in the power
- Test with a Boot CD
Step 6: Hardware Build - Assemble the Frame
Cut the Mat
Measure and cut a rectangle in center of your mat material. Be sure the metal edges of your LCD do not show through on the front of your frame (cut the mat slightly smaller than LCD size). Remember the old rule...measure twice, cut once!
Place the LCD on the mat and secure the edges using hot glue and tape. Be very careful not to use large "gobs" of hot glue. It could burn through the mat and you'll end up starting over from scratch. It's better to secure a little at a time, allowing it to cool before adding more. Add a strong tape in the flat areas just as an extra precaution. Hot glue can weaken over time with changing temperatures.
Flip MotherboardHot Glue Hot Tip - If you ever need to remove hot glue from something, use a few drops of Isopropyl Alcohol around the edges. It will quickly seep between the glue and the surface and you should be able to take the glue off in one large chunk instantly! I discovered this over 20 years ago while working at a previous job that used a lot of hot glue. If you search the net you'll find that few people have discovered this method and often resort to much more toxic chemicals for removal. (Maybe I need to create a quick Instructable video on this!).
After everything has dried and you've confirmed that the LCD has been attached correctly, re-attach the motherboard using the ribbon cable. Be very careful not to put stress on these connections. After attached, gently flip the motherboard forward to lay on top of the LCD. (see pictures below for detail).
Step 7: Hardware Build - Secure the Parts, Add Switch
Now that everything is attached to the frame we need to secure it.
I used some blocks of balsa wood, an old wooden yard stick, and some high strength Velcro. I've noted placement of these items in the image below.
It's a custom fit so this step will be different for every laptop.
Use hot glue to hold the blocks firmly in place.
Attach Velcro to the yard stick and mounting blocks as shown in the image below.
I couldn't make this permanent because I need flip the motherboard back to install or eject the CD when I want to make improvements to the core functionality or apply the latest OS service packs.
Add a Switch
This step requires a bit of careful soldering, but it's really not that difficult.
- Find the location of the previous momentary-on power switch for your laptop.
- De-solder the switch to expose the two connection points.
- Solder about 18 inches of fine gauge stranded wire (maybe 22 - 26awg) to the contact points.
- After confirming that you have a good connection, cover with hot glue to act as a strain relief.
- Extend the wire to a momentary-on switch installed on the back of your frame. Any low profile momentary on switch can be used, but I went with this one which works great: Radio Shack Model # 275-644
Finally, cut a small hole in the back of the frame for your laptop power supply cord. Depending on how you plan to mount and display your frame you may want to do this on the bottom or side instead of the back. I wanted my power cord to be invisible (going through the wall), so I went with the back of the frame.
Use any bootable CD to once again test that everything still works.
The hardware build is DONE! Time to move on to the software...
Step 8: Software Build Part 1 (Base CD)
Download Files Needed
Create a folder on your PC for all the files you're about to download. For the sake of this tutorial, I'm going with c:\bartpefiles.
Download the following files into that folder:
- Bart's PE Builder (choose the self-installing package)
(Note: As of this writing, the latest version is 3.1.10a)
- PsTools (PsTools plugin settings only)
Purpose: From the famous SysInternals author. Includes “pskill” which allows us to kill running processes. This is used frequently to shutdown apps so we can start others.
- PsTools (PsTools program files)
Purpose: These are the actual stand-alone program files required to create the plugin for PE Builder. Instructions will follow later on how to do this.
Purpose: Freeware slideshow program that we will use to display images. One of the few that works well with BartPE.
Purpose: Web browser. Personal preference over IE and some of my code is written to utilize Firefox specific features (such as full screen web page viewing). Not needed for basic photo slide show but I like to use this to display the weather and other internet pages in my frame (such as news headlines, football scores, etc.)
Get your Windows XP installation media. If you have an actual CD, put it in your drive. While not required for this build, you should have the latest XP Service Pack "slipstreamed", or incorporated into this media. Those service packs fix a lot of security holes, bugs and add minor features. It's a fairly simple but unrelated process to do this (also using PE Builder). Here is a great tutorial on how to do it with XP SP3.
1. Execute the PE Builder installer
2. Go with all the defaults except:
- I prefer to change the default install directory to “c:\pebuilder”
- Check the box to create a desktop shortcut icon. You will be using PE builder a lot as you tweak your setup. This will be handy to launch it.
Upon launching, the initial setup screen will ask if you would like to search for Windows Installation files. Select NO
4. You are now presented with the config screen (as shown in screenshot below).
Click the ellipse for "Source:" and browse and select the location of your Windows XP Install CD. (example: D:\)
Under “Media output”, select “Create ISO image”. Leave the path and filename as defaulted unless you installed PE to a different location than I mention above.
Conduct Test Build
Now we're going to conduct a quick test build just to make sure things are working.
Click “Build”. It will prompt you to create the “BartPE” directory. Select Yes. Read the Windows EULA and agree (if you do).
You will see the PEBuilder log window as it builds your CD ISO image.
When finished, you should see a message of success. If errors were encountered, the Error count will be shown at the top of the screen and your ISO image will not be created.
Click the >> or << buttons to jump to each error in the log for further analysis of the problem. All errors must be fixed before continuing. Due to the countless number of variables that could cause an error to occur, I am not going to spend time going into error details in this tutorial. Your best friend at this point should be Google for all such problems and they should be pretty easy to solve.
Step 9: Software Build Part 2 (Plugins)
- Start PE Builder
- Select "Plugins" button
- Click "Add", and browse to your Firefox cab that was downloaded (firefox-184.108.40.206-en-US.cab as of this writing)
- Rename the suggested name to simply "firefox" and click OK
- You should now see Firefox enabled and listed in the menu of plugins (shown in image below)
- While still in the "Plugins" screen, click "Add" again.
- Browse to your pstools.cab file that was downloaded.
- Leave the name of the folder called "pstools" and click OK
- You should now see PsTools enabled and listed in the menu of plugins
- Open a separate window in Explorer and extract the contents of the PsTools.zip file you downloaded earlier.
- Copy the following files into the root of your PsTools plugin directory (..\plugin\pstools\):
pdh.dll, psexec.exe, psfile.exe, psgetsid.exe, psinfo.exe, pskill.exe, pslist.exe, psloggedon.exe, psloglist.exe, pspasswd.exe, psservice.exe, psshutdown.exe, pssuspend.exe, pstools.chm
- Install the IrfanView program you downloaded (on to your PC). We will extract the stand alone executable files after installation.
- Go with the defaults except for the Google Toolbar checkbox, which you want to deselect
- Deselect the checkbox to Run IrfanView when install is complete and click Done
- Using explorer, browse to C:\Program Files\IrfanView\
- Copy i_view32.exe to ..\plugin\irfanview\files\
- Copy the attached file (i_view32.ini) to the ..\plugin\irfanview\files\ directory
- Create an empty text file called "pictureshow.txt", also within the ..\plugin\irfanview\files\ directory.
- Copy a dozen or so generic "backup" pictures to the ..\plugin\irfanview\files\ directory. These will be used for the slideshow if the frame has difficulty finding your network.
- Within PEBuilder, highlight IrfanView and click "Edit"
- Delete the line under [SourceDiskFiles] that says: files\i_view32.hlp=a,,1
- Add a line in the same location (under [SourceDiskFiles]) that says: files\i_view32.ini=a,,1
- For each photo you added, add another line using the same format: files\picturename.jpg=a,,1
- Finally, add one last line that says: files\pictureshow.txt=a,,1
- See photo below for an example of what your .inf file should now look like.
- Click File->Save, and then close the editor
- While still in the "Plugins" screen, select "IrfanView" and click the "Enable/Disable" button.
- Edit pictureshow.txt, and list the filename for every photo you just copied over (see example photo below)
- Each filename should be followed by a carriage return (Enter)
We've made quite a few changes. It's probably a good idea to click "build" now within PE Builder to test the three plug-ins you have added.
Step 10: Software Build Part 3 (Custom Scripts)
You could call this file the "heart" of the slideshow program, on the disc anyway.
In a nutshell, it does this following:
- Silently connect to local network
- Confirm network connection successful
- If successful, load slideshow batch file from remote share
- If network can't be found, load slideshow with locally stored photos
- Continually poll network share for remote reload, reboot, or shutdown commands (more on this later)
- Browse to the existing directory called "..\plugin\autorun\"
- Create a file named AutoRun9MySlideshow.cmd in this directory
(We'll edit and add to this file in the next step after our nextwork share is in place)
- Go back into PEBuilder->Plugins, and find "Startup Group"
- Click Edit
- Add the line: AutoRun9MySlideshow.cmd=2,,1 under [SourceDisksFiles]
- This line of code tells it to include this file and copy it to the System32 directory
- Click File->Save, and then exit your text editor
- Click Done
The next piece is adding a couple files so that our network connection is automatically setup upon boot-up without user interaction.
- Browse to the existing directory called "..\plugin\penetcfg\"
- Rename autorun0penetcfg.cmd to autorun8penetcfg.cmd
- Edit autorun8penetcfg.cmd using a text editor
Change the source from:
title Starting Network Support
call %SystemRoot%\system32\penetcfg.exe /UseProfile
rem call mstcp.cmd
title Starting Network Support
call %SystemRoot%\system32\penetcfg.exe /UseProfile:penetcfg-auto.ini
rem call mstcp.cmd
- Create a second file (also in ..\plugin\penetcfg\) called: PENETCFG-AUTO.INI
- Edit the file using your text editor, and add the following source:
Note that you will have to edit the above section to suite your network if you're not connecting to an open WiFi network (or physical cable connection). I opted to show a simple config, but if you're connecting to a secure network you'll have to add more parameters (search Google for PENETCFG-AUTO.INI).[General]
Dynamic IP Address (DHCP)= penetcfg-dhcp.ini
Static IP Address (Manual)= penetcfg-static.ini
Custom from A:\= a:\penetcfg.ini
Custom from C:\= c:\penetcfg.ini
- Finally, go back into PEBuilder
- Click Plugins
- Select "PENETCFG: Automatically start PE Network configurator" and click Edit
- Edit the [SourceDisksFiles] section so it includes just these two lines:
- Click File->Save, and then exit your text editor
- Click Done and Exit PE Builder for now (or conduct another quick Build Test before exiting)
Step 11: Centralized Server Setup
I'm not going to go into much detail on how to setup your fileshare. If you need help, consult Google or start with Microsoft's article here.
After you have created your file share, open the attached file called "AutoRun9MySlideshow.txt"
Add details for connecting to your file share by editing the line directly under:
"REM Attempt to connect to network share"
The syntax for connecting to your share is:
net use p: \\shareserver\sharename /USER:servername\username password
This will assign drive P to the share. You could change this but if you do you'll have to edit references to P: in the rest of the script.
When you're done editing, save the file as AutoRun9MySlideshow.cmd (note the .CMD, not .TXT) to your ..\plugin\autorun\ folder. Overwrite the temporary file we created there as a placeholder earlier.
You can now go back into PE Builder and Build your FINAL CD!
(Note: Building your CD creates a file called "pebuilder.iso" within your PEBuilder program directory (in this case, c:\pebuilder). You can now take this ISO and burn it to a CD, CD-RW, or simply mount it from VMWare Player for testing)
Now that we have the CD out of the way, on to the rest of your picture share config...
Share Configuration / Frame Control
- There are 14 files included in my "utility_scripts.zip" file below. Extract all of these files to the root of your file share.
- Created a main folder called "pics" for your pictures
- Copy i_view32.exe and i_view32.ini to the root of your share
- There are 14 files included in my "utility_scripts.zip" file below. Extract all of these files to the root of your file share.
- Copy the pictures you want in your slideshow to the ..\pics\ directory on your fileshare
- Execute "reload.cmd" from the file share system
- This is a batch file that I created to "refresh" the pictures on your share (which is required for IrfanView)
- Anytime you add or change pictures from this directory, you need to run this cmd file again
You'll notice several other .cmd batch files within the utility_scripts.zip file I provided. Here is a description of what everything does:
This is the MASTER batch file that the CD always looks for. Here you can control what the frame actually launches. Edit the batch to launch a web browser instead of the slideshow, run a local program, etc.
This batch file simple renames MySlideshow.pictures.not to MySlideShow.cmd. It's the command required to launch the basic slide show
This batch file simple renames MySlideShow.Weather.not to MySlideShow.cmd. This contains the commands required to use the picture frame to view the weather. Note that you may need to find another "full screen" weather service provider. The one shown in this script now is for example only. I created my own webpage (as seen in several of my photos) but can't give it out due to license restrictions on the weather.com API I am using. If you're interested in the source for my page (with the specifics of my Weather.com account removed), contact me directly and I will be happy to share.
This batch file renames reboot.not to reboot.txt. The CD regularly polls for reboot.txt on the share. If it is found, the frame is rebooted.
This batch file executes my "pictureupdate.vbs" script to update pictures on the share. You should run this whenever pictures are added or removed. It then renames reload.not to reload.txt. The CD regularly polls for reload.txt on the share. If found, it forces the main program to reload, without rebooting the entire system (much faster than reboot.cmd).
This batch file copies shutdown.not to shutdown.txt. The CD regularly polls for shutdown.txt on the share. If it is found, the PC is powered off (and must be turned on manually
There are several other files included that are used either by the boot CD or the batch files above. You should keep these in your fileshare root and not move or edit them.
This file is a "dummy" file used by the CD to check for a successful network connection. If it can find this file, it knows that the connection was successful.
This is really just a modified copy of MySlideShow.cmd, designed to show pictures on the photo frame (default functionality). Used by DisplayPictures.cmd.
A modified copy of MySlideShow.cmd, designed to show the weather from an external website. Used by DisplayWeather.cmd.
Just an example pictureshow.txt file that is used by IrfanView.exe. This will be overwritten the first time you run reload.cmd
The vbscript code that is used to create pictureshow.txt. Unfortunately IrfanView requires this file to exist for the slideshow to work. If it didn't, this would be a lot less complex.
Temporary blank file that is copied to reboot.txt when we want to reboot the frame
Temporary blank file that is copied to reload.cmd when we want to reload the frame main program
Temporary blank file that is copied to shutdown.txt when we want to power off the display
Step 12: Conclusion
I've been using this frame for nearly 2.5 years now with VERY good reliability. That said, there is always room for improvement. Here are some ideas....
Creating multiple photo libraries
If you want to create multiple photo "libraries" for display, simply create sub directories under the .\pics\ directory in your share.
When you want to change libraries, delete the files within .\pics\ and add photos from one of the library folders (a batch file could be created to do this very easily).
Now just run "reload.cmd" and the new photos will be displayed immediately.
It would be pretty easy to create a "control program" with a nice GUI to replace many of the included batch files (and also library management mentioned above). I've thought about doing this myself but honestly haven't needed it. The batch files have served me quite well.
Remote Photo Posting
You could easily update the main command file to display photos from one of the many photo sharing websites by launching a URL that would put you directly into a slideshow. If you're traveling and want friends or family to stay posted on your adventures, update the frame to function this way and provide them with "real time" updates from you trip on the living room wall! I've done this while on one of my business trips and the kids loved it! In addition to photos, I used Photoshop to create custom messages for them to see in the morning and it really made their day.
Thanks to alexsolex for contributing the idea of adding voice control. With this you could simply walk up to the frame and say "Weather" and have it automatically show the forecast for a minute or so before reverting back to the photo slide show. Fantastic idea and definitely do-able!
I hope you've enjoyed this Instructable! Feel free to let me know if you have any questions as you try to build one of your own!
Please vote for my Instructable, rate it, and subscribe to my feed if you want to know when I release more in the future!