nebyoulous sync copies files from a local folder to one of two places:
- Cloud: an integration set, with
--to-cloud <id-or-title>or--create "<title>". - Local: another folder, with
--to-local <path>. This runs offline.
Upload to an integration set
--from ./M31 puts files under M31/ and keeps the subfolders below it.
Each run follows the same steps:
1
Plan
Walk the source, apply
--include, --exclude, --frame-type, and
--max-size, and skip files already in the set or the local manifest.2
Upload
Ask the API for presigned URLs in batches (
--batch-size, default 100,
server cap 500). Upload each file straight to storage, --concurrency at a
time (default 4).3
Complete
Mark each batch complete with the API and record the finished files in
the manifest.
Mirror to a local folder
--to-local copies files into another folder. Each copy goes to a temp file
first and is then renamed into place. It needs no sign-in and no network,
which makes it handy for backing up a card in the field:
What gets skipped
--dry-run and --json list every skipped file with a reason:
Frame type comes from the FITS
IMAGETYP header when there is one, then
from words like light, dark, flat, and bias in the file name or path.
Resuming
A manifest records every file that finished:.nebyoulous-sync.json(cloud) or.nebyoulous-sync-local.json(local) in the source folder, when it’s writable.- Otherwise a file under
~/.nebyoulous/state, orNEBYOULOUS_STATE_DIRif set. Camera cards mounted read-only end up here.