Nodes/arkennemasis - ChatGPT / Codex / fal AI nodes/arkennemasis fal · Flux 2 LoRA Gallery Face to Full Portrait · $0.021/MP
ComfyUI Node

arkennemasis fal · Flux 2 LoRA Gallery Face to Full Portrait · $0.021/MP

Extend a headshot into a body, and hope the shoes match

By Hishamahmer·Created 3 months ago·Updated 9 days ago· 11
arkennemasis fal · Flux 2 LoRA Gallery Face to Full Portrait · $0.021/MP
  • image_1
  • image_2
  • image_3
  • image_4
  • image_5
  • image_6
  • images
  • image_paths
  • seed
  • prompt
  • info
◄promptFace to full portrait►
◄image_sizesquare_hd►
◄image_size_width1024►
◄image_size_height1024►
◄guidance_scale2.50►
◄num_inference_steps40►
◄accelerationregular►
◄seed-1►
◄enable_safety_checkertrue►
◄output_formatpng►
◄num_images1►
◄lora_scale1.00►
◄max_cost_usd20.0►
◄reuse_identical_runtrue►
◄extra_json►
◄max_concurrent1►

You have a cropped headshot and you need it to be a full portrait. This node is fal's flux-2-lora-gallery/face-to-full-portrait endpoint: feed it the face, get back a whole person, $0.021 per processed megapixel. It's a genuinely useful endpoint and also the one in the gallery that most obviously relies on the model's imagination, so set your expectations about the outfit before you run forty of them.

The mechanism

Flux 2 plus a LoRA trained to continue a cropped head into a full-length figure, exposed in ComfyUI by this pack's wrapper. Your picture is uploaded to fal's CDN, the job goes to fal's queue, and results are saved in output/fal/fal-ai_flux-2-lora-gallery_face-to-full-portrait/. The image you upload leaves your machine - normal for every node in this pack, worth remembering when the face belongs to a client or a child.

Inputs

image_1 is required and the tooltip is explicit: it wants a cropped face. Sockets run to image_6 - batches and multiple subjects both work, sent in socket order.

prompt defaults to the literal string Face to full portrait, and for once that isn't a placeholder; empty leaves the prompt out and the endpoint does fine on its own. Use it when you need to specify something: Face to full portrait, standing, business suit, neutral grey studio backdrop. What you're describing is the part that isn't in the picture - the body, the wardrobe, the background - because the face is already known.

lora_scale (0–2, default 1) is the strength of the effect, and it's the dial that decides how much the model invents versus how closely it hugs what you gave it.

Then the Flux 2 dials: guidance_scale (default 2.5), num_inference_steps (default 40, range 4–50), acceleration (none / regular), image_size defaulting to square_hd - which matters enormously here, since you're usually going taller than square, so choose portrait_4_3 or custom and set the height deliberately. num_images (1–4) gives you variations in one paid call. seed at -1 randomises; output_format and the safety checker are standard, with flagged output returned black.

max_cost_usd ($20), reuse_identical_run, extra_json and max_concurrent are the shared options: pre-flight cap, free reuse of an identical run, raw JSON passthrough, and a limit on simultaneous paid fal calls.

Outputs

images is the full portrait, ready for a save node or a compositing chain - this is the node you'd pair with a background or overlay step. image_paths gives you the files on disk, seed and prompt make the run reproducible, and info is the JSON with request id, estimate, saved files and fal's full response.

Install

cd ComfyUI/custom_nodes
git clone https://github.com/Hishamahmer/comfyui-arkennemasis

Restart ComfyUI, then:

FAL_KEY=your-key-from-fal.ai/dashboard/keys

in the .env beside run_nvidia_gpu.bat. No pip step for the fal nodes.

Where people get burned

Identity is the whole game and Klein-lineage models are known for drifting it, so expect the body to be plausible and the outfit to be a lottery - a headshot with no clothing cue gives the model nothing to match, and it will invent a blazer. Give it wardrobe and setting in the prompt if they matter. Second: proportion. Continuing a tight crop often lands at the wrong focal length, so the head comes back slightly too large for the body; generate a few and compare rather than accepting the first.

Third, cost: it bills processed megapixels including your input, so a 2MP face plus a 1MP output is roughly $0.063 - and with num_images: 4 you're near a quarter a run. Batch deliberately. Fourth, the ethics don't disappear because the node is convenient: making full-body images of a real person from a photo of their face is exactly the sort of thing that should have a reason, and in some places a consent.

Categoryarkennemasis/fal/Image/Flux

Inputs (22)

NameTypeDefaultDescription
image_1IMAGEThe URL of the cropped face image. Each socket may carry a batch; they are sent in socket order (the first picture of socket 1 is number 1).
promptSTRINGFace to full portraitThe prompt describing the full portrait to generate from the face. Empty leaves it out.
image_sizeCOMBOsquare_hdThe size of the generated image. If not provided, the size of the input image will be used. 'custom' uses the width and height below.
image_size_widthINT102416–14142Width in pixels when image_size is 'custom'.
image_size_heightINT102416–14142Height in pixels when image_size is 'custom'.
guidance_scaleFLOAT2.500–20The CFG (Classifier Free Guidance) scale. Controls how closely the model follows the prompt.
num_inference_stepsINT404–50The number of inference steps to perform.
accelerationCOMBOregularAcceleration level for image generation. 'regular' balances speed and quality.
seedINT-1-1–2147483647Random seed for reproducibility. Same seed with same prompt will produce same result. -1 leaves it to the model.
enable_safety_checkerBOOLEANtrueWhether to enable the safety checker for the generated image. Disabling it requires account authorization; unauthorized requests are always checked.
output_formatCOMBOpngThe format of the output image
num_imagesINT11–4Number of images to generate
lora_scaleFLOAT1.000–2The strength of the face to full portrait effect.
image_2optIMAGEThe URL of the cropped face image. Each socket may carry a batch; they are sent in socket order (the first picture of socket 1 is number 1).
image_3optIMAGEThe URL of the cropped face image. Each socket may carry a batch; they are sent in socket order (the first picture of socket 1 is number 1).
image_4optIMAGEThe URL of the cropped face image. Each socket may carry a batch; they are sent in socket order (the first picture of socket 1 is number 1).
image_5optIMAGEThe URL of the cropped face image. Each socket may carry a batch; they are sent in socket order (the first picture of socket 1 is number 1).
image_6optIMAGEThe URL of the cropped face image. Each socket may carry a batch; they are sent in socket order (the first picture of socket 1 is number 1).
max_cost_usdoptFLOAT20.00–100000Safety cap. If the estimated cost of this run is above this many US dollars the node stops BEFORE sending anything to fal. 0 = no cap.
reuse_identical_runoptBOOLEANtrueIf these exact inputs (the settings AND the same pictures/clips/audio) were already paid for and the files are still in output/fal, return them instead of paying again - also after a ComfyUI restart. Turn off for a fresh take with the same settings.
extra_jsonoptSTRINGAdvanced: a JSON object merged into the request last, for any fal field this node has no box for. Example: {"seed": 7}. Leave empty normally.
max_concurrentoptINT11–32How many paid fal calls may run at the same time in one run, across every fal node. 1 (default) = one after another. This node starts its paid part only while fewer than this many fal calls are running. Once any fal node fails, the ones still waiting are not started, so nothing more is billed.

Outputs (5)

NameTypeDescription
imagesIMAGE—
image_pathsSTRING—
seedINT—
promptSTRING—
infoSTRINGJSON: request id, cost estimate, saved files and fal's full answer.