メインコンテンツへスキップ
コマンドとキーバインディング API により、拡張機能はカスタムコマンドを登録し、キーボードショートカットに関連付けることができます。これにより、ユーザーはマウスを使用せずにアクションを迅速にトリガーできます。

基本的な使い方

app.registerExtension({
  name: "MyExtension",
  // コマンドの登録
  commands: [
    {
      id: "myCommand",
      label: "マイコマンド",
      function: () => {
        console.log("コマンドが実行されました!");
      }
    }
  ],
  // コマンドにキーバインディングを関連付け
  keybindings: [
    {
      combo: { key: "k", ctrl: true },
      commandId: "myCommand"
    }
  ]
});

コマンド設定

各コマンドには idlabelfunction が必要です:
{
  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 など)、上書きできません
  • 複数の拡張機能が同じキーバインディングを登録した場合、動作は未定義です