cd /news/generative-ai/glanceboard Β· home β€Ί topics β€Ί generative-ai β€Ί article
[ARTICLE Β· art-82481] src=github.com β†— pub= topic=generative-ai verified=true sentiment=↑ positive

Glanceboard

Google has released Glanceboard, an open-source e-ink display project that uses Gemini 3.6 Flash and Nano Banana to turn Google Calendar data, local weather, and custom family characters into daily illustrated planners. The system runs on a local server or Raspberry Pi, generates art in six styles, and requires no cloud account, with setup via a web dashboard. Glanceboard aims to provide a quiet, screen-free way to start the day, replacing notifications with a picture frame that shows today's schedule.

read8 min views5 publishedJul 31, 2026
Glanceboard
Image: source

Glanceboard is an e-ink display that helps you start your day, built with Gemini

This demo showcases how to use Gemini 3.6 Flash and Nano Banana to turn your Google Calendar into art on an e-ink display.

Using just a computer and an iCal feed, Glanceboard transforms your schedule, local weather, and custom family characters into Nano Banana generated art. Every morning, it reads your calendar and generates a fresh illustration so you know what's happening today, what to pack, and what to wear.

No screens. No notifications. Just a quiet picture frame that helps you know what's happening today.

Note: This demo was entirely vibe coded with Google Antigravity and uses off the shelf hardware.

Glanceboard runs a lightweight local server on your computer (or a Raspberry Pi). Every few hours, it:

  • Reads your calendar events via iCal URL (universal standard for calendar data .ics file)
  • Fetches the current weather for your location
  • Builds a creative prompt for your characters
  • Generates an illustrated daily planner image from the above using Nano Banana
  • Dithers the image for 6-colour e-ink and serves it to your display

The display polls the server for new images β€” no cloud account needed.

Part Description
Waveshare ESP32-S3 PhotoPainter

**USB-C cableA computer or PiPython 3.9+**Node.js 18+ No soldering. No ribbon cables. Just one display and a server.

Using a Raspberry Pi as the display?The legacy Pi + separate e-ink HAT setup is still supported β€” see[Legacy Pi Setup].

Daily Nano Banana artβ€” Your calendar events become illustrated daily planners** 6 art styles**β€” Pen-and-ink, fashion sketch, watercolour, pixel art, comic book, and Japanese sumi-e** Custom characters**β€” Add people and pets with reference photos for consistency** Drag-and-drop widgets**β€” Add sports scores, stock tickers, news, daily quotes, email digest, weather, and more to your display layout** Google Calendar**β€” Connect via iCal URL (any calendar that exports iCal works)** Weather-aware**β€” Shows weather on the display; characters dress for the actual conditions** Location-aware**β€” Uses your location to generate regionally accurate scenes (no snow in Sydney!)** Smart countdowns**β€” AI scans your calendar for birthdays, trips, and holidays to count down to** Gemini-powered event rewriting**β€” Turns "9am Tavi Library Bag" into "Tavi β€” remember library bag!"** E-ink ready**β€” Floyd-Steinberg dithered for 6-colour Spectra panels** Smart scheduling**β€” Auto-generates at your chosen times, only when your calendar or weather changes** Custom prompts**β€” Edit the image generation prompt template** Email digest**β€” Optional Gmail integration shows unread email summaries (setup required)Fully localβ€” Runs on your own machine, no cloud account required

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   # automatically creates src/config.js from template on first run
cd ..
cd server
source venv/bin/activate
python3 -m uvicorn app:app --host 0.0.0.0 --port 8000

Open http://localhost:8000 β€” the Glanceboard dashboard will guide you through setup:

API keyβ€” Enter your Google AI Studio key (seeAPI key setupbelow)** Calendar**β€” Paste your iCal URL** Location**β€” Set your timezone and location for weather** Art style**β€” Choose from 6 styles** Characters**β€” Add your family members and pets

See Display setup guide below to flash and connect your PhotoPainter.

Want to keep it running 24/7?See[Self-Hosting Guide]for systemd service setup, Raspberry Pi instructions, and running Glanceboard as a permanent home server.

Glanceboard works with a range of AI image generation models:

Model Provider Notes
Nano Banana Pro
Gemini API Recommended. Best quality, text rendering, and character consistency.
Nano Banana 2
Gemini API Balances speed with quality

Glanceboard also uses Gemini Flash 3.6 for intelligence:

  • Rewriting calendar events into friendly language
  • Generating weather-accurate scene descriptions
  • Scanning calendars for important upcoming events

Glanceboard requires a Gemini API key to generate images.

  • Go to aistudio.google.com/apikey - Click Create API Keyβ†’ select your Google Cloud project (or create one) - Copy the key (starts with AIza...

) - Paste it into the Glanceboard dashboard during onboarding

That's it.The key is stored locally in yourserver/data/config.json

file and used server-side to call the Gemini API.

  • Connect your PhotoPainter to your computer via USB-C

  • Open the Glanceboard Web FlasherinChrome or Edge - Click Install Glanceboard Firmware and select your device - Wait for the flash to complete (~2 minutes)

  • Unplug and replug the USB-C cable to reboot

  • After rebooting, the display shows a setup screen with the WiFi name Glanceboard-XXXX

  • On your phone or computer, connect to the Glanceboard-XXXX

WiFi network (no password) - A setup page will open automatically (or go to http://192.168.4.1

) - Enter your WiFi network name andpassword(leave password blank for open networks) - Paste the Display Image URL from your Glanceboard dashboard (found inSettings β†’ E-Ink Display Setup β†’ πŸ“‹ Copy URL) β€” it looks likehttp://YOUR_SERVER_IP:8000/images/latest_display.bmp

  • Choose a poll interval(how often the display refreshes) - Click Save & Connect

The device will restart, connect to your WiFi, and begin polling for images. The display will update within ~60 seconds.

Tip:You can reconfigure the device later by accessing its IP address from any browser on the same network. The IP is shown on the display after setup.

Using a Raspberry Pi as the display?The legacy Pi + separate e-ink HAT setup is still supported β€” see[Legacy Pi Setup].

Local Server (FastAPI on Python 3.11+)
──────────────────────────────────────────────────────
  server/app.py
  β”œβ”€β”€ /api/config        GET/POST β€” settings
  β”œβ”€β”€ /api/generate      POST β€” trigger image generation
  β”œβ”€β”€ /api/status        GET β€” generation status
  β”œβ”€β”€ /api/preview       GET β€” preview the prompt
  β”œβ”€β”€ /images/*          static β€” generated display images
  └── /*                 static β€” built Vite SPA dashboard

  data/config.json       local config (API key, calendar, etc.)
  data/images/           generated display images

  Scheduler (APScheduler)
  └── runs every 15 min, generates at user-chosen hours
      only when calendar/weather has changed

  Web Dashboard (Vite SPA)
  β”œβ”€β”€ Onboarding wizard
  β”œβ”€β”€ Settings panel
  β”œβ”€β”€ Drag-and-drop widget layout editor
  β”œβ”€β”€ Character manager
  └── Live display preview
──────────────────────────────────────────────────────
         β”‚                              β”‚
         β–Ό                              β–Ό
  ESP32-S3 PhotoPainter         AI Provider
  polls /images/latest_*        Gemini API
  updates e-ink display         (Gemini Flash / Pro)

  Gemini Flash 3.6
  β€’ Rewrites calendar events in friendly text
  β€’ Generates weather-accurate scene prompts
  β€’ Scans calendar for important countdowns
glanceboard/
β”œβ”€β”€ server/                     # Local Python server (FastAPI)
β”‚   β”œβ”€β”€ app.py                  # All backend logic + API endpoints
β”‚   β”œβ”€β”€ requirements.txt        # Python dependencies
β”‚   β”œβ”€β”€ requirements-email.txt  # Optional email widget dependencies
β”‚   └── data/                   # Runtime data (gitignored)
β”‚       β”œβ”€β”€ config.json          # Your settings (gitignored)
β”‚       β”œβ”€β”€ config.example.json  # Template config
β”‚       β”œβ”€β”€ gmail_credentials.json # Gmail OAuth credentials (gitignored, optional)
β”‚       β”œβ”€β”€ gmail_token.json     # Gmail OAuth token (gitignored, optional)
β”‚       └── images/              # Generated display images (gitignored)
β”œβ”€β”€ web/                        # Frontend (Vite SPA)
β”‚   β”œβ”€β”€ index.html              # Dashboard + landing page
β”‚   └── src/
β”‚       β”œβ”€β”€ main.js             # App logic
β”‚       β”œβ”€β”€ style.css           # Styles
β”‚       β”œβ”€β”€ config.js           # Firebase config (gitignored, only for hosted version)
β”‚       └── config.example.js   # Template config
β”œβ”€β”€ functions/                  # Cloud Functions (for hosted version)
β”‚   β”œβ”€β”€ main.py                 # Backend logic (Firebase variant)
β”‚   └── requirements.txt        # Python dependencies
β”œβ”€β”€ firmware/                   # ESP32-S3 PhotoPainter docs
β”‚   └── README.md               # SD card & firmware setup
β”œβ”€β”€ pi/                         # Legacy Raspberry Pi scripts
β”‚   β”œβ”€β”€ LEGACY_PI_SETUP.md      # Pi setup guide
β”‚   β”œβ”€β”€ install.sh              # One-line installer
β”‚   └── display_update.py       # Display update script
β”œβ”€β”€ firestore.rules             # Firestore security rules (hosted version)
β”œβ”€β”€ storage.rules               # Storage security rules (hosted version)
β”œβ”€β”€ firebase.json               # Firebase config (hosted version)
β”œβ”€β”€ SELF_HOSTING.md             # Guide to running on your own server 24/7
β”œβ”€β”€ FIREBASE_DEPLOY.md          # Firebase deployment guide (hosted version)
β”œβ”€β”€ EMAIL_SETUP.md              # Optional email widget setup guide
└── LICENSE                     # Apache 2.0 License

Glanceboard can optionally show a summary of your unread Gmail on the display. This requires setting up your own Google Cloud OAuth credentials β€” see ** EMAIL_SETUP.md** for step-by-step instructions.

The email widget:

  • Only reads subject lines and sender names (not email bodies)
  • Summarises them via Gemini into a short digest
  • Runs entirely on your own machine β€” no data leaves your server
  • Is completely optional β€” everything else works without it

Contributions are welcome! Please see CONTRIBUTING.md for details on how to contribute and the Contributor License Agreement (CLA) process.

Copyright 2026 Google LLC

All software is licensed under the Apache License, Version 2.0 (Apache 2.0); you may not use this file except in compliance with the Apache 2.0 license. You may obtain a copy of the Apache 2.0 license at: https://www.apache.org/licenses/LICENSE-2.0

All other materials are licensed under the Creative Commons Attribution 4.0 International License (CC-BY). You may obtain a copy of the CC-BY license at: https://creativecommons.org/licenses/by/4.0/legalcode

Unless required by applicable law or agreed to in writing, all software and materials distributed here under the Apache 2.0 or CC-BY licenses are distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the licenses for the specific language governing permissions and limitations under those licenses.

This is not an official Google product.

Built with ❀️ by Raph Dixon using Antigravity and Gemini Flash 3.6.

── more in #generative-ai 4 stories Β· sorted by recency
── more on @google 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain β€” perfect for shipping the agent you just read about.

$git push zahid main
β†’ Live at https://your-agent.zahid.host βœ“
Get free account β†’ Pricing
from €0/mo Β· no card required
LIVE [news/glanceboard] indexed:0 read:8min 2026-07-31 Β· β€”