Esteban LahozandClaude Opus 4.7 b6a44026b4 Initial commit: 3D camera-angle selector for Flux.2 Multi-Angles LoRA
ComfyUI custom node that renders an interactive Three.js hemisphere with
72 camera positions (8 azimuths x 9 elevations) and 3 distance rings, and
emits a list of LoRA-trigger prompt strings for the selected combinations.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 23:38:08 +02:00

ComfyUI_KleinAngleSelector

Visual 3D camera-angle selector for the lovis93/Flux-2-Multi-Angles-LoRA-v2 LoRA (base: FLUX.2-dev).

Provides a KleinAngleSelector node that emits a STRING list of prompt fragments using the LoRA's trigger token and angle taxonomy.

What it does

Renders an interactive 3D hemisphere around a stylized subject with 72 camera positions (8 azimuths x 9 elevations). The 3 distances are a separate radio selector. Click a camera to toggle selection at the current distance; selected cameras show colored indicator dots (one per distance) so you can mix close-up + medium shot + wide shot per camera position.

Each click toggles one entry in a flat pool of 216 combinations. The node outputs one prompt string per selected combination, in canonical order.

Pool dimensions

Dimension Values
Azimuth (8) front view, front-right quarter view, right side view, back-right quarter view, back view, back-left quarter view, left side view, front-left quarter view
Elevation (9) low-angle, mid-low, eye-level, mid-angle, high-mid, high-angle, steep-mid, steep-angle, overhead
Distance (3) close-up, medium shot, wide shot

Total combinations: 216 (8 x 9 x 3). The flat index used in selected_indices is az * 27 + el * 3 + dist.

Output format

<sks> {azimuth} {elevation} shot {distance}

Examples:

  • <sks> front view eye-level shot close-up
  • <sks> right side view high-angle shot medium shot
  • <sks> back-left quarter view overhead shot wide shot

When nothing is selected, the node outputs a single default string: <sks> front view eye-level shot close-up.

Node specs

  • Class key: KleinAngleSelector
  • Display name: 🎥 B3D Klein Angle Selector
  • Category: flux2/camera
  • Inputs: selected_indices (STRING, JSON array of ints, hidden in the UI but kept editable for debugging)
  • Outputs: selected_angles (STRING, list — OUTPUT_IS_LIST = True)

Wiring tip

Because the output is a list, you can wire it straight into any prompt-encoding node that loops over inputs (e.g. with Make List / For Each patterns), or pass it through a batcher to generate one image per camera angle in a single run.

Files

  • __init__.py — node registration + WEB_DIRECTORY export
  • klein_angle_selector.py — the 216-entry pool and execute() logic
  • web/js/klein_angle_extension.js — ComfyUI extension that mounts the 3D viewer iframe
  • The iframe HTML is inlined in the JS via srcdoc. Three.js is loaded from cdnjs at runtime; ComfyUI must have internet access on first use of the node.

Controls

  • Drag: rotate the scene
  • Wheel: zoom in/out
  • Click camera marker: toggle selection at the currently selected distance
  • Distance radio: switch which distance the next click affects (and re-positions the markers on the matching concentric ring)
  • Clear all: empty the selection
  • Reset view: restore default rotation/zoom
S
Description
No description provided
Readme
34 KiB
Languages
JavaScript 89.8%
Python 10.2%