Nodes/Protoface/Protoface Nano Banana 2 · Edit Image
ComfyUI Node

Protoface Nano Banana 2 · Edit Image

Reference in, same character out

By protoface-ai·Created 22 days ago·Updated 13 days ago· 0
Protoface Nano Banana 2 · Edit Image
    • image
    • mask
    • files
    • run id
    ◄prompt►
    ◄images▾►
    ◄resolution1k►
    ◄aspect_ratio▾►
    ◄enable_image_searchfalse►
    ◄enable_web_searchfalse►
    ◄output_formatpng►
    ◄generation_id0►
    ◄request_scope►

    The 2026 answer to character consistency

    The old stack for keeping a character consistent was IP-Adapter, PuLID, InstantID, masks, pose ControlNets, and a lot of patience. The KB's own read is blunt about where that went: it "did not follow the ecosystem forward." The recommended move now is simpler - generate the character once, then edit that image instead of regenerating it. Identity is preserved because the model is looking at your reference while it works, not re-inventing a face from a text embedding.

    This node is that move, using Google's Gemini image model. Prompt plus one or more reference images in, a new image out. It's the edit task from Protoface, a beta pack of hosted-model nodes for ComfyUI: paid per run, no local weights, your key instead of Comfy credits.

    Why reach for it over a local Qwen-Image-Edit or FLUX Kontext workflow? Instruction adherence on fiddly compound asks, and zero setup. Why not? Licences, cost and local control - Qwen-Image-Edit is Apache 2.0 with a real LoRA ecosystem attached, and that's why it's the community default. This is the model you call when the local edit drifts on the fourth revision.

    How it works

    Same shared adapter as the rest of the pack: schema-derived widgets become a validated API payload, media gets uploaded to Protoface's asset store (cached by content hash, so a rerun reuses the asset rather than re-uploading), the job is journaled, submitted, polled, and the result is cast as native ComfyUI IMAGE + MASK.

    Two things about editing specifically. images is a list input - a media input with native Image mode that grows as you connect assets, plus a References mode that takes an existing Protoface asset ID or a reused result asset. Batching counts: connect a batch of eight and it counts as eight references against the model's limit, and if the field expects one asset you'll get a "split the image/audio batch first" error rather than silent truncation. The pack is strict about this on purpose.

    And generation_id is the paid-request switch, not the seed. Fixed means "reuse or resume the job I already paid for."

    The inputs that matter

    prompt is written as an instruction, not a description. "Change the jacket to olive, keep the face and background, warmer key light" beats any tag soup.

    images is where the reference goes. One image for a straight edit; several for consistency across angles or for product shots that need the same object. Mind the model's reference limit before you connect ten.

    resolution and aspect_ratio - aspect ratio can be left empty on the edit task, which is how you say "match the input image" instead of forcing a crop. Worth knowing, because an unexpected 1:1 on a portrait edit is otherwise baffling.

    enable_image_search and enable_web_search are off by default. On, they let the model consult real-time information mid-edit. Genuinely interesting for "make it the current version of this device"; pointless otherwise.

    Outputs

    image (native IMAGE, list), mask (native MASK, list, inverted-alpha semantics), files (PROTOFACE_FILE list - every original download including transparent PNGs and non-media artifacts), and run id (a plain string for Protoface Resume Run).

    Because the image is a list, wiring it into a preview or save node fans out automatically. If you get two outputs when you wanted one, that's a candidate list, not a bug.

    Install

    Manager → search Protoface → install protoface-nodes → restart → reload. By hand from your ComfyUI directory:

    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
    

    Use ComfyUI's interpreter, restart, then click Protoface in the lower-right and enter your key. Requirements are light (httpx, jsonschema, Pillow, av) - the one that matters for image work is Pillow, which handles previews and format conversion; av is what carries native media in and out.

    Where people get burned

    Expecting the edit to be unlimited. Reference counts are capped per model, and input batches count. Error messages name the field, so read them before assuming the node is broken.

    Editing with a low-res reference and wondering why the output is soft. The model returns what it can see. Feed it the good frame, not a thumbnail.

    Losing the paid job. If the browser drops mid-run, don't increment anything: requeue the same graph, or grab the run id and use Resume Run. The journal in PROTOFACE_STATE_DIR (default ~/.cache/protoface-comfyui) is what makes recovery work - don't delete it to "start clean".

    Treating a cancel as a refund. Cancellation is best effort by the pack's own description. Check the run in your account.

    CategoryProtoface/Image/google

    Inputs (9)

    NameTypeDefaultDescription
    promptSTRINGThe positive prompt for the generation.
    imagesCOMBOPublic URLs, data URIs, or asset ids.
    resolutionCOMBO1kThe resolution of the output image.
    aspect_ratioCOMBOThe aspect ratio of the generated media.
    enable_image_searchBOOLEANfalseIf enabled, the model will use image search to enhance the generation with real-time information.
    enable_web_searchBOOLEANfalseIf enabled, the model will use web search to enhance the generation with real-time information.
    output_formatCOMBOpngThe format of the output image.
    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—