Agreed. Radiators cranked high in a house with poor ventilation dry timber out far more than the outdoor climate does.
One thing worth ruling out cheaply: is there a bath, a heavy wardrobe or a new bed frame directly above those lines? A hundred year old ceiling can start cracking after a change in the loading pattern above it, and the fix is different if that's what's driving it.
Kitchen hygrometer is reading 72% most evenings. Extractor fan is ancient and I suspect it does very little.
There's a tall bookcase flat against that wall on the other side. Moving it this weekend.
A worn cam is the single most common cause of a rattling sash. Even a new cam of the same type will help because the wear is what's giving you the play.
Cheapest first, and in this order:
- Fit a proper sash fastener that pulls the two sashes together rather than just holding them closed. A Brighton fastener or a screw-down fitch catch does this — it forces the meeting rails tight against each other and cures both the rattle and most of the draught in one go. Under £20 and half an hour.
- Brush pile draught strips in routed grooves along the staff beads and parting beads. This is the proper job and it's what specialist sash companies charge hundreds for, but the strips themselves are cheap and you can do it with a router or even carefully by hand.
- Only after those, consider secondary glazing or heavy curtains for the remaining heat loss.
The rattle specifically is nearly always the fastener, not the beading. People go straight to draught strips and are then annoyed it still rattles.
Good instinct not replacing it. A sound 1890s sash with working cords is better joinery than anything at a comparable price today, and repaired properly it'll outlast a replacement unit by decades.
The argument for doing it all at once is the mess, not the wiring. A rewire means channelling walls, lifting floors and patching plaster, and in an old flat that's the expensive and disruptive part. Doing it twice means paying the disruption cost twice, which is a big chunk of the gap between your two quotes.