**Note** from Bead: Incident Viewer Epic 5 · [canonical source](https://redfish.acequia.io/guerin/.agents/84395793-e621-4739-81e4-fe247b9e6003/2026-06-25/notes/04-opacity-catalog-frustum-sketches.md) · session 2026-06-25 · discussion: Talk: Incident Viewer Epic 5
**2026-06-25.** Stephen's batch: per-item opacity, slider UI, catalog cleanup, and a Debbie design task.
## Shipped (live on BOTH hosts → `index-BEkqS3z5.js`) - **#4 Per-item opacity on every camera frame** (was FMV-only). The layer-tree opacity slider only moved the FMV; AlertWildfire camera image cards were hardcoded `alpha=1`. Each card owns its own material, so per-item is separable — wired the billboard + projector to `alphaOf(c.itemId)` (the same tree-driven per-item path FMV uses). Locked image still obeys the `i` toggle. Camera MARKER glyphs stay collection-level (shared material). `feat/elevation-assertion` `644a6ae`. - **#3 Opacity slider UI fixed.** The slider was an invisible 3px sliver (default range + `height:3px` collapsed the thumb). Replaced with a custom cross-browser range: 4px track + a real 14px draggable thumb (webkit + moz pseudo-elements). CDP-verified: thumb visible, drag emits (`35%`). [`lib/layer-tree.js`].
## Shipped (data — simtable) - **#1 Removed `imagery-irhs` from the 2026 Sandy Fire catalog.** Dropped the child link (+ the description's "IR/HS imagery overlays") from [2026SandyFire/catalog.json](https://simtable.acequia.io/incidents/stac/2026SandyFire/catalog.json). Collection stays on disk (reversible); original backed up to [catalog.pre-imagery-irhs.json](https://simtable.acequia.io/incidents/stac/2026SandyFire/catalog.pre-imagery-irhs.json). Viewer now loads fmv=5/perimeters=6/progression=1/cameras=30 (was +imagery-irhs=18). - **Swapped the progression ToA to v1** (Stephen: *"we want the v1 toa in the progression. you can drop the existing one"*). The progression collection now serves **`toa-2026sandyv1`** ("2026 Sandy V1 — first custom curated 9-KML override," by Marcos; raster on redfish at [182bd1a7/.../ref-2026sandyv1/progression.png](https://redfish.acequia.io/guerin/.agents/182bd1a7-a376-4dd0-b445-578adc6635b9/2026-06-18/artifacts/ref-2026sandyv1/progression.png), CORS-OK) and the old auto-v0 `toa-2026_CAVNC_042326_sandy` item was deleted (its simtable.com raster was 404'ing anyway). Temporal start extended to v1's first perimeter 17:50Z. Collection backed up to [progression/collection.pre-v1.json](https://simtable.acequia.io/incidents/stac/2026SandyFire/progression/collection.pre-v1.json). CDP-verified: viewer decodes `toa-2026sandyv1` 1920×1080, 1,049,201 burned px, timesteps 17:50Z→05:29Z. Pure STAC edit — both hosts read the same catalog, no rebuild.
## Design — Debbie (#2 + the #5 toggle), NOT yet built - **The yellow box that blocks look-through** = the filled billboard quad (`buildCamCard`, 100 m in front of the eye) + the flat azimuth `wedge` (`buildWedgeMesh`). From the camera's own eye that filled face is exactly what you're trying to see past. - Debbie sketched 4 alternatives (house-style rendered SVG + ▶replay, camera-center vs orbit), all sharing the spine Stephen specified — **open image-aspect rectangle (no filled face) + 4 corner rays apex→where the image corners land in the world**: - **A** open rect + corner rays (baseline; collapses to a thin border from the eye) - **B** corner rays only ("whiskers") + faint footprint - **C** rect + ticked optical axis + ground-footprint polygon — **Debbie's recommendation** - **D** inert cage, lit on hover/select, auto-hidden in look-through (composes over A–C) - Plus a **rendering-model strip**: billboard quad (P off) / terrain drape (P on, variable depth) / constant-radius **panosphere cap** (FMV-only today) — the three things the corner rays can point at. - Sketch: [sketches/frustum-alternatives.html](https://redfish.acequia.io/guerin/.agents/84395793-e621-4739-81e4-fe247b9e6003/2026-06-25/sketches/frustum-alternatives.html). - **5 answerable questions** posed (which alt / which rendering model / default on-off / ray styling / toggle location) — put to Stephen as a checkbox form. Build pends his picks.
## Rendering-model answer (Stephen's "billboard or per-pixel depth map?") Today the AlertWildfire camera image with **P off is a flat billboard quad** (single rectangle 100 m out), NOT per-pixel. **P on projects it onto the real terrain** (per-fragment, variable depth). The **constant-radius depth-map / panosphere ("cap")** exists only for the FMV sensor (`capMat`, `projectMode 'cap'`), not yet wired to the still cameras — that's the third option in Debbie's strip.
## Owed (authed browser) Camera-frame opacity (#4) is code-correct (same path as FMV) but AlertWildfire cards are auth-gated, so it can't be pixel-verified headless. Confirm the per-camera slider moves an AlertWildfire image live.
## References (bead cross-links) - Bead: Fire Progression · [canonical](https://redfish.acequia.io/guerin/.agents/182bd1a7-a376-4dd0-b445-578adc6635b9/)