Commit Graph
224 Commits
Author SHA1 Message Date
Dariusz L f99cedb441 perf: use screen-sized drag previews 2026-08-18 22:33:45 +02:00
Dariusz L 032a55d0c5 fix: clear drag overlay trails 2026-08-18 22:12:34 +02:00
Dariusz L 08b2255096 fix: preserve processed cache key format 2026-08-18 22:03:01 +02:00
Dariusz L 6aeb5e29b3 fix: isolate drag blend masks 2026-08-18 22:01:18 +02:00
Dariusz L c73dbc3fb3 perf: redraw only dirty drag regions 2026-08-18 21:59:35 +02:00
Dariusz L 137a883c3d perf: reduce opaque blend mask memory 2026-08-18 21:56:37 +02:00
Dariusz L 14e1c24ab0 perf: keep valid blend preview during rebuild 2026-08-18 21:53:46 +02:00
Dariusz L f7dce559d7 perf: preserve blend modes in drag cache 2026-08-18 21:46:01 +02:00
Dariusz L 7cca712bc3 perf: cache static layers during drag 2026-08-18 21:26:51 +02:00
Dariusz L 9afedaa964 perf: defer intermediate transform cache builds 2026-08-18 21:18:40 +02:00
Dariusz L efb9599645 perf: keep only latest processed layer cache 2026-08-18 21:16:49 +02:00
Dariusz L 3e0fe35d86 perf: reuse distance field masks 2026-08-18 21:14:33 +02:00
Dariusz L ce6543fd49 perf: defer blend cache builds during interaction 2026-08-18 21:00:40 +02:00
Dariusz L 4de1e0cb62 perf: cache cropped blend masks 2026-08-18 20:30:39 +02:00
Dariusz L 20261adb00 perf: deduplicate processed blend cache builds 2026-08-18 20:27:10 +02:00
Dariusz L 8e4ad0d173 perf: build blend cache after layer drag 2026-08-18 20:22:14 +02:00
Dariusz L 8ad680a3c5 perf: keep blend rendering cheap during layer drag 2026-08-18 20:20:41 +02:00
Dariusz L 4a0ee076e0 Optimize canvas interaction and rendering performance 2026-08-18 20:12:55 +02:00
Dariusz L 4e660353b9 Re-sync workflow overview selection when moving LayerForge into fullscreen 2026-08-14 23:43:58 +02:00
Dariusz L ad1277d964 sync LayerForge workflow overview with ComfyUI Vue properties panel
Replace the old 1s promise-based wait loops with a single cancelable
requestAnimationFrame sync path so opening the Workflow Overview no
longer races ComfyUI's Vue Nodes 2.0 properties panel.

Access the Vue/Pinia canvas store directly and refresh its selected items
after native selection mutations. Make selection clearing repeatable so
ComfyUI can restore the selection while mounting the panel without
leaving the LayerForge node highlighted, and explicitly sync the final
empty selection state to the properties panel.
2026-08-14 23:39:28 +02:00
Dariusz L 9f1e35aa2b Preserve ComfyUI selection across workflow overview toggle 2026-08-14 22:50:07 +02:00
Dariusz L 99b0b80f1d feat: hide canvas editor DOM widget in panel 2026-08-14 22:33:49 +02:00
Dariusz L cfe2a92f12 feat: add workflow overview toggle to canvas editor modal 2026-08-14 21:58:11 +02:00
Dariusz L 0e636ed99b feat: improve tooltip behavior with persistent and interactive modes
- Convert keyboard shortcuts help button to persistent click-toggle tooltip
- Add interactive, persistent, and onDismiss options to TooltipManager
- Dismiss persistent tooltips on outside pointerdown or Escape key
- Add delayed hide for interactive tooltips when leaving the target
- Update tooltip CSS for scrolling, interactive pointer-events, and text mode
2026-08-14 21:09:13 +02:00
Dariusz L 05c977f342 refactor: centralize tooltip handling into TooltipManager
Replace scattered inline tooltip implementations across canvas_view,
custom_shape_menu, layers_panel, batch_preview_manager, and notifications
with a single shared TooltipManager class.

- New src/utils/tooltip_manager.ts (and compiled js/utils/tooltip_manager.js)
  provides observeRoot/bindTooltips/setTooltip/showTooltip/hideTooltip API
- Migrate title attributes to data-tooltip and normalize via MutationObserver
- Rename tooltip CSS from .lf-painter-tooltip/.lf-layerforge-tooltip to
  .lf-global-tooltip and raise z-index to 1000001
- Remove duplicate matting-specific tooltip styles from canvas_view.css
- Update generated js/ outputs to match src/ changes
2026-08-14 20:16:26 +02:00
Dariusz L 6d3ed9f458 fix: preserve mask brush cursor over image canvas 2026-08-14 19:14:42 +02:00
Dariusz L aa499f8668 fix: improve mask editor panning and cursor behavior
- Resolve mouse button in mask mode so middle-click pans instead of
  inadvertently starting a mask draw, and cleanly end any active mask
  stroke before panning.
- Redraw the mask brush cursor during pan so the brush outline stays
  under the actual mouse position after the viewport transform changes.
- Reset interaction state on pointer up when leaving drawing modes so
  stale interaction state cannot persist across gestures.
- Set the canvas cursor to grabbing when panning begins.
2026-08-14 18:56:47 +02:00
Dariusz L f38402e107 feat: improve mask editor compatibility and state synchronization 2026-08-14 18:24:54 +02:00
Dariusz L 5ea337fb51 refactor: standardize frontend file naming 2026-08-14 16:56:46 +02:00
Dariusz L 34a7896fd9 refactor: remove compatibility facades 2026-08-14 16:38:16 +02:00
Dariusz L 84dd15aff5 refactor: remove legacy logger re-exports 2026-08-14 16:23:27 +02:00
Dariusz L fc4292ecb0 ci: enforce generated frontend and coverage 2026-08-14 15:56:31 +02:00
Dariusz L 248810ae87 test: harden async and persistence resilience 2026-08-14 15:51:39 +02:00
Dariusz L 3e44835d94 chore: clean frontend lint warnings 2026-08-14 12:04:27 +02:00
Dariusz L 899b1fd41f refactor: separate mask result processing 2026-08-14 11:52:38 +02:00
Dariusz L b4f14b5774 refactor: move image cache into media domain 2026-08-14 11:49:48 +02:00
Dariusz L 1c5393a47c refactor: unify persistence contracts 2026-08-14 11:43:55 +02:00
Dariusz L 55dcf6617f refactor: isolate canvas history model 2026-08-14 11:38:27 +02:00
Dariusz L f206ff0289 refactor: extract graph integration from CanvasView 2026-08-14 11:29:57 +02:00
Dariusz L 12692a2564 refactor: organize frontend source modules 2026-08-14 11:06:38 +02:00
Dariusz L 32cb0d0674 fix: defer input image loading until after state restore and deduplicate by stable source identity
- Load initial state before checking connected inputs so already-restored
  layers are present and can be skipped.
- Track layerForgeInputImageIdentity on layers and normalize sources to
  ignore cache-busting query parameters.
- Sequence checkForInputData calls through a promise chain to avoid races.
- Route single backend input_image through addBatchImages so dedup applies.
- Update characterization tests for the new CanvasIO paths and Canvas state flags.
2026-08-14 05:13:42 +02:00
Dariusz L 7804f6e3de feat: add Unlink button to disconnect image inputs from LayerForge 2026-08-14 04:56:48 +02:00
Dariusz L abe0ea7ce7 Use stable connectionIndex for multi-image input labels 2026-08-14 04:48:32 +02:00
Dariusz L 1468065210 feat: add Show Inputs menu for connected canvas input images 2026-08-14 04:45:21 +02:00
Dariusz L c8b9e3ccc4 Add ordered multi-image input support via virtual transport links 2026-08-14 04:25:08 +02:00
Dariusz L a942228ef3 Use workflow-scoped canvas state keys and stabilize preview widget sizing 2026-08-13 22:45:27 +02:00
Dariusz L e9813d5016 Improve canvas image preview widget sizing and visibility handling 2026-08-13 22:19:13 +02:00
Dariusz L 37179fd29d Make LayerForge canvas and controls blend with ComfyUI dark theme
Use transparent canvas backgrounds, rgba styling, and CSS custom properties
(--lf-canvas-fill, --lf-surface-border, --lf-controls-surface,
--lf-layers-surface, --lf-surface-shadow) so the editor's native color tints
the node underneath. CanvasRenderer now clears the canvas each frame and
reads the fill from CSS, avoiding alpha buildup and keeping the UI readable.
2026-08-13 21:44:31 +02:00
Dariusz L c9df359ecd Refresh layer panel after matting replaces a layer object 2026-08-13 21:10:58 +02:00
Dariusz L 11d448cdc8 Add matting download progress, interrupt handling, and inverted mask mode 2026-08-13 20:47:10 +02:00