Welcome to pyobs!
Overview
pyobs is a Python framework for building and operating autonomous, robotic, or remote astronomical observatories. It provides the software foundation to integrate and control telescopes, cameras, domes, weather sensors, and scheduling systems — all within a unified and modular environment.
The framework’s design philosophy emphasizes flexibility and extensibility: users configure observatory systems declaratively (typically in YAML) by combining reusable modules for hardware control, data processing, scheduling, and supervision. pyobs allows a telescope to perform fully automated observation cycles, from calibration to data acquisition and archiving.
The main project, pyobs-core, provides the central infrastructure and abstract interfaces.
Additional repositories (e.g. pyobs-asi, pyobs-gui, pyobs-alpaca) implement specific hardware drivers or user interfaces.
Key Features
Hardware abstraction and drivers — Uniform interfaces for cameras, telescopes, domes, filter wheels, and other devices.
Automation and scheduling — Enables robotic operation, observing task management, and integration with external schedulers such as Las Cumbres Observatory.
Data acquisition and processing — Supports image calibration, photometry, source extraction, and catalog creation through configurable processing pipelines.
Distributed operation — Modules can run across multiple machines and communicate via a networked messaging system.
Configuration-based architecture — Observatory setups are defined in YAML files, reducing the need for custom programming.
Extensibility — Users can develop their own modules or extend existing ones for new instruments, sensors, or observatory logic.
Integration ecosystem — Companion packages add support for specific cameras (ASI, SBIG, QHYCCD), focusing motors, GUIs, weather interfaces, and astrometry services.
Architecture
pyobs follows a modular, event-driven design. Each module represents a component of the observatory — for example, a camera controller, a scheduler, or a weather monitor. Modules communicate asynchronously, exchanging commands, data, and events across a network interface.
The architecture is guided by several principles:
Separation of concerns: hardware drivers, control logic, and data handling are implemented as independent modules.
Asynchronous operation: observing workflows (e.g., exposures, readout, dome movement) are non-blocking and concurrent.
Abstraction layers: standardized interfaces define contracts for hardware and services, ensuring hardware independence.
Declarative configuration: module connections and behaviors are defined via configuration files rather than code.
Ecosystem and Repositories
The pyobs organization on GitHub hosts a family of repositories:
pyobs-core — The main framework providing interfaces, module management, and communication infrastructure.
pyobs-asi, pyobs-qhyccd, pyobs-sbig — Drivers for various astronomical cameras.
pyobs-aravis — Support for Aravis-compatible industrial cameras.
pyobs-zwoeaf — Module for ZWO EAF focus motors.
pyobs-pilar — Interface to the Pilar telescope control system.
pyobs-alpaca — ASCOM Alpaca bridge for interoperability with other software.
pyobs-gui — Graphical user interface for controlling and monitoring observatories.
pyobs-astrometry — Web service wrapper for astrometry.net solve-field operations.
Together, these components form a complete, extensible observatory control system.
Use Cases
pyobs can be employed in a wide variety of astronomical contexts:
Fully autonomous telescopes Execute entire observing nights automatically: select targets, take images, perform calibrations, and archive data.
Remote operation Allow human operators to control observatory components from remote locations through network interfaces or GUIs.
Instrument prototyping Rapidly integrate new instruments or devices by implementing small interface modules.
Data-driven feedback Integrate real-time image analysis (e.g., source detection or quality metrics) to influence scheduling or instrument control.
Educational or small observatories Run simplified setups for student projects or research with minimal overhead.
Limitations and Outlook
While powerful, pyobs remains an evolving system:
Configuration files can become complex in large installations.
Hardware-specific behavior may still require custom handling.
Full test coverage across all modules is an ongoing effort.
Performance tuning may be necessary for high-throughput environments.
Despite these caveats, pyobs continues to mature as a robust, open-source platform for observatory automation and control.
Telescopes
pyobs currently runs on five telescopes around the world:
MONET/North (McDonald Observatory, Texas) and MONET/South (SAAO, South Africa)
IAG 50cm (Göttingen, Germany)
IAG VTT (Göttingen, Germany)
ROTSE Namibia (Hess site, Namibia)
Further Reading
Project site: https://github.com/pyobs/
Core framework: https://github.com/pyobs/pyobs-core
Documentation: https://docs.pyobs.org/
Scientific reference: Frontiers in Astronomy and Space Sciences (2022), “pyobs: A Modular Control System for Astronomical Observatories”
Introduction
Recipes
Config Examples
API Reference
- API
- Core modules (pyobs.modules)
- Cameras (pyobs.modules.camera)
- Flatfielding (pyobs.modules.flatfield)
- Focus (pyobs.modules.focus)
- Image operations (pyobs.modules.image)
- Auto-guiding (pyobs.modules.pointing)
- Robotic mode (pyobs.modules.robotic)
- Roofs (pyobs.modules.roof)
- Telescopes (pyobs.modules.telescope)
- Test modules (pyobs.modules.test)
- Utility modules (pyobs.modules.utils)
- Weather (pyobs.modules.weather)
- Additional modules