mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-02-10 18:10:08 +00:00
* migrate manager menu items * Update locales [skip ci] * switch to v2 manager API endpoints * re-arrange menu items * await promises. update settings schema * move legacy option to startup arg * Add banner indicating how to use legacy manager UI * Update locales [skip ci] * add "Check for Updates", "Install Missing" menu items * Update locales [skip ci] * use correct response shape * improve command names * dont show missing nodes button in legacy manager mode * [Update to v2 API] update WS done message * Update locales [skip ci] * [fix] Fix json syntax error from rebase (#4607) * Fix errors from rebase (removed `Tag` component import and duplicated imports in api.ts) (#4608) Co-authored-by: github-actions <github-actions@github.com> * Update locales [skip ci] * [Manager] "Restarting" state after clicking restart button (#4637) * [feat] Add reactive feature flags foundation (#4817) * [feat] Add v2/ prefix to manager service base URL (#4872) * [cleanup] Remove unused manager route enums (#4875) * fix: v2 prefix (#5145) * Fix: Restore api.ts from main branch after incorrect rebase (#5150) * fix: api.ts file is different with main branch * Update locales [skip ci] * fix: restore support dotprop access * fix: apply locales based on manager/menu-items-migration * fix: Add missing shortcuts translation section for CI tests - Added shortcuts section with keyboardShortcuts key - Fixes failing Playwright test looking for 'Keyboard Shortcuts' aria-label - Issue was caused by incomplete rebase from main branch 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * fix: Add missing versionMismatchWarning translations for CI tests - Added versionMismatchWarning section with all required keys - Added general versionMismatch related keys (updateFrontend, dismiss, etc.) - Fixes failing Playwright tests for version mismatch warnings - These keys were lost during the rebase from main branch 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: github-actions <github-actions@github.com> Co-authored-by: Claude <noreply@anthropic.com> * feat: Add loading state to PackInstallButton and improve UI (#5153) * [restore] conflict notification commits restore * [fix] Restore conflict notification work and fix tests - Fix missing footerProps property in DialogInstance interface - Add missing InstalledPacksResponse type import in tests - Add missing getImportFailInfoBulk method to test mock - Remove unused ManagerComponents import causing type error - All unit and component tests now pass successfully * [fix] Use Vue 3.5 destructuring syntax for props with defaults Remove deprecated withDefaults usage in NodeConflictDialogContent.vue and use destructuring with default values instead * [feature] dual modal supported * [fix] Fix date format in PackCard test for locale consistency * [fix] title text modified * [fix] Fix conflict red dot not syncing between components Resolve reactivity issue by sharing useStorage refs across all composable instances to ensure UI consistency. * [fix] Add conflict detection when installed packages list updates - Import useConflictDetection composable in comfyManagerStore - Call performConflictDetection after refreshing installed packages list - Ensures conflict status stays up-to-date when packages change - Follows existing codebase patterns for composable usage * fix: use selected target_branch for PR base in update-manager-types workflow * [fix] test code timeout error fixed * [chore] Update ComfyUI-Manager API types from ComfyUI-Manager@4e6f970 (#4782) Co-authored-by: viva-jinyi <53567196+viva-jinyi@users.noreply.github.com> * [types] Add proper types for ImportFailInfo API endpoints (#4783) * [fix] ci error fixed & button max-width modified * fix: node pack card width adapted * fix: prevent duplicate api calls & installedPacksWithVersions instead of installpackids * feat: run conflict detection after Apply Changes Run performConflictDetection automatically after the backend restarts from Apply Changes button to detect conflicts in newly installed packages 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * refactor: simplify PackInstallButton isInstalling state management - Remove isInstalling prop from PackInstallButton component - Use internal computed property with comfyManagerStore.isPackInstalling() - Remove redundant isInstalling computations from parent components - Fix test mocks for useConflictDetection and es-toolkit/compat - Clean up unused imports and inject dependencies This centralizes the installation state management in the store, reducing code duplication and complexity across components. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * feat: improve multi-package selection handling (#5116) * feat: improve multi-package selection handling - Check each package individually for conflicts in install dialog - Show only packages with actual conflicts in warning dialog - Hide action buttons for mixed installed/uninstalled selections - Display dynamic status based on selected packages priority - Deduplicate conflict information across multiple packages - Fix PackIcon blur background opacity 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * refactor: extract multi-package logic into reusable composables - Create usePackageSelection composable for installation state management - Create usePackageStatus composable for status priority logic - Refactor InfoPanelMultiItem to use new composables - Reduce component complexity by separating business logic - Improve code reusability across components 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * fix: directory modified * test: add comprehensive tests for multi-package selection composables - Add tests for usePacksSelection composable - Test installation status filtering - Test selection state determination (all/none/mixed) - Test dynamic status changes - Add tests for usePacksStatus composable - Test import failure detection - Test status priority handling - Test integration with conflict detection store - Fix existing test mocking issues - Update es-toolkit/compat mock to use async import - Add Pinia setup for store-dependent tests - Update vue-i18n mock to preserve all exports --------- Co-authored-by: Claude <noreply@anthropic.com> * feat: Integrate ComfyUI Manager migration with v2 API and enhanced UI This commit integrates the previously recovered ComfyUI Manager functionality with significant enhancements from PR #3367, including: ## Core Manager System Recovery - **v2 API Integration**: All manager endpoints now use `/v2/manager/queue/*` - **Task Queue System**: Complete client-side task queuing with WebSocket status - **Service Layer**: Comprehensive manager service with all CRUD operations - **Store Integration**: Full manager store with progress dialog support ## New Features & Enhancements - **Reactive Feature Flags**: Foundation for dynamic feature toggling - **Enhanced UI Components**: Improved loading states, progress tracking - **Package Management**: Install, update, enable/disable functionality - **Version Selection**: Support for latest/nightly package versions - **Progress Dialogs**: Real-time installation progress with logs - **Missing Node Detection**: Automated detection and installation prompts ## Technical Improvements - **TypeScript Definitions**: Complete type system for manager operations - **WebSocket Integration**: Real-time status updates via `cm-queue-status` - **Error Handling**: Comprehensive error handling with user feedback - **Testing**: Updated test suites for new functionality - **Documentation**: Complete backup documentation for recovery process ## API Endpoints Restored - `manager/queue/start` - Start task queue - `manager/queue/status` - Get queue status - `manager/queue/task` - Queue individual tasks - `manager/queue/install` - Install packages - `manager/queue/update` - Update packages - `manager/queue/disable` - Disable packages ## Breaking Changes - Manager API base URL changed to `/v2/` - Updated TypeScript interfaces for manager operations - New WebSocket message format for queue status This restores all critical manager functionality lost during the previous rebase while integrating the latest enhancements and maintaining compatibility with the current main branch. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * fix: Restore correct interfaces from PR #3367 - Restore original useManagerQueue, useServerLogs, and comfyManagerService interfaces - Restore original component implementations for ManagerProgressDialogContent and ManagerProgressHeader - Fix all TypeScript interface compatibility issues by using original PR implementations - Remove duplicate setting that was causing runtime errors This fixes merge errors where interfaces were incorrectly mixed between old and new implementations. * fix: Add missing IconTextButton import in PackUninstallButton Component was using IconTextButton in template but missing explicit import, causing Vue runtime warning about unresolved component. * docs: Update backup documentation with working state backup Added manager-migration-clean-working-backup entry documenting the working state after fixing runtime issues, ready for PR integration. * [feat] Add manager capability feature flags Add support for manager v4 feature flag and client UI capability: - MANAGER_SUPPORTS_V4: Server-side flag for v4 manager support - supports_manager_v4_ui: Client-side flag for v4 UI support These flags enable proper capability negotiation between frontend and backend for manager UI selection (legacy vs v4). Also fix TypeScript errors by adding @types/lodash. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * [feat] Add managerStateStore for three-state manager UI logic - Create managerStateStore to determine manager UI state (disabled, legacy, new) - Check command line args, feature flags, and legacy API endpoints - Update useCoreCommands to use the new store instead of async API calls - Initialize manager state after system stats are loaded in GraphView - Add comprehensive tests for all manager state scenarios 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * [fix] Fix API URL prefix slash and add error handling - Update comfyManagerService to use conditional API URL prefix based on manager v4 support - Fix manager UI state handling in command menubar and workflow warning dialog - Add proper manager state detection with fallback to settings panel - Remove unused imports and variables 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * [docs] Update backup documentation with PR #5063 integration status - Document manager-migration-pr5063-integrated backup branch - Add comprehensive recovery verification for all integrated features - Update next steps to reflect current progress - Document successful integration of both PR #4654 and PR #5063 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * [fix] Fix manager button visibility when manager is disabled - Use managerStateStore instead of legacy isLegacyManager check - Initialize manager state on component mount to detect --disable-manager - Hide Install All Missing Custom Nodes button when manager is disabled - Fixes issue where buttons showed even when comfyui_manager package not installed 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * [fix] Correct Install All button visibility for manager UI states - Install All Missing Custom Nodes button only shows for NEW_UI state - Legacy UI state only shows Open Manager button - Disabled state shows no buttons - Matches original PR #5063 behavior exactly 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * feat: Complete manager migration with bug fixes and locale updates - Restore proper task queue implementation with generated types - Fix manager button visibility based on server feature flags - Add task completion tracking with taskIdToPackId mapping - Fix log separation with task-specific filtering - Implement failed tab functionality with proper task partitioning - Fix task progress status detection using actual queue state - Add missing locale entries for all manager operations - Remove legacy manager menu items, keep only 'Manage Extensions' - Fix task panel expansion state and count display issues - All TypeScript and ESLint checks pass 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * feat: Complete manager migration with conflict detection integration This completes the integration of ComfyUI Manager migration features with enhanced conflict detection system. Key changes include: ## Manager Migration & Conflict Detection - Integrated PR #4637 (4-state manager restart workflow) with PR #4654 (comprehensive conflict detection) - Fixed conflict detection to properly check `latest_version` fields for registry API compatibility - Added conflict detection to PackCardFooter and InfoPanelHeader for comprehensive warning coverage - Merged missing English locale translations from main branch with proper conflict resolution ## Bug Fixes - Fixed double API path issue (`/api/v2/v2/`) in manager service routes - Corrected PackUpdateButton payload structure and service method calls - Enhanced conflict detection system to handle both installed and registry package structures ## Technical Improvements - Updated conflict detection composable to handle both installed and registry package structures - Enhanced manager service with proper error handling and route corrections - Improved type safety across manager components with proper TypeScript definitions * Remove temporary error log files from commits * Remove temporary documentation files - Remove MANAGER_MIGRATION_BACKUPS.md (temporary notes) - Remove TASK_QUEUE_RESTORATION_PLAN.md (temporary notes) These were development artifacts and shouldn't be in commits. * feat: Complete manager migration cleanup and integration - Remove outdated legacy manager detection from LoadWorkflowWarning - Update InfoPanelHeader with conflict detection improvements - Fix all failing unit tests from state management transition - Clean up algolia search provider type mappings - Remove unused @ts-expect-error directives - Add .nx to .gitignore 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * fix: Update CustomNodesManager command to use tri-state manager system Replace legacy isLegacyManagerUI() call with new ManagerUIState system: - Use useManagerStateStore().managerUIState instead of async API call - Handle DISABLED state by showing settings dialog - Handle LEGACY_UI state with fallback to new UI on error - Handle NEW_UI state by showing manager dialog - Remove unused useComfyManagerService import 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * refactor: Remove no-op refreshTaskState function - Remove unused refreshTaskState function from useManagerQueue - Function was left as no-op only to make tests pass - Since queue is now push-based (WebSocket), no need to refresh state - Clean up export and remove extra blank lines 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * fix: Replace lodash with es-toolkit/compat in useManagerQueue Replace lodash import with es-toolkit/compat to match project standards: - Change 'lodash' import to 'es-toolkit/compat' for pickBy function - Add specific type helper for history task filtering - Update JSDoc comment to remove lodash reference - Fixes component test failures from missing lodash dependency * fix: Add missing whats-new-dismissed event emission in WhatsNewPopup During merge with main, the event emission was lost from the hide() function. - Add defineEmits for 'whats-new-dismissed' event - Emit event in hide() function to maintain test compatibility - Fixes 3 failing unit tests in WhatsNewPopup.test.ts * ci: Force CI run for Playwright tests Previous commits contained [skip ci] which prevented test execution. This empty commit ensures all CI checks run properly. * test: Temporarily disable workflow.avif test due to missing nodes dialog The workflow.avif test asset contains custom nodes that trigger the missing nodes dialog, which is outside the scope of AVIF loading functionality testing. TODO: Update test asset to use core nodes only, then re-enable the test. --------- Co-authored-by: github-actions <github-actions@github.com> Co-authored-by: Jin Yi <jin12cc@gmail.com> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: Comfy Org PR Bot <snomiao+comfy-pr@gmail.com> Co-authored-by: viva-jinyi <53567196+viva-jinyi@users.noreply.github.com>
940 lines
27 KiB
TypeScript
940 lines
27 KiB
TypeScript
import { LinkMarkerShape, LiteGraph } from '@/lib/litegraph/src/litegraph'
|
||
import type { ColorPalettes } from '@/schemas/colorPaletteSchema'
|
||
import type { Keybinding } from '@/schemas/keyBindingSchema'
|
||
import { NodeBadgeMode } from '@/types/nodeSource'
|
||
import { LinkReleaseTriggerAction } from '@/types/searchBoxTypes'
|
||
import type { SettingParams } from '@/types/settingTypes'
|
||
|
||
/**
|
||
* Core settings are essential configuration parameters required for ComfyUI's basic functionality.
|
||
* These settings must be present in the settings store and cannot be omitted.
|
||
*
|
||
* IMPORTANT: To prevent ID conflicts, settings should be marked as deprecated rather than removed
|
||
* when they are no longer needed.
|
||
*/
|
||
export const CORE_SETTINGS: SettingParams[] = [
|
||
{
|
||
id: 'Comfy.Memory.AllowManualUnload',
|
||
name: 'Allow manual unload of models and execution cache via user command',
|
||
type: 'hidden',
|
||
defaultValue: true,
|
||
versionAdded: '1.18.0'
|
||
},
|
||
{
|
||
id: 'Comfy.Validation.Workflows',
|
||
name: 'Validate workflows',
|
||
type: 'boolean',
|
||
defaultValue: true
|
||
},
|
||
{
|
||
id: 'Comfy.NodeSearchBoxImpl',
|
||
category: ['Comfy', 'Node Search Box', 'Implementation'],
|
||
experimental: true,
|
||
name: 'Node search box implementation',
|
||
type: 'combo',
|
||
options: ['default', 'litegraph (legacy)'],
|
||
defaultValue: 'default'
|
||
},
|
||
{
|
||
id: 'Comfy.LinkRelease.Action',
|
||
category: ['LiteGraph', 'LinkRelease', 'Action'],
|
||
name: 'Action on link release (No modifier)',
|
||
type: 'combo',
|
||
options: Object.values(LinkReleaseTriggerAction),
|
||
defaultValue: LinkReleaseTriggerAction.CONTEXT_MENU,
|
||
defaultsByInstallVersion: {
|
||
'1.24.1': LinkReleaseTriggerAction.SEARCH_BOX
|
||
}
|
||
},
|
||
{
|
||
id: 'Comfy.LinkRelease.ActionShift',
|
||
category: ['LiteGraph', 'LinkRelease', 'ActionShift'],
|
||
name: 'Action on link release (Shift)',
|
||
type: 'combo',
|
||
options: Object.values(LinkReleaseTriggerAction),
|
||
defaultValue: LinkReleaseTriggerAction.SEARCH_BOX,
|
||
defaultsByInstallVersion: {
|
||
'1.24.1': LinkReleaseTriggerAction.CONTEXT_MENU
|
||
}
|
||
},
|
||
{
|
||
id: 'Comfy.NodeSearchBoxImpl.NodePreview',
|
||
category: ['Comfy', 'Node Search Box', 'NodePreview'],
|
||
name: 'Node preview',
|
||
tooltip: 'Only applies to the default implementation',
|
||
type: 'boolean',
|
||
defaultValue: true
|
||
},
|
||
{
|
||
id: 'Comfy.NodeSearchBoxImpl.ShowCategory',
|
||
category: ['Comfy', 'Node Search Box', 'ShowCategory'],
|
||
name: 'Show node category in search results',
|
||
tooltip: 'Only applies to the default implementation',
|
||
type: 'boolean',
|
||
defaultValue: true
|
||
},
|
||
{
|
||
id: 'Comfy.NodeSearchBoxImpl.ShowIdName',
|
||
category: ['Comfy', 'Node Search Box', 'ShowIdName'],
|
||
name: 'Show node id name in search results',
|
||
tooltip: 'Only applies to the default implementation',
|
||
type: 'boolean',
|
||
defaultValue: false
|
||
},
|
||
{
|
||
id: 'Comfy.NodeSearchBoxImpl.ShowNodeFrequency',
|
||
category: ['Comfy', 'Node Search Box', 'ShowNodeFrequency'],
|
||
name: 'Show node frequency in search results',
|
||
tooltip: 'Only applies to the default implementation',
|
||
type: 'boolean',
|
||
defaultValue: false
|
||
},
|
||
{
|
||
id: 'Comfy.Sidebar.Location',
|
||
category: ['Appearance', 'Sidebar', 'Location'],
|
||
name: 'Sidebar location',
|
||
type: 'combo',
|
||
options: ['left', 'right'],
|
||
defaultValue: 'left'
|
||
},
|
||
{
|
||
id: 'Comfy.Sidebar.Size',
|
||
category: ['Appearance', 'Sidebar', 'Size'],
|
||
name: 'Sidebar size',
|
||
type: 'combo',
|
||
options: ['normal', 'small'],
|
||
// Default to small if the window is less than 1536px(2xl) wide.
|
||
defaultValue: () => (window.innerWidth < 1536 ? 'small' : 'normal')
|
||
},
|
||
{
|
||
id: 'Comfy.Sidebar.UnifiedWidth',
|
||
category: ['Appearance', 'Sidebar', 'UnifiedWidth'],
|
||
name: 'Unified sidebar width',
|
||
type: 'boolean',
|
||
defaultValue: true,
|
||
versionAdded: '1.18.1'
|
||
},
|
||
{
|
||
id: 'Comfy.TextareaWidget.FontSize',
|
||
category: ['Appearance', 'Node Widget', 'TextareaWidget', 'FontSize'],
|
||
name: 'Textarea widget font size',
|
||
type: 'slider',
|
||
defaultValue: 10,
|
||
attrs: {
|
||
min: 8,
|
||
max: 24
|
||
}
|
||
},
|
||
{
|
||
id: 'Comfy.TextareaWidget.Spellcheck',
|
||
category: ['Comfy', 'Node Widget', 'TextareaWidget', 'Spellcheck'],
|
||
name: 'Textarea widget spellcheck',
|
||
type: 'boolean',
|
||
defaultValue: false
|
||
},
|
||
{
|
||
id: 'Comfy.Workflow.SortNodeIdOnSave',
|
||
name: 'Sort node IDs when saving workflow',
|
||
type: 'boolean',
|
||
defaultValue: false
|
||
},
|
||
{
|
||
id: 'Comfy.Graph.CanvasInfo',
|
||
category: ['LiteGraph', 'Canvas', 'CanvasInfo'],
|
||
name: 'Show canvas info on bottom left corner (fps, etc.)',
|
||
type: 'boolean',
|
||
defaultValue: true
|
||
},
|
||
{
|
||
id: 'Comfy.Node.ShowDeprecated',
|
||
name: 'Show deprecated nodes in search',
|
||
tooltip:
|
||
'Deprecated nodes are hidden by default in the UI, but remain functional in existing workflows that use them.',
|
||
type: 'boolean',
|
||
defaultValue: false
|
||
},
|
||
{
|
||
id: 'Comfy.Node.ShowExperimental',
|
||
name: 'Show experimental nodes in search',
|
||
tooltip:
|
||
'Experimental nodes are marked as such in the UI and may be subject to significant changes or removal in future versions. Use with caution in production workflows',
|
||
type: 'boolean',
|
||
defaultValue: true
|
||
},
|
||
{
|
||
id: 'Comfy.Node.Opacity',
|
||
category: ['Appearance', 'Node', 'Opacity'],
|
||
name: 'Node opacity',
|
||
type: 'slider',
|
||
defaultValue: 1,
|
||
attrs: {
|
||
min: 0.01,
|
||
max: 1,
|
||
step: 0.01
|
||
}
|
||
},
|
||
{
|
||
id: 'Comfy.Workflow.ShowMissingNodesWarning',
|
||
name: 'Show missing nodes warning',
|
||
type: 'boolean',
|
||
defaultValue: true
|
||
},
|
||
{
|
||
id: 'Comfy.Workflow.ShowMissingModelsWarning',
|
||
name: 'Show missing models warning',
|
||
type: 'boolean',
|
||
defaultValue: true,
|
||
experimental: true
|
||
},
|
||
{
|
||
id: 'Comfy.Graph.ZoomSpeed',
|
||
category: ['LiteGraph', 'Canvas', 'ZoomSpeed'],
|
||
name: 'Canvas zoom speed',
|
||
type: 'slider',
|
||
defaultValue: 1.1,
|
||
attrs: {
|
||
min: 1.01,
|
||
max: 2.5,
|
||
step: 0.01
|
||
}
|
||
},
|
||
// Bookmarks are stored in the settings store.
|
||
// Bookmarks are in format of category/display_name. e.g. "conditioning/CLIPTextEncode"
|
||
{
|
||
id: 'Comfy.NodeLibrary.Bookmarks',
|
||
name: 'Node library bookmarks with display name (deprecated)',
|
||
type: 'hidden',
|
||
defaultValue: [],
|
||
deprecated: true
|
||
},
|
||
{
|
||
id: 'Comfy.NodeLibrary.Bookmarks.V2',
|
||
name: 'Node library bookmarks v2 with unique name',
|
||
type: 'hidden',
|
||
defaultValue: []
|
||
},
|
||
// Stores mapping from bookmark folder name to its customization.
|
||
{
|
||
id: 'Comfy.NodeLibrary.BookmarksCustomization',
|
||
name: 'Node library bookmarks customization',
|
||
type: 'hidden',
|
||
defaultValue: {}
|
||
},
|
||
// Hidden setting used by the queue for how to fit images
|
||
{
|
||
id: 'Comfy.Queue.ImageFit',
|
||
name: 'Queue image fit',
|
||
type: 'hidden',
|
||
defaultValue: 'cover'
|
||
},
|
||
{
|
||
id: 'Comfy.GroupSelectedNodes.Padding',
|
||
category: ['LiteGraph', 'Group', 'Padding'],
|
||
name: 'Group selected nodes padding',
|
||
type: 'slider',
|
||
defaultValue: 10,
|
||
attrs: {
|
||
min: 0,
|
||
max: 100
|
||
}
|
||
},
|
||
{
|
||
id: 'Comfy.Node.DoubleClickTitleToEdit',
|
||
category: ['LiteGraph', 'Node', 'DoubleClickTitleToEdit'],
|
||
name: 'Double click node title to edit',
|
||
type: 'boolean',
|
||
defaultValue: true
|
||
},
|
||
{
|
||
id: 'Comfy.Node.AllowImageSizeDraw',
|
||
category: ['LiteGraph', 'Node Widget', 'AllowImageSizeDraw'],
|
||
name: 'Show width × height below the image preview',
|
||
type: 'boolean',
|
||
defaultValue: true
|
||
},
|
||
{
|
||
id: 'Comfy.Group.DoubleClickTitleToEdit',
|
||
category: ['LiteGraph', 'Group', 'DoubleClickTitleToEdit'],
|
||
name: 'Double click group title to edit',
|
||
type: 'boolean',
|
||
defaultValue: true
|
||
},
|
||
{
|
||
id: 'Comfy.Window.UnloadConfirmation',
|
||
name: 'Show confirmation when closing window',
|
||
type: 'boolean',
|
||
defaultValue: true,
|
||
versionModified: '1.7.12'
|
||
},
|
||
{
|
||
id: 'Comfy.TreeExplorer.ItemPadding',
|
||
category: ['Appearance', 'Tree Explorer', 'ItemPadding'],
|
||
name: 'Tree explorer item padding',
|
||
type: 'slider',
|
||
defaultValue: 2,
|
||
attrs: {
|
||
min: 0,
|
||
max: 8,
|
||
step: 1
|
||
}
|
||
},
|
||
{
|
||
id: 'Comfy.ModelLibrary.AutoLoadAll',
|
||
name: 'Automatically load all model folders',
|
||
tooltip:
|
||
'If true, all folders will load as soon as you open the model library (this may cause delays while it loads). If false, root level model folders will only load once you click on them.',
|
||
type: 'boolean',
|
||
defaultValue: false
|
||
},
|
||
{
|
||
id: 'Comfy.ModelLibrary.NameFormat',
|
||
name: 'What name to display in the model library tree view',
|
||
tooltip:
|
||
'Select "filename" to render a simplified view of the raw filename (without directory or ".safetensors" extension) in the model list. Select "title" to display the configurable model metadata title.',
|
||
type: 'combo',
|
||
options: ['filename', 'title'],
|
||
defaultValue: 'title'
|
||
},
|
||
{
|
||
id: 'Comfy.Locale',
|
||
name: 'Language',
|
||
type: 'combo',
|
||
options: [
|
||
{ value: 'en', text: 'English' },
|
||
{ value: 'zh', text: '中文' },
|
||
{ value: 'zh-TW', text: '繁體中文' },
|
||
{ value: 'ru', text: 'Русский' },
|
||
{ value: 'ja', text: '日本語' },
|
||
{ value: 'ko', text: '한국어' },
|
||
{ value: 'fr', text: 'Français' },
|
||
{ value: 'es', text: 'Español' },
|
||
{ value: 'ar', text: 'عربي' }
|
||
],
|
||
defaultValue: () => navigator.language.split('-')[0] || 'en'
|
||
},
|
||
{
|
||
id: 'Comfy.NodeBadge.NodeSourceBadgeMode',
|
||
category: ['LiteGraph', 'Node', 'NodeSourceBadgeMode'],
|
||
name: 'Node source badge mode',
|
||
type: 'combo',
|
||
options: Object.values(NodeBadgeMode),
|
||
defaultValue: NodeBadgeMode.HideBuiltIn
|
||
},
|
||
{
|
||
id: 'Comfy.NodeBadge.NodeIdBadgeMode',
|
||
category: ['LiteGraph', 'Node', 'NodeIdBadgeMode'],
|
||
name: 'Node ID badge mode',
|
||
type: 'combo',
|
||
options: [NodeBadgeMode.None, NodeBadgeMode.ShowAll],
|
||
defaultValue: NodeBadgeMode.None
|
||
},
|
||
{
|
||
id: 'Comfy.NodeBadge.NodeLifeCycleBadgeMode',
|
||
category: ['LiteGraph', 'Node', 'NodeLifeCycleBadgeMode'],
|
||
name: 'Node life cycle badge mode',
|
||
type: 'combo',
|
||
options: [NodeBadgeMode.None, NodeBadgeMode.ShowAll],
|
||
defaultValue: NodeBadgeMode.ShowAll
|
||
},
|
||
{
|
||
id: 'Comfy.NodeBadge.ShowApiPricing',
|
||
category: ['Comfy', 'API Nodes'],
|
||
name: 'Show API node pricing badge',
|
||
type: 'boolean',
|
||
defaultValue: true,
|
||
versionAdded: '1.20.3'
|
||
},
|
||
{
|
||
id: 'Comfy.Notification.ShowVersionUpdates',
|
||
category: ['Comfy', 'Notification Preferences'],
|
||
name: 'Show version updates',
|
||
tooltip: 'Show updates for new models, and major new features.',
|
||
type: 'boolean',
|
||
defaultValue: true
|
||
},
|
||
{
|
||
id: 'Comfy.ConfirmClear',
|
||
category: ['Comfy', 'Workflow', 'ConfirmClear'],
|
||
name: 'Require confirmation when clearing workflow',
|
||
type: 'boolean',
|
||
defaultValue: true
|
||
},
|
||
{
|
||
id: 'Comfy.PromptFilename',
|
||
category: ['Comfy', 'Workflow', 'PromptFilename'],
|
||
name: 'Prompt for filename when saving workflow',
|
||
type: 'boolean',
|
||
defaultValue: true
|
||
},
|
||
/**
|
||
* file format for preview
|
||
*
|
||
* format;quality
|
||
*
|
||
* ex)
|
||
* webp;50 -> webp, quality 50
|
||
* jpeg;80 -> rgb, jpeg, quality 80
|
||
*
|
||
* @type {string}
|
||
*/
|
||
{
|
||
id: 'Comfy.PreviewFormat',
|
||
category: ['LiteGraph', 'Node Widget', 'PreviewFormat'],
|
||
name: 'Preview image format',
|
||
tooltip:
|
||
'When displaying a preview in the image widget, convert it to a lightweight image, e.g. webp, jpeg, webp;50, etc.',
|
||
type: 'text',
|
||
defaultValue: ''
|
||
},
|
||
{
|
||
id: 'Comfy.DisableSliders',
|
||
category: ['LiteGraph', 'Node Widget', 'DisableSliders'],
|
||
name: 'Disable node widget sliders',
|
||
type: 'boolean',
|
||
defaultValue: false
|
||
},
|
||
{
|
||
id: 'Comfy.DisableFloatRounding',
|
||
category: ['LiteGraph', 'Node Widget', 'DisableFloatRounding'],
|
||
name: 'Disable default float widget rounding.',
|
||
tooltip:
|
||
'(requires page reload) Cannot disable round when round is set by the node in the backend.',
|
||
type: 'boolean',
|
||
defaultValue: false
|
||
},
|
||
{
|
||
id: 'Comfy.FloatRoundingPrecision',
|
||
category: ['LiteGraph', 'Node Widget', 'FloatRoundingPrecision'],
|
||
name: 'Float widget rounding decimal places [0 = auto].',
|
||
tooltip: '(requires page reload)',
|
||
type: 'slider',
|
||
attrs: {
|
||
min: 0,
|
||
max: 6,
|
||
step: 1
|
||
},
|
||
defaultValue: 0
|
||
},
|
||
{
|
||
id: 'LiteGraph.Node.TooltipDelay',
|
||
name: 'Tooltip Delay',
|
||
type: 'number',
|
||
attrs: {
|
||
min: 100,
|
||
max: 3000,
|
||
step: 50
|
||
},
|
||
defaultValue: 500,
|
||
versionAdded: '1.9.0'
|
||
},
|
||
{
|
||
id: 'Comfy.EnableTooltips',
|
||
category: ['LiteGraph', 'Node', 'EnableTooltips'],
|
||
name: 'Enable Tooltips',
|
||
type: 'boolean',
|
||
defaultValue: true
|
||
},
|
||
{
|
||
id: 'Comfy.DevMode',
|
||
name: 'Enable dev mode options (API save, etc.)',
|
||
type: 'boolean',
|
||
defaultValue: false,
|
||
onChange: (value) => {
|
||
const element = document.getElementById('comfy-dev-save-api-button')
|
||
if (element) {
|
||
element.style.display = value ? 'flex' : 'none'
|
||
}
|
||
}
|
||
},
|
||
{
|
||
id: 'Comfy.UseNewMenu',
|
||
category: ['Comfy', 'Menu', 'UseNewMenu'],
|
||
defaultValue: 'Top',
|
||
name: 'Use new menu',
|
||
type: 'combo',
|
||
options: ['Disabled', 'Top', 'Bottom'],
|
||
tooltip:
|
||
'Menu bar position. On mobile devices, the menu is always shown at the top.',
|
||
migrateDeprecatedValue: (value: string) => {
|
||
// Floating is now supported by dragging the docked actionbar off.
|
||
if (value === 'Floating') {
|
||
return 'Top'
|
||
}
|
||
return value
|
||
}
|
||
},
|
||
{
|
||
id: 'Comfy.Workflow.WorkflowTabsPosition',
|
||
name: 'Opened workflows position',
|
||
type: 'combo',
|
||
options: ['Sidebar', 'Topbar', 'Topbar (2nd-row)'],
|
||
// Default to topbar (2nd-row) if the window is less than 1536px(2xl) wide.
|
||
defaultValue: () =>
|
||
window.innerWidth < 1536 ? 'Topbar (2nd-row)' : 'Topbar'
|
||
},
|
||
{
|
||
id: 'Comfy.Graph.CanvasMenu',
|
||
category: ['LiteGraph', 'Canvas', 'CanvasMenu'],
|
||
name: 'Show graph canvas menu',
|
||
type: 'boolean',
|
||
defaultValue: true
|
||
},
|
||
{
|
||
id: 'Comfy.QueueButton.BatchCountLimit',
|
||
name: 'Batch count limit',
|
||
tooltip:
|
||
'The maximum number of tasks added to the queue at one button click',
|
||
type: 'number',
|
||
defaultValue: 100,
|
||
versionAdded: '1.3.5'
|
||
},
|
||
{
|
||
id: 'Comfy.Keybinding.UnsetBindings',
|
||
name: 'Keybindings unset by the user',
|
||
type: 'hidden',
|
||
defaultValue: [] as Keybinding[],
|
||
versionAdded: '1.3.7',
|
||
versionModified: '1.7.3',
|
||
migrateDeprecatedValue: (value: any[]) => {
|
||
return value.map((keybinding) => {
|
||
if (keybinding['targetSelector'] === '#graph-canvas') {
|
||
keybinding['targetElementId'] = 'graph-canvas'
|
||
}
|
||
return keybinding
|
||
})
|
||
}
|
||
},
|
||
{
|
||
id: 'Comfy.Keybinding.NewBindings',
|
||
name: 'Keybindings set by the user',
|
||
type: 'hidden',
|
||
defaultValue: [] as Keybinding[],
|
||
versionAdded: '1.3.7'
|
||
},
|
||
{
|
||
id: 'Comfy.Extension.Disabled',
|
||
name: 'Disabled extension names',
|
||
type: 'hidden',
|
||
defaultValue: [] as string[],
|
||
versionAdded: '1.3.11'
|
||
},
|
||
{
|
||
id: 'Comfy.LinkRenderMode',
|
||
category: ['LiteGraph', 'Graph', 'LinkRenderMode'],
|
||
name: 'Link Render Mode',
|
||
defaultValue: 2,
|
||
type: 'combo',
|
||
options: [
|
||
{ value: LiteGraph.STRAIGHT_LINK, text: 'Straight' },
|
||
{ value: LiteGraph.LINEAR_LINK, text: 'Linear' },
|
||
{ value: LiteGraph.SPLINE_LINK, text: 'Spline' },
|
||
{ value: LiteGraph.HIDDEN_LINK, text: 'Hidden' }
|
||
]
|
||
},
|
||
{
|
||
id: 'Comfy.Node.AutoSnapLinkToSlot',
|
||
category: ['LiteGraph', 'Node', 'AutoSnapLinkToSlot'],
|
||
name: 'Auto snap link to node slot',
|
||
tooltip:
|
||
'When dragging a link over a node, the link automatically snap to a viable input slot on the node',
|
||
type: 'boolean',
|
||
defaultValue: true,
|
||
versionAdded: '1.3.29'
|
||
},
|
||
{
|
||
id: 'Comfy.Node.SnapHighlightsNode',
|
||
category: ['LiteGraph', 'Node', 'SnapHighlightsNode'],
|
||
name: 'Snap highlights node',
|
||
tooltip:
|
||
'When dragging a link over a node with viable input slot, highlight the node',
|
||
type: 'boolean',
|
||
defaultValue: true,
|
||
versionAdded: '1.3.29'
|
||
},
|
||
{
|
||
id: 'Comfy.Node.BypassAllLinksOnDelete',
|
||
category: ['LiteGraph', 'Node', 'BypassAllLinksOnDelete'],
|
||
name: 'Keep all links when deleting nodes',
|
||
tooltip:
|
||
'When deleting a node, attempt to reconnect all of its input and output links (bypassing the deleted node)',
|
||
type: 'boolean',
|
||
defaultValue: true,
|
||
versionAdded: '1.3.40'
|
||
},
|
||
{
|
||
id: 'Comfy.Node.MiddleClickRerouteNode',
|
||
category: ['LiteGraph', 'Node', 'MiddleClickRerouteNode'],
|
||
name: 'Middle-click creates a new Reroute node',
|
||
type: 'boolean',
|
||
defaultValue: true,
|
||
versionAdded: '1.3.42'
|
||
},
|
||
{
|
||
id: 'Comfy.Graph.LinkMarkers',
|
||
category: ['LiteGraph', 'Link', 'LinkMarkers'],
|
||
name: 'Link midpoint markers',
|
||
defaultValue: LinkMarkerShape.Circle,
|
||
type: 'combo',
|
||
options: [
|
||
{ value: LinkMarkerShape.None, text: 'None' },
|
||
{ value: LinkMarkerShape.Circle, text: 'Circle' },
|
||
{ value: LinkMarkerShape.Arrow, text: 'Arrow' }
|
||
],
|
||
versionAdded: '1.3.42'
|
||
},
|
||
{
|
||
id: 'Comfy.DOMClippingEnabled',
|
||
category: ['LiteGraph', 'Node', 'DOMClippingEnabled'],
|
||
name: 'Enable DOM element clipping (enabling may reduce performance)',
|
||
type: 'boolean',
|
||
defaultValue: true
|
||
},
|
||
{
|
||
id: 'Comfy.Graph.CtrlShiftZoom',
|
||
category: ['LiteGraph', 'Canvas', 'CtrlShiftZoom'],
|
||
name: 'Enable fast-zoom shortcut (Ctrl + Shift + Drag)',
|
||
type: 'boolean',
|
||
defaultValue: true,
|
||
versionAdded: '1.4.0'
|
||
},
|
||
{
|
||
id: 'Comfy.Pointer.ClickDrift',
|
||
category: ['LiteGraph', 'Pointer', 'ClickDrift'],
|
||
name: 'Pointer click drift (maximum distance)',
|
||
tooltip:
|
||
'If the pointer moves more than this distance while holding a button down, it is considered dragging (rather than clicking).\n\nHelps prevent objects from being unintentionally nudged if the pointer is moved whilst clicking.',
|
||
experimental: true,
|
||
type: 'slider',
|
||
attrs: {
|
||
min: 0,
|
||
max: 20,
|
||
step: 1
|
||
},
|
||
defaultValue: 6,
|
||
versionAdded: '1.4.3'
|
||
},
|
||
{
|
||
id: 'Comfy.Pointer.ClickBufferTime',
|
||
category: ['LiteGraph', 'Pointer', 'ClickBufferTime'],
|
||
name: 'Pointer click drift delay',
|
||
tooltip:
|
||
'After pressing a pointer button down, this is the maximum time (in milliseconds) that pointer movement can be ignored for.\n\nHelps prevent objects from being unintentionally nudged if the pointer is moved whilst clicking.',
|
||
experimental: true,
|
||
type: 'slider',
|
||
attrs: {
|
||
min: 0,
|
||
max: 1000,
|
||
step: 25
|
||
},
|
||
defaultValue: 150,
|
||
versionAdded: '1.4.3'
|
||
},
|
||
{
|
||
id: 'Comfy.Pointer.DoubleClickTime',
|
||
category: ['LiteGraph', 'Pointer', 'DoubleClickTime'],
|
||
name: 'Double click interval (maximum)',
|
||
tooltip:
|
||
'The maximum time in milliseconds between the two clicks of a double-click. Increasing this value may assist if double-clicks are sometimes not registered.',
|
||
type: 'slider',
|
||
attrs: {
|
||
min: 100,
|
||
max: 1000,
|
||
step: 50
|
||
},
|
||
defaultValue: 300,
|
||
versionAdded: '1.4.3'
|
||
},
|
||
{
|
||
id: 'Comfy.SnapToGrid.GridSize',
|
||
category: ['LiteGraph', 'Canvas', 'GridSize'],
|
||
name: 'Snap to grid size',
|
||
type: 'slider',
|
||
attrs: {
|
||
min: 1,
|
||
max: 500
|
||
},
|
||
tooltip:
|
||
'When dragging and resizing nodes while holding shift they will be aligned to the grid, this controls the size of that grid.',
|
||
defaultValue: LiteGraph.CANVAS_GRID_SIZE
|
||
},
|
||
// Keep the 'pysssss.SnapToGrid' setting id so we don't need to migrate setting values.
|
||
// Using a new setting id can cause existing users to lose their existing settings.
|
||
{
|
||
id: 'pysssss.SnapToGrid',
|
||
category: ['LiteGraph', 'Canvas', 'AlwaysSnapToGrid'],
|
||
name: 'Always snap to grid',
|
||
type: 'boolean',
|
||
defaultValue: false,
|
||
versionAdded: '1.3.13'
|
||
},
|
||
{
|
||
id: 'Comfy.Server.ServerConfigValues',
|
||
name: 'Server config values for frontend display',
|
||
tooltip: 'Server config values used for frontend display only',
|
||
type: 'hidden',
|
||
// Mapping from server config id to value.
|
||
defaultValue: {} as Record<string, any>,
|
||
versionAdded: '1.4.8'
|
||
},
|
||
{
|
||
id: 'Comfy.Server.LaunchArgs',
|
||
name: 'Server launch arguments',
|
||
tooltip:
|
||
'These are the actual arguments that are passed to the server when it is launched.',
|
||
type: 'hidden',
|
||
defaultValue: {} as Record<string, string>,
|
||
versionAdded: '1.4.8'
|
||
},
|
||
{
|
||
id: 'Comfy.Queue.MaxHistoryItems',
|
||
name: 'Queue history size',
|
||
tooltip: 'The maximum number of tasks that show in the queue history.',
|
||
type: 'slider',
|
||
attrs: {
|
||
min: 2,
|
||
max: 256,
|
||
step: 2
|
||
},
|
||
defaultValue: 64,
|
||
versionAdded: '1.4.12'
|
||
},
|
||
{
|
||
id: 'LiteGraph.Canvas.MaximumFps',
|
||
name: 'Maximum FPS',
|
||
tooltip:
|
||
'The maximum frames per second that the canvas is allowed to render. Caps GPU usage at the cost of smoothness. If 0, the screen refresh rate is used. Default: 0',
|
||
type: 'slider',
|
||
attrs: {
|
||
min: 0,
|
||
max: 120
|
||
},
|
||
defaultValue: 0,
|
||
versionAdded: '1.5.1'
|
||
},
|
||
{
|
||
id: 'Comfy.EnableWorkflowViewRestore',
|
||
category: ['Comfy', 'Workflow', 'EnableWorkflowViewRestore'],
|
||
name: 'Save and restore canvas position and zoom level in workflows',
|
||
type: 'boolean',
|
||
defaultValue: true,
|
||
versionModified: '1.5.4'
|
||
},
|
||
{
|
||
id: 'Comfy.Workflow.ConfirmDelete',
|
||
name: 'Show confirmation when deleting workflows',
|
||
type: 'boolean',
|
||
defaultValue: true,
|
||
versionAdded: '1.5.6'
|
||
},
|
||
{
|
||
id: 'Comfy.ColorPalette',
|
||
name: 'The active color palette id',
|
||
type: 'hidden',
|
||
defaultValue: 'dark',
|
||
versionModified: '1.6.7',
|
||
migrateDeprecatedValue(value: string) {
|
||
// Legacy custom palettes were prefixed with 'custom_'
|
||
return value.startsWith('custom_') ? value.replace('custom_', '') : value
|
||
}
|
||
},
|
||
{
|
||
id: 'Comfy.CustomColorPalettes',
|
||
name: 'Custom color palettes',
|
||
type: 'hidden',
|
||
defaultValue: {} as ColorPalettes,
|
||
versionModified: '1.6.7'
|
||
},
|
||
{
|
||
id: 'Comfy.WidgetControlMode',
|
||
category: ['Comfy', 'Node Widget', 'WidgetControlMode'],
|
||
name: 'Widget control mode',
|
||
tooltip:
|
||
'Controls when widget values are updated (randomize/increment/decrement), either before the prompt is queued or after.',
|
||
type: 'combo',
|
||
defaultValue: 'after',
|
||
options: ['before', 'after'],
|
||
versionModified: '1.6.10'
|
||
},
|
||
{
|
||
id: 'Comfy.TutorialCompleted',
|
||
name: 'Tutorial completed',
|
||
type: 'hidden',
|
||
defaultValue: false,
|
||
versionAdded: '1.8.7'
|
||
},
|
||
{
|
||
id: 'Comfy.InstalledVersion',
|
||
name: 'The frontend version that was running when the user first installed ComfyUI',
|
||
type: 'hidden',
|
||
defaultValue: null,
|
||
versionAdded: '1.24.0'
|
||
},
|
||
{
|
||
id: 'LiteGraph.ContextMenu.Scaling',
|
||
name: 'Scale node combo widget menus (lists) when zoomed in',
|
||
defaultValue: false,
|
||
type: 'boolean',
|
||
versionAdded: '1.8.8'
|
||
},
|
||
{
|
||
id: 'LiteGraph.Canvas.LowQualityRenderingZoomThreshold',
|
||
name: 'Low quality rendering zoom threshold',
|
||
tooltip:
|
||
'Zoom level threshold for performance mode. Lower values (0.1) = quality at all zoom levels. Higher values (1.0) = performance mode even when zoomed in. Performance mode simplifies rendering by hiding text labels, shadows, and details.',
|
||
type: 'slider',
|
||
attrs: {
|
||
min: 0.1,
|
||
max: 1,
|
||
step: 0.01
|
||
},
|
||
defaultValue: 0.6,
|
||
versionAdded: '1.9.1'
|
||
},
|
||
{
|
||
id: 'Comfy.Canvas.NavigationMode',
|
||
category: ['LiteGraph', 'Canvas', 'CanvasNavigationMode'],
|
||
name: 'Canvas Navigation Mode',
|
||
defaultValue: 'legacy',
|
||
type: 'combo',
|
||
options: [
|
||
{ value: 'standard', text: 'Standard (New)' },
|
||
{ value: 'legacy', text: 'Drag Navigation' }
|
||
],
|
||
versionAdded: '1.25.0',
|
||
defaultsByInstallVersion: {
|
||
'1.25.0': 'legacy'
|
||
}
|
||
},
|
||
{
|
||
id: 'Comfy.Canvas.SelectionToolbox',
|
||
category: ['LiteGraph', 'Canvas', 'SelectionToolbox'],
|
||
name: 'Show selection toolbox',
|
||
type: 'boolean',
|
||
defaultValue: true,
|
||
versionAdded: '1.10.5'
|
||
},
|
||
{
|
||
id: 'LiteGraph.Reroute.SplineOffset',
|
||
name: 'Reroute spline offset',
|
||
tooltip: 'The bezier control point offset from the reroute centre point',
|
||
type: 'slider',
|
||
defaultValue: 20,
|
||
attrs: {
|
||
min: 0,
|
||
max: 400
|
||
},
|
||
versionAdded: '1.15.7'
|
||
},
|
||
{
|
||
id: 'Comfy.Toast.DisableReconnectingToast',
|
||
name: 'Disable toasts when reconnecting or reconnected',
|
||
type: 'hidden',
|
||
defaultValue: false,
|
||
versionAdded: '1.15.12'
|
||
},
|
||
{
|
||
id: 'Comfy.Minimap.Visible',
|
||
name: 'Display minimap on canvas',
|
||
type: 'hidden',
|
||
defaultValue: true,
|
||
versionAdded: '1.25.0'
|
||
},
|
||
{
|
||
id: 'Comfy.Minimap.NodeColors',
|
||
name: 'Display node with its original color on minimap',
|
||
type: 'hidden',
|
||
defaultValue: false,
|
||
versionAdded: '1.26.0'
|
||
},
|
||
{
|
||
id: 'Comfy.Minimap.ShowLinks',
|
||
name: 'Display links on minimap',
|
||
type: 'hidden',
|
||
defaultValue: true,
|
||
versionAdded: '1.26.0'
|
||
},
|
||
{
|
||
id: 'Comfy.Minimap.ShowGroups',
|
||
name: 'Display node groups on minimap',
|
||
type: 'hidden',
|
||
defaultValue: true,
|
||
versionAdded: '1.26.0'
|
||
},
|
||
{
|
||
id: 'Comfy.Minimap.RenderBypassState',
|
||
name: 'Render bypass state on minimap',
|
||
type: 'hidden',
|
||
defaultValue: true,
|
||
versionAdded: '1.26.0'
|
||
},
|
||
{
|
||
id: 'Comfy.Minimap.RenderErrorState',
|
||
name: 'Render error state on minimap',
|
||
type: 'hidden',
|
||
defaultValue: true,
|
||
versionAdded: '1.26.0'
|
||
},
|
||
{
|
||
id: 'Comfy.Workflow.AutoSaveDelay',
|
||
name: 'Auto Save Delay (ms)',
|
||
defaultValue: 1000,
|
||
type: 'number',
|
||
tooltip: 'Only applies if Auto Save is set to "after delay".',
|
||
versionAdded: '1.16.0'
|
||
},
|
||
{
|
||
id: 'Comfy.Workflow.AutoSave',
|
||
name: 'Auto Save',
|
||
type: 'combo',
|
||
options: ['off', 'after delay'], // Room for other options like on focus change, tab change, window change
|
||
defaultValue: 'off', // Popular requst by users (https://github.com/Comfy-Org/ComfyUI_frontend/issues/1584#issuecomment-2536610154)
|
||
versionAdded: '1.16.0'
|
||
},
|
||
{
|
||
id: 'Comfy.Workflow.Persist',
|
||
name: 'Persist workflow state and restore on page (re)load',
|
||
type: 'boolean',
|
||
defaultValue: true,
|
||
versionAdded: '1.16.1'
|
||
},
|
||
{
|
||
id: 'LiteGraph.Node.DefaultPadding',
|
||
name: 'Always shrink new nodes',
|
||
tooltip:
|
||
'Resize nodes to the smallest possible size when created. When disabled, a newly added node will be widened slightly to show widget values.',
|
||
type: 'boolean',
|
||
defaultValue: false,
|
||
versionAdded: '1.18.0'
|
||
},
|
||
{
|
||
id: 'Comfy.Canvas.BackgroundImage',
|
||
category: ['Appearance', 'Canvas', 'Background'],
|
||
name: 'Canvas background image',
|
||
type: 'backgroundImage',
|
||
tooltip:
|
||
'Image URL for the canvas background. You can right-click an image in the outputs panel and select "Set as Background" to use it, or upload your own image using the upload button.',
|
||
defaultValue: '',
|
||
versionAdded: '1.20.4',
|
||
versionModified: '1.20.5'
|
||
},
|
||
// Release data stored in settings
|
||
{
|
||
id: 'Comfy.Release.Version',
|
||
name: 'Last seen release version',
|
||
type: 'hidden',
|
||
defaultValue: ''
|
||
},
|
||
{
|
||
id: 'Comfy.Release.Status',
|
||
name: 'Release status',
|
||
type: 'hidden',
|
||
defaultValue: 'skipped'
|
||
},
|
||
{
|
||
id: 'Comfy.Release.Timestamp',
|
||
name: 'Release seen timestamp',
|
||
type: 'hidden',
|
||
defaultValue: 0
|
||
}
|
||
]
|