Support node deprecated/experimental flag (#563)

* Add deprecated field

* Hide deprecated nodes

* Add experimental node show/hide

* Add setting tooltips

* nit

* nit

* nit
This commit is contained in:
Chenlei Hu
2024-08-20 17:00:47 -04:00
committed by GitHub
parent 269e468425
commit 9dd6da3dc2
7 changed files with 120 additions and 9 deletions

View File

@@ -1,7 +1,7 @@
import { NodeSearchService } from '@/services/nodeSearchService'
import { ComfyNodeDef } from '@/types/apiTypes'
import { defineStore } from 'pinia'
import { Type, Transform, plainToClass } from 'class-transformer'
import { Type, Transform, plainToClass, Expose } from 'class-transformer'
import { ComfyWidgetConstructor } from '@/scripts/widgets'
import { TreeNode } from 'primevue/treenode'
import { buildTree } from '@/utils/treeUtil'
@@ -166,6 +166,23 @@ export class ComfyNodeDefImpl {
python_module: string
description: string
@Transform(({ value, obj }) => value ?? obj.category === '', {
toClassOnly: true
})
@Type(() => Boolean)
@Expose()
deprecated: boolean
@Transform(
({ value, obj }) => value ?? obj.category.startsWith('_for_testing'),
{
toClassOnly: true
}
)
@Type(() => Boolean)
@Expose()
experimental: boolean
@Type(() => ComfyInputsSpec)
input: ComfyInputsSpec
@@ -229,22 +246,34 @@ export const SYSTEM_NODE_DEFS: Record<string, ComfyNodeDef> = {
interface State {
nodeDefsByName: Record<string, ComfyNodeDefImpl>
widgets: Record<string, ComfyWidgetConstructor>
showDeprecated: boolean
showExperimental: boolean
}
export const useNodeDefStore = defineStore('nodeDef', {
state: (): State => ({
nodeDefsByName: {},
widgets: {}
widgets: {},
showDeprecated: false,
showExperimental: false
}),
getters: {
nodeDefs(state) {
return Object.values(state.nodeDefsByName)
},
nodeSearchService(state) {
return new NodeSearchService(Object.values(state.nodeDefsByName))
// Node defs that are not deprecated
visibleNodeDefs(state) {
return this.nodeDefs.filter(
(nodeDef: ComfyNodeDefImpl) =>
(state.showDeprecated || !nodeDef.deprecated) &&
(state.showExperimental || !nodeDef.experimental)
)
},
nodeSearchService() {
return new NodeSearchService(this.visibleNodeDefs)
},
nodeTree(): TreeNode {
return buildTree(this.nodeDefs, (nodeDef: ComfyNodeDefImpl) => [
return buildTree(this.visibleNodeDefs, (nodeDef: ComfyNodeDefImpl) => [
...nodeDef.category.split('/'),
nodeDef.display_name
])