> ## Documentation Index
> Fetch the complete documentation index at: https://dripart-docs-recommend-assets-api.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# 隠蔽入力と柔軟な入力

## 隠蔽入力

クライアント側で対応する入力またはウィジェットを作成する `required` 入力および `optional` 入力に加えて、カスタムノードがサーバーから特定の情報を要求することを可能にする 3 つの `hidden` 入力オプションがあります。

これらは、`INPUT_TYPES` の `dict` 内で `hidden` の値を返すことでアクセスされ、署名は `dict[str,str]` であり、`PROMPT`、`EXTRA_PNGINFO`、または `UNIQUE_ID` の 1 つ以上を含みます。

```python theme={null}
@classmethod
def INPUT_TYPES(s):
    return {
        "required": {...},
        "optional": {...},
        "hidden": {
            "unique_id": "UNIQUE_ID",
            "prompt": "PROMPT", 
            "extra_pnginfo": "EXTRA_PNGINFO",
        }
    }
```

### UNIQUE\_ID

`UNIQUE_ID` はノードの一意の識別子であり、クライアント側のノードの `id` プロパティと一致します。これは通常、クライアント - サーバー間の通信で使用されます（[メッセージ](/development/comfyui-server/comms_messages#getting-node-id) を参照）。

### PROMPT

`PROMPT` はクライアントからサーバーに送信された完全なプロンプトです。詳細な説明については [プロンプトオブジェクト](/custom-nodes/js/javascript_objects_and_hijacking#prompt) を参照してください。

### EXTRA\_PNGINFO

`EXTRA_PNGINFO` は、保存されるすべての `.png` ファイルのメタデータにコピーされる辞書です。カスタムノードは、保存用の追加情報をこの辞書に格納できます（または下流のノードとの通信手段として）。

<Tip>Comfy が `disable_metadata` オプション付きで起動された場合、このデータは保存されないことに注意してください。</Tip>

### DYNPROMPT

`DYNPROMPT` は `comfy_execution.graph.DynamicPrompt` のインスタンスです。これは `PROMPT` と異なり、[ノード拡張](/custom-nodes/backend/expansion) に応じて実行中に変更される可能性があります。
<Tip>`DYNPROMPT` は高度なケース（カスタムノード内にループを実装するなど）でのみ使用すべきです。</Tip>

## 柔軟な入力

### カスタムデータ型

カスタムノード間でデータを渡したい場合、カスタムデータ型を定義すると役立ちます。これは、`CHEESE` のような大文字の一意の文字列をデータ型の名前として選択するだけで（ほぼ）完了します。

次に、ノードの `INPUT_TYPES` と `RETURN_TYPES` で `CHEESE` を使用できます。Comfy クライアントは `CHEESE` 出力が `CHEESE` 入力に接続されることのみを許可します。`CHEESE` は任意の Python オブジェクトにできます。

注意すべき点は、Comfy クライアントは `CHEESE` について知らないため（`CHEESE` 用のカスタムウィジェットを定義しない限り、これは別の話題です）、それをウィジェットではなく入力として強制する必要があることです。これは、入力オプション辞書内の `forceInput` オプションで行えます：

```python theme={null}
@classmethod
def INPUT_TYPES(s):
    return {
        "required": { "my_cheese": ("CHEESE", {"forceInput":True}) }
    }
```

### ワイルドカード入力

```python theme={null}
@classmethod
def INPUT_TYPES(s):
    return {
        "required": { "anything": ("*",{})},
    }

@classmethod
def VALIDATE_INPUTS(s, input_types):
    return True
```

フロントエンドでは、入力を任意のソースに接続できることを示すために `*` を使用できます。これはバックエンドで正式にサポートされていないため、`VALIDATE_INPUTS` 関数で `input_types` という名前のパラメータを受け入れることで、型のバックエンド検証をスキップできます。（詳細については [VALIDATE\_INPUTS](./server_overview#validate-inputs) を参照。）
渡されたデータを解釈するのはノードの役割です。

### 動的に作成された入力

入力がクライアント側で動的に作成される場合、それらを Python ソースコードで定義することはできません。このデータにアクセスするには、Comfy が任意の名前でデータを渡せるようにする `optional` 辞書が必要です。Comfy サーバーは

```python theme={null}
class ContainsAnyDict(dict):
    def __contains__(self, key):
        return True
...

@classmethod
def INPUT_TYPES(s):
    return {
        "required": {},
        "optional": ContainsAnyDict()
    }
...

def main_method(self, **kwargs):
    # 動的に作成された入力データは辞書 kwargs 内になります

```

<Tip>この Python の小技巧について、rgthree さんに感謝します！</Tip>
