메인 콘텐츠로 건너뛰기
명령어 및 키바인딩 API를 사용하면 확장 프로그램이 맞춤형 명령어를 등록하고 이를 키보드 단축키와 연결할 수 있습니다. 이를 통해 사용자는 마우스를 사용하지 않고도 빠르게 작업을 실행할 수 있습니다.

기본 사용법

app.registerExtension({
  name: "MyExtension",
  // 명령어 등록
  commands: [
    {
      id: "myCommand",
      label: "My Command",
      function: () => {
        console.log("명령어 실행!");
      }
    }
  ],
  // 명령어와 키바인딩 연결
  keybindings: [
    {
      combo: { key: "k", ctrl: true },
      commandId: "myCommand"
    }
  ]
});

명령어 구성

각 명령어에는 id, label, 그리고 function이 필요합니다:
{
  id: string,              // 명령어의 고유 식별자
  label: string,           // 명령어에 표시될 이름
  function: () => void     // 명령어가 실행될 때 실행할 함수
}

키바인딩 구성

각 키바인딩에는 combocommandId가 필요합니다:
{
  combo: {                 // 키 조합
    key: string,           // 주요 키 (단일 문자 또는 특수 키)
    ctrl?: boolean,        // Ctrl 키 필수 (옵션)
    shift?: boolean,       // Shift 키 필수 (옵션)
    alt?: boolean,         // Alt 키 필수 (옵션)
    meta?: boolean         // Meta/Command 키 필수 (옵션)
  },
  commandId: string        // 트리거할 명령어의 ID
}

특수 키

문자 이외의 키는 다음 값 중 하나를 사용하세요:
  • 화살표 키: "ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight"
  • 함수 키: "F1"부터 "F12"
  • 기타 특수 키: "Escape", "Tab", "Enter", "Backspace", "Delete", "Home", "End", "PageUp", "PageDown"

명령어 예제

app.registerExtension({
  name: "CommandExamples",
  commands: [
    {
      id: "runWorkflow",
      label: "워크플로 실행",
      function: () => {
        app.queuePrompt();
      }
    },
    {
      id: "clearWorkflow",
      label: "워크플로 지우기",
      function: () => {
        if (confirm("워크플로를 지우시겠습니까?")) {
          app.graph.clear();
        }
      }
    },
    {
      id: "saveWorkflow",
      label: "워크플로 저장",
      function: () => {
        app.graphToPrompt().then(workflow => {
          const blob = new Blob([JSON.stringify(workflow)], {type: "application/json"});
          const url = URL.createObjectURL(blob);
          const a = document.createElement("a");
          a.href = url;
          a.download = "workflow.json";
          a.click();
          URL.revokeObjectURL(url);
        });
      }
    }
  ]
});

키바인딩 예제

app.registerExtension({
  name: "KeybindingExamples",
  commands: [
    /* 위에서 정의한 명령어 */
  ],
  keybindings: [
    // Ctrl+R로 워크플로 실행
    {
      combo: { key: "r", ctrl: true },
      commandId: "runWorkflow"
    },
    // Ctrl+Shift+C로 워크플로 지우기
    {
      combo: { key: "c", ctrl: true, shift: true },
      commandId: "clearWorkflow"
    },
    // Ctrl+S로 워크플로 저장
    {
      combo: { key: "s", ctrl: true },
      commandId: "saveWorkflow"
    },
    // F5로 워크플로 실행 (대체 옵션)
    {
      combo: { key: "F5" },
      commandId: "runWorkflow"
    }
  ]
});

참고사항 및 제한사항

  • ComfyUI 핵심에서 정의된 키바인딩은 확장 프로그램에서 덮어쓸 수 없습니다. 핵심 키바인딩은 다음 소스 파일에서 확인하세요:
  • 일부 키 조합은 브라우저에서 예약되어 있어(예: Ctrl+F는 검색용) 덮어쓸 수 없습니다.
  • 여러 확장 프로그램이 동일한 키바인딩을 등록할 경우, 동작은 정의되지 않습니다.