Nodes/Protoface/Protoface Seedream 5.0 Pro · Text to Image
ComfyUI Node

Protoface Seedream 5.0 Pro · Text to Image

Five cents a render, and it rewrites your prompt

By protoface-ai·Created 22 days ago·Updated 13 days ago· 0
Protoface Seedream 5.0 Pro · Text to Image
    • image
    • mask
    • files
    • run id
    ◄prompt►
    ◄resolution1k►
    ◄aspect_ratio1:1►
    ◄output_formatjpeg►
    ◄prompt_optimization_modestandard►
    ◄generation_id0►
    ◄request_scope►

    Straight answer to the obvious question

    Why call an API for a text-to-image when SDXL, Flux and Qwen-Image are sitting on your disk? Because Seedream renders things your local checkpoints don't - dense layouts, legible signage, product-photography lighting - and because ByteDance has never released it. Seedream 5.0 Pro is a closed API product; the open stream from the same company is components (PuLID, Depth Anything, Bernini), not the flagship. There is no weights download, so this node isn't competing with your local stack so much as covering the shot it can't do.

    At 5 credits for a 1k or 1.5k image and 9 for 2k - the pack's catalog lists 5 credits at $0.045 - it's the cheapest thing in the pack and the easiest place to try a closed model inside a workflow you already know.

    How it works

    One shared implementation under every Protoface node, with per-model controls generated from the provider's public request schema. This node builds a request from your prompt and settings, submits, polls, downloads the result, and hands ComfyUI native IMAGE and MASK lists. Your prompt goes to their servers, and the model applies its own content policy - nothing local to patch around it.

    Controls

    prompt is the positive prompt. Worth knowing before you write a 400-word epic: the node has a prompt_optimization_mode, which means the model rewrites your text before generating. It's not a pass-through.

    resolution - 1k, 1.5k, 2k - is explicitly the billing tier, per the tooltip. aspect_ratio defaults to 1:1 and the enum is long: 1:1, 1:2, 2:1, 1:3, 3:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9, 9:21, 21:9. If you want a poster, pick 2:3 rather than generating square and cropping; the model composes for the frame you give it.

    output_format is jpeg or png. Choose png if you'll composite or upscale afterwards.

    prompt_optimization_mode is the field with personality. From the tooltip: standard uses the full rewrite; fast uses a lighter one that generates several times quicker but follows long or intricate prompts less closely, and is only served by upstream providers that honour it, so it has less failover depth. Practical read - standard when your prompt is doing real work, fast when it's three words and you want the next slot in the queue. There's no seed field at all on this node, so don't go looking for reproducibility there; generation_id is a billing/resume handle, not a sampler setting.

    generation_id: keep it fixed with identical inputs to resume a recorded run instead of buying a new one; increment it for a fresh generation. request_scope: auto-assigned per node, non-secret, relevant only to headless clients.

    Outputs: image (list), mask (list, inverted-alpha semantics), files (every original download), run id.

    Install

    ComfyUI 0.41.0+ and Python 3.10+.

    cd ComfyUI
    git clone --branch v0.1.0 --depth 1 https://github.com/protoface-ai/protoface-comfyui.git custom_nodes/protoface
    python -m pip install -r custom_nodes/protoface/requirements.txt
    

    Or Manager → search Protoface → install protoface-nodes → restart and reload the browser. Run pip with ComfyUI's interpreter (python_embeded/python.exe on Windows portable). Then click Protoface in the lower-right and enter your key; headless use PROTOFACE_API_KEY. Dependencies: httpx, jsonschema, Pillow, PyAV - no weights, no torch surgery.

    Where it goes wrong

    Wondering why your prompt changed. It was rewritten. If the output drifts from what you asked, try fast - a lighter rewrite can preserve your intent better on unusual phrasings, at the cost of failover depth if a provider is out.

    Assuming 2k buys detail. It buys pixels and a higher bill. Generate at 1k, upscale the one you like with local tools.

    Treating list outputs as single values. Both image and mask are lists. ComfyUI maps downstream, which is great until you assume one image and get two.

    Retrying wrongly. A poll timeout is a recoverable job - requeue unchanged, or use run id with Resume Run. Incrementing generation_id is how you pay twice.

    Expecting an in-graph seed. Same as every image node in this pack: no seed field. If you need "the same image again," keep the run id; the pack re-downloads recorded results rather than regenerating.

    Verdict

    The most achievable node in the pack: cheap, quick, and it plugs into a graph like any other generator. It won't replace your local stack for volume, but for the one hero image that needs legible text or a specific commercial polish, five cents is a fair trade.

    CategoryProtoface/Image/bytedance

    Inputs (7)

    NameTypeDefaultDescription
    promptSTRINGThe positive prompt for the generation.
    resolutionCOMBO1kThe output resolution tier used for billing. 1k is the lower-cost tier; 2k is the higher-cost tier.
    aspect_ratioCOMBO1:1The aspect ratio of the generated image.
    output_formatCOMBOjpegThe format of the output image.
    prompt_optimization_modeCOMBOstandardPrompt optimization mode. The model rewrites your prompt before generating. 'standard' uses the full rewrite; 'fast' uses a lighter one that generates several times quicker but follows long or intricate prompts less closely, and is served only by the upstream providers that honour it, so it has less failover depth.
    generation_idINT00–9007199254740991Keep fixed to reuse/resume this paid job. Increment for a fresh paid generation; independent of the model seed.
    request_scopeSTRINGAutomatically assigned per node. Headless clients must supply a stable unique workflow/node ID. This is not a secret.

    Outputs (4)

    NameTypeDescription
    imageIMAGE—
    maskMASK—
    filesPROTOFACE_FILE—
    run idSTRING—