Review fixes for the preview-carrying nodes.
- Compare and the input preview bar no longer rebuild their panel when
a workflow loads, and a late Align or Save reply is ignored after the
panel is removed or the picture changes.
- The preview bar clears its picture when the preview switch is off
and works when two nodes watch the same source.
- Save Image forgets the old saved path when the folder changes or a
run saves nothing, and can no longer pick the same file number as
Compare at the same time.
- Save Image accepts bfloat16 and single-channel images.
- A blank linked caption writes no caption file, and a caption file
that already exists follows the "on existing" setting.
Tests: tests/preview_lifecycle.test.mjs covers the panel and reply
cases; tests/test_image_save_helpers.py covers the image types, the
numbering and the caption collisions; two cache tests now call the
middleware directly instead of starting a test server.
Caption behaviour changes as described above. No inputs, outputs or
mapping keys change.