Commit Graph

21 Commits

Author SHA1 Message Date
Jon
1af4b215b2 Turn the demo app into a Canon 450D intervalometer
Some checks failed
CI / build-and-deploy (push) Has been cancelled
Replaces the gPhoto2 demo UI (live view beside the raw config tree) with a
timelapse intervalometer. The home screen carries only what changes between
runs - interval, frame count, start delay, start/stop, countdown, progress
and a log - while every camera setting moves into a settings drawer.

- intervalometer.js: schedules frames on an absolute grid (start + n *
  interval) so transfer time doesn't accumulate as drift over a long run. An
  overrun logs and fires as soon as the camera is free rather than dropping a
  frame; three consecutive failures abort.
- storage.js: frames stream into a folder via the File System Access API,
  named for capture time (20260801-172713_00001.JPG) so sorting by name is
  sorting by time. Falls back to downloads. Also holds the screen wake lock,
  since background tabs get their timers throttled.
- config-utils.js: config tree lookups, shutter speed parsing, and bulb
  capability detection (bulb toggle or Canon eosremoterelease).
- home.js: sequence controls plus a read-only exposure readout and pre-flight
  warnings when the interval can't fit the exposure and transfer.
- settings.js / index.js: app prefs and the full config tree behind a drawer.
  Config polling now only runs while that drawer is open, leaving the USB link
  to the captures during a sequence.

Live view stays up between frames and steps aside only while the shutter
fires, which is what the EOS driver requires; it recovers afterwards with
backoff instead of hammering a busy camera.

Deployed as an assets-only Cloudflare Worker. The WASM is built with pthreads
and allocates a shared WebAssembly.Memory, so _headers reproduces the COOP/COEP
pair from serve.json - without cross-origin isolation the app fails to start.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QK7PKpRVoy69Fpa32R8abb
2026-08-01 18:47:04 +01:00
Ingvar Stepanyan
7d5ed6d2ff Update README examples 2023-08-05 19:49:02 +01:00
Ingvar Stepanyan
0380077969 More demo updates 2023-08-05 19:38:32 +01:00
Ingvar Stepanyan
c80c04f006 Bunch of updates in preparation for publish 2023-08-05 18:46:26 +01:00
ICheered
8b2cc94351 Update readme 2023-08-05 17:47:05 +02:00
ICheered
b74d938839 Make the Camera object a named export 2023-08-05 15:22:29 +02:00
ICheered
34c7df5411 Hide common issues in details/summary 2023-08-05 13:57:40 +02:00
ICheered
b0c044aa3a Fixes for review 2023-08-05 13:43:44 +02:00
ICheered
385952d9af Minor readme fix 2023-08-04 18:13:25 +02:00
ICheered
8b10757e92 Move navigator.usb.requestDevice to package 2023-08-04 17:59:42 +02:00
ICheered
8c21f708be Update readme 2023-08-03 18:23:21 +02:00
ICheered
6358e6c7ef WASM => WebAssembly 2023-08-03 17:18:38 +02:00
ICheered
0a18222462 Add build files and documentation 2023-08-02 21:28:44 +02:00
Ingvar Stepanyan
e917919ca4 Update README.md 2023-03-05 23:41:25 +00:00
Ingvar Stepanyan
485593b8fe libusb WebUSB backend is now upstream 2023-01-05 23:51:17 +00:00
Ingvar Stepanyan
62a87c4729 Update README.md 2022-02-02 12:45:32 +00:00
Ingvar Stepanyan
6a03065557 Oxford comma for clarity 2022-01-26 00:43:07 +00:00
Ingvar Stepanyan
9d3f4847e8 Update README.md 2022-01-19 14:12:51 +00:00
Ingvar Stepanyan
b682303c75 Move more things to the ui folder 2021-11-30 19:15:29 +00:00
Ingvar Stepanyan
1001e71b48 Add serve config & more instructions 2021-08-09 12:44:48 +00:00
Ingvar Stepanyan
3c89a9c932 Add short README 2021-08-06 23:14:36 +00:00