Troubleshooting¶
Retries and rate limiting¶
SJVAirClient (used by both the CLI and the Python library) retries failed requests automatically:
Server errors (5xx) are retried up to 5 times with exponential backoff (1s, 2s, 4s, 8s, 16s) before raising
sjvair.exceptions.ServerError.Rate limiting (429) triggers a shared cooldown — every in-flight and subsequent request waits until it clears, not just the one that got limited. The cooldown starts from the server’s
Retry-Afterheader (or 60s if it’s absent) and doubles on each subsequent 429, up to 5 retries, before raisingsjvair.exceptions.RateLimited.
--timeout/SJVAIR_TIMEOUT (default 30 seconds) is the main knob available if requests are timing out rather than erroring; there’s currently no CLI flag to change the retry count.
Region name ambiguity¶
--county, --city, --zip, --tract, and --urban all resolve a name to a region by searching, and that search can match more than one region. For example, --urban Hanford also matches Waterford:
Error: Ambiguous region 'Hanford' — 2 matches. Re-run with --region-id:
zvnca urban_area Hanford
k3net urban_area Waterford
Use sjvair regions search <name> to see candidate matches up front, then pass the exact ID via --region-id instead of a name shortcut.
Map and timelapse basemap fetches can be flaky¶
map create and timelapse create fetch OpenStreetMap basemap tiles over the network (via contextily). These fetches occasionally fail with a connection or SSL error — this is transient upstream behavior, not a bug in sjvair.
For timelapse create, this is cheap to recover from: frames are written as numbered PNGs to --frames-dir (default <output>.frames/), and re-running the same command skips any frame that already exists on disk. If a run fails partway through, just run it again — it resumes instead of starting over.
GIF output size¶
Animated GIFs have no real inter-frame compression, so file size scales with resolution and frame count. See timelapse create for sizing guidance and the CLI’s built-in size warning.