Refactor: image pipeline to utils, normalize device.matrix
- utils/image.py: add auto_range(), apply_viridis(), fits_to_png()
(moved from fits_image.py; fits_to_png() combines the 3-step pipeline)
- devices/mako.py Guider: add dtype=np.uint8, acquisition='stream';
matrix now returns (H,W) always (squeeze inside the device)
- devices/stx.py Camera: add dtype=np.float32, acquisition='trigger'
- api/fits_image.py: remove _apply_viridis/_auto_range definitions;
_run_loop uses device.dtype/acquisition instead of isinstance(stx.Camera);
/png and /panoramic routes simplified via fits_to_png()
- web/stream.py: import auto_range/apply_viridis from utils.image instead
of fits_image; _broadcast_preview simplified to fits_to_png() one-liner;
_fits_path promoted to top-level import
- Remove mako_ok_with_opencv.py (dead code)
Co-Authored-By:
Claude Sonnet 4.6 <noreply@anthropic.com>