Extensions/ComfyUI Lackluster Nodes
ComfyUI Extension

ComfyUI Lackluster Nodes

Custom ComfyUI nodes for AllTalk TTS integration

By LacklusterOpsecΒ·Created 5 months agoΒ·Updated 13 days agoΒ· 1
LacklusterOpsec/ComfyUI-Lackluster-Nodes
Nodes24
On cloudLocal install
CategoryLackluster/Audio, Lackluster/Camera
Stars1
Updated13 days ago

Nodes (24)

AllTalk Settings Loader

Peek at what your AllTalk server is actually running

Lackluster/Audio
AllTalk TTS Generator

Give your ComfyUI videos an actual voice

Lackluster/Audio
AllTalk Voice Loader

Ask the AllTalk server who's actually available

Lackluster/Audio
Lackluster-Camera

Steer a 3D camera without leaving your prompt

Lackluster/Camera
Lackluster-Camera Sequence

Queue a whole orbit of camera angles in one node

Lackluster/Camera
Lackluster-Camera Translate

Translate camera terms to Chinese, Japanese, or Korean

Lackluster/Camera
CamOrbit

Camera presets for people who don't think in degrees

Lackluster/Camera
CamOrbit Sequence

Orbit a subject with auto-sweep, no per-angle typing

Lackluster/Camera
CamOrbit Translate

Localize camera prompts without an API call

Lackluster/Camera
First/Last Frame Selector

Grab the first or last frame of a video batch

Lackluster/Video
Lackluster Model Attention Backend (All)

Pick a different attention kernel per model, without restarting ComfyUI

Lackluster/Model
Lackluster Prompt Enhancer

Enhance prompts with a local LLM and task-specific templates

Lackluster/Prompt
Lackluster-Camera

The original Qwen Multiangle Camera node, by its first name

Lackluster/Camera
Lackluster-Camera Translate

The camera-glossary translator under its original name

Lackluster/Camera
Lackluster-Camera Sequence

The batch-angle node, under its Qwen-era name

Lackluster/Camera
Lackluster-Shot Queue (v2 3D Widget)

Queue up to 10 shots from an interactive 3D scene

Lackluster/Camera
Lackluster-Shot Queue V2

A ten-shot queue built from named camera presets

Lackluster/Camera
Show Text (Lackluster)

See any string in your graph, right on the node

Lackluster/Text
Text Multiline (Lackluster)

A shared multiline text box that always re-runs

Lackluster/Text
Pip/UV Outdated Packages (Lackluster)

Check for outdated pip packages from inside the graph

Lackluster/System
Model Attention Backend (All)

The attention-backend switcher that shows up twice in your menu

Lackluster/Model
Trap Prompt Generator

Build trap-music prompts without remembering a single tag

Lackluster/Audio/Trap
Trap Prompt Generator v2

A beat-description typewriter, not a beat machine

Lackluster/Audio/Trap
Trap Style Selector

Fifty pre-written trap style blurbs in one dropdown

Lackluster/Audio/Trap
Readme

ComfyUI-Lackluster-Nodes

Node Preview

A collection of custom ComfyUI nodes spanning TTS, camera control, prompt generation, and workflow utilities.


πŸ“¦ Installation

Method 1: Using ComfyUI Manager

  1. Open ComfyUI Manager
  2. Search for "ComfyUI Lackluster Nodes"
  3. Click Install
  4. Restart ComfyUI

Method 2: Manual Installation

cd path/to/ComfyUI/custom_nodes
git clone https://github.com/LacklusterOpsec/ComfyUI-Lackluster-Nodes.git
cd ComfyUI-Lackluster-Nodes
pip install -r requirements.txt

Restart ComfyUI after installation.


πŸ—‚οΈ Node Categories

| Category | Nodes | |---|---| | Lackluster/Camera | CamOrbit, CamOrbit Sequence, CamOrbit Translate, Lackluster-Camera, Lackluster-Camera Sequence, Lackluster-Camera Translate, Lackluster-Shot Queue, Lackluster-Shot Queue V2 | | Lackluster/Prompt | Lackluster Prompt Enhancer | | Lackluster/Audio/Trap | Trap Prompt Generator, Trap Prompt Generator v2, Trap Style Selector | | Lackluster/Text | Text Multiline, Show Text | | Lackluster/Video | First/Last Frame Selector | | Lackluster/System | Pip/UV Outdated Packages | | audio/tts | AllTalk TTS Generator, AllTalk Voice Loader, AllTalk Settings Loader |


πŸŽ₯ Camera Nodes

CamOrbit (lackluster_cam_orbit.py)

Category: Lackluster/Camera

A single-shot camera angle picker with built-in named presets and an optional 3D scene preview.

Inputs:

  • preset β€” Named angle preset (e.g. "Front (eye-level)", "Right Profile", "Overhead", "Worm's-eye", etc.)
  • azimuth β€” Horizontal rotation 0–360Β°
  • elevation β€” Vertical tilt -30Β° to 60Β°
  • distance β€” Camera distance (0 = wide, 10 = close-up)
  • prefix β€” Token prepended to the prompt (e.g. <sks>)
  • extra_prompt β€” Extra text appended after the generated prompt
  • camera_view β€” Toggle 3D preview widget
  • image (optional) β€” Image to display in the 3D scene

Outputs: prompt (STRING), label (STRING), camera_info (LOAD_3D_CAMERA)


CamOrbit Sequence (lackluster_cam_orbit.py)

Category: Lackluster/Camera

Batch camera angle sequence builder. Accepts angles via JSON, CSV, or auto-sweep and emits a list of prompts for sequential generation.

Modes:

  • json_sequence β€” Array of {azimuth, elevation, distance, label?, extra?, prefix?} objects
  • csv_sequence β€” CSV with columns label,azimuth,elevation,distance[,extra]
  • auto_sweep β€” Linearly interpolate between sweep_start and sweep_end over sweep_steps

Outputs: prompts (STRING list), prompt_text (STRING), labels_text (STRING), count (INT), camera_info (LOAD_3D_CAMERA list)


CamOrbit Translate (lackluster_cam_orbit.py)

Category: Lackluster/Camera

Translates the English camera/shot terms in a prompt (e.g. "front view", "close-up") into Chinese, Japanese, or Korean using a built-in glossary.

Inputs: prompt (STRING), target_language (δΈ­ζ–‡ / ζ—₯本θͺž / ν•œκ΅­μ–΄ / English)

Outputs: prompt (STRING)


Lackluster-Camera (lackluster_qwen_multiangle.py)

Category: Lackluster/Camera

Single 3D camera angle control node. Outputs a formatted angle prompt and LOAD_3D_CAMERA metadata for multi-angle generation pipelines.

Inputs: horizontal_angle, vertical_angle, zoom, default_prompts, camera_view, image (optional)

Outputs: prompt (STRING), camera_info (LOAD_3D_CAMERA)


Lackluster-Camera Sequence (lackluster_qwen_multiangle.py)

Category: Lackluster/Camera

Queue multiple camera angles via an interactive list and batch-process them sequentially. Supports two output modes:

  • sequential_batch β€” Emits a list triggering one ComfyUI execution per angle
  • multiline_text β€” Concatenates all prompts into a single multiline string

Outputs: prompts (STRING list), prompt_text (STRING), camera_info (LOAD_3D_CAMERA list), sequence_count (INT)


Lackluster-Camera Translate (lackluster_qwen_multiangle.py)

Category: Lackluster/Camera

Translates camera/shot terminology in prompts to a target language via a maintained glossary. Supports Chinese, Japanese, and Korean.

Inputs: prompt (STRING), target_language

Outputs: prompt (STRING)


Lackluster-Shot Queue (lackluster_shot_queue.py)

Category: Lackluster/Camera

Interactive 3D camera widget for selecting angles and queuing up to 10 shots, then running ComfyUI to execute each shot sequentially.

Inputs: horizontal_angle, vertical_angle, zoom, camera_view, custom_prefix, sequence_json (optional), image (optional)

Outputs: prompts (STRING list), prompt_text (STRING), camera_info (LOAD_3D_CAMERA list), queue_count (INT)


Lackluster-Shot Queue V2 (lackluster_shot_queue_v2.py)

Category: Lackluster/Camera

Preset-based camera shot queue. Select from 15 named presets (Front Close-Up, Low Angle Hero, Dutch Angle, Aerial Shot, etc.), add them to a queue (max 10), and execute them sequentially.

Presets include: Front Close-Up, Front Medium, Front Wide, Low Angle Hero, Low Angle Close-Up, High Angle, Over Shoulder, Right/Left Profile, Back View, Three-Quarter Front, Dutch Angle, Aerial, Extreme Close-Up, Cowboy Shot

Inputs: camera_preset, add_to_queue, run_queue, clear_queue, custom_prefix, sequence_json (optional)

Outputs: prompts (STRING list), prompt_text (STRING), camera_info (LOAD_3D_CAMERA list), queue_count (INT)


✨ Prompt Enhancement

Lackluster Prompt Enhancer (lackluster_prompt_enhancer.py)

Category: Lackluster/Prompt

Rewrites short prompts into detailed generation/editing prompts using an LLM (Ollama or any OpenAI-compatible endpoint). Uses task-specific templates based on Bernini's official per-task prompt engineering.

Task Types: | Code | Description | |---|---| | v2v | Video-to-Video editing | | rv2v | Reference-image guided video editing | | r2v | Subject-driven video generation | | t2v | Text-to-Video generation | | t2i | Text-to-Image generation | | r2i | Subject-driven image generation | | i2i | Image-to-Image editing | | i2v | Image-to-Video generation | | mv2v | Multi-reference video editing | | vi2v | Video content propagation | | ads2v | Ad insertion in video | | vrc2v | Video with reference camera/action control |

Inputs:

  • prompt β€” Raw instruction
  • task_type β€” Enhancement template to use
  • ollama_url β€” LLM endpoint (default: http://127.0.0.1:11434)
  • ollama_model β€” Model name (leave empty to pass through without enhancement)
  • api_format β€” Ollama or OpenAI / vLLM
  • auto_enhance β€” Enhance on every queue run
  • image0–image4 (optional) β€” Reference images sent to multimodal LLMs
  • text_input (optional) β€” Text connection input (overrides the prompt field when connected)
  • negative_prompt (optional) β€” Custom negative prompt
  • temperature, max_tokens, seed β€” LLM generation parameters
  • prepend_system_prompt β€” Prepend the task system prompt to output
  • unload_ollama β€” Unload model from VRAM after enhancement

Outputs: enhanced_prompt (STRING), negative_prompt (STRING)


🎡 Trap Music Prompt Nodes

Trap Prompt Generator (trap_prompt_generator.py)

Category: Lackluster/Audio/Trap

Generates structured trap music production prompts from 10 musical categories. Each category can be set manually or randomised with a seed for reproducibility.

Categories: genre, BPM, energy, bass, drums, rhythm, melody, vocals, atmosphere, mix

Inputs: seed, plus one dropdown per category (each with a 🎲 Random option)

Outputs: prompt (STRING) β€” comma-separated tag list


Trap Prompt Generator v2 (trap_prompt_generator2.py)

Category: Lackluster/Audio/Trap

Enhanced version with 14 musical categories, expanded option pools, three output formats, optional category exclusion, and custom tag injection.

Additional categories over v1: key, mood, fx, arrangement

Output Formats:

  • tags β€” Comma-separated list
  • natural β€” Flowing natural-language sentence
  • structured β€” [label] value token format

Inputs: seed, prompt_style, one dropdown per category (each with 🎲 Random and β€” None β€” options), custom_tags (optional)

Outputs: prompt (STRING)


Trap Style Selector (trap_style_selector.py)

Category: Lackluster/Audio/Trap

Selects a pre-written description from a library of 50+ named trap subgenre styles. Each style includes characteristic instrumentation and a scene/atmosphere descriptor.

Example styles: Dark Trap, Memphis Phonk, Witch House Trap, Rage Trap, Drift Phonk, UK Drill Trap, Trap Soul, Gospel Trap, Doom Phonk, Circus Trap, and many more.

Inputs: trap_style β€” Dropdown of all available styles

Outputs: text (STRING) β€” Formatted style description


πŸ“ Text Nodes

Text Multiline (text_multiline.py)

Category: Lackluster/Text

A simple multiline text input node with dynamic prompt support. Displays the current text value in the node UI.

Inputs: text (multiline STRING with dynamicPrompts enabled)

Outputs: text (STRING)


Show Text (text_multiline.py)

Category: Lackluster/Text

Displays connected text output directly on the node widget. Useful for previewing prompt strings mid-workflow.

Inputs: text (STRING, force input)

Outputs: text (STRING)


🎬 Video Nodes

First/Last Frame Selector (first_last_frame_selector.py)

Category: Lackluster/Video

Takes a batch of images (e.g. video frames) and returns either the first or last frame based on a mode switch.

Inputs: images (IMAGE batch), mode (first / last)

Outputs: frame (IMAGE)


πŸ”§ System Nodes

Pip/UV Outdated Packages (uv_outdated.py)

Category: Lackluster/System

Runs uv pip list --outdated (or pip list --outdated) and outputs the result as a string. Useful for keeping your ComfyUI environment up to date.

Inputs: check (BOOLEAN β€” enable/disable the check), use_uv (BOOLEAN β€” use uv or plain pip)

Outputs: outdated_packages (STRING)


πŸ”Š AllTalk TTS Nodes

Requires an AllTalk TTS server running at a reachable URL (default: http://localhost:7851).

AllTalk TTS Generator

Category: audio/tts

Generates text-to-speech audio via an AllTalk installation.

Inputs:

  • text β€” Text to convert to speech
  • character_voice β€” Voice to use (e.g. "female_1")
  • language β€” Language code (auto, en, es, fr, de, it, pt, nl, ru, ja, zh, ko)
  • speed β€” Speech speed (0.25–2.0)
  • temperature β€” Generation temperature (0.1–1.0)
  • repetition_penalty β€” Repetition penalty (1.0–20.0)
  • pitch β€” Voice pitch (-10.0–10.0)
  • alltalk_server_url β€” AllTalk server URL
  • narrator_enabled β€” Enable narrator (false / true / silent)
  • narrator_voice β€” Narrator voice character

Outputs: audio (AUDIO), audio_path (STRING)


AllTalk Voice Loader

Category: audio/tts

Fetches and lists available voices from the AllTalk server.


AllTalk Settings Loader

Category: audio/tts

Displays current settings from the AllTalk server.


Installing AllTalk (for TTS nodes)

Windows (Recommended)

git clone -b betav2 https://github.com/erew123/alltalk_tts.git
cd alltalk_tts
# Run atsetup.bat and follow prompts

Using uv

git clone -b betav2 https://github.com/erew123/alltalk_tts.git
cd alltalk_tts
uv venv
.venv\Scripts\activate
uv pip install -r .\system\requirements\requirements_standalone.txt
python script.py

Verify AllTalk is running: http://localhost:7851/api/ready


License

MIT