Create a futuristic "magic mirror" that displays weather, calendar, news, time, and more while you get ready in the morning. This impressive project combines a two-way mirror with a monitor and Raspberry Pi to create an interactive information display.
What You're Building
A smart mirror that displays:
- Current time and date
- Weather forecast and conditions
- Calendar appointments
- News headlines
- Customizable widgets (stocks, traffic, sports, etc.)
- Compliments and motivational quotes
- While still functioning as a regular mirror
Difficulty: ⭐⭐⭐⭐ Advanced Time Required: 4-8 hours (plus frame building time) Cost: $150-300 depending on size and features Wow Factor: 10/10 - Everyone will be impressed!
What You'll Need
Required Components
Raspberry Pi
- Raspberry Pi 4 (4GB or 8GB) - Recommended for smooth performance
- Raspberry Pi 3 B+ - Budget option, still works well
- microSD card: 16GB minimum, 32GB recommended
Display
- HDMI monitor: 19-24 inches (non-touch LCD)
- Must be able to remove plastic housing/bezel
- Thinner is better for mounting
- 1080p resolution recommended
- Look for cheap used monitors
Mirror
- Two-way mirror glass OR
- Two-way mirror acrylic film (cheaper option)
- Size: Slightly larger than monitor screen
- Acrylic sheet as backing (if using film)
Frame
- Picture frame (matching mirror size) OR
- Build custom frame from wood
- Must be deep enough to hold monitor (2-4 inches)
- Black interior reduces glare
Power
- Raspberry Pi power supply
- Monitor power cable
- Power strip for internal wiring
Mounting Materials
- Mounting brackets/L-brackets
- Screws and anchors
- Adhesive strips or mounting tape
- Cable management clips
Optional Enhancements
Motion Sensor
- PIR motion sensor
- Turns display on/off when you approach
- Saves power, extends monitor life
Speakers
- Small USB speakers
- For voice feedback or music
Camera
- Raspberry Pi camera module
- For facial recognition or photos
Voice Control
- USB microphone
- For voice commands (advanced)
Mirror Options Explained
Two-Way Mirror Glass
Pros:
- Professional appearance
- Clearer reflection
- Durable
- No bubbles or imperfections
Cons:
- Expensive ($80-150)
- Heavy
- Can break during shipping
- Harder to cut to size
Best for: Premium builds, permanent installations
Two-Way Mirror Film + Acrylic
Pros:
- Much cheaper ($20-40)
- Lightweight
- Easy to cut to size
- Safer (won't shatter)
Cons:
- Can bubble during application
- Scratches easier
- Slightly less reflective
- Requires careful application
Best for: First-time builds, budget-conscious
Recommendation: Start with mirror film for your first build. Upgrade to glass later if desired.
Software: MagicMirror²
We'll use MagicMirror² - the most popular open-source smart mirror platform.
Features:
- Modular design (add/remove widgets)
- Hundreds of community modules
- Easy configuration
- Active development
- Great documentation
Step-by-Step Build Guide
Phase 1: Prepare the Monitor
Disassemble Monitor:
- Unplug and lay monitor face-down on soft surface
- Remove screws from back panel
- Carefully separate plastic housing from screen
- Remove all unnecessary plastic bezels
- Keep only the LCD panel and circuit board
- Note: Some monitors are easier to disassemble than others
Safety:
- Don't force anything
- Take photos during disassembly
- Be gentle with ribbon cables
- Some monitors have capacitors that hold charge
Goal: Reduce monitor to thinnest possible profile (just screen + electronics)
Phase 2: Software Setup
1. Install Raspberry Pi OS:
# Use Raspberry Pi Imager
# Choose: Raspberry Pi OS (64-bit) - full version
# Enable SSH in advanced options
# Set username and password
2. Boot Pi and Update:
sudo apt update
sudo apt full-upgrade -y
sudo reboot
3. Install MagicMirror²:
# Download installation script
bash -c "$(curl -sL https://raw.githubusercontent.com/MichMich/MagicMirror/master/installers/raspberry.sh)"
Installation takes 15-30 minutes. Follow prompts, accept defaults.
4. Start MagicMirror:
cd ~/MagicMirror
npm start
You should see the default MagicMirror interface on your monitor!
Phase 3: Configure MagicMirror
Edit config file:
cd ~/MagicMirror/config
cp config.js.sample config.js
nano config.js
Basic configuration:
let config = {
address: "0.0.0.0", // Allow access from network
port: 8080,
ipWhitelist: [], // Allow all IPs
language: "en",
locale: "en-US",
timeFormat: 24,
units: "imperial", // or "metric"
modules: [
{
module: "alert",
},
{
module: "updatenotification",
position: "top_bar"
},
{
module: "clock",
position: "top_left",
config: {
displaySeconds: false,
showDate: true,
dateFormat: "dddd, MMMM D"
}
},
{
module: "calendar",
header: "Appointments",
position: "top_left",
config: {
calendars: [
{
url: "YOUR_CALENDAR_URL",
symbol: "calendar-check"
}
]
}
},
{
module: "weather",
position: "top_right",
config: {
weatherProvider: "openweathermap",
type: "current",
location: "Your City",
apiKey: "YOUR_API_KEY"
}
},
{
module: "weather",
position: "top_right",
header: "Weather Forecast",
config: {
weatherProvider: "openweathermap",
type: "forecast",
location: "Your City",
apiKey: "YOUR_API_KEY"
}
},
{
module: "newsfeed",
position: "bottom_bar",
config: {
feeds: [
{
title: "New York Times",
url: "https://rss.nytimes.com/services/xml/rss/nyt/HomePage.xml"
}
]
}
},
{
module: "compliments",
position: "lower_third"
}
]
};
Get OpenWeatherMap API key:
- Go to openweathermap.org
- Sign up for free account
- Get API key from account dashboard
- Replace "YOUR_API_KEY" in config
Save and restart:
# Ctrl+X, Y, Enter to save
pm2 restart mm
Phase 4: Install Additional Modules
Browse modules: github.com/MichMich/MagicMirror/wiki/3rd-Party-Modules
Popular modules:
MMM-GoogleAssistant (Voice control):
cd ~/MagicMirror/modules
git clone https://github.com/bugsounet/MMM-GoogleAssistant
cd MMM-GoogleAssistant
npm install
MMM-Spotify (Now playing):
cd ~/MagicMirror/modules
git clone https://github.com/skuethe/MMM-Spotify
cd MMM-Spotify
npm install
MMM-PIR-Sensor (Motion detection):
cd ~/MagicMirror/modules
git clone https://github.com/paviro/MMM-PIR-Sensor
cd MMM-PIR-Sensor
npm install
Add to config.js and restart MagicMirror.
Phase 5: Build the Frame
Materials needed:
- Wood (1x4 or 1x6 boards)
- Wood glue
- Screws or nails
- Black paint or stain
- Saw (miter saw ideal)
- Measuring tape
Frame construction:
- Measure: Monitor dimensions + desired border
- Cut wood: Four pieces for frame rectangle
- Miter corners: 45-degree angles for professional look
- Assemble: Glue and screw/nail together
- Paint interior black: Reduces light bleed and reflections
- Add mounting depth: Attach strips to back for monitor depth
Alternative: Buy oversized picture frame and modify to fit
Phase 6: Apply Mirror Film (If Not Using Glass)
Materials:
- Acrylic sheet (cut to size)
- Two-way mirror film
- Spray bottle with soapy water
- Squeegee
- Sharp knife or razor blade
Application steps:
- Clean acrylic thoroughly: No dust or fingerprints
- Cut mirror film: Slightly larger than acrylic
- Spray acrylic with soapy water: Helps position film
- Peel backing from film carefully
- Apply film to wet acrylic: Start from one edge
- Squeegee out bubbles: Work from center outward
- Trim excess film: Use sharp blade
- Let dry 24 hours
Tips:
- Work in dust-free area
- Take your time
- Small bubbles often disappear as it dries
- Practice on small piece first
Phase 7: Assembly
Mount components in frame:
- Position monitor in frame
- Secure with L-brackets to frame interior
- Mount Raspberry Pi to back of monitor or frame
- Connect HDMI cable from Pi to monitor
- Wire power for both Pi and monitor to power strip
- Cable management: Use clips and ties
- Test everything before final assembly
Mount mirror:
- Place mirror/acrylic over monitor
- Ensure centered and level
- Secure with mounting strips or brackets
- Leave small gap if possible for ventilation
Final assembly:
- Attach back panel (plywood or hardboard)
- Seal edges to keep dust out
- Add hanging hardware (French cleat or D-rings)
- Test all functions
Phase 8: Wall Mounting
Choose location:
- Near mirror's typical use (bathroom, bedroom, hallway)
- Access to power outlet
- Studs for secure mounting (recommended)
- Height: Eye level when standing
Mounting options:
French Cleat (Best):
- Two interlocking beveled pieces
- Very secure
- Easy to remove for maintenance
- Distribute weight well
Heavy-duty brackets:
- Use wall anchors or screws into studs
- Support mirror weight (20-30+ lbs)
Installation:
- Locate studs with stud finder
- Mark mounting points
- Install hanging hardware
- Hang mirror
- Ensure level
- Plug in power
- Boot up!
Auto-Start Configuration
Make MagicMirror start on boot:
cd ~/MagicMirror
npm install -g pm2
pm2 startup
pm2 start mm.sh
pm2 save
Hide mouse cursor:
sudo apt-get install unclutter
Add to autostart:
sudo nano /etc/xdg/lxsession/LXDE-pi/autostart
Add line:
@unclutter -display :0 -noevents -grab
Auto-login Pi (if not already):
sudo raspi-config
# System Options → Boot / Auto Login → Desktop Autologin
Adding Motion Sensor
Connect PIR sensor:
- VCC → Pin 2 (5V)
- GND → Pin 6 (Ground)
- OUT → Pin 7 (GPIO 4)
Install module:
cd ~/MagicMirror/modules
git clone https://github.com/paviro/MMM-PIR-Sensor
cd MMM-PIR-Sensor
npm install
Add to config.js:
{
module: 'MMM-PIR-Sensor',
config: {
sensorPin: 4,
powerSavingDelay: 60, // Turn off after 60 seconds
preventHDMITimeout: 4,
supportCEC: true
}
}
Monitor turns on when you approach!
Customization Ideas
Layout Customization
Positions available:
- top_bar
- top_left, top_center, top_right
- upper_third
- middle_center
- lower_third
- bottom_left, bottom_center, bottom_right
- bottom_bar
Arrange modules by changing "position" in config.
Custom Modules
Create your own widgets:
- Fitness tracker stats
- Smart home controls
- Cryptocurrency prices
- Public transit times
- Inspirational quotes
- Birthdays reminder
- Habit tracker
Find modules: github.com/MichMich/MagicMirror/wiki/3rd-Party-Modules
Themes and Styling
Change colors:
Create custom CSS file:
nano ~/MagicMirror/css/custom.css
Example:
body {
color: #00ff00; /* Green text */
}
.module-header {
color: #00ffff; /* Cyan headers */
}
Font changes:
body {
font-family: 'Roboto', sans-serif;
}
Troubleshooting
Mirror Doesn't Turn On
Check:
- Power connections
- HDMI cable secure
- Monitor input source correct
- Pi booted successfully
Display Not Showing
Solutions:
- SSH into Pi, check if MagicMirror running:
pm2 status - Restart:
pm2 restart mm - Check logs:
pm2 logs mm
Bubbles in Mirror Film
Solutions:
- Small bubbles often disappear after 24-48 hours
- Large bubbles: carefully lift film, reapply with soapy water
- Prevention: clean acrylic thoroughly, work in dust-free area
Display Too Bright
Solutions:
- Adjust monitor brightness settings
- Reduce white in display (use dark theme)
- Add more modules (more black areas)
- Adjust mirror film opacity (multiple layers)
Weather Not Updating
Solutions:
- Check OpenWeatherMap API key is valid
- Verify internet connection
- Check API usage limits (free tier limited)
- Restart MagicMirror
Text Hard to Read
Solutions:
- Increase font size in CSS
- Adjust monitor brightness
- Better quality mirror (more transparent)
- Reduce ambient light in room
- Dark background behind mirror
Maintenance
Regular tasks:
- Clean mirror surface weekly (glass cleaner)
- Reboot Pi monthly for stability
- Update MagicMirror:
git pull && npm install - Update Raspberry Pi OS quarterly
- Check for module updates
Advanced Features
Voice Control
Google Assistant integration:
- Install MMM-GoogleAssistant module
- Set up Google Cloud project
- Configure OAuth credentials
- Connect USB microphone
- Voice commands control mirror
Facial Recognition
Personalized displays:
- Install MMM-Face-Recognition-SMAI
- Connect Pi camera
- Train with your photos
- Display different content per user
Gesture Control
Control with hand gestures:
- Install MMM-Gestures module
- Use Pi camera for gesture detection
- Wave to change pages
- Swipe to scroll news
Smart Home Integration
Display smart home status:
- Install Home Assistant
- Add MMM-HomeAssistant module
- Show thermostat, lights, locks status
- Control devices from mirror
Cost Breakdown
Budget Build (~$150):
- Used monitor: $30-50
- Raspberry Pi 4: $35-45
- Mirror film + acrylic: $25-35
- Frame materials: $30-40
- microSD + cables: $20
Premium Build (~$300):
- New monitor: $100-150
- Raspberry Pi 4 (8GB): $55
- Two-way mirror glass: $80-100
- Custom frame: $50-80
- Sensors + extras: $30-50
Tips for Success
Monitor selection:
- Thinner is better
- Easy-to-disassemble models
- Good brightness (300+ nits)
- IPS panel for viewing angles
Mirror quality:
- 70/30 or 60/40 transmission ratio ideal
- Too reflective = can't see display
- Too transparent = poor mirror
Frame building:
- Measure twice, cut once
- Black interior is critical
- Allow ventilation
- Plan for cable access
Software:
- Start simple, add modules gradually
- Back up config.js frequently
- Test modules before committing
- Join MagicMirror community forum
What's Next?
Expand your mirror:
- Multiple displays (bedroom, bathroom, hallway)
- Integrate with smart home
- Add touch screen for interaction
- Build rotating stand
- Create mirror TV (larger display)
Resources
Official:
- MagicMirror²: magicmirror.builders
- Documentation: docs.magicmirror.builders
- Forum: forum.magicmirror.builders
Communities:
- r/MagicMirror
- r/raspberry_pi
- MagicMirror Discord
Tutorials:
- MagicMirror YouTube channel
- DIY guides on Instructables
- Build logs on Reddit
Final Thoughts
A smart mirror is one of the most impressive Raspberry Pi projects:
✅ Wow factor - Everyone will be amazed ✅ Practical - Use daily ✅ Customizable - Make it yours ✅ Learning - Touch many skills (woodworking, coding, electronics) ✅ Future-proof - Always adding features
The build requires patience and attention to detail, but the result is a unique, functional piece of technology that will impress everyone who sees it.
Take your time, don't rush the frame building or mirror application, and you'll have a professional-looking smart mirror you'll use and enjoy every day!
Ready to build your smart mirror? Follow this guide and create a futuristic addition to your home!