Files
ComfyUI-Model-Manager/src/types/global.d.ts
Hayden 659637c6e0 Feature scan info (#53)
* pref: migrate fetch model info to end back

* fix(download): can't select model type

* feat: add scan model info

* feat: add trigger button in setting

* feat: add printing logs

* chore: add explanation of scan model info
2024-11-21 22:04:39 +08:00

283 lines
7.2 KiB
TypeScript

declare namespace ComfyAPI {
namespace api {
class ComfyApi {
socket: WebSocket
fetchApi: (route: string, options?: RequestInit) => Promise<Response>
addEventListener: (
type: string,
callback: (event: CustomEvent) => void,
options?: AddEventListenerOptions,
) => void
}
const api: ComfyApi
}
namespace app {
interface ComfyExtension {
/**
* The name of the extension
*/
name: string
/**
* Allows any initialisation, e.g. loading resources. Called after the canvas is created but before nodes are added
* @param app The ComfyUI app instance
*/
init?(app: ComfyApp): Promise<void> | void
/**
* Allows any additional setup, called after the application is fully set up and running
* @param app The ComfyUI app instance
*/
setup?(app: ComfyApp): Promise<void> | void
}
interface BaseSidebarTabExtension {
id: string
title: string
icon?: string
iconBadge?: string | (() => string | null)
order?: number
tooltip?: string
}
interface VueSidebarTabExtension extends BaseSidebarTabExtension {
type: 'vue'
component: import('vue').Component
}
interface CustomSidebarTabExtension extends BaseSidebarTabExtension {
type: 'custom'
render: (container: HTMLElement) => void
destroy?: () => void
}
type SidebarTabExtension =
| VueSidebarTabExtension
| CustomSidebarTabExtension
interface ExtensionManager {
// Sidebar tabs
registerSidebarTab(tab: SidebarTabExtension): void
unregisterSidebarTab(id: string): void
getSidebarTabs(): SidebarTabExtension[]
// Toast
toast: ToastManager
}
class ComfyApp {
ui?: ui.ComfyUI
menu?: index.ComfyAppMenu
graph: lightGraph.LGraph
canvas: lightGraph.LGraphCanvas
extensionManager: ExtensionManager
registerExtension: (extension: ComfyExtension) => void
addNodeOnGraph: (
nodeDef: lightGraph.ComfyNodeDef,
options?: Record<string, any>,
) => lightGraph.LGraphNode
getCanvasCenter: () => lightGraph.Vector2
clientPosToCanvasPos: (pos: lightGraph.Vector2) => lightGraph.Vector2
handleFile: (file: File) => void
}
const app: ComfyApp
}
namespace ui {
type Props = {
parent?: HTMLElement
$?: (el: HTMLElement) => void
dataset?: DOMStringMap
style?: Partial<CSSStyleDeclaration>
for?: string
textContent?: string
[key: string]: any
}
type Children = Element[] | Element | string | string[]
type ElementType<K extends string> = K extends keyof HTMLElementTagNameMap
? HTMLElementTagNameMap[K]
: HTMLElement
const $el: <TTag extends string>(
tag: TTag,
propsOrChildren?: Children | Props,
children?: Children,
) => ElementType<TTag>
class ComfyUI {
app: app.ComfyApp
settings: ComfySettingsDialog
menuHamburger?: HTMLDivElement
menuContainer?: HTMLDivElement
dialog: dialog.ComfyDialog
}
type SettingInputType =
| 'boolean'
| 'number'
| 'slider'
| 'combo'
| 'text'
| 'hidden'
type SettingCustomRenderer = (
name: string,
setter: (v: any) => void,
value: any,
attrs: any,
) => HTMLElement
interface SettingOption {
text: string
value?: string
}
interface SettingParams {
id: string
name: string
type: SettingInputType | SettingCustomRenderer
defaultValue: any
onChange?: (newValue: any, oldValue?: any) => void
attrs?: any
tooltip?: string
options?:
| Array<string | SettingOption>
| ((value: any) => SettingOption[])
// By default category is id.split('.'). However, changing id to assign
// new category has poor backward compatibility. Use this field to overwrite
// default category from id.
// Note: Like id, category value need to be unique.
category?: string[]
experimental?: boolean
deprecated?: boolean
}
class ComfySettingsDialog {
addSetting: (params: SettingParams) => { value: any }
}
}
namespace index {
class ComfyAppMenu {
app: app.ComfyApp
logo: HTMLElement
actionsGroup: button.ComfyButtonGroup
settingsGroup: button.ComfyButtonGroup
viewGroup: button.ComfyButtonGroup
mobileMenuButton: ComfyButton
element: HTMLElement
}
}
namespace button {
type ComfyButtonProps = {
icon?: string
overIcon?: string
iconSize?: number
content?: string | HTMLElement
tooltip?: string
enabled?: boolean
action?: (e: Event, btn: ComfyButton) => void
classList?: ClassList
visibilitySetting?: { id: keyof Settings; showValue: boolean }
app?: app.ComfyApp
}
class ComfyButton {
constructor(props: ComfyButtonProps): ComfyButton
}
class ComfyButtonGroup {
insert(button: ComfyButton, index: number): void
append(button: ComfyButton): void
remove(indexOrButton: ComfyButton | number): void
update(): void
constructor(...buttons: (HTMLElement | ComfyButton)[]): ComfyButtonGroup
}
}
namespace dialog {
class ComfyDialog {
constructor(type = 'div', buttons: HTMLElement[] = null)
element: HTMLElement
close(): void
show(html: string | HTMLElement | HTMLElement[]): void
}
}
}
declare namespace lightGraph {
class LGraphNode implements ComfyNodeDef {
widgets: any[]
pos: Vector2
}
class LGraphGroup {}
class LGraph {
/**
* Adds a new node instance to this graph
* @param node the instance of the node
*/
add(node: LGraphNode | LGraphGroup, skip_compute_order?: boolean): void
/**
* Returns the top-most node in this position of the canvas
* @param x the x coordinate in canvas space
* @param y the y coordinate in canvas space
* @param nodes_list a list with all the nodes to search from, by default is all the nodes in the graph
* @return the node at this position or null
*/
getNodeOnPos<T extends LGraphNode = LGraphNode>(
x: number,
y: number,
node_list?: LGraphNode[],
margin?: number,
): T | null
}
class LGraphCanvas {
selected_nodes: Record<string, LGraphNode>
canvas_mouse: Vector2
selectNode: (node: LGraphNode) => void
copyToClipboard: (nodes: LGraphNode[]) => void
}
const LiteGraph: {
createNode: (
type: string,
title: string | null,
options: object,
) => LGraphNode
}
type ComfyNodeDef = {
input?: {
required?: Record<string, any>
optional?: Record<string, any>
hidden?: Record<string, any>
}
output?: (string | any[])[]
output_is_list?: boolean[]
output_name?: string[]
output_tooltips?: string[]
name?: string
display_name?: string
description?: string
category?: string
output_node?: boolean
python_module?: string
deprecated?: boolean
experimental?: boolean
}
type Vector2 = [number, number]
}
interface Window {
comfyAPI: typeof ComfyAPI
LiteGraph: typeof lightGraph.LiteGraph
}