Three follow-ups from real-hardware testing of the smear aid: 1. Switching the "Smear preview channel" toggle off then back on showed the live camera feed, not the previous composite. Root cause: Image.image()'s connect_slot subscription only delivers stream entries published *after* connecting (bec_lib's default register(from_start=False, newest_only=False) bookmarks the then-current last entry and only forwards newer ones) -- so nothing re-renders on reconnect until the next sweep pushes a new frame. Added a permanent, independent subscription (newest_only=True) that keeps the last smear_preview payload cached regardless of which channel is currently displayed; set_live_view_signal() now force- renders that cache via main_image.set_data() when switching back to "smear_preview", instead of waiting for a push that may never come. Naturally "resets" once a new sweep starts pushing fresh composites. 2. The new switch row wasn't column-aligned with the existing shutter/camera-running row (each used an independent QHBoxLayout sized by its own labels' widths). Merged both rows into one QGridLayout with right-aligned label columns, so all four toggles line up regardless of label text length. Shutter now pairs with Smear integrating, Camera running with Smear preview channel. 3. find_rotation_center_smear_experimental() now archives each run to a timestamped HDF5 file (~/data/raw/logs/xrayeye_smear_calibration/), mirroring align()'s existing _save_alignment_data() pattern: the FZP reference, one composite image + one clicked centre per iteration, and the final result -- collecting data towards eventually automating center detection from the composite offline. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>