ComfyUI Ollama Model Manager
Custom nodes for managing a/Ollama models in ComfyUI workflows. Load and unload models on-demand to optimize memory usage in constrained environments.
Nodes (14)
This is the node that makes the LLM talk
One node to point ComfyUI at your local model server
See what the model actually 'remembers'
How much conversation is the model carrying?
Preload your Ollama model so the first answer isn't slow
The dropdown that makes the Ollama pack usable
The escape hatch for every sampling parameter comfydv doesn't have a slider for
Ollama Option — Max Tokens
Ollama Option — Repeat Penalty
Lock or randomize your LLM's randomness
Ollama Option — Temperature
Ollama Option — Top K
Nudge how 'creative' your model's sampling gets
The Ollama Unload Model node
ComfyUI Ollama Model Manager
Custom nodes for managing Ollama models in ComfyUI workflows. Load and unload models on-demand to optimize memory usage in constrained environments.
Features
- 🔄 Auto-Fetch Models - Models load automatically when you connect nodes (no workflow execution needed!)
- 💬 Chat Completion - Full text generation with conversation history
- 🔄 Dynamic Dropdowns - Model list updates instantly via ComfyUI API
- 🎯 Type-Safe Connections - Client config passed between nodes
- ⬇️ Load/Unload Models - Control memory usage efficiently
- 📋 Beautiful Logging - Colored console output with JSON file logs
- 💾 Model Caching - Per-endpoint caching for better performance
- ✨ No CORS Issues - Backend API proxy eliminates browser restrictions
Installation
Recommended: ComfyUI-Manager
- Install via ComfyUI-Manager
- Search for "Ollama Manager"
- Click Install
Manual Installation
cd ComfyUI/custom_nodes
git clone https://github.com/darth-veitcher/comfyui-ollama-model-manager
cd comfyui-ollama-model-manager
# Install dependencies (auto-detects uv or uses pip)
python install.py
# OR manually with uv (recommended)
uv pip install httpx loguru rich
# OR manually with pip
pip install httpx loguru rich
For portable ComfyUI installations:
# Windows Portable
ComfyUI\python_embeded\python.exe install.py
# Or manually
ComfyUI\python_embeded\python.exe -m pip install httpx loguru rich
🎯 Quick Start Guide
Step 1: Add Ollama Client
- Add an Ollama Client node to your workflow
- Set
endpointto your Ollama server URL- Default:
http://localhost:11434 - Or use your remote server URL
- Default:
Step 2: Add Model Selector
- Add an Ollama Model Selector node
- Connect the
clientoutput from Ollama Client to theclientinput - ✨ Models auto-fetch immediately! - No need to execute the workflow
- Select your desired model from the dropdown
Step 3: Load the Model
- Add an Ollama Load Model node
- Connect
clientfrom Model Selector - The model dropdown auto-populates with available models
- Set
keep_alive(default-1keeps it loaded) - Execute the workflow to load the model
Step 4: Generate Text with Chat
- Add an Ollama Chat Completion node
- Connect
clientfrom Model Selector (model auto-populates) - Enter your prompt in the
promptfield - (Optional) Add a
system_promptto control behavior - Execute to generate a response!
Example:
- prompt: "Write a haiku about programming"
- system_prompt: "You are a helpful assistant"
- response: Returns the generated text
- history: Returns the conversation (for multi-turn chat)
Step 5: Multi-Turn Conversations (Optional)
For conversations with memory:
- Connect the
historyoutput from one Chat Completion node - To the
historyinput of the next Chat Completion node - Each response remembers the previous messages
Step 6: Unload When Done (Optional)
- Add an Ollama Unload Model node
- Connect it after your processing
- This frees up memory
Nodes Reference
Core Nodes
| Node | Description | |------|-------------| | Ollama Client | Creates a reusable Ollama connection config | | Ollama Model Selector | Select model with auto-fetch on connection | | Ollama Load Model | Loads a model into Ollama's memory | | Ollama Chat Completion | Generate text with conversation history | | Ollama Unload Model | Unloads a model to free memory |
Debug/Utility Nodes
| Node | Description | |------|-------------| | Ollama Debug: History | Formats conversation history as readable text for inspection | | Ollama Debug: History Length | Returns the number of messages in conversation history |
Option Nodes (Composable Parameters)
| Node | Parameter | Range/Type | Default | Description |
|------|-----------|------------|---------|-------------|
| Temperature | temperature | 0.0-2.0 | 0.8 | Controls randomness (0=deterministic, 2=very random) |
| Seed | seed | INT | 42 | Random seed for reproducible generation |
| Max Tokens | max_tokens | 1-4096 | 128 | Maximum tokens to generate |
| Top P | top_p | 0.0-1.0 | 0.9 | Nucleus sampling threshold |
| Top K | top_k | 1-100 | 40 | Top-k sampling (Ollama-specific) |
| Repeat Penalty | repeat_penalty | 0.0-2.0 | 1.1 | Penalty for repetition (Ollama-specific) |
| Extra Body | extra_body | JSON | {} | Advanced parameters (num_ctx, num_gpu, etc.) |
Advanced Usage
The architecture provides a clean, composable workflow:
[Ollama Client] → [Model Selector] → [Load Model] → [Chat Completion] → [Unload Model]
↓ ↓ ↓ ↓
(endpoint) (pick model, (load with) (generate text,
auto-refresh) keep_alive) track history)
Key Benefits:
- Reusable Client: Create one client, connect to multiple nodes
- Auto-refresh: Model Selector can refresh the list automatically
- Type Safety: Client connection passed between nodes
- Cleaner Workflows: Less redundant endpoint configuration
- Dynamic Dropdowns: Model list automatically populates after refresh
- Conversation Memory: History passed between chat nodes for multi-turn conversations
Example Workflow: Simple Chat
1. Ollama Client (endpoint: http://localhost:11434)
↓
2. Model Selector (model: "llama3.2", refresh: true)
↓
3. Load Model (keep_alive: "-1")
↓
4. Chat Completion (prompt: "Hello!")
↓
5. Unload Model
Example Workflow: Multi-Turn Conversation
1. [Client] → [Selector] → [Load] → [Chat 1: "My name is Alice"]
↓ (history)
[Chat 2: "What's my name?"]
↓ (history)
[Chat 3: "Tell me a joke"]
↓
2. Unload Model
Example Workflow: Chat with Options
[Client] → [Selector] → [Load Model]
↓
┌───────────────────┴────────────────────┐
↓ ↓ ↓
[Temperature=0.7] [Seed=42] [MaxTokens=200]
└───────────────────┬────────────────────┘
↓ (merged options)
[Chat Completion]
↓
"Deterministic response"
Example Workflow: Advanced Parameters
[Temperature=0.8] → [TopK=50] → [RepeatPenalty=1.2] → [ExtraBody]
↓
{"num_ctx": 4096}
↓
[Chat Completion]
This pattern optimizes memory by unloading models when not needed, while maintaining full conversation context and precise control over generation parameters.
Configuration
Ollama Endpoint
Default: http://localhost:11434
Override by specifying a different endpoint in the "Refresh Model List" or "Load/Unload" nodes.
Keep Alive
Control how long models stay in memory:
-1(default): Keep loaded indefinitely5m: Keep for 5 minutes1h: Keep for 1 hour0: Unload immediately
Chat Parameters
The Ollama Chat Completion node supports:
Required:
client- Ollama client connectionmodel- Model name (auto-populated from selector)prompt- User message/question
Optional:
system_prompt- Instructions to guide model behaviorhistory- Previous conversation (for multi-turn chat)options- Generation parameters (temperature, seed, etc.)format- Output format: "none" (default, text) or "json" (structured JSON)image- Image input for vision models
Outputs:
response- Generated texthistory- Updated conversation (connect to next chat node)
Caching & Performance:
The chat node intelligently caches results to avoid unnecessary LLM calls:
- With Seed: When you provide a seed via the
OllamaOptionSeednode, identical inputs will be cached (like standard ComfyUI nodes). This prevents wasteful re-execution when re-running the same workflow. - Without Seed: When no seed is provided, the node will always re-execute to generate fresh, non-deterministic responses.
Example: Deterministic workflow with caching
[Seed=42] → [Chat Completion] → Output
↓
(Cached on re-run!)
This matches ComfyUI's standard behavior and significantly reduces API costs when iterating on workflows.
JSON Mode (Phase 3)
The format parameter enables structured output for workflows that need parseable data:
Example: Extract structured data
[Chat Completion]
├── format: "json"
├── prompt: "Extract person data: 'Alice is 30 years old'"
└── system_prompt: "Return JSON with keys: name, age"
Output: {"name": "Alice", "age": 30}
When to use JSON mode:
- Data extraction workflows
- Structured output for downstream processing
- API integrations requiring JSON
- ComfyUI workflows that parse the response
Note: Set format to "json" to enable. The model will ensure valid JSON output.
Debug Utilities (Phase 3)
Ollama Debug: History - Inspect conversation memory
[Chat History] → [Debug: History]
↓
Formatted Text Output:
=== Conversation History (3 messages) ===
[1] SYSTEM:
You are helpful
[2] USER:
Hello
[3] ASSISTANT:
Hi there!
Ollama Debug: History Length - Count messages
[Chat History] → [History Length] → Output: 5 (messages)
Use cases:
- Debugging conversation flow
- Monitoring context length
- Workflow conditional logic based on message count
- Understanding what the model "remembers"
Logging
Logs are written to:
- Console: Colored output with timestamps
- File:
logs/ollama_manager.json(14-day retention, compressed)
Example log output:
08:36:30 | INFO | refresh-abc123 | 🔄 Refreshing model list from http://localhost:11434
08:36:30 | INFO | refresh-abc123 | ✅ Model list refreshed: 3 models available
08:36:31 | INFO | load-def456 | ⬇️ Loading model 'llava:latest' (keep_alive=-1)
08:36:32 | INFO | load-def456 | ✅ Model 'llava:latest' loaded successfully
Requirements
- Python ≥3.12
- httpx ≥0.28.1
- loguru ≥0.7.3
- rich ≥14.2.0
- Ollama running locally or remotely
Development
Project Structure
comfyui-ollama-model-manager/
├── __init__.py # ComfyUI entry point
├── install.py # Dependency installer (uv/pip auto-detect)
├── pyproject.toml # Package metadata & dependencies
├── src/
│ └── comfyui_ollama_model_manager/
│ ├── __init__.py # Package init
│ ├── nodes.py # Model management nodes
│ ├── chat.py # Chat completion node
│ ├── types.py # Custom type definitions
│ ├── ollama_client.py # API client (fetch, load, unload, chat)
│ ├── api.py # ComfyUI API routes
│ ├── state.py # Model cache
│ ├── log_config.py # Logging setup
│ └── async_utils.py # Async utilities
├── tests/ # Pytest test suite (52 tests)
└── web/
└── ollama_widgets.js # Auto-fetch UI logic
Running Tests
# With uv (recommended)
uv run pytest
# Or with pip
pip install pytest pytest-asyncio
pytest
Troubleshooting
Nodes don't appear in ComfyUI
- Check that dependencies are installed:
pip list | grep -E "httpx|loguru|rich" - Restart ComfyUI completely
- Check ComfyUI console for error messages
- Verify Ollama is running:
curl http://localhost:11434/api/tags
Import errors
If you see ModuleNotFoundError, install dependencies manually:
pip install httpx loguru rich
Permission errors (Windows)
Close ComfyUI and run:
ComfyUI\python_embeded\python.exe -m pip install --upgrade httpx loguru rich
License
[Add your license here]