A practical guide to generating images with ComfyUI on the Haiven server.
Open https://comfyui.haiven.site in your browser.
ComfyUI loads with a basic text-to-image workflow. The default nodes are:
sd_xl_base_1.0.safetensors)blurry, low quality, watermark in the negative nodeCtrl+Enter)Download any CivitAI model directly to the correct folder using the download-civitai.sh script. It auto-detects the model type (checkpoint, LoRA, embedding, etc.) and places the file in the right directory.
cd /mnt/apps/docker/ai/comfyui-api
# From a CivitAI model page URL (downloads latest version)
./download-civitai.sh https://civitai.com/models/133005/juggernaut-xl
# From a URL with a specific version
./download-civitai.sh https://civitai.com/models/133005?modelVersionId=357609
# From a raw version ID
./download-civitai.sh 357609
# With API token (for restricted models)
./download-civitai.sh https://civitai.com/models/12345 --token YOUR_API_KEY
# Or set the token as an environment variable
export CIVITAI_API_TOKEN="your-key-here"
./download-civitai.sh https://civitai.com/models/12345
How it works:
1. Fetches model metadata from CivitAI API
2. Reads the model type and maps it to the correct local directory
3. Shows a summary (name, type, size, destination) before downloading
4. Downloads with a progress bar
5. Warns if the file already exists
Type-to-directory mapping:
| CivitAI Type | Local Directory |
|---|---|
| Checkpoint | /mnt/models/image/checkpoints/ |
| LORA / LoCon | /mnt/models/image/loras/ |
| TextualInversion | /mnt/models/image/embeddings/ |
| VAE | /mnt/models/image/vae/ |
| Controlnet | /mnt/models/image/controlnet/ |
| Upscaler | /mnt/models/image/upscale_models/ |
Getting a CivitAI API token (needed for some models):
1. Go to https://civitai.com/user/account
2. Scroll to "API Keys"
3. Create a new key
4. Use with --token flag or CIVITAI_API_TOKEN env var
From your local machine:
# Checkpoints
scp -P 25636 ~/Downloads/model.safetensors \
elijahryoung@10.0.0.42:/mnt/models/image/checkpoints/
# LoRAs
scp -P 25636 ~/Downloads/lora.safetensors \
elijahryoung@10.0.0.42:/mnt/models/image/loras/
After uploading (any method), click the refresh button (🔄) next to model dropdowns in ComfyUI.
ComfyUI uses symlinks to access models stored in /mnt/models/image/. The following model directories are available:
| ComfyUI Path | Symlink Target | Purpose |
|---|---|---|
models/checkpoints |
/mnt/models/image/checkpoints |
Base models (SD 1.5, SDXL, etc.) |
models/loras |
/mnt/models/image/loras |
LoRA adapters |
models/vae |
/mnt/models/image/vae |
VAE models |
models/controlnet |
/mnt/models/image/controlnet |
ControlNet models |
models/clip |
/mnt/models/image/clip |
CLIP text encoders |
models/clip_vision |
/mnt/models/image/clip_vision |
CLIP vision encoders (for image prompts) |
models/embeddings |
/mnt/models/image/embeddings |
Textual inversions |
models/unet |
/mnt/models/image/unet |
UNet models |
models/diffusion_models |
/mnt/models/image/diffusion_models |
Diffusion models |
models/text_encoders |
/mnt/models/image/text_encoders |
Text encoder models |
If a new model type folder is needed (e.g., clip_vision):
# Create symlink as the comfyui user
sudo ln -sfn /mnt/models/image/<folder_name> /opt/comfyui/ComfyUI/models/<folder_name>
# Verify the symlink
ls -la /opt/comfyui/ComfyUI/models/<folder_name>
| Model | Type | Best For |
|---|---|---|
sd_xl_base_1.0 |
SDXL | General purpose, high quality |
sd_xl_turbo_1.0_fp16 |
SDXL Turbo | Fast generation (4-8 steps) |
juggernautXL_v8Rundiffusion |
SDXL | Photorealistic |
ponyDiffusionV6XL |
SDXL (Pony) | Anime/illustration (uses score tags) |
illustriousXL_v01 |
SDXL | High-quality illustrations |
playground-v2.5-1024px-aesthetic |
SDXL | Artistic, aesthetic |
animaPencilXL_v500 |
SDXL | Anime/pencil drawing style |
realisticStockPhoto_v20 |
SDXL | Stock photo style |
photon_v1 |
SD 1.5 | Fast, lightweight |
Embeddings go in /mnt/models/image/embeddings/. Use them in your negative prompt by typing the filename (without extension).
| Embedding | Use In | Purpose |
|---|---|---|
easynegative |
Negative prompt | General quality improvement for SD 1.5 |
ng_deepnegative_v1_75t |
Negative prompt | Reduces deformed anatomy for SD 1.5 |
Note: SDXL and FLUX models generally don't need embeddings — their negative prompts work well with plain text. Embeddings are most useful with SD 1.5 models.
euler_ancestral or dpmpp_2mkarraseuler_ancestraleuler_ancestral or dpmpp_2m| Key | Action |
|---|---|
Ctrl+Enter |
Queue prompt |
Ctrl+Shift+Enter |
Queue prompt (front of queue) |
Ctrl+Z |
Undo |
Ctrl+Y |
Redo |
Ctrl+S |
Save workflow |
Ctrl+O |
Load workflow |
Space + drag |
Pan canvas |
Ctrl+Scroll |
Zoom |
Backspace/Delete |
Delete selected node |
Ctrl+M |
Mute/unmute node |
Ctrl+B |
Bypass node |
Ctrl+S → saves to browser's downloads as .jsonCtrl+O → select .json file.json file onto canvasWorkflow data is embedded in generated PNG images. Share the image, and others can drag it into ComfyUI to get your exact setup.
Generated images are saved to:
- Server path: /mnt/storage/generated-images/
- Organized by date: 2025-11-29/ComfyUI_00001_.png
To download images:
1. Right-click image in UI → Save Image
2. Or browse via SCP/SFTP to /mnt/storage/generated-images/
sudo systemctl restart comfyuicd /opt/comfyui/ComfyUI/custom_nodes
sudo -u comfyui git clone https://github.com/user/custom-node-repo.git
sudo systemctl restart comfyui
ls /mnt/models/image/checkpoints/sudo systemctl restart comfyuijournalctl -u comfyui -fsystemctl status comfyuiThe RTX PRO 6000 Blackwell pro6000-charlie has 96GB VRAM. If you hit limits:
- Reduce resolution
- Use fewer steps
- Disable preview (saves ~1GB)
- Close other GPU applications
watch -n 1 nvidia-smi
Ctrl+S to save workflow iterationsblurry, low quality, watermark, signature, text, logo,
bad anatomy, bad hands, missing fingers, extra fingers,
cropped, worst quality, jpeg artifacts
journalctl -u comfyui -fLoad Checkpoint (sd_xl_base_1.0)
↓
CLIP Text Encode (positive) → "a serene mountain lake at sunset, photorealistic"
CLIP Text Encode (negative) → "blurry, low quality, watermark"
↓
KSampler (steps=25, cfg=7, sampler=euler_ancestral, scheduler=karras)
↓
VAE Decode
↓
Save Image
Load Checkpoint (sd_xl_turbo_1.0_fp16)
↓
CLIP Text Encode (positive) → "your prompt"
CLIP Text Encode (negative) → "" # can be empty for turbo
↓
KSampler (steps=4, cfg=1, sampler=euler_ancestral)
↓
VAE Decode
↓
Preview Image
Last updated: 2026-02-19