**Note** from Bead: Wildfire Imagery Acquisition & Catalog Ops · [canonical source](https://redfish.acequia.io/guerin/.agents/b3461c66-1a49-4f62-8920-d6dcc9838942/2026-06-21/notes/la-fire-camera-stac.md) · session 2026-06-21 · discussion: Talk: Wildfire Imagery Acquisition & Catalog Ops
> Worked run. Stephen: "we have some fires going on in Los Angeles. First grab these AlertCalifornia > cameras as their own STAC. We can have incident STACs refer to a subset of time and space later." > So this is a **camera-centric** catalog (the cameras + their frames), NOT an incident folder.
## What was built - **Skill:** [`skills/grab-alertcalifornia-stac.mjs`](../skills/grab-alertcalifornia-stac.mjs) — extends the Python `grab-alertwest.py` (same source API) but **emits STAC** and writes to a stable camera catalog path instead of `incidents/<incident>/`. Each frame → a STAC Item with per-frame pose (`pose:azimuth/elevation/zoom/hfov`, `view:azimuth`); geometry = camera location (Point). The cameras form one STAC **Collection** `alertcalifornia-la-cams`. - **Catalog (its own STAC):** `https://simtable.acequia.io/cameras/alertcalifornia/collection.json` - `collection.json` — extent (spatial bbox over the cams, temporal interval of the grabbed window), `summaries.cameras[]` (id, name, lat/lon, county, latest pose), item links. - `items/alertca-<camId>-<unix>.json` — one per frame. - `<camId>/<YYYY>/<MM>/<DD>/<frame>.jpg` — the frames (stable copies; item `assets.image` points here, `assets.cdn` = live AlertWest CDN alternate).
## The cameras (resolved from the live roster) `getCameraDataByLoc` → `cams.data[]` joined to `locs.data[]` by `camLocation`→`locId`: | camId | name | lat | lon | county | view (az/el/zoom/hfov) | |---|---|---|---|---|---| | 1901 | College_Peak_1 | 34.017124 | -118.014748 | LosAngeles | 293.5° / -2.6° / 4143 / 4.54° | | 1902 | College_Peak_2 | 34.017124 | -118.014748 | LosAngeles | 270.3° / -0.4° / 7323 / 2.65° | | 8610 | Chino_Hills_West_1 | 33.944894 | -117.821871 | Orange | 297.4° / -1.9° / 753 / 16.6° | | 1805 | Baldwin_Hills_1 | 34.005314 | -118.363129 | LosAngeles | 85.4° / 0.2° / 9352 / 2.09° | | 2493 | Westridge_1 | 34.086666 | -118.510620 | LosAngeles | 107.4° / 2.4° / 5389 / 4.03° | These are the exact five tiles in Stephen's screenshot. Each `_1`/`_2` is a separate PTZ preset on the same physical mast (College Peak 1 & 2 share a location; same for Baldwin/Westridge `_2` variants left out of this grab).
## Run parameters `node grab-alertcalifornia-stac.mjs --cams 1901,1902,8610,1805,2493 --lapse 300` - `--lapse 300` = the last 5 minutes at native cadence (~15–20 s/frame, ~16 frames/cam) — "the cameras right now during the fire." Bump `--lapse` (900 / 3600 / 86400) for a longer, coarser tail; the API caps at ~121 frames/window and has **no historical query** (see `docs/alertcalifornia/01-source-api`).
## Pose / oriented-imagery Per-frame pose is the point of the camera STAC: `camAzimuth`(p), `camElevation`(t), `camZoom`(z), `camViewWidth`(fov) become `pose:*` + `view:azimuth`. A consumer can ray-cast each frame from the camera Point along the azimuth to intersect terrain (the through-the-lens / panosphere calibration in beads `9943ac1c` / `74c30681`), or triangulate a smoke column from two cameras' azimuths.
## Known inefficiency (for next iteration) The `.mjs` re-MKCOLs the full date path per frame (no `seen_dirs` cache like the Python version), so a multi-camera grab spawns many redundant MKCOLs and runs slow. Cache created dirs before the next run.
## Relation - Companion live **ADS-B** grab for the same fire: bead [`2986ff41`](https://redfish.acequia.io/guerin/.agents/2986ff41-41ea-4629-bc6b-3ce22f55e628/) `grab-adsb-live.mjs` → `simtable.acequia.io/aircraft/adsb-la-fire/`. - Both are source-foragers under [`5b518c35` wildfire-forager](https://redfish.acequia.io/guerin/.agents/5b518c35-2ce7-474a-a5a8-ec83e2fd0e82/). Incident STACs ([`90f902e0`](https://redfish.acequia.io/guerin/.agents/90f902e0-2e45-4aa1-b998-918ca3688e94/) / `c38c1239`) will reference subsets of these camera + aircraft items by time and space.
## References (bead cross-links) - Bead: Bead · [canonical](https://redfish.acequia.io/guerin/.agents/2986ff41-41ea-4629-bc6b-3ce22f55e628/) - Bead: Wildfire Forager · [canonical](https://redfish.acequia.io/guerin/.agents/5b518c35-2ce7-474a-a5a8-ec83e2fd0e82/) - Bead: Catalog · [canonical](https://redfish.acequia.io/guerin/.agents/90f902e0-2e45-4aa1-b998-918ca3688e94/)