Quick Links

A smart mirror can show your calendar, weather, and news like something out of a sci-fi movie. Powered by a Raspberry Pi, you can build your own with some simple tools and hardware.

Beautiful, Configurable, and Custom-Built

Smart Mirror showing time, date, and calendar.
Josh Hendrickson / How-To Geek

Smart mirrors have been around awhile, and the most prominent version comes from Michael Teeuw. The idea is pretty simple; you'll build a frame and box. Inside the box, you'll place one-way glass (often seen on TV in police dramas), a monitor, a Raspberry Pi, and the cables necessary to power your setup. Michael and other contributors have created an open-source Magic Mirror platform you can install. Once installed, you can customize it to show your calendar, weather, news, and more. Installing the software is easy---it requires just one line of code.

The harder parts are creating the frame box, setting up the Raspberry Pi, and then customizing the software to show your preferred information. But even someone with little to no experience with woodworking and code can build this DIY project with a bit of patience in a weekend or two. The longest parts are passive, like waiting for glue and stain to dry. You'll spend about three to five hours actively working on the frame and installing the software.

And we'll show you exactly how.

The Materials You'll Need

Depending on what you already have, this project can either be inexpensive or expensive. If you bought every item in the following list, you'd spend around $700. But because we had everything on hand except the glass and wood, we only spent $140. And remember, you don't have to buy the tools. If you have a friend who owns some, ask if you can borrow them.

To get started you'll need the following:

  • A monitor: Preferably at least 24 inches, and one you don't care about losing. Something thinner and lighter is better, but this monitor by Sceptre would work. You'll need to remove the stand. It's also helpful (but not necessary) to remove the frame from the monitor.
  • Two-way Glass: Your glass should be a little larger than the dimensions of your monitor. The product we linked on Amazon is a generic size, but we had good luck ordering from a local glass supplier.
  • One Raspberry Pi 3
  • A Raspberry Pi case
  • Wood stain or paint
  • Polyurethane (if staining)
  • Wood filler (if staining, get stainable wood filler)
  • Sandpaper in 80, 120, and 220 grit (omit 220 if you decide to paint)
  • A miter saw (or handsaw and protractor)
  • Wood glue
  • A measuring tape.
  • A ruler or other straight edge (for drawing straight lines).
  • Painters tape
  • Bungee cords
  • Short wood screws
  • Shims
  • Nylon strap
  • A screwdriver
  • Heavy duty frame hooks (if hanging)
  • Ear, eye, and breathing protection. Add a vapor filter if you're applying polyurethane without ventilation.
  • Wood to build the frame and box: We recommend hardwood like Maple or Walnut at least one inch thick. You'll also want something thin like plywood to make the back of the box if you aren't hanging the frame. How much wood and how wide depends on your monitor (see more in building the frame.)

For a more straightforward build, we have a few advanced options. These are not necessary, but they'll help:

Building the Frame

A sketchup design of a mitered corner frame with box sides.

To start, you're going to make a basic frame (like the one you might find hanging on your wall). Then you'll add a simple box to hold the mirror, monitor, Raspberry Pi, and cabling.  When completed, the structure might resemble a very shallow medicine cabinet.

A sketchup design of a magic smart mirror frame

Dissasembling the Monitor

The first step to building your frame starts with your monitor. The size of your monitor determines the size of your glass and the length and width of the wood you need. If you plan to remove the frame from your monitor, you'll want to do that now. Every monitor is different, so we can't give exact instructions here. You'll want to look for seams along the edge to pry apart, and every step of the way try to be gentle. You should have something like this when you finish:

The back of a monitor with frame removed.
Josh Hendrickson / How-To Geek

Determining Wood Measurements

Once you have the frame removed (or if you're skipping that step), measure the length of the monitor and the width inside the edges of the screen. Measure either along the metal frame on the innards or the inside edge of the frame if you didn't take it apart.

Monitor with arrows showing measurements of length and width.
Josh Hendrickson / How-To Geek

Write those down, and double the numbers. That final number is the total length of wood you will need. For instance, the width of this monitor is 11 and a half inches, and the length is 19 and a half inches. Doubling means 23 inches and 48 inches of wood respectively. It's best to buy at least a few more inches than you need to account for cut pieces and mistakes.

Next, to determine the width of the wood you need to buy, place your monitor on a flat surface, screen side down. Now measure up from the flat surface to determine how thick your monitor is. The wood you purchase needs to be at least that wide, preferably a little wider.

The box calls for a similar length to the frame so you can double the amount once again.

In the case of this project, we bought four boards that were three inches wide and one inch thick. Two boards measured 36 inches long, and the other two were 48 inches long. The extra length means plenty of room for mistakes. If you have a large vehicle, you could buy two long boards (84 inches in this case).

Miter Cuts For a Picture Frame

Two boards with angle cuts, forming a miter joint.
Josh Hendrickson / How-To Geek

If this is your first time using a miter saw, you should watch Steve Ramsey's helpful miter saw basics video.

Before working with any power tools, sanding, or applying stain or polyurethane, you should wear protection. That includes safety glasses and a dust mask or vapor filter. If you're using power tools, please use ear protection like earplugs.

Your next step is to cut miter angles into your wood. In this case, miter angles are just 45-degree angles. Two 45-degree angle boards pushed up to one another make a 90-degree corner. And four 90-degree corners will make a square, or in this case a rectangle.

You can make this cut with a miter saw, a table saw, or even a handsaw and protractor. The handsaw is prone to drifting issues; you might not get a perfect angle or a straight vertical cut. So we highly recommend using a miter saw (which this guide will cover).

To start, set your miter saw to 45-degrees. Your miter saw has a left 45 and a right 45 option, choose the right 45 for this first cut.

Miter saw gauge set to 45 degrees
Josh Hendrickson / How-To Geek

Tip: Most miter saws have hard stops at 45-degrees; you should feel it click into place.

Now place your first "width" board on the miter saw, with the left end top corner extending just past the top left of the blade hole. You want the blade to pass through the entire board, but the goal is also to minimize the amount of wood taken off with this first cut.

Board on a miter saw, with a 45-degree line drawn on it to show a short cut.

Josh Hendrickson / How-To Geek

Save the small piece you cut off; you'll need that in just a moment.

The next cut requires the opposite 45-degree angle to facilitate both corners running the same direction. Rather than move your saw back and forth, flip the board over then slide it down. Because you measured around the monitor, going forward, you need to measure the 'inside' edges of the wood that will sit closest to the monitor. That means the shorter side.

With the board flipped, measure the first length you wrote down earlier (11 inches in our above example) and draw a straight line up and down. Now grab the cut off piece from earlier and line the tip of it with your draw line, use this to draw a 45-degree angle line.

Board on a miter saw with a 90 degree line a 45 degree line

That mark is the angle and length for your cut. Slide your board down to make your next cut. It's essential that you do not try to cut exactly on the line you drew. Your blade is thicker than the pencil line, which means cutting on the line gives you a shorter piece than you want. Just as in the picture above, scoot the board line past the blade so that you're cutting slightly into the left-over wood. You can always take a little more off if you've left too much, but you can't put wood back.

You'll repeat this process to get the rest of the frame boards. Flip the board, measure the length, cut, and repeat. Now you should have four pieces of angled wood that fit into a frame shape. If you find some of your cuts were off by a little, you may need to trim. Just take it slow and cut off less than you think you need; it's better to nudge your way to the correct length than to overcut trying to move fast.

When fit together, your boards should look like this:

A rectangle, showing boards with 45 degree angles cut.

Gluing the Frame Together

Now it's time to glue your boards together. You may be wondering why we're not using nails or screws.  Wood glue is incredibly strong and will give us a tighter and stronger joint than nails will, and has the benefit of a cleaner look, thanks to the lack of nail and screw heads.

It is true that miter joints aren't as strong as other joints, but for our purposes, we don't need strength, we want the decorative look.

Applying wood glue is a straight forward process, and if you've ever used any other kind of glue, you already know most of what to do. You'll need to apply glue to the edge you want to join, spread it to cover all of the wood faces, then push it against the other piece.

But, unlike paper glue, you can't just let go---to give you time to get perfect placement, wood glue has a slow drying time, and if you let go too soon, it can slide or come apart. To solve this problem, you can use corner clamps to hold the angled wood together. If you don't have corner clamps, we have a tape trick that will do the job.

FIrst grab a length and width piece (in the above picture, a horizontal and vertical part) and place them on their 'back's with the angle cuts barely touching. Then cut off a piece of painters tape long enough to grip both pieces of wood and place it next to your frame pieces.

Two boards with angled ends touching, next to a strip of painters tape.
Josh Hendrickson / How-To Geek

Now apply a thin bead of glue to one of the angled pieces. Then use either your finger or brush to spread it to touch the entire face of that angle. Then apply the glue to the other angled face. With an edge grain, wood tends to soak in glue, so wait five minutes then apply the glue again. Then place the boards on the piece of tape, be sure to keep the corners touching.

Two boards on tape with glue applied to the mitered ends.
Josh Hendrickson / How-To Geek

Fold the two pieces together, ensuring the tape stays as tight as possible. Then flatten and flaps of tape hanging over. Take your roll of tape and cross over the angles several times to make as tight a seal as possible.

A frame corner with tape all around the edges.
Josh Hendrickson / How-To Geek

Tip: Glue seeping out as seen here is a good sign that you've applied enough glue. Wait about fifteen minutes for the glue to gel and then scrape it off with a putty knife or plastic butter knife.

Repeat the process with the other boards, and then join them together.

Magic mirror frame taped

Check the instructions on your wood glue, and leave the frame taped for at least the minimum time it requires. The longer you leave the wood clamped, the stronger it will be, although any more than 24 hours isn't usually necessary.

After the glue is dried, remove the tape and check your corners. If you see any gaps, that's fine; you can fill them with wood filler.

Two boards with angle cuts, forming a miter joint.
Josh Hendrickson / How-To Geek

Wood filler is just what it sounds like. It's composed of wood pieces, glue, plastics, and other contents. The goal with wood filler is to overfill the hole. Don't worry about any wood filler spread around the gap, that will be removed by sanding later. You can use a putty knife or a plastic kitchen knife to spread it across the wood.

Tip: Wood filler should have a yogurt sludge-like consistency. If it's hard and caked as in the below picture, mix in 3 parts mineral spirits and 1 part mineral oil to rejuvenate it.

A corner of the frame with wood filler, a putty knife, and a plastic knife.
Josh Hendrickson / How-To Geek

Again, read the package of your wood filler. Usually, you'll need to wait an hour to sand and a day to stain. After you've waited long enough to sand it, use your 80 grit sandpaper to remove the excess wood filler on your frame.

Congratulations, you've built a frame. As a quick test, lay your glass and mirror on the frame to doublecheck that sit firmly on it and don't fall into the rectangular hole.

Tip: If you have a router table, you can use a Roman Ogee bit to add decoration to your frame.

Now it's time to build a box.

Building the Box

Now that your frame is complete, it's time to build up a box. The good news is, this is much easier than cutting the wood and putting together the frame. The basic idea is to build a rectangle of wood sized to the outer edges of your frame:

A view of a rectangle set of boards atop the frame.

You'll start by cutting two pieces of wood that run the same length as the long boards of your frame. Measure your frame at the edge from end to end. Then, measure that distance on one of your uncut boards and draw a straight line with a ruler or other straight edge. For this cut, you'll set your miter saw to "0" to make a straight cut.

Miter saw set to 0 for cut
Josh Hendrickson / How-To Geek

Tip: Just like the 45-degree angle, most miter saws have a "hard stop" at zero; you should feel it click into place.

Again, when you place your board on the saw, don't try to cut directly on the line. Cut next to the line, on the side of the board that's "extra" (not the piece you're cutting off).

A board on a miter saw with a drawn line, the blade to the left of the line.

In the above picture, the cut piece will be to the right. The line shown is extra wide for clarity, but notice the blade will cut just to the left of the mark. It's better to cut a board a hair too long and trim down than to cut it too short.

After you've cut your first board, you can place it on the second board and use it as a measuring stick. Just draw your line with the straight edge you've created, and again follow the above procedure when connecting.

Fit your boards on your frame and feel the edges to determine that they're flush and not too long. Trim as necessary. Then measure the gaps between your two boards to determine the length for your final two pieces. Again, draw lines and cut just off those lines and trim as necessary.

You should end up with something like this:

Four boards forming a rectangle.

Again, you should do a test fit of your glass and monitor with all your completed components. Lay the glass and monitor on the frame, then add these four boards around it to doublecheck the hardware fits inside. It's okay if they aren't a snug fit, we'll take care of that in later steps.

Now you'll glue the boards together. As we mentioned before, the ends of a board (end grain) will soak up glue, weakening the joint. Apply glue to both ends of both shorter pieces, wait five minutes, and apply again. Then squeeze the longer boards into position. Try to make sure they are flush (all the edges line up).

Just like above, wood glue has a slow drying time, so you need to maintain constant pressure. If you have F-Clamps, you can now use three to four to apply pressure to the boards. If you don't, bungee cords will do the trick. Very carefully wrap bungee cords around the rectangle, try to keep the corners at 90-degree angles. Then attach the bungee hooks:

Four pieces of wood arranged in a rectangle with a bungee cord pulling them together.
Josh Hendrickson / How-To Geek

You'll want to use strong, tight bungee cords. And depending on the strength, you may want to use more than one set. The above bungee cords are brand new and fit tightly around the box, so one was enough. But you can add more for good measure.

Wait for the glue to dry (as per your glue directions) then remove the cords. Again, check that all edges are flush and that your rectangle box is flat. If the edge of a board drifted up or down, you could sand it flat.

Gluing the Box to the Frame

Gluing the box to the frame is relatively straight forward. Squeeze glue out in a line the entire way around the narrow edge of the box, then spread it out across the wood with your finger or a brush.

Edge of a board with glue spread across it.
Josh Hendrickson / How-To Geek

The goal is to get good coverage of the glue across the wood; it doesn't need to be a thick layer though. Take a look at your frame and determine which side you think looks better. Place that side down on a flat surface (preferably covered in paper). Then place your onto the frame, glue side down.

Box attached to frame
Josh Hendrickson / How-To Geek

To add pressure, the easiest thing to do is use heavy objects. Place something flat on the box like cardboard or plywood, then place heavy weights on the edges of the frame, like paint cans or books. Try to aim for even spacing to provide pressure all around the box.

Paint and stain cans sitting atop a flat MDF piece over the box frame.
Josh Hendrickson / How-To Geek

Again, wait for at least the minimum time your glue specifies. When you take off the weights, and flat piece, inspect your box for gaps and fill with wood glue as needed. After letting that dry, it's time for sanding.

Sanding The Frame For Staining and Painting

Frame with pencil wavy lines drawn on the wood.
Josh Hendrickson / How-To Geek

Before you stain or paint wood, you need to sand it properly. Sanding your wood removes splinters, dings, and other blemishes the building process created. If you skip this step, stain and paint will only highlight the imperfections.

If you're new to sanding, the process is pretty straight forward. As much as possible, sand with the grain of the wood (that is, follow the lines you see in the wood), and don't push with all your might.

Tip: If you're new to sanding, try drawing wavy lines on your frame as seen in the picture above. When the lines are gone, you've probably sanded enough.

Start with the 80 grit sandpaper, then move to the 120, then the 220. If you're painting or you want a deeper stain color, skip the 220 grit paper.

After sanding, run your hands along the wood. You should feel a noticeable difference where you've sanded. Try to find any areas you missed and sand as needed.

Don't forget to sand the inside border of your frame, where your monitor will show. You can skip sanding any section that won't be visible.

Staining Your Frame

A wood frame with stain and an old pair of socks.
Josh Hendrickson / How-To Geek

If you've decided to paint your frame, you can skip this step and the sealing step. Just paint your frame as usual. If you've decided you look the look of the wood as is, you can skip the staining step, but you shouldn't skip the sealing step.

Tip: Skip the brush, use an old pair of socks or t-shirt to apply your stain. Have two sets, one for staining and one for wiping.

Before staining, wipe off all the sawdust you created by sanding your frame. A sticky lint roller works well, but you can also use a mildly damp paper; just make sure to dry the wood immediately. If you have a shop vac, it can be helpful to vacuum the sawdust in the area as well. You don't want sawdust to get in the stain.

To stain your frame, doublecheck the directions of your stain for drying times. Usually, you'll see a wipe off time and a restain time, take note of those. Start by opening the can and stirring the contents.  The most efficient way to apply a stain is to wipe it on, which is why we recommend old socks or a t-shirt. Dip the material into the stain and let it absorb thoroughly. Then wipe onto your frame. You don't need to push excessively hard, but try to work it into the wood.

When you're staining the vertical services, try to get a smooth line and avoid drips. Stain any part of your frame that will be visible, including the inside border where the monitor goes.

Wait for the appropriate wipe off time, then wipe off any excess stain that hasn't absorbed into the wood. This step is crucial if you don't wipe the excess the stain will dry in an uneven mess.

You'll probably notice that the frame isn't as dark after wiping off the excess stain, that's normal. If you'd like your frame darker, wait the specified restain time, then repeat these steps until you're satisfied.

Before moving to the next step, wait until the stain is completely dry. This will be at least the "restain time" listed on your can, and the frame shouldn't feel sticky.

Sealing the Wood of Your Frame

A stained frame with polyurethane, two brushes, and an old t-shirt.
Josh Hendrickson / How-To Geek

Wood stain is decorative; it won't protect your wood from light and other environmental damage, so you need to seal the wood.

You can use many different finished, but wipe-on polyurethane (or poly) is an easy method. All you need is an old t-shirt. Other polyurethanes may call for a brush instead.

Again, open the can and stir the contents. Then load up your t-shirt or brush. Try to apply in long even strokes to avoid runny lines. When applying to vertical surfaces, try to avoid leaving behind large globs of poly; otherwise, it will dry that way.

Tip: If you bought a "crystal-clear" poly, it will look milky white as you apply. When it dries, it will turn clear.

Check the directions on your can. It will list a dry time and a minimum number of layers. After each drying period lightly sand with the 220 grit sandpaper. Do not use power tools for this step; you'll sand through the polyurethane and the stain.

The goal here is to flatten any bumps in the poly layer, not remove it entirely. Repeat these steps until you have the minimum number of layers your can suggests, you shouldn't need more.

Hangers for Your Frame

If you plan to hang the frame on the wall, you have two options. You can attach sturdy hanging hooks, or you can drill holes in the box for wall nails to slide into. Either method will work, but you'll want at least three (left, right, and center) across the top edge of the box to evenly distribute the heavyweight.

Drilled holes will give you a flush against the wall profile. But hooks won't require a drill to attach.

Congratulations; you've built all the necessary frame components for your smart mirror. Now it's time to move to the hardware.

Adding the Hardware to Your Mirror

Frame box with monitor and glass strapped in.

Start by placing your glass and monitor into the frame box and positioning them so that they show through the rectangle hole correctly. You likely have gaps between the monitor and mirror and edges of the frame.

One option is to screw shims into place as seen at the left of the above photo. But if space is too tight, or your glass is significantly larger than the monitor, shims won't work. Instead, use a nylon strap. Screw one side in and draw tight to the other side to measure. Cut a length off a little longer than is needed. Use a lighter to burn the cut edge to reseal the nylon strap and then screw it into the other side.

When the monitor and glass are secure, add the Raspberry Pi and power cords. If you added a case to the Raspberry Pi, consider using double-sided sticky tape to adhere it to the frame.

Frame box with strapped monitor and glass and raspberry pi

Once everything is positioned, drape a dark black cloth over the entire setup and either tape it to the frame or tack it to the frame.

Frame box with draped black cloth.

Adding a black cloth over the monitor and glass will also enhance the mirror effect. To demonstrate, here's a split view of two-way glass with black cloth behind the left half of the mirror.

A two-way mirror with black cloth behind the left half, showing better reflection.

Your hardware is complete. Now it's time to set up your Raspberry Pi and install the Magic Mirror software.

Installing Magic Mirror on The Raspberry Pi

Linux terminal with bash command entered.

To start with, you will want to set your Raspberry Pi up following the standard steps. The easiest thing to do is get a copy of NOOBS to install the latest version of Raspbian.

This project is powered by the Magic Mirror software and is installed and configured primarily in the terminal and a text editor. You don't need to be familiar with the terminal; you can copy and paste the commands below.

First, you should ensure your Raspberry Pi is up to date. Run the following commands:

sudo apt-get update
    

sudo apt-get upgrade

And provide the root password when prompted. Alternatively, you can use su and skip all the sudo entries.

After all your updates are finished, you will install the Magic Mirror software by running this command:

bash -c "$(curl -sL https://raw.githubusercontent.com/MichMich/MagicMirror/master/installers/raspberry.sh)"

The software will install and prompt you with two options:

Do you want to use pm2 for autostarting of your Magic Mirror?

Enabling this option will automatically start the Magic Mirror software when your Raspberry Pi boots up. Type Y and hit enter.

Do you want to disable the screensaver?

If you don't disable the screensaver, it will interfere with the interface. Type Y and hit enter.

After that, the software will finish installing and start up on its own. You need to configure additional options though, so Alt+Tab back to the terminal and type the following:

pm2 stop MagicMirror

The Magic Mirror software will stop and close.

Configuring the Magic Mirror Software

Terminal opened to /boot/config.txt

You might have noticed a few things when the software started: the display is in horizontal mode, the calendar is empty, no weather is displayed, and the time is in 24-hour format. Let's take care of that.

First, to switch the orientation of the screen, you'll need to change a file that determines settings on startup. In terminal type the following command and then press Enter:

sudo nano /boot/config.txt

The Config.txt file will open in terminal. Use your down arrow key to scroll to the bottom of the file and add the following text:

# Rotate display vertically
    

display_rotate=1

Press Ctrl+X to close the file. Type Y to confirm you want to save and then hit Enter to confirm the config.txt file name.

To see your change, type the following command in the terminal and then hit Enter:

sudo reboot

Your Raspberry Pi will restart, and you should be in portrait mode. You can press Ctrl+M to minimize the magic mirror interface and open the terminal.

Updating Time, Calendar, Weather, and News

Now we'll configure the Magic Mirror interface. Open the File Manager application and browse to the following address:

/home/pi/MagicMirror/config

Right-click the config.js file and choose "Open With."  Expand the programming category and chose Geany from the list. Then click "OK."

File manager with open with dialog showing.

The file you've just opened handles the main configuration components of the magic mirror software. It pulls from modules to add features, and you configure preferences of those features here. The Magic Mirror software comes with default modules for time, weather, the calendar, and compliments.

To change the time to a 12-hour format and measurements to imperial, scroll to this section:

language: "en",
    

timeFormat: 24,

units: "metric",

Change the 24 to 12 and "metric" to "imperial." You should have:

language: "en",
    

timeFormat: 12,

units: "imperial",

config.js file with timeFormat set to 12 and units set to imperial

Save the file. The change should take effect immediately. If you don't see it, run the following command in the terminal or restart your Raspberry Pi:

pm2 restart MagicMirror

The same configuration file also houses your calendar and weather settings. To add your Google Calendar, you'll first need your "secret address in iCal format" link from the Google Calendar website.

Open the config.js section again and scroll to the Module: calendar section.

Config.js focused on calendar module

Change "US Holidays" to a name you prefer and delete the URL beginning with "webcal" between the quotation marks. Then paste in your iCal link (be sure to keep the quotes).

Config.js focused on calendar module

To add weather, you will need OpenWeatherMap API keys. Go to the OpenWeatherMap site and sign up for a free account. Then browse to their API section. Generate a key and copy it.

Go back to config.js and scroll to the weather and weather forecast modules.

Config.txt displaying weather modules.

Paste your copied API key into "Your_OPENWEATHER_API_KEY" (be sure to leave the quotes).

Open a browser and head to the OpenWeatherMap city search page. Search for your city and click the result. The browser link will include a number at the end. For example, Cincinnati's link is:

https://openweathermap.org/city/4508722

Copy the number for your city and paste that into the location ID sections between the quotes. Finally, rename the location from "New York" to the name of your city. You should see something like this:

Weather modules with updated information.

To update the news, change out the current link with your favorite RSS feed. For How-To Geek, that's:

https://feeds.howtogeek.com/HowToGeek

Rename the title to the appropriate website. If you want more than one news site's headlines shown, you'll need to list them in an array like so:

{
    

title: "NPR",

url: "http://www.npr.org/rss/rss.php?id=1001",

},

{

title: "How-To Geek",

url: "https://feeds.howtogeek.com/HowToGeek",

}

Your result should look like this:

Config module showing updated news options.

Congratulations, you've completed your smart mirror!

You can customize it even further if you like. For example, you can remove modules like the compliments or add new modules from the Magic Mirror community. Modules let you add features like Google Assistant and Alexa, snowflakes in the winter, or videos from YouTube.

Smart Mirror showing time, date, and calendar.
Josh Hendrickson / How-To Geek