Files
2025-11-25 09:29:54 +00:00

15 KiB

ComfyUI Variationator - Prompt Orchestration Nodes

Advanced prompt manipulation system integrated into ComfyUI workflows. Control lighting, style, and variations with precision using 20 pre-defined modifiers and unlimited transformations.

🔗 GitHub Repository: https://github.com/MushroomFleet/ComfyUI-Variationator


📦 Installation

cd ComfyUI/custom_nodes
git clone https://github.com/MushroomFleet/ComfyUI-Variationator.git
# Restart ComfyUI

See INSTALLATION.md for detailed installation instructions and troubleshooting.


🎯 What This Does

Brings professional prompt engineering capabilities directly into your ComfyUI workflows:

  • 20 Lighting Modifiers: Sunrise to moonlit night, dry and wet conditions
  • Style Transformations: Cyberpunk, noir, minimalist, and custom styles
  • Smart Variation: Natural language prompt modification
  • Batch Generation: Multiple variations from single input
  • Preset Collections: Optimized modifier sets for common use cases

📦 Available Nodes (9 Total)

All nodes appear under the "Prompt Orchestration" category.

1. Lighting Modifier (Single)

Purpose: Apply one lighting modifier to a prompt

Inputs:

  • text: Your base prompt
  • modifier_id: Number 1-20 (see modifier reference below)
  • preserve_base: Append vs replace (default: True)

Output: Modified prompt with lighting applied

Example Use:

Input: "Sports car on highway"
Modifier: 7 (golden hour)
Output: "Sports car on highway, golden hour, warm low-angle side-light, clear sky"

2. Batch Variation Generator

Purpose: Generate multiple variations at once

Inputs:

  • text: Base prompt
  • category: "all", "dry", "wet", or "custom"
  • custom_ids: Comma-separated IDs if using "custom" (e.g., "1,7,18")

Outputs: Up to 10 variation strings (var_1 through var_10)

Example Use: Connect each output to a different CLIP Text Encode for batch image generation.

3. Style Transform

Purpose: Apply artistic style to prompt

Inputs:

  • text: Base prompt
  • style: Choose from 11 built-in styles or "custom"
  • maintain_composition: Keep original composition (default: True)
  • custom_style: Your custom style description (if style="custom")

Output: Style-transformed prompt

Built-in Styles:

  • cyberpunk, noir, minimalist, pop_art_1960s
  • bauhaus, art_deco, impressionist, futuristic
  • vintage, brutalist

4. Smart Variation (NLP)

Purpose: Natural language prompt modification

Inputs:

  • text: Base prompt
  • intent: What you want (e.g., "make it golden hour", "add wet street")

Output: Intelligently modified prompt

Example Intents:

  • "make it golden hour"
  • "convert to wet night scene"
  • "add cyberpunk style"
  • "morning sunrise lighting"

5. Preset Collection

Purpose: Apply optimized modifier sets

Inputs:

  • text: Base prompt
  • preset: Choose from 5 presets

Outputs: 8 variations optimized for the use case

Available Presets:

  • key_moments: Dramatic lighting variety (6 variations)
  • commercial: Product photography optimized (4 variations)
  • artistic: Creative with styles (7 variations)
  • full_day_cycle: Complete day progression (16 variations)
  • wet_night: Dramatic wet conditions (4 variations)

6. Modifier Info

Purpose: Display information about a modifier

Inputs:

  • modifier_id: Number 1-20

Outputs:

  • description: Full modifier description
  • category: "dry" or "wet"
  • tags: Comma-separated tags

Use: Connect to a text display to see what modifiers do.

7. Prompt Combiner

Purpose: Merge multiple text inputs

Inputs:

  • text_1 through text_4: Text pieces to combine
  • separator: String to join with (default: ", ")

Output: Combined text

Example:

text_1: "Sports car"
text_2: "on mountain road"
text_3: "golden hour"
separator: ", "
Output: "Sports car, on mountain road, golden hour"

8. Random Modifier

Purpose: Apply random modifier from category

Inputs:

  • text: Base prompt
  • category: "all", "dry", or "wet"
  • seed: Random seed for reproducibility

Outputs:

  • modified_prompt: Result with random modifier
  • used_modifier_id: Which modifier was selected

Use: Create diverse variations with randomness.

9. Multi-Style Layer

Purpose: Apply multiple styles sequentially

Inputs:

  • text: Base prompt
  • style_1, style_2, style_3: Up to 3 styles

Output: Prompt with layered styles

Use: Create complex aesthetic combinations.


🌟 The 20 Lighting Modifiers

DRY Category (1-16): Clear Conditions

ID Time/Condition Description
1 Sunrise car-friendly side-light, clear sky
2 Early Morning subtle back-light along road axis, clear sky
3 Late Morning high-sun hard light for crisp body lines
4 Midday crisp hard sunlight, clear sky
5 Early Afternoon gentle side-light, clear sky
6 Late Afternoon long shadow geometry, clear sky
7 Golden Hour ⭐ warm low-angle side-light (most popular)
8 Sunset soft rim-lit edges, clear sky
9 Twilight residual glow, clear sky
10 Blue Hour deep clear sky
11 Night clear sky with clean highlights
12 Moonlit Night clear sky
13 Early Morning three-quarter back-light, clear sky
14 Late Afternoon subtle back-light along road axis
15 Evening car-friendly side-light, clear sky
16 Dawn clean low-haze air, clear sky

WET Category (17-20): Dramatic Wet Conditions

ID Condition Description
17 Predawn Blue Hour wet road, subtle back-light
18 Blue Hour Wet ⭐ wet road, car-friendly side-light (dramatic)
19 Twilight Wet wet road, residual glow
20 Night Wet wet street, warm interior lights glowing

🔧 Common Workflow Patterns

Pattern 1: Single Image with Lighting

[Text Input] → [Lighting Modifier] → [CLIP Text Encode] → [KSampler]

Set modifier_id to 7 for golden hour (most versatile).

Pattern 2: Batch Variations

[Text Input] → [Batch Variation Generator] → [Multiple CLIP Text Encode nodes]
                                           → [KSamplers for each variation]

Connect each var_output to a separate CLIP encoder.

Pattern 3: Style + Lighting Combo

[Text Input] → [Lighting Modifier] → [Style Transform] → [CLIP Text Encode]

Apply lighting first, then style for best results.

Pattern 4: Smart Creative Workflow

[Text Input] → [Smart Variation] → [CLIP Text Encode]

Use natural language like "make it cyberpunk golden hour".

Pattern 5: Preset Collection for Comparison

[Text Input] → [Preset Collection] → [8 separate render paths]

Generate 8 variations optimized for a specific use case.

Pattern 6: Random Exploration

[Text Input] → [Random Modifier] → [CLIP Text Encode]
[Seed Control]    ↓
                [Display Used ID]

Generate different lighting each run, track which modifier was used.


💡 Usage Tips

Best Practices

  1. Start with Golden Hour (7): Most universally flattering
  2. Wet modifiers (17-20) for dramatic urban/automotive scenes
  3. Use presets for quick, professional results
  4. Layer styles carefully: Apply lighting before styles
  5. Batch testing: Use Batch Variation Generator for exploration

Modifier Selection Guide

For Products:

  • Use modifiers: 3, 4, 7, 11
  • Or use "commercial" preset

For Automotive:

  • Morning/evening: 1, 2, 7, 8
  • Dramatic: 18, 20 (wet conditions)

For Architecture:

  • Full day: 1-16 (all DRY)
  • Dramatic: 7, 8, 10, 18

For Portraits:

  • Flattering: 7, 8, 15
  • Dramatic: 10, 18

Performance Tips

  1. Batch node outputs: Can connect to batch processing nodes
  2. Seed control: Use fixed seeds with Random Modifier for reproducibility
  3. Text preview: Use Show Text nodes to preview before rendering
  4. Save presets: Save workflow variations for different modifier sets

📋 Example Workflows

Example 1: Golden Hour Car Photography

[Prompt: "luxury sports car mountain road"]
    ↓
[Lighting Modifier: modifier_id=7]
    ↓
[CLIP Text Encode]
    ↓
[KSampler]

Result: Car with warm golden hour lighting

Example 2: Cyberpunk Style Variation

[Prompt: "city street night scene"]
    ↓
[Lighting Modifier: modifier_id=11 (night)]
    ↓
[Style Transform: style=cyberpunk]
    ↓
[CLIP Text Encode]

Result: Night scene with cyberpunk aesthetic

Example 3: Multi-Variation Comparison

[Prompt: "product on pedestal"]
    ↓
[Preset Collection: preset=commercial]
    ↓
[var_1] → [CLIP] → [KSampler 1]
[var_2] → [CLIP] → [KSampler 2]
[var_3] → [CLIP] → [KSampler 3]
[var_4] → [CLIP] → [KSampler 4]

Result: 4 product shots with optimal lighting

Example 4: Smart Natural Language

[Prompt: "architectural exterior"]
    ↓
[Smart Variation: intent="make it golden hour with dramatic shadows"]
    ↓
[CLIP Text Encode]

Result: Automatically applies golden hour + emphasis on shadows

Example 5: Random Daily Inspiration

[Prompt: "creative scene"]
    ↓
[Random Modifier: category=all, seed=<daily seed>]
    ↓
[Modifier Info: <connect used_modifier_id>]
    ↓
[CLIP Text Encode]

Result: Different lighting each day, see which modifier was chosen


🔄 Integration with Other Nodes

With Wildcard Nodes

[Wildcard: "__subject__"] → [Lighting Modifier] → [CLIP]

Combine dynamic subjects with lighting control.

With Lora/Checkpoint Switching

[Text] → [Batch Variation] → [CLIP per variation]
                           → [Different LoRAs per output]

Test same prompt with different lighting and models.

With Conditioning Combine

[Base Prompt] → [Lighting Modifier] → [CLIP] ─┐
[Detail Prompt] → [CLIP] ────────────────────┬→ [Conditioning Combine]

Layer lighting-modified base with detailed conditioning.


🎨 Advanced Techniques

Technique 1: Progressive Lighting

Use multiple Lighting Modifier nodes in sequence to build complex lighting:

[Base] → [Modifier 7: golden hour] → [Modifier 19: wet road] → [Result]

Creates golden hour with wet reflections.

Technique 2: Style Layering

[Base] → [Style: noir] → [Style: minimalist] → [Multi-layered aesthetic]

Use Multi-Style Layer node or chain Style Transform nodes.

Technique 3: Conditional Lighting

                    ┌→ [Modifier 7] → [Day scene]
[Base] → [Switch] ──┤
                    └→ [Modifier 18] → [Night scene]

Use switch nodes to choose lighting based on conditions.

Technique 4: Batch A/B Testing

[Prompt] → [Batch Variation: custom_ids="7,18"]
    ↓
[var_1: golden hour] → [Render]
[var_2: blue hour wet] → [Render]

Compare specific modifiers side-by-side.


📊 Node Reference Quick Chart

Node Input Type Output Type Best For
Lighting Modifier Single text Single text Precise control
Batch Variation Single text 10 texts Exploration
Style Transform Single text Single text Aesthetic change
Smart Variation Single text Single text Quick natural edits
Preset Collection Single text 8 texts Professional sets
Modifier Info Number 3 texts Understanding modifiers
Prompt Combiner 4 texts Single text Building prompts
Random Modifier Text + seed Text + number Randomization
Multi-Style Text + styles Single text Complex aesthetics

🐛 Troubleshooting

Issue: Node outputs empty text

Cause: Invalid modifier ID or missing inputs
Solution: Check modifier_id is 1-20, ensure text input is connected

Issue: Batch outputs are all the same

Cause: Not enough modifiers in selected category
Solution: Use "all" category or specify more custom_ids

Issue: Style not applying

Cause: Style name typo or "custom" selected without custom_style input
Solution: Double-check style dropdown selection

Issue: Smart Variation not working as expected

Cause: Intent too vague or unrecognized keywords
Solution: Use specific terms like "golden hour", "wet", "night", "cyberpunk"


🎓 Learning Path

  1. Start Simple: Try Lighting Modifier with modifier_id=7
  2. Explore: Use Batch Variation with category="all"
  3. Style: Add Style Transform node after Lighting Modifier
  4. Optimize: Use Preset Collection for your use case
  5. Advanced: Combine multiple nodes for complex effects

💾 Workflow JSON Examples

See the example_workflows/ folder for:

  • basic_lighting.json - Simple lighting modifier workflow
  • batch_comparison.json - Multi-variation comparison
  • style_transform.json - Style transformation workflow
  • commercial_product.json - Product photography setup
  • random_exploration.json - Random modifier with seed control

  • Core System Docs: ../README.md
  • Installation Guide: INSTALLATION.md
  • Node Reference: NODE_REFERENCE.md
  • Python API: ../prompt_orchestrator.py

📝 Version Info


🚀 Quick Start Workflow

Create your first workflow in 3 steps:

  1. Add nodes:

    • Add Node → Prompt Orchestration → Lighting Modifier (Single)
    • Connect your text input
  2. Configure:

    • Set modifier_id: 7 (golden hour)
    • Keep preserve_base: True
  3. Connect:

    • Output → CLIP Text Encode → Your image generation pipeline

Result: Prompt with professional golden hour lighting!


📄 License

MIT License - Free for commercial and personal use


Need Help?

Ready to use?
Start with the Lighting Modifier node and modifier #7 (golden hour)! 🌅


Citation

https://github.com/MushroomFleet/ComfyUI-Variationator

📚 Citation

Academic Citation

If you use this codebase in your research or project, please cite:

@software{comfyui_variationator,
  title = {ComfyUI Variationator: automating image prompt variations},
  author = {[Drift Johnson]},
  year = {2025},
  url = {https://github.com/MushroomFleet/ComfyUI-Variationator},
  version = {1.0.0}
}

Donate:

Ko-Fi