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 promptmodifier_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 promptcategory: "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 promptstyle: 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 promptintent: 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 promptpreset: 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 descriptioncategory: "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_1throughtext_4: Text pieces to combineseparator: 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 promptcategory: "all", "dry", or "wet"seed: Random seed for reproducibility
Outputs:
modified_prompt: Result with random modifierused_modifier_id: Which modifier was selected
Use: Create diverse variations with randomness.
9. Multi-Style Layer
Purpose: Apply multiple styles sequentially
Inputs:
text: Base promptstyle_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
- Start with Golden Hour (7): Most universally flattering
- Wet modifiers (17-20) for dramatic urban/automotive scenes
- Use presets for quick, professional results
- Layer styles carefully: Apply lighting before styles
- 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
- Batch node outputs: Can connect to batch processing nodes
- Seed control: Use fixed seeds with Random Modifier for reproducibility
- Text preview: Use Show Text nodes to preview before rendering
- 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
- Start Simple: Try Lighting Modifier with modifier_id=7
- Explore: Use Batch Variation with category="all"
- Style: Add Style Transform node after Lighting Modifier
- Optimize: Use Preset Collection for your use case
- Advanced: Combine multiple nodes for complex effects
💾 Workflow JSON Examples
See the example_workflows/ folder for:
basic_lighting.json- Simple lighting modifier workflowbatch_comparison.json- Multi-variation comparisonstyle_transform.json- Style transformation workflowcommercial_product.json- Product photography setuprandom_exploration.json- Random modifier with seed control
🔗 Related Resources
- Core System Docs:
../README.md - Installation Guide:
INSTALLATION.md - Node Reference:
NODE_REFERENCE.md - Python API:
../prompt_orchestrator.py
📝 Version Info
- Version: 1.0.0
- Repository: https://github.com/MushroomFleet/ComfyUI-Variationator
- ComfyUI Compatibility: Latest version
- Python: 3.7+
- Dependencies: None (stdlib only)
🚀 Quick Start Workflow
Create your first workflow in 3 steps:
-
Add nodes:
- Add Node → Prompt Orchestration → Lighting Modifier (Single)
- Connect your text input
-
Configure:
- Set modifier_id: 7 (golden hour)
- Keep preserve_base: True
-
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?
- Check INSTALLATION.md for setup issues
- See README.md for full API documentation
- Open an issue on GitHub: https://github.com/MushroomFleet/ComfyUI-Variationator
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}
}
