diff --git a/docs/plans/2026-04-03-ux-rework-design.md b/docs/plans/2026-04-03-ux-rework-design.md new file mode 100644 index 0000000..b18a856 --- /dev/null +++ b/docs/plans/2026-04-03-ux-rework-design.md @@ -0,0 +1,55 @@ +# UX Rework Design — 2026-04-03 + +## Context + +After regular use, three pain points emerged: +1. Autosave generates too many snapshots (moves spam the timeline bar) +2. Branching UI is confusing and never used +3. No way to know what specifically changed when hovering a snapshot + +## Changes + +### 1. Autosave — Skip move-only snapshots + +**Problem:** Moving nodes triggers auto-captures as frequently as structural changes, filling the timeline fast. + +**Solution:** Add a guard in the capture path: if `detectChangeType()` returns `'move'`, skip the save and return early. No new config, no debounce changes. + +Existing snapshots are unaffected. + +### 2. Detailed diff metadata on hover + +**Problem:** Snapshot icons show a change type icon but not *what* specifically changed. + +**Solution:** At capture time, after `detectChangeType()`, run a new `computeDetailedDiff(prevGraph, currentGraph)` that produces: + +```json +{ + "added": ["CLIPTextEncode", "KSampler"], + "removed": ["VAEDecode"], + "params": ["KSampler: steps 20→30", "KSampler: cfg 7→9"] +} +``` + +This object is stored in snapshot metadata. On hover in the sidebar or timeline, a tooltip renders these lines as plain text. + +For snapshots captured before this change (no `diff` field), the tooltip falls back to the existing change type label. + +**Diff computation:** +- Added/removed nodes: compare node sets by ID, label by title+type +- Changed params: compare `widgets_values` per node between previous and current graph + +### 3. Hide branching UI + +**Problem:** Branch navigation is confusing and adds visual noise. + +**Solution:** Add `const BRANCHING_ENABLED = false` at the top of `snapshot_manager.js`. All branch UI rendering (the `< 1/2 >` navigator, branch buttons, `activeBranchSelections` sidebar/timeline logic) checks this flag and skips when false. + +Underlying data and code (parentId, buildSnapshotTree, etc.) are left intact. + +## Out of Scope + +- Removing branching code +- Making branching a user-facing settings toggle +- Changing debounce timing +- Retroactively hiding or deleting move-type snapshots