Skip to content

skycam

Camera-agnostic fisheye image projection library for ground-based sky observation

CI Coverage PyPI Python 3.11+ Typed Ruff uv


Documentation

🚀 Tutorial Project your first image in 5 minutes
🛠️ How-To Guides Solve specific problems: batch processing, env config
🧠 Concepts Understand the architecture and algorithm
📚 Reference Complete API documentation

Quick Install

uv add skycam

Minimal Example

from pathlib import Path

from skycam.adapters import JP2CalibrationLoader, load_jp2
from skycam.domain.models import ProjectionSettings
from skycam.domain.projection import ProjectionService

# Load calibration and create projector
loader = JP2CalibrationLoader(Path("calibration"))
calibration = loader.load("visible")
projector = ProjectionService(
    calibration=calibration,
    settings=ProjectionSettings(),
)

# Project fisheye → regular grid
projected = projector.project(load_jp2(Path("input.jp2")))

Features

Feature Description
Numba JIT ~100x speedup via compiled kernels
💾 Coordinate Cache Sub-100ms init after first load
Pydantic v2 Validated settings with env support
🏛️ Hexagonal Architecture Clean domain/adapters/config layers

Get Started →