diff --git a/src/extensions/core/nodeBadge.ts b/src/extensions/core/nodeBadge.ts index 9b8f970af..6317f2e60 100644 --- a/src/extensions/core/nodeBadge.ts +++ b/src/extensions/core/nodeBadge.ts @@ -23,30 +23,58 @@ function isCoreNode(node: ComfyLGraphNode) { return getNodeSource(node)?.type === 'core' } -function getNodeIdBadge(node: ComfyLGraphNode, nodeIdBadgeMode: NodeBadgeMode) { - return nodeIdBadgeMode === NodeBadgeMode.None || - (isCoreNode(node) && nodeIdBadgeMode === NodeBadgeMode.HideBuiltIn) - ? '' - : `#${node.id}` +function badgeTextVisible( + node: ComfyLGraphNode, + badgeMode: NodeBadgeMode +): boolean { + return ( + badgeMode === NodeBadgeMode.None || + (isCoreNode(node) && badgeMode === NodeBadgeMode.HideBuiltIn) + ) } -function getNodeSourceBadge( +function getNodeIdBadgeText( + node: ComfyLGraphNode, + nodeIdBadgeMode: NodeBadgeMode +) { + return badgeTextVisible(node, nodeIdBadgeMode) ? '' : `#${node.id}` +} + +function getNodeSourceBadgeText( node: ComfyLGraphNode, nodeSourceBadgeMode: NodeBadgeMode ) { const nodeSource = getNodeSource(node) - return nodeSourceBadgeMode === NodeBadgeMode.None || - (isCoreNode(node) && nodeSourceBadgeMode === NodeBadgeMode.HideBuiltIn) + return badgeTextVisible(node, nodeSourceBadgeMode) ? '' : nodeSource?.badgeText ?? '' } +function getNodeLifeCycleBadgeText( + node: ComfyLGraphNode, + nodeLifeCycleBadgeMode: NodeBadgeMode +) { + let text = '' + const nodeDef = (node.constructor as typeof ComfyLGraphNode).nodeData + + if (nodeDef.deprecated) { + text = '[DEPR]' + } + + if (nodeDef.experimental) { + text = '[BETA]' + } + + return badgeTextVisible(node, nodeLifeCycleBadgeMode) ? '' : text +} + class NodeBadgeExtension implements ComfyExtension { name = 'Comfy.NodeBadge' constructor( public nodeIdBadgeMode: ComputedRef | null = null, public nodeSourceBadgeMode: ComputedRef | null = null, + public nodeLifeCycleBadgeMode: ComputedRef | null = null, public colorPalette: ComputedRef | null = null ) {} @@ -63,6 +91,12 @@ class NodeBadgeExtension implements ComfyExtension { this.nodeIdBadgeMode = computed( () => settingStore.get('Comfy.NodeBadge.NodeIdBadgeMode') as NodeBadgeMode ) + this.nodeLifeCycleBadgeMode = computed( + () => + settingStore.get( + 'Comfy.NodeBadge.NodeLifeCycleBadgeMode' + ) as NodeBadgeMode + ) this.colorPalette = computed(() => getColorPalette(settingStore.get('Comfy.ColorPalette')) ) @@ -74,6 +108,9 @@ class NodeBadgeExtension implements ComfyExtension { watch(this.nodeIdBadgeMode, () => { app.graph.setDirtyCanvas(true, true) }) + watch(this.nodeLifeCycleBadgeMode, () => { + app.graph.setDirtyCanvas(true, true) + }) } nodeCreated(node: ComfyLGraphNode, app: ComfyApp) { @@ -90,13 +127,17 @@ class NodeBadgeExtension implements ComfyExtension { new LGraphBadge({ text: _.truncate( [ - getNodeIdBadge(node, this.nodeIdBadgeMode.value), - getNodeSourceBadge(node, this.nodeSourceBadgeMode.value) + getNodeIdBadgeText(node, this.nodeIdBadgeMode.value), + getNodeLifeCycleBadgeText( + node, + this.nodeLifeCycleBadgeMode.value + ), + getNodeSourceBadgeText(node, this.nodeSourceBadgeMode.value) ] .filter((s) => s.length > 0) .join(' '), { - length: 25 + length: 31 } ), fgColor: diff --git a/src/stores/settingStore.ts b/src/stores/settingStore.ts index 882c5c630..1f79a07a3 100644 --- a/src/stores/settingStore.ts +++ b/src/stores/settingStore.ts @@ -347,6 +347,14 @@ export const useSettingStore = defineStore('setting', { options: [NodeBadgeMode.None, NodeBadgeMode.ShowAll], defaultValue: NodeBadgeMode.ShowAll }) + + app.ui.settings.addSetting({ + id: 'Comfy.NodeBadge.NodeLifeCycleBadgeMode', + name: 'Node life cycle badge mode', + type: 'combo', + options: [NodeBadgeMode.None, NodeBadgeMode.ShowAll], + defaultValue: NodeBadgeMode.ShowAll + }) }, set(key: K, value: Settings[K]) { diff --git a/src/types/apiTypes.ts b/src/types/apiTypes.ts index b389f01be..56437da8d 100644 --- a/src/types/apiTypes.ts +++ b/src/types/apiTypes.ts @@ -492,7 +492,8 @@ const zSettings = z.record(z.any()).and( 'Comfy.Node.DoubleClickTitleToEdit': z.boolean(), 'Comfy.Window.UnloadConfirmation': z.boolean(), 'Comfy.NodeBadge.NodeSourceBadgeMode': zNodeBadgeMode, - 'Comfy.NodeBadge.NodeIdBadgeMode': zNodeBadgeMode + 'Comfy.NodeBadge.NodeIdBadgeMode': zNodeBadgeMode, + 'Comfy.NodeBadge.NodeLifeCycleBadgeMode': zNodeBadgeMode }) .optional() )