arkennemasis fal · Flux Control LoRA Depth Image to Image · $0.04/MP
Same room, new materials, one dial apart
- image
- control_lora_image
- images
- image_paths
- has_nsfw_concepts
- timings
- seed
- prompt
- info
The depth sibling of the Canny image-to-image node, and the difference matters: depth is the loosest of the structural conditions and image-to-image is the loosest of the generation modes, so this pairing gives the model the most freedom of anything in the control family. Composition from a depth map, appearance driven by a real photo, and a denoise dial deciding who wins.
That's either exactly what you want or a recipe for mush, depending on whether you have a specific change in mind.
The two references and the dial
control_lora_image is required and is your depth source. One absence worth knowing before you plan around it: unlike the plain depth node, this variant has no preprocess_depth toggle, so nothing estimates depth for you - what you connect is what the model treats as the scene's geometry.
image is required here too, and it's the initial image: the real pixels the render starts from.
strength defaults to 0.85, and the tooltip is explicit - 1.0 completely remakes the image, 0.0 preserves the original. Practical bands:
- 0.3–0.5 - colour and light shift, subject intact. The "same shot, better mood" range.
- 0.5–0.75 - materials and surfaces change; you keep the object, not its texture.
- 0.85–1.0 - the source is a reference for layout and palette only.
control_lora_strength (default 1.0) is the separate grip of the depth condition. Keeping the two apart is what makes this node useful: low control_lora_strength with high strength means "new everything, whatever shapes it lands on", while high control at low strength holds the geometry hard while changing little.
Where it earns its keep
The workhorse case is interiors. One depth map of a room, one photograph as the palette and content reference, and you generate the same space in a different finish - oak to concrete, daylight to dusk - without re-modelling or re-lighting anything.
Second case: product and architecture visuals where you need five variants of one scene for a review. Depth keeps the arrangement honest across all five, which is the only way variants look like the same room rather than five different rooms.
Skip it when the thing you care about is a specific edge - a logo, a machine part, a building facade. That's Canny's job; depth will drift the outline and you'll spend the afternoon chasing it.
The rest of the settings
Then: prompt, image_size (square_hd by default, which does not preserve your source aspect ratio; use custom and enter dimensions), num_inference_steps 28, seed -1, loras (JSON, normally empty), guidance_scale 3.5 (Flux guidance, not SDXL CFG), num_images, enable_safety_checker, output_format defaulting to jpeg.
Outputs
images, image_paths (saved under output/fal/fal-ai_flux-control-lora-depth_image-to-image/), has_nsfw_concepts, timings, seed, prompt, and info with the request id, cost estimate, saved files and fal's raw response.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/Hishamahmer/comfyui-arkennemasis
Restart. ComfyUI-Manager users can do Install via Git URL instead. The pack's only declared dependency is httpx - used by its Codex nodes, not the fal ones - and nothing is downloaded locally because the model runs on fal's hardware.
FAL_KEY=your-key-from-fal.ai/dashboard/keys
in the .env beside run_nvidia_gpu.bat (portable) or in your ComfyUI folder. No key box exists on the node, which is the point: a key typed into a widget gets stored in every workflow you export.
Cost and caching
$0.04 per megapixel of output - 1024×1024 ≈ 4¢, a 2048-wide render ≈ 16¢ - tracked live by the node's price badge. max_cost_usd (default $20, set 0 for no cap) refuses the run before upload if the estimate crosses it.
reuse_identical_run defaults on. Same settings, same picture bytes, same files still in output/fal means you get the earlier result back instead of a new charge. While you're sweeping strength, remember each value is a distinct run and a distinct 4¢ - cheap, but figure out your sweep range before you start rather than after.
What usually goes wrong
The output is a different room. With control_lora_strength at 1.0 and strength at 0.85 you've given the model both references and a lot of rope. Reduce one of them.
The output is the same room with nothing changed. Same cause, opposite end: depth alone under-constrains materials, so if the prompt is vague you get a re-render of the original. Name the surfaces.
A batch on either image socket. Both take a single picture; the node stops and tells you to pick a frame instead of silently choosing.
Inputs (19)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | The prompt to generate an image from. | |
| image | IMAGE | URL of image to use for inpainting. or img2img | |
| image_size | COMBO | square_hd | The size of the generated image. 'custom' uses the width and height below. |
| image_size_width | INT | 102416–14142 | Width in pixels when image_size is 'custom'. |
| image_size_height | INT | 102416–14142 | Height in pixels when image_size is 'custom'. |
| num_inference_steps | INT | 281–50 | The number of inference steps to perform. |
| seed | INT | -1-1–2147483647 | The same seed and the same prompt given to the same version of the model will output the same image every time. -1 leaves it to the model. |
| loras | STRING | The LoRAs to use for the image generation. You can use any number of LoRAs and they will be merged together to generate the final image. JSON. Empty leaves it out. | |
| guidance_scale | FLOAT | 3.500–35 | The CFG (Classifier Free Guidance) scale is a measure of how close you want the model to stick to your prompt when looking for a related image to show you. |
| num_images | INT | 11–4 | The number of images to generate. |
| enable_safety_checker | BOOLEAN | true | If set to true, the safety checker will be enabled. Disabling it requires account authorization; unauthorized requests are always checked, and images flagged as unsafe are returned as black images. |
| output_format | COMBO | jpeg | The format of the generated image. |
| control_lora_image | IMAGE | The image to use for control lora. This is used to control the style of the generated image. | |
| control_lora_strength | FLOAT | 1.000–2 | The strength of the control lora. |
| strength | FLOAT | 0.850.01–1 | The strength to use for inpainting/image-to-image. Only used if the image_url is provided. 1.0 is completely remakes the image while 0.0 preserves the original. |
| max_cost_usdopt | FLOAT | 20.00–100000 | Safety 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_runopt | BOOLEAN | true | If 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_jsonopt | STRING | Advanced: 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_concurrentopt | INT | 11–32 | How 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 (7)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |
| image_paths | STRING | — |
| has_nsfw_concepts | STRING | — |
| timings | STRING | — |
| seed | INT | — |
| prompt | STRING | — |
| info | STRING | JSON: request id, cost estimate, saved files and fal's full answer. |