SyncAPI Setup - aaronwmorris/indi-allsky GitHub Wiki

General

indi-allsky provides a new web service API to synchronize images and videos to a remote indi-allsky [web] server. indi-allsky is now capable of being its own remote web server instance.

Terms

  • local - The server connected to the camera
  • remote - The server receiving the uploaded files

Distributions

  • Debian 12
    • Raspberry Pi OS 12
  • Debian 11
    • Raspberry Pi OS 11
  • Ubuntu 24.04
  • Ubuntu 22.04
  • Ubuntu 20.04

Install remote server

Install the indi-allsky web application on the remote server. The server needs the ability to run a gunicorn service via systemd and a reverse proxy using Apache. It is also possible to use Nginx as a reverse proxy (manual setup).

./misc/web_only_setup.sh

Generate API key

On the remote indi-allsky server, after the web server is deployed, generate an API key for the remote user. You may create a dedicated user account for the sync activity.

  • Create user

      source virtualenv/indi-allsky/bin/activate
      
      $ ./misc/usertool.py adduser -u syncuser
      Password (not echoed):
      Password (again):
      Name: SyncAPI user
      Email: [email protected]
    
  • Set admin

      $ ./misc/usertool.py setadmin -u syncuser
    
  • Generate API key

      $ ./misc/usertool.py genapikey -u syncuser
    
      API key: 00000000000000000000000000000000000000000000000000
    

Setup syncapi

Navigate to the config URL in the local server and enable the SyncAPI and add the following details.

  • Remote base URL
  • Username
  • API key

Save and restart

Enable multiple upload workers (optional)

You may also enable multiple upload workers so that a single transfer does not halt all upload activities. More workers requires more memory to support the additional processes. 2GB of memory is recommended for additional workers.

Timestamps and Timezones

Dates in the indi-allsky database are set to the local time of the local server running capture and are NOT UTC and NOT timezone aware.

As of March 2023, for SyncAPI, the timestamps of assets are remapped to the local time of the remote server. Meaning if a video has a createDate timestamp of 3:05am Pacific Standard Time [PST] and the remote server is set to Eastern Standard Time [EST], the file on the remote server will be 3:05am.

All time calculations for the web interface are offset based on the camera timezone. If it is currently 6:00am EST, "now" for a camera in located in PST will be 3:00am.

API Overview

The SyncAPI is roughly idiomatic with a standard REST API, however there are some deviations.

Images and videos have two components that are required for uploads:

  1. Metadata (create date, exposure, gain, etc)
  2. The file itself

Normally, in a REST service, data is added using a JSON request, however in order to minimize the number of calls required to upload a file, the POST, PUT, and DELETE methods are implemented as a multipart/form-data form upload. The metadata and media file are uploaded as two separate file objects and processed in the same request.

Endpoints:

Type Endpoint Note
CAMERA sync/v1/camera
IMAGE sync/v1/image
VIDEO sync/v1/video
MINI_VIDEO sync/v1/minivideo
KEOGRAM sync/v1/keogram
STARTRAIL sync/v1/startrail
STARTRAIL_VIDEO sync/v1/startrailvideo
PANORAMA_IMAGE sync/v1/panoramaimage
PANORAMA_VIDEO sync/v1/panoramavideo
THUMBNAIL sync/v1/thumbnail
RAW_IMAGE sync/v1/rawimage not currently used
FITS_IMAGE sync/v1/fitsimage not currently used

Methods

  • GET - returns file ID and URI
  • POST - upload and add file (will not overwrite existing file)
  • PUT - upload and add/overwrite file
  • DELETE - delete file