> ## Documentation Index
> Fetch the complete documentation index at: https://docs.comfy.org/llms.txt
> Use this file to discover all available pages before exploring further.

# Recraft Text to Image - ComfyUI 原生节点文档

> 通过文本描述生成高质量图像的 Recraft 合作伙伴节点

<img src="https://mintcdn.com/dripart/5003JSxULDwNImme/images/built-in-nodes/api_nodes/recraft/recraft-text-to-image.jpg?fit=max&auto=format&n=5003JSxULDwNImme&q=85&s=0cb81000a29e5fadef2c0e5e164ca60f" alt="ComfyUI 原生 Recraft Text to Image 节点" width="1731" height="1138" data-path="images/built-in-nodes/api_nodes/recraft/recraft-text-to-image.jpg" />

Recraft Text to Image 节点允许你通过文本提示词生成高质量图像，直接连接 Recraft AI 的图像生成 API，创建各种风格的图像作品。

## 参数说明

### 基本参数

| 参数     | 类型  | 默认值       | 说明          |
| ------ | --- | --------- | ----------- |
| prompt | 字符串 | ""        | 生成图像的文本描述   |
| size   | 选择项 | 1024x1024 | 输出图像尺寸      |
| n      | 整数  | 1         | 生成图像数量(1-6) |
| seed   | 整数  | 0         | 随机种子值       |

### 可选参数

| 参数                | 类型               | 说明                  |
| ----------------- | ---------------- | ------------------- |
| recraft\_style    | Recraft Style    | 设置生成图像的风格，默认为"真实照片" |
| negative\_prompt  | 字符串              | 指定不希望出现的元素          |
| recraft\_controls | Recraft Controls | 附加控制参数(颜色等)         |

### 输出

| 输出    | 类型 | 说明      |
| ----- | -- | ------- |
| IMAGE | 图像 | 生成的图像结果 |

## 使用示例

## 工作原理

本节点主要通过以下步骤处理请求：

1. 整合输入参数，包括提示词、图像尺寸、生成数量和随机种子
2. 如有连接，合并风格设置和控制参数
3. 构建API请求并发送到Recraft服务器
4. 接收返回的图像URL并下载图像数据
5. 将图像数据转换为ComfyUI可用的tensor格式并输出

节点使用同步操作模式，会在处理完成前阻塞工作流执行，直到所有请求的图像都生成完毕。该节点利用Recraft的V3模型进行图像生成，能支持各种详细的文本描述和风格变化。

## 源码参考

\[节点源码 (更新于2025-05-03)]

```python theme={null}
class RecraftTextToImageNode:
    """
    Generates images synchronously based on prompt and resolution.
    """

    RETURN_TYPES = (IO.IMAGE,)
    DESCRIPTION = cleandoc(__doc__ or "")  # Handle potential None value
    FUNCTION = "api_call"
    API_NODE = True
    CATEGORY = "api node/image/Recraft"

    @classmethod
    def INPUT_TYPES(s):
        return {
            "required": {
                "prompt": (
                    IO.STRING,
                    {
                        "multiline": True,
                        "default": "",
                        "tooltip": "Prompt for the image generation.",
                    },
                ),
                "size": (
                    [res.value for res in RecraftImageSize],
                    {
                        "default": RecraftImageSize.res_1024x1024,
                        "tooltip": "The size of the generated image.",
                    },
                ),
                "n": (
                    IO.INT,
                    {
                        "default": 1,
                        "min": 1,
                        "max": 6,
                        "tooltip": "The number of images to generate.",
                    },
                ),
                "seed": (
                    IO.INT,
                    {
                        "default": 0,
                        "min": 0,
                        "max": 0xFFFFFFFFFFFFFFFF,
                        "control_after_generate": True,
                        "tooltip": "Seed to determine if node should re-run; actual results are nondeterministic regardless of seed.",
                    },
                ),
            },
            "optional": {
                "recraft_style": (RecraftIO.STYLEV3,),
                "negative_prompt": (
                    IO.STRING,
                    {
                        "default": "",
                        "forceInput": True,
                        "tooltip": "An optional text description of undesired elements on an image.",
                    },
                ),
                "recraft_controls": (
                    RecraftIO.CONTROLS,
                    {
                        "tooltip": "Optional additional controls over the generation via the Recraft Controls node."
                    },
                ),
            },
            "hidden": {
                "auth_token": "AUTH_TOKEN_COMFY_ORG",
            },
        }

    def api_call(
        self,
        prompt: str,
        size: str,
        n: int,
        seed,
        recraft_style: RecraftStyle = None,
        negative_prompt: str = None,
        recraft_controls: RecraftControls = None,
        auth_token=None,
        **kwargs,
    ):
        default_style = RecraftStyle(RecraftStyleV3.realistic_image)
        if recraft_style is None:
            recraft_style = default_style

        controls_api = None
        if recraft_controls:
            controls_api = recraft_controls.create_api_model()

        if not negative_prompt:
            negative_prompt = None

        operation = SynchronousOperation(
            endpoint=ApiEndpoint(
                path="/proxy/recraft/image_generation",
                method=HttpMethod.POST,
                request_model=RecraftImageGenerationRequest,
                response_model=RecraftImageGenerationResponse,
            ),
            request=RecraftImageGenerationRequest(
                prompt=prompt,
                negative_prompt=negative_prompt,
                model=RecraftModel.recraftv3,
                size=size,
                n=n,
                style=recraft_style.style,
                substyle=recraft_style.substyle,
                style_id=recraft_style.style_id,
                controls=controls_api,
            ),
            auth_token=auth_token,
        )
        response: RecraftImageGenerationResponse = operation.execute()
        images = []
        for data in response.data:
            image = bytesio_to_image_tensor(
                download_url_to_bytesio(data.url, timeout=1024)
            )
            if len(image.shape) < 4:
                image = image.unsqueeze(0)
            images.append(image)
        output_image = torch.cat(images, dim=0)

        return (output_image,)
```
