caab0a4eeb
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>