Focale desktop and Hub bootstrap client
Project description
Focale
Focale is a small desktop/CLI bootstrap for Focale users that:
- logs in with the user's Arcsecond account
- creates and stores a local Hub agent identity
- enrolls that identity with Arcsecond when needed
- mints a short-lived Hub JWT
- connects to the Arcsecond Hub using the signed Ed25519 challenge flow
Focale owns its own local state and uses Arcsecond password login to obtain a short-lived bearer JWT plus a refresh token.
User install
Python / terminal
pip install focale
Then:
focale login
focale context list
focale context use personal
focale connect --hub-url wss://hub.arcsecond.io/ws/agent
Desktop GUI
python -m focale 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.exe.
See:
Commands
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.arcsecond.io/ws/agent
focale doctor --hub-url wss://hub.arcsecond.io/ws/agent --json
focale connect --hub-url wss://hub.arcsecond.io/ws/agent
focale --api-server https://api.arcsecond.dev connect --hub-url wss://hub.arcsecond.dev/ws/agent --once
focale connect --organisation my-observatory --hub-url wss://hub.arcsecond.io/ws/agent
focale platesolver status
focale platesolver solve --peaks-file ./peaks.json
focale connect will automatically:
- refresh the Arcsecond access JWT when needed
- create a local Ed25519 keypair if needed
- enroll a personal or organisation-scoped agent installation if needed
- mint a Hub JWT
- discover local ASCOM Remote (Alpaca) servers and register new ones in the selected context
- complete the Hub challenge-response handshake
You can set the default context once and keep connect/doctor simple:
focale context use personal
# or
focale context use my-observatory
Plate solving
Plate solving is included with pip install focale — arcsecond-astrometry
is a mandatory dependency and ships native binaries for Windows, macOS, and Linux with no Docker
or external tooling required.
focale platesolver status
focale platesolver solve --peaks-file ./peaks.json --scales 6
You can also target a remote service:
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
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
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file focale-0.3.1.tar.gz.
File metadata
- Download URL: focale-0.3.1.tar.gz
- Upload date:
- Size: 85.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
597e12a60a482feb9ed8a599372d89f3fb7478bb8847ca0e01a0b010173b7126
|
|
| MD5 |
8d3213d3e2b2fec60845e4e687cf5f44
|
|
| BLAKE2b-256 |
157f841f2aaa14da635466db35e96535a7d14428a16b95d6d7e8a277d0e6f123
|
Provenance
The following attestation bundles were made for focale-0.3.1.tar.gz:
Publisher:
publish.yml on arcsecond-io/focale
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
focale-0.3.1.tar.gz -
Subject digest:
597e12a60a482feb9ed8a599372d89f3fb7478bb8847ca0e01a0b010173b7126 - Sigstore transparency entry: 1237114269
- Sigstore integration time:
-
Permalink:
arcsecond-io/focale@354b7bd687edf03853aeba39dd1a8ad0a2a7e70e -
Branch / Tag:
refs/tags/v0.3.1 - Owner: https://github.com/arcsecond-io
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@354b7bd687edf03853aeba39dd1a8ad0a2a7e70e -
Trigger Event:
push
-
Statement type:
File details
Details for the file focale-0.3.1-py3-none-any.whl.
File metadata
- Download URL: focale-0.3.1-py3-none-any.whl
- Upload date:
- Size: 45.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3c4811c19cda7826152a164e881c155a5839f9ffad77f17c25e9fed58cecc3dd
|
|
| MD5 |
afcc8631b8ebfb28ec05f7226bf89af4
|
|
| BLAKE2b-256 |
4ee9ce1429c645ca2ecc887ad48a01f3ecbef01d58bb48e1c6bdf6d34e606665
|
Provenance
The following attestation bundles were made for focale-0.3.1-py3-none-any.whl:
Publisher:
publish.yml on arcsecond-io/focale
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
focale-0.3.1-py3-none-any.whl -
Subject digest:
3c4811c19cda7826152a164e881c155a5839f9ffad77f17c25e9fed58cecc3dd - Sigstore transparency entry: 1237114308
- Sigstore integration time:
-
Permalink:
arcsecond-io/focale@354b7bd687edf03853aeba39dd1a8ad0a2a7e70e -
Branch / Tag:
refs/tags/v0.3.1 - Owner: https://github.com/arcsecond-io
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@354b7bd687edf03853aeba39dd1a8ad0a2a7e70e -
Trigger Event:
push
-
Statement type: