Extensions/ComfyUI_KleinAngleSelector
ComfyUI Extension

ComfyUI_KleinAngleSelector

Visual 3D camera-angle selector node with interactive hemisphere of 72 camera positions and distance controls.

By Bisnis3d·Created 3 months ago·Updated 3 months ago· 2
Bisnis3d/ComfyUI_KleinAngleSelector
Nodes1
On cloudLocal install
Categoryflux2/camera
Stars2
Updated3 months ago
Readme

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