메인 콘텐츠로 건너뛰기

LiteGraph

Comfy UI는 LiteGraph를 기반으로 구축되었습니다.
Comfy의 많은 기능은 LiteGraph에 의해 제공되므로, 보다 복잡한 노드를 개발하는 경우 해당 리포지토리를 클론하고 doc/index.html에서 찾을 수 있는 문서를 살펴보는 것이 유용할 것입니다.

ComfyApp

app 객체(항상 import { app } from "../../scripts/app.js";로 접근 가능)는 브라우저에서 실행 중인 Comfy 애플리케이션을 나타내며, 아래에 나열된 몇 가지 유용한 속성과 함수를 포함하고 있습니다.
사용 중단됨: app나 프로토타입에 대한 함수 훅킹/몽키패치는 사용 중단되었으며 가까운 시일 내에 변경될 수 있습니다. 대신 공식 확장 훅컨텍스트 메뉴 API를 사용하세요.
app에 대한 함수 훅킹은 권장되지 않습니다. Comfy는 지속적으로 개발되고 있으며 핵심 동작이 변경될 수 있습니다.

속성

app의 중요한 속성에는 다음이 포함됩니다(전체 목록은 아닙니다): 가장 자주 접근하게 될 것은 아마도 canvas(그래픽 요소)와 graph(논리적 연결)일 것입니다.

함수

다시 한번 말씀드리지만, 매우 많습니다. 그중 몇 가지 주요 함수는 다음과 같습니다:

LGraph

LGraph 객체는 LiteGraph 프레임워크의 일부이며, 현재 그래프의 논리적 상태(노드 및 링크)를 나타냅니다.
그래프를 조작하려면 LiteGraph 문서(doc/index.html에 있으니 https://github.com/jagenjo/litegraph.js를 클론했다면)에 나와 있는 함수들을 참고하세요.
graph를 사용해 노드와 링크의 세부 정보를 얻을 수 있습니다. 예를 들어:
LLink 객체는 graph.links를 통해 접근할 수 있으며, 노드 link.origin_id 출력 슬롯 link.origin_slot에서 노드 link.target_id 슬롯 link.target_slot까지의 그래프 내 단일 링크를 나타냅니다. 또한 link.type에 데이터 유형을 나타내는 문자열과 link.id를 가지고 있습니다. LLinkLGraphNodeconnect 메서드에서 생성됩니다(여기서 ComfyNode는 하위 클래스입니다).
직접 LLink 객체를 생성하지 마세요—대신 LiteGraph 함수를 사용하세요.

ComfyNode

ComfyNodeLGraphNode의 하위 클래스이며, 따라서 LiteGraph 문서는 더 일반적인 작업에 도움이 됩니다. 그러나 Comfy는 LiteGraph 핵심 동작을 상당히 확장했으며, 모든 LiteGraph 기능을 사용하지도 않습니다.
다음 설명은 일반 노드에 적용됩니다.
그룹 노드, 원시 노드, 노트, 리디렉션 노드는 다른 속성을 가집니다.
ComfyNode 객체는 현재 워크플로우의 노드를 나타냅니다. 이를 활용하고 싶은 중요한 속성들이 있으며, 사용하거나 동작을 수정하기 위해 훅킹하고 싶은 함수들도 매우 많습니다.
사용 중단됨: ComfyNodeLGraphNode의 프로토타입 메서드 훅킹은 사용 중단되었으며 가까운 시일 내에 변경될 수 있습니다. 가능한 경우 공식 확장 훅을 사용하세요. 예를 들어 컨텍스트 메뉴의 경우 getNodeMenuItems를 사용하세요. 예제는 컨텍스트 메뉴 마이그레이션 가이드를 참조하세요.
노드 객체에 대한 더 완벽한 이해를 위해 다음 코드를 확장에 삽입하고 console.log 명령어에 브레이크포인트를 설정하는 것이 도움이 될 수 있습니다. 이후 새 노드를 생성하면 좋아하는 디버거를 사용해 노드를 탐색할 수 있습니다.

속성

함수

매우 많은 함수가 있습니다(마지막으로 세어봤을 때 85개). 아래에 일부를 나열했습니다. 대부분의 함수는 LiteGraph 핵심 코드에서 수정되지 않았습니다.

입력, 출력, 위젯

연결

표시

collapse는 이름이 잘못 지어졌습니다. 접힌 상태를 _전환_합니다.
불린 매개변수를 받아 node.collapsable === false를 무시할 수 있습니다.

기타

입력과 위젯

입력과 위젯은 데이터를 노드에 입력하는 두 가지 방법을 나타냅니다. 일반적으로 위젯은 입력으로 변환될 수 있지만, 모든 입력이 위젯으로 변환될 수 있는 것은 아닙니다(많은 데이터 유형은 UI 요소를 통해 입력될 수 없기 때문입니다). node.inputs는 현재 입력의 리스트이며(노드 왼쪽에 색깔 있는 점들), .name, .type, .link(연결된 LLink에 대한 참조, app.graph.links에 있음)를 지정합니다. 입력이 변환된 위젯인 경우, .widget에 이제 비활성화된 위젯에 대한 참조도 보관됩니다. node.widgets는 위젯의 전체 리스트이며, 입력으로 변환되었는지 여부와 관계없이 포함됩니다. 위젯에는 다음 속성이 있습니다:

위젯 유형

app.widgets는 현재 등록된 위젯 유형의 사전이며, 유형의 이름을 대문자로 키로 사용합니다. Comfy에 내장된 위젯 유형에는 직관적인 BOOLEAN, INT, FLOAT뿐만 아니라 STRING(단일 줄과 다중 줄 두 가지 형태), 드롭다운 선택을 위한 COMBO, 이미지 로드 노드에 사용되는 IMAGEUPLOAD가 있습니다. 맞춤형 위젯 유형은 확장에서 getCustomWidgets 메서드를 제공하여 추가할 수 있습니다.

연결된 위젯

위젯은 연결될 수도 있습니다—예를 들어 seedcontrol_after_generate의 내장 동작입니다. 연결된 위젯은 .type = 'base_widget_type:base_widget_name'를 가집니다; 따라서 control_after_generate는 유형이 int:seed일 수 있습니다.

프롬프트

Comfy에서 큐 프롬프트 버튼을 누르면 app.graphToPrompt() 메서드가 호출되어 현재 그래프를 서버로 전송할 수 있는 프롬프트로 변환합니다. app.graphToPrompt는 두 가지 속성인 outputworkflow를 가진 객체를 반환합니다.

output

prompt.output는 그래프의 각 노드의 node_id에서 두 가지 속성을 가진 객체로 매핑됩니다.
  • prompt.output[node_id].class_type, 파이썬 코드에서 정의된 커스텀 노드 클래스의 고유한 이름
  • prompt.output[node_id].inputs, 각 입력(또는 위젯)의 값을 입력 이름에서 다음으로 매핑한 객체로 포함합니다:
    • 선택된 값이 위젯인 경우, 또는
    • 입력에 연결된 링크가 있는 경우 (upstream_node_id, upstream_node_output_slot)를 포함한 배열, 또는
    • 위젯이 입력으로 변환되었으나 연결되지 않은 경우 undefined
    • 기타 연결되지 않은 입력은 .inputs에 포함되지 않습니다
연결된 입력을 설명하는 배열의 upstream_node_id는 정수 대신 문자열로 표현됩니다.

workflow

prompt.workflow에는 다음 속성이 포함됩니다:
  • config - 추가 구성 옵션의 사전(기본값은 비어있음)
  • extra - 워크플로우에 대한 추가 정보를 포함한 사전. 기본적으로 다음을 포함합니다:
    • extra.ds - 현재 그래프의 뷰를 설명합니다(scaleoffset)
  • groups - 워크플로우의 모든 그룹
  • last_link_id - 마지막으로 추가된 링크의 ID
  • last_node_id - 마지막으로 추가된 노드의 ID
  • links - 그래프의 모든 링크 리스트. 각 항목은 다섯 개의 정수와 하나의 문자열로 구성된 배열입니다:
    • (link_id, upstream_node_id, upstream_node_output_slot, downstream_node_id, downstream_node_input_slot, 데이터 유형)
  • nodes - 그래프의 모든 노드 리스트. 각 항목은 위에서 설명한 노드 속성의 부분 집합을 매핑한 객체입니다:
    • 다음 속성 포함: flags, id, inputs, mode, order, pos, properties, size, type, widgets_values
    • 또한, 출력이 없는 노드를 제외하고 outputs 속성이 있으며, 각 출력은 다음을 포함합니다:
      • name - 출력의 이름
      • type - 출력의 데이터 유형
      • links - 이 출력에서 나오는 모든 링크의 link_id 리스트(연결이 없으면 빈 리스트 또는 null일 수 있음)
      • shape - 출력을 그리는 데 사용되는 도형(기본값은 점인 3)
      • slot_index - 출력의 슬롯 번호
  • version - LiteGraph 버전 번호(작성 당시 0.4)
nodes.output는 출력이 없는 노드에서는 존재하지 않으며, 빈 리스트가 아닙니다.