Nodes/Protoface/Protoface P-Image · Text to Image
ComfyUI Node

Protoface P-Image · Text to Image

The node that lets you type a resolution

By protoface-ai·Created 22 days ago·Updated 13 days ago· 0
Protoface P-Image · Text to Image
    • image
    • mask
    • files
    • run id
    ◄prompt►
    ◄aspect_ratiocustom►
    ◄height512►
    ◄output_formatpng►
    ◄seed▾►
    ◄width512►
    ◄generation_id0►
    ◄request_scope►

    Exact pixels, which is unusual here

    Almost every image node in this pack gives you an aspect-ratio preset and nothing else. This one has aspect_ratio set to custom by default, plus width and height integers - both 256 to 1440, both defaulting to 512, both required to be multiples of 16. So you can ask for 768×1344 and get 768×1344, which matters the moment your downstream pipeline cares (a ControlNet pass, a fixed-size compositor, a batch of thumbnails).

    That's the practical reason to reach for P-Image generate over the prettier models: it's the utility tier that lets you dictate the canvas. Set a preset ratio instead and the width/height fields are ignored - the tooltips are explicit that they're only used when aspect_ratio is custom.

    And it has a seed. Random via -1, pinned with a number. Combined with exact sizing, this is the most controllable image node in the pack, even if it's not the most beautiful.

    How the call works

    The pack is a single adapter over a catalog of task schemas - this is Pruna's generate operation. Your payload gets validated against the schema before anything is uploaded or billed, then submitted under an idempotency key derived from your account, the node scope, generation_id, the model and the payload. That key is journaled to ~/.cache/protoface-comfyui first, so a network failure mid-submit doesn't silently become a second paid job on requeue. Then it polls and returns native types.

    Two field families you'll meet on every node in this pack, and they're easy to mix up:

    seed is the model's randomness. generation_id is the job's identity. Pinning the seed and incrementing generation_id gets you a same-seed, new-request image; leaving generation_id alone and changing the seed gets you a new request too, because the seed is part of the payload. The only way to "reuse" is to change nothing.

    request_scope is stamped per node by the frontend; headless queueing needs a stable unique value or submission fails with a missing-scope error.

    Outputs

    image (IMAGE, list), mask (MASK, list, inverted-alpha), files (PROTOFACE_FILE originals for Protoface Save File), run id. Everything's a list, so several results flow downstream without a loop. The mask is a bonus most text-to-image nodes don't give you.

    Install

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

    ComfyUI 0.41.0+, Python 3.10+, deps httpx, jsonschema, Pillow, av>=14. Manager alternative: search Protoface, install protoface-nodes, restart, reload the tab. Then Protoface bottom-right → key, which is memory-only and will need re-entering after a restart (use PROTOFACE_API_KEY_FILE for headless).

    Where people get bitten

    The multiple-of-16 rule. Type 1000 in width and you'll find out at validation time, not in the picker - and if you're wiring width/height from a maths node, add the rounding step yourself.

    Forgetting that aspect_ratio must be custom for those two fields to matter. Leaving it on a preset and wondering why your 768×1344 came back square is the second-most-common version of the same mistake.

    Then the usual money rules: timeouts are recoverable (same generation_id, requeue or Protoface Resume Run), cancels are best-effort with no refund promise, and ~/.cache/protoface-comfyui is the journal that keeps all of that true - don't clear it to "fix" a stuck job.

    CategoryProtoface/Image/pruna-ai

    Inputs (8)

    NameTypeDefaultDescription
    promptSTRINGThe positive prompt for generation.
    aspect_ratioCOMBOcustomAspect ratio of the generated image.
    heightINT512256–1440Custom height in pixels. Only used when aspect_ratio is custom. Must be a multiple of 16.
    output_formatCOMBOpngOutput image format.
    seedCOMBORandom seed. -1 means random.
    widthINT512256–1440Custom width in pixels. Only used when aspect_ratio is custom. Must be a multiple of 16.
    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—