Showcase

What it looks like

Bright modules float on pure black and arrange themselves by screen region. Behind two-way glass, only the lit pixels show — the mirror does the rest.

Speculum mirror running fullscreen — clock and calendar top-left, weather and 7-day forecast top-right, compliment centered, QR config code bottom-left, newsfeed along the bottom
The live fullscreen mirror: clock, calendar, weather and forecast, a compliment, the QR config link, and a rotating newsfeed — every default plugin in its region.

Default modules

Each ships as its own Gradle subproject under modules/, built to a JAR in plugins/.

🕐 Clock

Live time and date with an optional analog face. Turn off seconds (displaySeconds=false) to recompose once a minute — the biggest CPU win on low-power devices.

modules/clock-module

🌤 Weather

Current conditions from the free Open-Meteo API. Monochrome vector glyphs drawn with Canvas so icons stay pure white.

modules/weather-module

📅 Weather forecast

Multi-day outlook with the same monochrome vector icon set. Ships in the weather JAR.

modules/weather-module

🗓 Calendar

Upcoming events pulled from ICS feeds, parsed dependency-free with a regex reader.

modules/calendar-module

💬 Compliments

Time-of-day greetings and date specials — the friendly MagicMirror staple.

modules/compliments-module

📰 Newsfeed

Rotating RSS/Atom headlines, regex-parsed. Optionally shows the source title.

modules/newsfeed-module

⬆️ Update notifier

A top-center banner when a newer GitHub release exists for the project.

modules/updatenotifier-module

📓 Example

A fully-commented reference module demonstrating config reading, lifecycle, notifications, state, and JAR packaging — in its own standalone repo.

pierrejochem/SpeculumExampleModule

Configure from any browser

The desktop app starts the config admin in-process, so the same package serves both the fullscreen mirror and a web UI on port 8080. Scan the on-screen QR code or open the address from any device on the network.

Speculum config admin sign-in screen with the Speculum wordmark and a password field on a dark background
Password-gated sign-in (signed bearer tokens, no external auth lib).
Speculum config editor with a left navigation sidebar (Global, Modules, Store, Updates, Security); the Modules section shows a tab per module and the selected module's position, refresh interval and config key-value rows
A left nav splits global settings, modules, the plugin store, updates and security; each module gets its own tab. The mirror reloads automatically on save.

The mirror palette

Three brightness tiers on black — the entire visual language. Section headers follow MagicMirror style: UPPERCASE, letterSpacing = 2.sp, dimmed.

Bright

#FFFFFF — headlines, values

Normal

#999999 — labels

Dimmed

#666666 — secondary / headers

Want your own? Modules auto-place themselves once their JAR lands in plugins/. Build one with the API Reference or rearrange the defaults in the web admin.