Latest image

Latest all-sky image
No image found.
images/latest.jpg
Recent Captures

Enclosure History

— Box Temp (°F)   — Humidity (%) · sampled every minute

Collecting enclosure data — check back in a few minutes.

Fan & Dew Heater Activity

No state changes recorded yet — this builds up as the camera runs.

Keogram

What is a Keogram?
A keogram is a time-compressed image of the sky. One vertical strip of pixels is taken from each frame and placed side by side to show how the sky changed over time. Bright vertical lines indicate clouds or the Moon; dark gaps indicate clear sky. Left = start of night, right = most recent.
No keogram available yet.
Enable keogram generation in indi-allsky settings.
Keogram

Star Trails

What are Star Trails?
A star trail image is created by stacking many exposures from a full night into a single photo. As Earth rotates, stars appear to arc across the sky as long curved streaks. Only generated on mostly clear nights — the longer and brighter the trails, the clearer the night.
No star trails available at this time.

Timelapse

What are Timelapses?
Timelapses are videos assembled from hundreds of individual frames captured throughout the night or day, compressing hours of sky activity into seconds. A new timelapse is generated automatically at every dawn and dusk.

⚠ Loading times may vary based on your internet connection. Timelapses are generated at every dawn and dusk. Star trail timelapses are generated only on mostly clear nights.

🎬
Tap a timelapse below to play it here.
Scanning for timelapses…

Clear Sky History

Historical cloud cover vs actual sky clarity at Ryan Heuer Observatory · Lat +42, Long −88

Clear nights
Partly cloudy
Overcast
Best 3hr window

Nighttime cloud cover

Loading weather data…

Sky Quality (SQM) History

Magnitude per arcsec² — higher = darker sky. Updated each image capture.

Loading SQM data…

Nightly breakdown

Weather data from Open-Meteo · Free & open source · Updates daily

Sign in to sync favorites across devices

★ Favorites

🔔 Notifications

No notifications yet.
Aurora alerts, favorites, and other events will appear here.

⚙ Account Settings

Username
Email
Password
Delete Account Permanently deletes your account and all saved favorites.

Building an All-Sky Camera

An All-Sky Camera system records the entire sky hemisphere above a single point. These systems are commonly used for meteor detection, aurora observation, cloud monitoring, and night-sky time-lapses. After many months of pondering, I decided to dive head first into this project and invest in building one. This page documents my process.

Overview & Design Choices

🎯
Purpose
What do YOU want to build one for? Meteor detection, aurora monitoring, general sky time-lapse, cloud cover — or all of the above?
🔭
Field of View
An all-sky lens typically offers ~180° fisheye coverage. Use a dedicated fisheye lens on a planetary camera for best results.
🌗
Day / Night Operation
True all-sky operation requires handling both day and night — automatic exposures, and software configured for day, night, or both.
🌧
Weatherproofing
The enclosure MUST withstand rain, snow, and temperature extremes. A heated dome and temperature control are highly recommended.
💾
Data & Power
Think about storage needs and whether to use outlet power, PoE, or solar with battery backup.

Parts List — What I Used

Camera
ZWO ASI676MC Pro — Sony IMX676 sensor, 26MP color, USB 3.0. Excellent sensitivity for night sky imaging.
Budget option: Raspberry Pi HQ Camera with a fisheye adapter. Works but significantly lower sensitivity for night use.
Lens
180° fisheye lens included with the ASI676MC. Covers the full sky hemisphere in a single frame.
Dome
Optical-grade polycarbonate hemispheric dome — clear, scratch-resistant, UV-stable. Available on Amazon. Choose one sized to fit your enclosure opening.
Enclosure
WH-18 Hinged Junction Box — waterproof, hinged lid for easy access. Available on Amazon. IP-rated and roomy enough for the Pi, relays, buck converter, and wiring.
Tip: Hinged lid is a huge quality-of-life improvement over screwed lids when you need to make adjustments outdoors.
Thermal
2x fans inside the enclosure for active ventilation on hot days, controlled automatically via relay based on BME280 temperature/humidity readings.
Dew heater resistor ring mounted under the dome to prevent fogging and condensation on cold/humid nights. Sourced from dewcontrol.com. Both fans and heater are relay-switched so the Pi controls them automatically.
Power
12V weatherproof power brick feeds into power tails (positive and negative distribution). A 5V buck converter taps off the 12V rail to power the Raspberry Pi and relay board. Fans and dew heater run directly on 12V.
This setup keeps everything on one wire run from the house. A solar + battery upgrade is planned for future independence from house power.
Controller
Raspberry Pi 4B (4GB) running Raspberry Pi OS and indi-allsky.
⚠ Recommendation: Get a Pi 5 with 8GB+ RAM instead. indi-allsky is more resource-intensive than expected — timelapse generation in particular pushes the Pi 4 hard. Also add an M.2 SSD adapter for additional swap space, which is essential for timelapse generation on memory-constrained hardware.
Storage
M.2 NVMe SSD via USB adapter on the Pi — used for the OS, indi-allsky data, and extra swap space needed for timelapse generation. Images sync automatically to a Synology NAS with auto-purging of data older than 30 days.
Mounting
Custom bracket using hose straps, an L-bracket, aluminum bar, and metal plates bolted to a porch column. The camera extends out on an arm to get clear sky coverage away from the roof overhang.
This is the most creative part of any build — your mounting solution will depend entirely on your home's architecture. Plan for cable management and weather sealing where wires enter the house.

Lessons Learned

🧠
Get More RAM
The Pi 4B with 4GB works, but indi-allsky uses more memory than expected — especially during timelapse generation. A Pi 5 with 8GB would have been the better choice. If you use a Pi 4, add an M.2 SSD with extra swap space.
🔌
Plan Your Power Early
A single 12V weatherproof brick feeding a buck converter keeps cabling simple. Route power and USB through a single conduit run and seal all entry points well — water finds every gap.
🌡
Thermal Management Matters
Without fans the enclosure gets surprisingly hot in summer sun, which degrades image quality and can damage components. Two fans controlled by a temperature sensor solved this completely.
💧
Dew Heater is Essential
Even in dry conditions, the dome will fog on cool humid nights without a dew heater. A small resistor ring under the dome keeps it clear and is worth every penny.
🔩
Hinged Enclosure = Sanity
Choose a hinged-lid junction box over a screw-top. You will open this enclosure more than you expect — for adjustments, reboots, and cable changes. A hinged lid makes it effortless.
📐
Mounting Takes Creativity
There's no universal mounting solution. This build uses hose straps, L-brackets, and aluminum bar stock bolted to a porch column. Measure your sky coverage carefully before committing — trees and roof overhangs block more than you think.

This Site

📷
rho-skylab
Raspberry Pi 4B running indi-allsky with a ZWO ASI676MC Pro sensor and 180° fisheye lens.
🌐
This Viewer
Images are rsynced every 2 minutes over SSH to a DMZ nginx server, served publicly over HTTPS via Let's Encrypt.

How This Site Works

Getting live all-sky images from a camera on a home network to the public internet securely took a bit of engineering. Here's the full pipeline.

📷
rho-skylab
Pi 4B · LAN
🔒
SSH / rsync
encrypted tunnel
🛡
pfSense DMZ
firewall isolated
🌐
nginx + HTTPS
public web
Capture
indi-allsky runs on rho-skylab and captures frames continuously, saving full-resolution images to local storage organized by date and period (day/night). It also generates a realtime keogram and timelapse videos automatically.
Manifest
A cron job runs every 2 minutes on rho-skylab, executing gen_manifest.sh. This script scans the last 3 days of images and generates a manifest.json and timelapse_manifest.json — JSON index files that tell this webpage which images and videos are available.
Sync
Every 2 minutes, rsync pushes new images from rho-skylab to the DMZ web server over an SSH tunnel using a dedicated key pair. Bandwidth is capped at 900 KB/s to avoid saturating the home network. A separate cron updates status.json every minute so the live status indicator stays current.
Firewall
The web server lives in a pfSense DMZ — a separate network segment isolated from the home LAN. The firewall blocks all inbound connections from the DMZ to the LAN, so even if the web server were compromised, it cannot reach any home devices. rho-skylab initiates all connections outbound, so no firewall holes are needed inward.
Web Server
nginx runs on an Ubuntu server in the DMZ, serving this static HTML page and the synced images. HTTPS is handled by a Let's Encrypt certificate via Certbot, which auto-renews every 90 days. Port forwarding on pfSense routes public traffic on ports 80 and 443 to the nginx box.
This Page
A single index.html file with no external dependencies. The Live tab auto-refreshes the latest image every 30 seconds. The Gallery tab reads the manifest and lets you browse the last 3 days of images with day/night filtering and hour-by-hour sorting. The status indicator checks status.json and the image age every 60 seconds to show whether rho-skylab is online.

⚙ Admin Portal

Recent Users

Loading…
Edit User
Username
Email
New Password (leave blank to keep)
Role
Create User
Sign In
No account?