Commit Graph
546 Commits
Author SHA1 Message Date
Mel Massadian 3dbcf2cd67 feat(mtb-api): add drag-drop reordering for api inputs
- implement drag-drop interface in TabUI with svelte-dnd-action
- add notifyOrderChanged event to persist input order to node properties
- update getAPIInputs to sort by order field and assign sequential ids
- add order? optional field to APIInputSettings for tracking display order
- listen for MTB_API_ORDER_CHANGED_EVENT in APIPanel and apply reordering via applyInputOrder
2026-01-19 17:34:25 +00:00
Mel Massadian 21efb000b8 refactor: simplify graph-to-prompt and expand api node configuration
- remove html stripping from doc assignments, keep raw content
- refactor graphToPrompt to delegate to comfyui's built-in implementation and post-process for mtb metadata
- add export api functionality to inspector with json download
- expand api input types to include audio and video with type-specific config ui
- implement number (min/max/step), string (multiline), and media (accept/duration/trim) configuration panels
- fix widget value syncing with untrack to prevent reverting user input
- update bun.lock with configVersion field
2026-01-19 17:14:33 +00:00
Mel Massadian 9725ed1366 feat(web): add alchemy bridge and mtb api extensions
- register alchemy bridge extension for cross-window workflow communication
- enable loading, serialization, and queuing of workflows via postMessage api
2026-01-18 19:58:05 +00:00
Mel Massadian 77718e9428 refactor: extract documentation handling 2026-01-18 19:57:46 +00:00
Mel Massadian 42229d0d5d refactor: remove shared to use the build file 2026-01-18 19:57:45 +00:00
Mel Massadian 1accc920ce fix(inspector): sync widget value changes and improve callback handling 2026-01-18 20:53:21 +01:00
Mel Massadian ea6d5d4e59 refactor(api): ✨ add reactive API change notifications
- introduced MTB_API_CHANGED_EVENT custom event for triggering panel updates
- added notifyAPIChanged() function dispatched on API modifications
- setup event listener in APIPanel constructor to debounce updates via requestAnimationFrame
- improved boolean value handling to recognize numeric 1/'1' as true
- ensures UI stays in sync when API properties change across extension, widget manager, and panel
2025-12-07 22:58:57 +01:00
Mel Massadian e90a7048fb refactor: 🔨 API sidebar and node UI
- completely redesigned inspector panel
2025-12-07 20:39:22 +01:00
Mel Massadian 114db05be0 refactor: 🔨 migrate comfy_shared to typescript and modularize
Split monolithic 1400-line comfy_shared.js into focused TypeScript modules in web_source/src/comfy_shared/:
- api.ts: server API utilities (runAction, getServerInfo, setServerInfo)
- colors.ts: color brightness utilities
- documentation.ts: node documentation widget system
- dom.ts: DOM and HTML utilities
- dynamic-connections.ts: dynamic input/output management
- logger.ts: logging utilities with toast notifications
- node-extensions.ts: node type extension helpers
- storage.ts: namespaced localStorage management
- types.ts: comprehensive type definitions
- utils.ts: base utilities (UUID, debounce, deep merge)
- widgets.ts: LiteGraph widget utilities

Benefits:
- ~200 LOC reduction through proper typing and elimination of redundant code
- Better code organization with single-responsibility modules
- Full TypeScript type safety with proper generics
- Improved documentation and maintainability
- Easier to tree-shake unused utilities

Updated vite.config.ts to build comfy_shared as separate entry point and marked external dependencies (/mtb_async modules).

Modified InspectorItem.svelte to use extracted item.value instead of always pulling from widgets[0].

Renamed panel.ts to panel.svelte.ts to enable Svelte 5 runes and made APIPanel reactive using $state instead of $$set.
2025-12-07 19:54:31 +01:00
Mel Massadian d21729659d feat: ✨ mtb api authoring layer with svelte 5 runes
- migrate Inspector components to Svelte 5 runes ($state, $derived, $props)
- replace on:event directives with new onclick/onconsider/onfinalize syntax
- add mtb_api module with widget manager, graph-to-prompt conversion, and extension registration
- implement APIPanel controller for managing exposed workflow inputs
- add mock implementations for ComfyUI scripts (app, api, ui, comfy_shared)
- create constants module for API colors and styling
- update vite config to handle mtb_api entry point and external @mtb/shared imports
- refactor api_nodes.css to use css custom properties instead of template variables
- add postbuild script to copy dist files to web/dist
2025-12-07 17:45:46 +01:00
Mel Massadian 37d6569f68 feat(web_source): ✨ WIP typescript migration
- initialize web_source project with vite, svelte 5, and typescript
 - add mtb_inspector: interactive node inspector panel for comfyui workflow authoring
 - add note-plus: markdown/html editor node with live preview and ace editor integration
 - add python repl: interactive frontend repl with syntax highlighting and linting
 - implement draggable/resizable UI components with custom actions
 - add color picker, dnd support, and tabbed interface
 - configure build system with css injection and external comfyui script imports
 - add web/dist to .gitignore for built artifacts
2025-11-09 16:31:11 +01:00
Mel Massadian a33af90b6d feat(mtb_input_output_sidebar): ✨ refactor pagination into reusable function
- Extract pagination setup logic into initPagination() function for reuse
- Initialize observer as global variable to manage lifecycle across resets
- Call initPagination() after content resets to properly reinitialize infinite scroll
- Add observer cleanup in widget cleanup to prevent memory leaks
- Safely handle observer disconnect with null checks to avoid errors
2025-11-09 12:44:22 +00:00
Mel Massadian e8fe379c62 feat: ✨ add prompt presets and floats conversion utilities
- Add MTB_PromptPresets node to load and manage prompt presets from json files
- Add MTB_FloatsToFloatList node for converting FLOATS type to float list for loops
- Update MTB_FloatToFloats docstring to include KJ extension
2025-11-09 12:37:18 +00:00
Mel Massadian 427506f771 fix: 🐛 audio parameter types and color input utility
- changed MTB_AudioCut length and offset from FLOAT to INT type, expecting milliseconds
- added sys.maxsize for parameter limits and millisecond tooltips
- fixed calculation to explicitly cast to float before math operations
- uncommented hex_to_rgb import in legacy.py
- expanded MTB_ColorInput to return hex and RGB formats alongside color
- added return names and output tooltips for better usability
2025-11-08 13:08:14 +00:00
Mel Massadian 9bf8f0f0dd feat: ✨ show loading state for I/O sidebar 2025-09-20 12:01:16 +00:00
Mel Massadian 668f3dd99d feat: ✨ add load workflow from output and bare pagination to I/O sidebar 2025-09-20 11:59:47 +00:00
Mel Massadian ad11af050a feat: ✨ add strip to 'apply text templates' 2025-09-07 11:55:06 +00:00
Mel Massadian 317aef7632 feat: ✨ add lora loader model by path
exact copy of the native node using STRING instead of COMBO
useful for constructing paths from the graph.
for instance using "apply text template"
2025-09-07 11:55:06 +00:00
Mel Massadian f0fbcfc1b0 feat: ✨ add menu to invert old/new in string replace 2025-09-07 11:55:06 +00:00
Mel Massadian 2ec932da63 fix: 🐛 dynamic inputs in subgraphs 2025-09-07 11:55:06 +00:00
Mel Massadian a9e7331f7d feat: ✨ repl progress 2025-09-07 11:55:06 +00:00
Mel Massadian 951c2dd423 fix: 🐛 log name
on windows it displays the full path which is quite long
2025-09-07 11:55:06 +00:00
Mel Massadian fead8afdd3 feat: ✨ improved the 'REPL'
it is now backed by a python node.
I'm leveraging litegraph custom widgets in a bit of an hacky way.

The main idea is:

- python endpoints for the editor: to execute, lint, format code live without
  queuing anything, this doesn't support inputs but you can use the
  `IS_LIVE` global variable to conditionally set inputs.
- a backend singleton class that is used to execute both the live and
  "in flow" version.
- a custom widget `CODE_EDITOR` that wraps ACE editor automatically adding
  the needed de/serialization hooks on the node it targets

TLDR this node can be either used as a scratchpad akin to a notebook,
isolated from the graph, or part of the graph and can receive inputs
and produce outputs
2025-09-07 11:55:05 +00:00
Mel Massadian 723f0c19e1 chore: 🧹 add safe_json util
I mainly use this to capture the proper state of a node
at different lifecycle events
2025-09-07 11:55:05 +00:00
Mel Massadian 444e7f816a chore: 🧹 add .notify to mtb logs
to call the toast, it's useful to propagate non raised errors to the
user simply.
2025-09-07 11:55:05 +00:00
Mel Massadian 1e3eb522ac feat: ✨ yet another repl node for comfy
Still unsure how to expose it
2025-09-07 11:55:05 +00:00
Mel Massadian 295e967d88 chore: 🧹 add back convex helper 2025-09-07 11:55:05 +00:00
Mel Massadian 9501b9e459 chore(TEMP): 🧹 2025-09-07 11:55:05 +00:00
Mel Massadian 1650ee4769 release: 📦 bump version to 0.6.0 2025-09-07 11:55:05 +00:00
Mel Massadian 4d8f28c5a2 chore: 🧹 remove bumpversion 2025-09-07 11:55:05 +00:00
Mel Massadian 83648284bf chore: 🧹 remove pyright config 2025-09-07 11:55:05 +00:00
Mel Massadian d711eda249 feat: ✨ batch apply text template if inputs are lists
same as previous commit
2025-09-07 11:55:05 +00:00
Mel Massadian 5d43f7d57d feat: ✨ batch text to image if inputs are lists
this rely on fakingly declaring list[str] as STRING for now...
2025-09-07 11:55:05 +00:00
Mel Massadian 33ffb630a7 feat: ✨ use a single widget for Debug
also rely on dynamic_connection setup directly
2025-09-07 11:55:05 +00:00
Mel Massadian 117ccde5f8 feat: ✨ simplify dynamic widget logic
mostly by relying on properties
this allow renaming inputs at will
2025-09-07 11:55:05 +00:00
Mel Massadian 6e48c85602 feat: ✨ improve loop drawing
recurse all LoopStart outputs
2025-09-07 11:55:05 +00:00
Mel Massadian 699002b2bc fix: 🐛 ensure links are links
It used to return LLink now it returns the link ID
2025-09-07 11:55:04 +00:00
Mel Massadian b9841d810a feat: ✨ add clear outputs context menu for debug node 2025-09-07 11:55:04 +00:00
Mel Massadian c85827223f chore: 🧹 move save_tensors to new file 2025-09-07 11:55:04 +00:00
Mel Massadian e6c241bb4a feat: ✨ add rich_mode on Debug node
WIP for now
2025-09-07 11:55:04 +00:00
Mel Massadian 2ab911826a feat: ✨ add ProxyTensor node
would avoid the need for:
https://github.com/Kosinkadink/ComfyUI-VideoHelperSuite/pull/517
2025-09-07 11:55:04 +00:00
Mel Massadian 045951db79 feat: ✨ add LazyProxyTensor
utility extended from an idea by @AustinMroz
2025-09-07 11:55:04 +00:00
Mel Massadian eabe43db79 fix: 🐛 add missing widgetTypes for COLOR 2025-09-07 11:54:27 +00:00
Austin Mroz 1c99a1c63c Set widgetType for COLOR widgets 2025-09-06 16:56:35 +02:00
Mel Massadian 426cdf5f9f fix: 🐛 temporary fix for COLOR 2025-09-06 12:38:41 +00:00
Mel Massadian 5fa3791559 📚 docs: add caution about project status 2025-09-06 11:03:42 +02:00
Mel Massadian 5c0e020c73 fix: 🐛 use gpu for uncrop if available
image tensors are often offloaded to cpu which makes
the gaussian blur dead slow
2025-07-18 15:26:58 +02:00
Mel Massadian d00722e9ea fix: 🐛 remove numpy from bbox crop/uncrop 2025-07-17 20:54:44 +02:00
Mel Massadian 0106c13250 fix: 🐛 typo in clock 2025-07-07 21:05:04 +02:00
Mel Massadian 55226058d4 feat: ✨ add a simple clock system
StartClock and EndClock
2025-07-05 18:18:10 +02:00