arkennemasis fal · Flux LoRA Depth · $0.035/MP
Control the layout with depth instead of edges
- image
- images
- image_paths
- prompt
- timings
- has_nsfw_concepts
- seed
- info
Canny gives you outlines; depth gives you the room. The conditioning image here is a depth map - near things bright, far things dark - and the model arranges its content around that spatial structure. Same $0.035 per megapixel, same hosted Flux Dev with LoRAs, and the same practical consequence: your input's layout survives, everything else is up to the prompt.
When depth beats canny
Depth is the more forgiving of the two conditions. Canny demands crisp, high-contrast edges or it gives you almost nothing, and it reproduces clutter with unsettling loyalty. A depth map carries the arrangement of the scene without carrying the surface detail, so the model gets the geometry and none of the texture. That makes it the better choice for organic subjects and for anything where you want the pose and the blocking but not the original materials - and it's a genuinely solid way to keep a character's position and scale consistent across a series of shots while changing outfit, lighting or style.
Where it struggles: thin structures, far backgrounds, and anything the depth estimator has to guess at. A depth map of a tree, a fence or hair is a blur, and the model follows the blur.
Inputs
image- the depth input. That's the tooltip's own word for it, and it's literal: you supply the depth representation, this endpoint conditions on it.prompt- what the scene becomes. With the geometry already pinned, you can spend the whole prompt on look: lens, light, material, mood.loras- multiline JSON, LoRA entries with weights and a scale, merged together. Empty leaves it out. They resolve on fal's side, so they have to be fetchable URLs.image_size(defaults tosquare_hdfor this node) withimage_size_width/image_size_heightforcustom(16–14142, step 16).guidance_scale3.5 (0–35),num_inference_steps28 (1–50),seed,num_images1–4,enable_safety_checker,output_format(jpeg/png),acceleration.
And the shared four: max_cost_usd (default $20, blocks the run before upload if the estimate is over), reuse_identical_run (on by default), extra_json, max_concurrent (1 by default, across every fal node in the run).
Outputs
images for preview/save, image_paths into output/fal/fal-ai_flux-lora-depth/, plus prompt, timings, has_nsfw_concepts, seed and info. The seed output is the useful one when you land on a look you want to repeat with a different prompt.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/Hishamahmer/comfyui-arkennemasis
Or search comfyui-arkennemasis in ComfyUI-Manager. Restart ComfyUI; it'll be under arkennemasis/fal/Image/Flux. Nothing heavy to download - no weights, no extra pip packages for the fal provider.
Key, one line in the .env file in the folder holding run_nvidia_gpu.bat:
FAL_KEY=your-key-from-fal.ai/dashboard/keys
The node has no key field on purpose.
Gotchas
Sending it a photo. If the source you hand it is an ordinary image rather than a depth map, you're conditioning on whatever fal's end makes of it - which may be fine, and may not be what you wanted. If you intend depth control, generate the depth map yourself first (there are plenty of local Depth Anything nodes for it) and send that.
Depth maps are usually greyscale. They're greyscale because they encode distance, not colour, and the model reads them that way. Don't colourise one and expect better results.
Instructions read as "produce a depth map". The node description talks about accurate depth representations, which is fal's copy for the model card, not a claim about this node's output. images is an image generation output, like every other node in this family.
The size default doesn't match your depth map. square_hd is the default and your input probably isn't square. If the generation re-frames your carefully pinned geometry, look here first - or set custom with the source's own dimensions.
Four images cost four times one image. Megapixel pricing plus num_images - the live badge on the node already knows, so read it before queueing.
Inputs (17)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | The prompt to generate an image from. | |
| 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. This is always set to 1 for streaming output. |
| 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. |
| acceleration | COMBO | none | Acceleration level for image generation. 'regular' balances speed and quality. |
| image | IMAGE | URL of image to use for depth input | |
| 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 | — |
| prompt | STRING | — |
| timings | STRING | — |
| has_nsfw_concepts | STRING | — |
| seed | INT | — |
| info | STRING | JSON: request id, cost estimate, saved files and fal's full answer. |