https://github.com/arcsecond-io/focale-local-relay
https://github.com/arcsecond-io/focale-local-relay
Last synced: 20 days ago
JSON representation
- Host: GitHub
- URL: https://github.com/arcsecond-io/focale-local-relay
- Owner: arcsecond-io
- License: mit
- Created: 2026-03-04T15:35:27.000Z (5 months ago)
- Default Branch: master
- Last Pushed: 2026-06-10T08:21:01.000Z (about 2 months ago)
- Last Synced: 2026-06-10T10:08:16.316Z (about 2 months ago)
- Language: Python
- Size: 472 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Focale
Focale is a small desktop/CLI bootstrap for Focale users that:
- logs in with the user's Focale account
- creates and stores a local Hub agent identity
- enrolls that identity with Focale when needed
- mints a short-lived Hub JWT
- connects to the Focale Hub using the signed Ed25519 challenge flow
Focale owns its own local state and uses Focale password login to obtain a short-lived bearer JWT plus a refresh token.
## User install
### Python / terminal
```bash
pip install focale-local-relay
```
Then:
```bash
focale login
focale context list
focale context use personal
focale connect --hub-url wss://hub.focale.space/ws/agent
```
### Desktop GUI
`python -m focale_local_relay` launches the PySide6 desktop app when no CLI arguments are given.
The existing `focale` console script remains available for terminal-driven workflows.
### Windows installer
This repository includes a bootstrap for building a Windows installer from CI. The installer packages
the PySide6 desktop app as `focale-relay.exe`.
See:
- [`.github/workflows/windows-production.yml`](.github/workflows/windows-production.yml)
- [`.github/workflows/windows-staging.yml`](.github/workflows/windows-staging.yml)
- [`packaging/windows/focale-relay.iss`](packaging/windows/focale-relay.iss)
- [`scripts/build_windows.ps1`](scripts/build_windows.ps1)
## Commands
```bash
focale login
focale status
focale context show
focale context list
focale context use personal
focale context use my-observatory
focale doctor --hub-url wss://hub.focale.space/ws/agent
focale doctor --hub-url wss://hub.focale.space/ws/agent --json
focale connect --hub-url wss://hub.focale.space/ws/agent
focale --api-server https://api.focale.dev connect --hub-url wss://hub.focale.dev/ws/agent --once
focale connect --organisation my-observatory --hub-url wss://hub.focale.space/ws/agent
focale platesolver status
focale platesolver solve --peaks-file ./peaks.json
```
`focale connect` will automatically:
1. refresh the Focale access JWT when needed
2. create a local Ed25519 keypair if needed
3. enroll a personal or organisation-scoped agent installation if needed
4. mint a Hub JWT
5. discover local ASCOM Remote (Alpaca) servers and register new ones in the selected context
6. complete the Hub challenge-response handshake
You can set the default context once and keep connect/doctor simple:
```bash
focale context use personal
# or
focale context use my-observatory
```
## Plate solving
Plate solving is included with `pip install focale-local-relay` — `arcsecond-astrometry`
is a mandatory dependency and ships native binaries for Windows, macOS, and Linux with no Docker
or external tooling required.
```bash
focale platesolver status
focale platesolver solve --peaks-file ./peaks.json --scales 6
```
You can also target a remote service:
```bash
focale platesolver status --service-url http://127.0.0.1:8900
focale platesolver solve --service-url http://127.0.0.1:8900 --peaks-file ./peaks.json
```
## Development
```bash
python -m venv .venv
source .venv/bin/activate
pip install -e .[dev]
pytest -q
```
## Publishing
This repo includes:
- a PEP 621 `pyproject.toml`
- a CI workflow for tests
- a PyPI publish workflow on tags such as `v0.2.0`
- a Windows installer workflow that builds a PyInstaller bundle and wraps it with Inno Setup