Nodes/arkennemasis - ChatGPT / Codex / fal AI nodes/arkennemasis fal · Flux 2 LoRA Gallery Multiple Angles · $0.021/MP
ComfyUI Node

arkennemasis fal · Flux 2 LoRA Gallery Multiple Angles · $0.021/MP

Turn one photo of an object into a turntable, in degrees

By Hishamahmer·Created 3 months ago·Updated 9 days ago· 11
arkennemasis fal · Flux 2 LoRA Gallery Multiple Angles · $0.021/MP
  • image_1
  • image_2
  • image_3
  • image_4
  • image_5
  • image_6
  • images
  • image_paths
  • seed
  • prompt
  • info
◄horizontal_angle0.00►
◄vertical_angle0.00►
◄zoom5.00►
◄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►

This is the most interesting node in the fal LoRA Gallery, because it's the only one with numbers instead of vibes. Give it one photo of an object and three dials - horizontal angle, vertical angle, zoom - and it renders the same object from a position you asked for. Product turntables, character sheets, game asset turnarounds; $0.021 per processed megapixel.

How it works

The endpoint is flux-2-lora-gallery/multiple-angles: Flux 2 with a camera-control LoRA. The node uploads your reference to fal's CDN, submits the angles as part of the request, and saves results under output/fal/fal-ai_flux-2-lora-gallery_multiple-angles/. No local model, no ControlNet, no clever node graph - the conditioning is baked into the LoRA.

That's the strength and the limit. You're not steering a camera in 3D space; you're asking a model to imagine the same object from elsewhere, and it will invent whatever you couldn't see.

Inputs

image_1 is the object; sockets run to image_6 and batches are sent in socket order. Single-object, clean-background references work best - the LoRA has to work out which thing is the subject.

The three camera controls are the reason to use this node:

  • horizontal_angle (default 0) - rotation around the object. 0° is the front, 90° the right side, 180° behind, 270° the left, 360° back to front.
  • vertical_angle (default 0) - camera height. 0° eye-level, 30° elevated, 60° looking down from above.
  • zoom (default 5) - 0 is a wide, distant shot, 5 is a normal medium shot, 10 is a close-up.

lora_scale (0–2, default 1) is the effect strength - the fidelity dial. Lower it if the object starts mutating between angles. guidance_scale (default 2.5) and num_inference_steps (default 40, range 4–50) are the Flux 2 generation settings; acceleration is none or regular. image_size defaults to square_hd, which is exactly what you want for a turnaround - keep it square and the set lines up. num_images (1–4) per call, seed at -1, output_format and the safety checker as usual, with flagged output returned black.

max_cost_usd caps the run pre-upload, reuse_identical_run makes an identical repeat free, extra_json passes through unsupported fal fields, and max_concurrent limits how many paid fal calls run at once.

Wiring it into a turntable

There's no is_list output here - one call, one angle. For a real turnaround you loop the node, one instance per angle, and the pack's own utilities are built for that: a run folder to keep each run's outputs together, and a contact-sheet node to see every still of a run on one board. If you're driving it from a spreadsheet of angles, that's the intended shape.

Outputs

images is the rendered angle. image_paths, seed, prompt and info are the trail - info carries the request id, the estimate and fal's full answer.

Install

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

Restart, then:

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

in the .env next to run_nvidia_gpu.bat. Standard library only - no pip install for the fal nodes.

Where people get burned

Consistency between angles is the whole promise and the usual disappointment: a shiny or patterned object will have its details quietly re-invented, so back-of-pack text and logos drift. Generate the angles you need in one session rather than across days, and consider a consistency LoRA if the object is a character.

Second, the angles are degrees you type, not a slider you scrub, so you find the rotation you want by generating a few - and at $0.021 per processed megapixel with your input counted, an eight-angle set of a 1MP object is roughly $0.34. Third: it renders one object at one angle per call, so a "turntable" is a loop, not this node. Budget accordingly.

Categoryarkennemasis/fal/Image/Flux

Inputs (24)

NameTypeDefaultDescription
image_1IMAGEThe URL of the image to adjust camera angle for. Each socket may carry a batch; they are sent in socket order (the first picture of socket 1 is number 1).
horizontal_angleFLOAT0.000–360Horizontal rotation angle around the object in degrees. 0°=front view, 90°=right side, 180°=back view, 270°=left side, 360°=front view again.
vertical_angleFLOAT0.000–60Vertical camera angle in degrees. 0°=eye-level shot, 30°=elevated shot, 60°=high-angle shot (looking down from above).
zoomFLOAT5.000–10Camera zoom/distance. 0=wide shot (far away), 5=medium shot (normal), 10=close-up (very close).
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.
num_inference_stepsINT404–50The number of inference steps to perform.
accelerationCOMBOregularAcceleration level for image generation.
seedINT-1-1–2147483647Random seed for reproducibility. -1 leaves it to the model.
enable_safety_checkerBOOLEANtrueWhether to enable the safety checker. 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 multiple angles effect.
image_2optIMAGEThe URL of the image to adjust camera angle for. 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 image to adjust camera angle for. 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 image to adjust camera angle for. 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 image to adjust camera angle for. 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 image to adjust camera angle for. 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.