
Language / 语言 / 言語 / 언어: English | 中文 | 日本語 | 한국어
A ComfyUI custom node for 3D camera angle control. Provides an interactive Three.js viewport to adjust camera angles and outputs formatted prompt strings for multi-angle image generation.
camera_view to preview the scene from the camera indicator’s perspective, with interactive orbit controls (drag to rotate, scroll to zoom)“`bash
cd ComfyUI/custom_nodes
“`
“`bash
git clone https://github.com/jtydhr88/ComfyUI-qwenmultiangle.git
“`
This project uses Vue 3, TypeScript, and Vite for building the frontend. The 3D viewport is built with Three.js. The backend uses ComfyUI’s V3 node API.
# Install dependencies
npm install
# Build for production
npm run build
# Build with watch mode (for development)
npm run dev
# Type check
npm run typecheck
ComfyUI-qwenmultiangle/
├── src/
│ ├── main.ts # Extension entry point (Vue app mounting)
│ ├── App.vue # Root Vue component
│ ├── CameraWidget.ts # Headless Three.js camera control engine
│ ├── i18n.ts # Internationalization (en/zh/ja/ko)
│ ├── types.ts # TypeScript type definitions
│ ├── components/
│ │ ├── SceneCanvas.vue # Three.js canvas container
│ │ └── ControlPanel.vue # Dropdown controls & value display
│ └── composables/
│ └── useCameraWidget.ts # Reactive state bridge (Vue ↔ Three.js)
├── js/ # Build output (committed for distribution)
│ ├── main.js
│ └── assets/
│ └── main.css
├── nodes.py # ComfyUI V3 node definition
├── __init__.py # Python module init
├── package.json
├── tsconfig.json
└── vite.config.mts
image/multiangle categorycamera_view to see the preview from the camera’s perspective| Widget | Type | Description |
|——–|——|————-|
| horizontal_angle | Slider | Camera azimuth angle (0° – 360°) |
| vertical_angle | Slider | Camera elevation angle (-30° to 60°) |
| zoom | Slider | Camera distance/zoom level (0 – 10) |
| default_prompts | Checkbox | Deprecated – Kept for backward compatibility only, has no effect |
| camera_view | Checkbox | Preview scene from camera’s perspective |
| Handle | Color | Control |
|——–|——-|———|
| Ring handle | Pink | Horizontal angle (azimuth) |
| Arc handle | Cyan | Vertical angle (elevation) |
| Line handle | Gold | Zoom/distance |
The image preview displays as a card – front shows the image, back shows a grid pattern when viewed from behind.
When camera_view is enabled, you can interactively control the camera using mouse:
| Action | Control |
|——–|———|
| Drag left/right | Rotate horizontally (azimuth) |
| Drag up/down | Rotate vertically (elevation) |
| Scroll up | Zoom in (increase distance) |
| Scroll down | Zoom out (decrease distance) |
All interactions respect the same limits as the sliders:
Changes made via orbit controls automatically sync with the slider widgets.
Three dropdown menus are available in the 3D viewport for quickly selecting preset camera angles:
| Dropdown | Options |
|———-|———|
| Horizontal (H) | 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 |
| Vertical (V) | low-angle shot, eye-level shot, elevated shot, high-angle shot |
| Distance (Z) | wide shot, medium shot, close-up |
Selecting a preset will automatically update the 3D handles and slider widgets.
The UI labels are automatically translated based on your ComfyUI language setting:
| Language | Code |
|———-|——|
| English | en |
| Chinese (Simplified) | zh |
| Japanese | ja |
| Korean | ko |
The output prompt is always in English regardless of the UI language.
The node outputs prompts in the format required by Qwen-Image-Edit-2511-Multiple-Angles-LoRA:
<sks> {azimuth} {elevation} {distance}
Examples:
front view eye-level shot medium shot right side view high-angle shot close-up back-left quarter view low-angle shot wide shot | Parameter | Values |
|———–|——–|
| Azimuth | 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 | low-angle shot (-30°), eye-level shot (0°), elevated shot (30°), high-angle shot (60°) |
| Distance | close-up, medium shot, wide shot |
This ComfyUI node is based on qwenmultiangle, a standalone web application for camera angle control.
The original project was inspired by:
MIT