Skip to content
ProfessorEngineergitPublic

About

Desktop wallpaper app for macOS, Windows and Linux, using NASA APOD and nine other image sources, with caching and ambient mode.

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Repository files navigation

Caelum

Caelum

The cosmos, every day, on your desktop.

A cross-platform desktop wallpaper app for NASA Astronomy Picture of the Day and nine other image sources, with image caching and an ambient mode.

Download   Ko-fi   Website

Platform Swift License Release


The Caelum panel

✦ What is Caelum?

Caelum lives entirely in your menu bar - no Dock icon, no windows, no clutter. Every day it fetches the latest Astronomy Picture of the Day from NASA and sets it as your desktop wallpaper, automatically, in the background. Click the orbit glyph in your menu bar and a panel of frosted obsidian glass floats over your desktop, where you can switch between ten image libraries, read the day's explanation, or kick off a full-screen ambient slideshow.

It's designed around a single idea: the interface should wear the colours of the cosmos. Caelum extracts the dominant colour of each image and re-tints its own accents to match.

✦ Features

  • Always the latest APOD - fetched daily and set as your wallpaper, automatically. Uses NASA's new keyless APOD endpoint on science.nasa.gov, with a per-day fallback if the list route misbehaves.
  • Updates itself, if you want - Caelum checks GitHub Releases, announces new versions right in the panel with a one-click install, and can optionally install them automatically (Settings → Updates).
  • 10 stellar sources - APOD is the star, joined by ESA/Hubble, James Webb, ESO, NASA EPIC, the NASA Image Library, Bing, Wikimedia, NASA Image of the Day, and a hand-curated gallery.
  • Cinematic ambient mode - a full-screen, multi-display ken-burns slideshow on idle. Your own planetarium. Move the mouse to return.
  • Menu-bar only - LSUIElement, zero Dock footprint.
  • The UI wears the cosmos - dynamic accent colour extracted from each image.
  • Multi-display - sets the wallpaper on every screen.
  • Smart downloads - huge gigapixel images (yes, APOD does this) are automatically capped to a sensible size for wallpaper.
  • Instant switching - all source libraries are pre-cached in the background so any click is immediate, with no on-demand download delay.
  • Private & open source - no accounts, no tracking, no analytics whatsoever. Images come straight from public APIs. MIT-licensed.

✦ The ten sources

# Source What you get API key
⭐ NASA APOD The Astronomy Picture of the Day -
2 ESA/Hubble Hubble Picture of the Week -
3 James Webb ESA/Webb image releases -
4 ESO European Southern Observatory Picture of the Week -
5 NASA EPIC Full-disk Earth from the DSCOVR spacecraft shares NASA key
6 NASA Library NASA Image & Video Library (rotating queries) -
7 Bing Bing Photo of the Day (4K) -
8 Wikimedia Wikimedia Commons Picture of the Day -
9 NASA Image of the Day NASA's curated daily feed -
10 Caelum Curated A hand-picked gallery of the finest space imagery, refreshed OTA - no app update needed -

Everything works out of the box - no API keys needed. The same sources power the Windows and Linux app.

✦ Install

Homebrew (recommended)

brew tap ProfessorEngineergit/caelum
brew install --cask caelum

Homebrew handles Gatekeeper automatically - no quarantine steps needed.

Manual

  1. Download the latest Caelum.zip from the Releases page and unzip it into /Applications.
  2. Right-click → Open. Caelum is free and open source, so it isn't notarized by Apple. On first launch, right-click the app and choose Open to get past Gatekeeper (you only do this once).
    If macOS still refuses, run:
    xattr -dr com.apple.quarantine /Applications/Caelum.app
  3. Find the star - the orbit glyph appears in your menu bar. Click it, pick a source, and fly.

Requirements: macOS 13 (Ventura) or later.

Windows & Linux

Caelum also runs on Windows 10/11 and Linux (x64 and ARM64) as a tray app with the same ten sources, daily wallpaper refresh and in-app updates. Grab the file for your system from the Releases page:

System File Notes
Windows Caelum-Setup-<version>.exe Installs per user, no admin needed. Not code-signed - if SmartScreen asks, choose More info → Run anyway.
Linux Caelum-<version>-<arch>.AppImage chmod +x and run. Updates itself in place.
Debian / Ubuntu caelum_<version>_<arch>.deb sudo apt install ./caelum_…deb. New versions are announced in the panel and install from there.
Fedora caelum.x86_64.rpm / caelum.aarch64.rpm One command, see below.

Fedora

sudo dnf install https://github.com/ProfessorEngineergit/caelum/releases/latest/download/caelum.x86_64.rpm

(On ARM: caelum.aarch64.rpm.) That's all. The package adds the Caelum repository, so sudo dnf upgrade keeps it current; the panel also offers new versions. On Fedora Workstation (GNOME) it brings the AppIndicator extension along, which shows Caelum's icon in the top bar. Caelum switches the extension on itself; after the very first install, log out and back in once so GNOME loads it.

In the top bar, a click on Caelum's icon opens its menu: the current picture, Set as Wallpaper, next/previous image, the source list, settings and updates. A double click opens the full panel under the bar (GNOME's extension keeps the single click for the menu; on KDE and most other desktops a click opens the panel and the right button the menu).

The wallpaper is set natively on Windows and on GNOME, KDE Plasma, Xfce, Cinnamon, MATE, LXQt/LXDE and Sway - with feh/nitrogen as a fallback for other X11 window managers. On GNOME, tray icons need the AppIndicator extension (preinstalled on Ubuntu); without it, launch Caelum from the app grid to open its panel.

✦ Usage

  • Click the menu-bar glyph to open the panel.
  • Set as Wallpaper applies the current image to every display.
  • Shuffle pulls the next image from the active source.
  • Sources strip switches between the ten libraries.
  • Explanation opens the day's write-up.
  • Footer: Settings · Ambient mode · Refresh · Quit.
  • Right-click the menu-bar glyph for a quick menu (Refresh / Ambient / Quit).

Settings

Setting Default Description
Refresh daily automatically on Fetch & apply the newest image each day (and on wake).
Set on all displays on Apply to every screen.
Same wallpaper on every desktop on macOS keeps a wallpaper per Space; Caelum carries its image to each Space as you switch to it.
Rotate through the library off Cycle images every N minutes.
Tint interface to the image on Dynamic accent colour.
Chime when wallpaper updates on A subtle sound on update.
Launch at login off Start Caelum automatically (SMAppService).
Install updates automatically off Download, verify and apply new releases without asking.

✦ How it works

Caelum is a native Swift 6 + AppKit + SwiftUI app, built with the Swift Package Manager (no .xcodeproj required).

Sources/Caelum/
├── App/        main · AppDelegate · StatusItemController (glass panel) · AmbientController · AppState
├── Core/       CosmicImage · ImageSource · SourceRegistry · ImageCache · WallpaperManager · Prefetcher
│   ├── Net/    HTTPClient (retry/backoff) · RSSParser
│   └── Sources/  APOD · Djangoplicity (Hubble/Webb/ESO) · EPIC · NASA Library · Bing · Wikimedia · NASA IOTD · Curated
└── UI/         Theme (the design system) · GlassBackground · HeroView · ControlDeck · SourceStrip · ExplanationSheet · SettingsView · OrbitalLoader · AmbientView
  • Wallpaper uses the documented NSWorkspace.setDesktopImageURL(_:for:options:) per NSScreen.
  • Ambient mode presents borderless full-screen windows on every display and keeps the display awake with an IOPMAssertion.
  • Idle detection uses CGEventSource input timestamps.
  • Background prefetching caches previews for every image in every source so any click is instant, with no on-demand download.
  • Adding a source is one file conforming to ImageSource + one line in SourceRegistry.

The design language - Obsidian Glass / Aurora

A precision instrument carved from black glass that carries the cosmos: layered vibrancy, a luminous hairline, the aurora gradient (cyan → violet → magenta) used sparingly, instrument typography with tabular figures, and spring-based "orbital" motion throughout. The full system lives in Theme.swift.

✦ Build from source

git clone https://github.com/ProfessorEngineergit/caelum.git
cd caelum

# Run the source smoke-test (fetches the latest image from all 10 sources)
swift run Caelum --smoke-test

# Build a signed .app bundle into dist/
bash scripts/build-app.sh release
open dist/Caelum.app
Script Purpose
scripts/build-app.sh [debug|release] [--universal] Compile + assemble dist/Caelum.app, ad-hoc signed.
scripts/make-icon.sh Render the app icon and build AppIcon.icns.
scripts/render-icon.swift Draw the brand mark (used by make-icon.sh).

Releases are built automatically by GitHub Actions on every v* tag - and whenever a commit on main bumps the version, the matching v<version> release is created for you (see .github/workflows/release.yml). One release carries all platforms: Caelum.zip for macOS, the Windows installer and the Linux AppImage/deb, plus the latest*.yml manifests the Windows/Linux updater reads. To release, bump both CFBundleShortVersionString in Resources/Info.plist and version in desktop/package.json - the workflow refuses mismatched versions or a tag that differs from them, since the in-app updaters rely on it.

Windows & Linux app (desktop/)

An Electron port of the Mac app: same sources (src/main/sources.js, with the curated galleries generated from StaticGallerySource.swift by scripts/extract-galleries.py), tray + panel UI, daily refresh, and updates via electron-updater from the same GitHub releases.

cd desktop
npm install
npm start              # run from source
npm test               # unit tests (parsers, registry)
npm run smoke          # live check: every source returns a loadable image
npm run dist:linux     # AppImage + deb in desktop/dist
npm run dist:win       # NSIS installer (on Windows)

✦ What's coming

  • OTA curated gallery packs - new themed image collections will be pushed over-the-air without requiring an app update. New packs appear automatically in your Caelum Curated source.
  • More sources - expanding the library with additional space agencies and observatories.
  • Contributions welcome - see Contributing below.

✦ Privacy

Caelum is designed to collect absolutely nothing about you. Here is the complete list of every network request Caelum ever makes - there are no others:

Request When Who receives it Why
science.nasa.gov/wp-json/wp/v2/apod-basic Daily / on launch NASA Fetch APOD metadata
assets.science.nasa.gov When an APOD image is shown NASA Download the APOD image (full-resolution original + preview)
api.github.com/repos/ProfessorEngineergit/caelum/releases/latest On launch, every ~6 h GitHub Check for a new Caelum version
github.com/…/releases/download/… Only when you install an update GitHub Download Caelum.zip
hubblesite.org/api/… On source load STScI / NASA Hubble image feed
esawebb.org/rss/… On source load ESA Webb image feed
eso.org/public/images/… On source load ESO ESO image feed
api.nasa.gov/EPIC/… On source load NASA Earth imagery
images-api.nasa.gov/… On source load NASA NASA Image Library
www.bing.com/HPImageArchive.aspx On source load Microsoft Bing Photo of the Day
commons.wikimedia.org/… On source load Wikimedia Foundation Picture of the Day
www.nasa.gov/rss/… On source load NASA NASA Image of the Day feed
Image files from the above domains On demand Same as above Download images for wallpaper

That is everything. There is no telemetry, no crash reporting, no usage analytics, no tracking pixels, no third-party SDKs, and no sign-in of any kind. Caelum never phones home. The app has no server of its own - it is a thin client that talks directly to the public APIs listed above, and only to those APIs.

Images are cached in ~/Library/Application Support/Caelum/Cache on your local disk. This directory is never read by anyone but you and Caelum.

The future OTA gallery feature works the same way: Caelum will fetch a static JSON file from this GitHub repository's releases. The file is a plain list of image URLs - no personal data is sent or received. You can inspect the file here at any time.

✦ Contributing

Contributions are very welcome. The most impactful thing you can do is add a new image source:

  1. Create a file in Sources/Caelum/Core/Sources/ conforming to ImageSource.
  2. Register it with one line in SourceRegistry.swift.
  3. Open a pull request.

For bug reports and feature requests, please use GitHub Issues.

✦ Support

Caelum is free and open source. If it brings a little wonder to your day, a small Ko-fi helps cover the time spent building it and keeps future development going:

Ko-fi

✦ Credits & License

Caelum is MIT-licensed - see LICENSE.

Astronomical imagery is provided by NASA, ESA, ESO, the Hubble and James Webb Space Telescope teams, Bing, and Wikimedia Commons, and remains the property of its respective owners under each provider's terms. Caelum is an independent project and is not affiliated with or endorsed by NASA, ESA, or ESO.


Made for the love of the night sky.

AI assistance

Some code contributions are explicitly attributed to AI tools: generated with Claude Code. This applies to those contributions, not every file.

About

Desktop wallpaper app for macOS, Windows and Linux, using NASA APOD and nine other image sources, with caching and ambient mode.

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages