Nodes/Phota API Nodes/Phota Generate
ComfyUI Node

Phota Generate

Putting a real person (or pet) in a generated image, properly

By photalabs·Created 3 months ago·Updated 3 months ago· 0
Phota Generate
  • subject_1
  • subject_2
  • IMAGE
promptA portrait of [[profile]] on a mountain summit at golden hour.
num_outputs1
aspect_ratioauto
resolution1K
qualityauto
profile_id
api_key
base_modelauto

The hero node of the pack

PhotaGenerate is text-to-image where a trained profile supplies the subject's true likeness. This is the node the README's dog example is built around: train a profile from six photos of the animal, then write "a portrait of [[profile]] as an astronaut" and get the same recognizable dog in a spacesuit - no LoRA, no insightface, no model downloads.

If you've been around local ComfyUI, you know the alternatives and their friction. A character LoRA means training on your own GPU and managing weights. IP-Adapter or InstantID give you a face from a single reference, but the likeness is approximate - the community's own verdict in the knowledge base is that InstantID "gets close to a likeness and stops." Reactor is a pixel swap bolted on after the fact. Phota's bet is that a hosted training run on 5–50 photos buys you identity that survives generation and edits. It's a real tradeoff, not a magic trick: you pay per image, and your prompts and results leave your machine.

How it works

The prompt uses inline placeholders. [[profile]] expands to all connected subjects together; [[profile1]] and [[profile2]] place each subject in a distinct role - "[[profile1]] teaching [[profile2]] to shake paws" maps each to a different profile. If you forget the placeholders entirely, the node splices the references in for you, appending something like "Featuring [[id_a]] and [[id_b]]." to your prompt.

Profiles can arrive three ways: comma-separated IDs in the profile_id field, or the typed subject_1 / subject_2 sockets fed from a Phota Profile Selector or Train Profile node. The sockets always bind subject_1 to [[profile1]] and subject_2 to [[profile2]] regardless of what's typed - that's the way to get two subjects into distinct roles without fighting the text.

The inputs that matter

  • prompt - multiline. The default is already a good template: "A portrait of [[profile]] on a mountain summit at golden hour."
  • num_outputs - 1–4 images per run.
  • aspect_ratio / resolution / quality - 1:1/3:4/4:3/9:16/16:9, 1K–4K. Leave quality on auto unless you're on gpt-image-2; some models reject the field.
  • base_model - dropdown populated live from the API (flux-2, flux-2-pro, gpt-image-2, nb2, qwen-image-2, seedream-5-pro). auto uses the server default.

Output is a single IMAGE socket, straight into PreviewImage or a Save node. The generation runs async, so a slow call doesn't stall other queued workflows.

Install, key, and an honest note

Search Phota API Nodes in ComfyUI Manager, or:

cd ComfyUI/custom_nodes
git clone https://github.com/photalabs/comfyui-phota

Restart, and you're done - the only dependency is requests, and nothing runs locally. You need a key from platform.photalabs.com; set it via PHOTA_API_KEY or phota.ini rather than the api_key widget, because widget values get embedded in shared workflow JSON/PNG.

The honest note: this is a small, newer service. There's no wall of community threads to lean on, so the README's example workflows are the best way to judge it - drag generate.json onto the canvas and see whether the likeness beats your local IP-Adapter setup. If you're already happy with a trained LoRA, this is a convenience play, not an upgrade. If you have no GPU and a person you want to feature consistently, it's arguably the most direct route that exists in ComfyUI right now.

CategoryPhota

Inputs (10)

NameTypeDefaultDescription
promptSTRINGA portrait of [[profile]] on a mountain summit at golden hour.Write [[profile]] for all connected subjects together, or [[profile1]]/[[profile2]] to place each subject in a distinct role.
num_outputsINT11–4
aspect_ratioCOMBOauto6 options: auto, 1:1, 3:4, 4:3, 9:16, 16:9
resolutionCOMBO1K3 options: 1K, 2K, 4K
qualityCOMBOauto4 options: auto, low, medium, high
profile_idoptSTRINGProfile ID(s) for identity preservation — connect a Phota Profile Selector or paste IDs, comma-separated for multiple subjects. The typed subject_1/subject_2 sockets take precedence for placeholder positions.
api_keyoptSTRINGLeave empty (recommended) to use the PHOTA_API_KEY environment variable or phota.ini. A key typed here is saved inside the workflow — do not share such workflows.
base_modeloptCOMBOautoBase model. 'auto' uses the API default.
subject_1optPHOTA_PROFILETyped profile reference; fills [[profile1]] (and joins [[profile]]).
subject_2optPHOTA_PROFILETyped profile reference; fills [[profile2]] (and joins [[profile]]).

Outputs (1)

NameTypeDescription
IMAGEIMAGE