Run Glanceboard on your own server — a Raspberry Pi, old laptop, or any always-on machine on your home network. No cloud, no subscription, no Firebase.
If you've already followed the Quick Start and have Glanceboard running, you just need to keep it running permanently:
# From the project root
cd server
source venv/bin/activate
nohup python3 -m uvicorn app:app --host 0.0.0.0 --port 8000 &That's it. But read on for a proper setup that survives reboots.
git clone https://github.com/google-gemini/glanceboard.git
cd glanceboard
# Server
cd server
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
cd ..
# Dashboard
cd web
npm install
npm run build
cd ..Start the server once to configure it:
cd server
source venv/bin/activate
python3 -m uvicorn app:app --host 0.0.0.0 --port 8000Open http://<your-server-ip>:8000 and complete the onboarding:
- API key — Get one free from aistudio.google.com/apikey
- Calendar — Paste your iCal URL (how to find it)
- Location — Set your timezone and location for weather
- Art style — Choose your preferred style
- Characters — Add your family (optional)
Press Ctrl+C to stop the server once you're done configuring.
Create a systemd service so it starts on boot and restarts if it crashes:
sudo tee /etc/systemd/system/glanceboard.service > /dev/null << 'EOF'
[Unit]
Description=Glanceboard Server
Documentation=https://github.com/google-gemini/glanceboard
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=$USER
WorkingDirectory=/home/$USER/glanceboard/server
ExecStart=/home/$USER/glanceboard/server/venv/bin/python3 -m uvicorn app:app --host 0.0.0.0 --port 8000
Restart=always
RestartSec=10
# Logging
StandardOutput=journal
StandardError=journal
SyslogIdentifier=glanceboard
[Install]
WantedBy=multi-user.target
EOFNote: Edit the paths above if you cloned Glanceboard somewhere other than your home directory.
Enable and start:
sudo systemctl daemon-reload
sudo systemctl enable glanceboard
sudo systemctl start glanceboardCheck it's running:
sudo systemctl status glanceboardView logs:
journalctl -u glanceboard -fYour e-ink display needs to fetch images from your server over your local network.
- Find your server's local IP:
hostname -I(e.g.192.168.1.50) - In the Glanceboard dashboard, go to Settings → E-Ink Display Setup → 📋 Copy URL
- On your PhotoPainter's web interface (see display setup):
- Set Rotation Mode →
url - Paste the display URL (it will look like
http://192.168.1.50:8000/images/latest_display.bmp) - Set Interval →
300(5 minutes) - Enable Auto Rotate
- Set Rotation Mode →
Using a Pi as the display too? See Legacy Pi Setup — just use your local server URL instead of a Firebase URL.
A Raspberry Pi 4 or Pi 5 works great as a dedicated Glanceboard server. A Pi Zero 2W works too but image generation API calls may be slower.
- Use Raspberry Pi OS Lite (64-bit) — you don't need a desktop environment
- Set a static IP on your router so the display URL doesn't change
- Python version: Pi OS Bookworm ships with Python 3.11, which is perfect
- Node.js: Install Node 18+ via NodeSource:
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - sudo apt-get install -y nodejs
SSH into your Pi and run:
git clone https://github.com/google-gemini/glanceboard.git
cd glanceboard
cd server && python3 -m venv venv && source venv/bin/activate && pip install -r requirements.txt && cd ..
cd web && npm install && npm run build && cd ..Then set up the systemd service as described in Step 3 above.
cd ~/glanceboard
git pull
cd server && source venv/bin/activate && pip install -r requirements.txt && cd ..
cd web && npm install && npm run build && cd ..
sudo systemctl restart glanceboard- Open Google Calendar on desktop
- Click the ⋮ menu next to your calendar → Settings and sharing
- Scroll to Integrate calendar → copy Secret address in iCal format
- Go to icloud.com/calendar
- Click the share icon next to a calendar → enable Public Calendar
- Copy the URL
- Go to Outlook Calendar on the web
- Click ⚙️ → View all Outlook settings → Calendar → Shared calendars
- Under Publish a calendar, select your calendar → ICS → copy the link
- Check Python version:
python3 --version(need 3.9+) - Check you're in the
server/directory - Check the venv is activated:
source venv/bin/activate - Check logs:
journalctl -u glanceboard -f
- Check your API key is set in the dashboard
- Check your calendar URL is valid (paste it in a browser — it should download an
.icsfile) - Try clicking Generate Now in the dashboard to see the error
- Make sure the display can reach your server:
curl http://YOUR_SERVER_IP:8000/images/latest_display.bmpfrom another device - Check the URL in the PhotoPainter settings matches your server IP
- Your server and display must be on the same local network
Set a different port:
python3 -m uvicorn app:app --host 0.0.0.0 --port 9000Update the systemd service and display URL accordingly.
- The server binds to
0.0.0.0:8000— accessible to all devices on your local network - The e-ink display polls the server every few minutes for new images
- All AI generation happens via API calls to the Gemini API — only your API key leaves your network
- No data is stored in the cloud — everything stays on your server in
server/data/