frames property
Each step's two frames, by the id its ComparedItem carries.
Beside the items rather than on them: a preview's shots are cache keys
and these are paths, and one field meaning two different kinds of thing is
how a reader ends up opening the wrong one.
Implementation
final Map<String, ({FrameRef? base, FrameRef? head})> frames;