Browsing the timeline still created a snapshot per swap — the exact spam
this work set out to remove. Two causes:
1. After loadGraphData, the dedup baseline (lastCapturedHashMap) was
seeded from the stored record.graphData, but captureSnapshot hashes a
fresh app.graph.serialize() of the loaded graph. ComfyUI's
re-serialization isn't byte-identical to the saved bytes, so the hash
never matched and the pre-swap "Current" capture fired every time.
Seed the baseline from the live re-serialization instead, so the next
capture dedupes to a no-op.
2. The pre-swap/pre-restore "Current" capture used skipCosmetic=false, so
post-load cosmetic settling (node size/position nudges) or a stray move
still produced a snapshot. Make these automatic captures skip cosmetic
like the auto path — only explicit manual saves (Ctrl+S / Snapshot
button) keep cosmetic-only changes now.
Net effect: browsing between snapshots produces zero snapshots; only a
genuine unsaved meaningful edit is preserved before a load.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>