Commit Graph

105 Commits

Author SHA1 Message Date
a94ce2dcc7 fix: update arty.yml supervisor config paths
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-23 02:01:55 +01:00
e4f46187f1 fix: use CLIP-ViT-H for both workflows (CLIP-ViT-bigG header too large) 2025-11-23 01:27:02 +01:00
d93fb95f8d fix: use pytorch_model.bin for CLIP Vision due to safetensors header size limit 2025-11-23 01:23:50 +01:00
1419efac2e fix: use h94/IP-Adapter repo for CLIP Vision safetensors
Changed CLIP Vision model source from openai/laion repos to h94/IP-Adapter
which provides the models in proper safetensors format that CLIPVisionLoader
can load directly.

Model sources:
- CLIP-ViT-H (SD 1.5): models/image_encoder/model.safetensors
- CLIP-ViT-bigG (SDXL): sdxl_models/image_encoder/model.safetensors

This fixes the "header too large" deserialization error caused by trying
to load PyTorch .bin files as safetensors.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-23 01:16:02 +01:00
b5e1f0ce2a fix: use safetensors extension for CLIP Vision models
CLIPVisionLoader validates against a list of .safetensors files only.
Changed CLIP Vision model extensions from .bin back to .safetensors
in both the model configuration and workflow files.

Note: The actual files are PyTorch .bin format, but ComfyUI's
CLIPVisionLoader expects .safetensors naming convention. The symlinks
will point to the .bin files but use .safetensors extensions.

Changes:
- comfyui_models.yaml: Changed dest extensions to .safetensors
- Workflows: Changed clip_name to .safetensors extension

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-23 01:13:06 +01:00
b21fc9cde6 fix: add CLIPVision input to IPAdapterAdvanced nodes
IPAdapterAdvanced requires a direct CLIPVision input, unlike the basic
IPAdapter node. Added CLIPVisionLoader nodes to both workflows:

Face workflow:
- Added CLIPVisionLoader (node 12) loading CLIP-ViT-bigG-14
- Connected to IPAdapterAdvanced (node 4) via link 20

Composition workflow:
- Added CLIPVisionLoader (node 15) loading CLIP-ViT-bigG-14
- Connected to both IPAdapterAdvanced nodes (6 and 7) via links 25 and 26

This provides the required CLIP Vision model for image understanding
in the IP-Adapter processing pipeline.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-23 01:11:07 +01:00
996d4a2616 fix: correct IPAdapterAdvanced widget parameter order
Fixed parameter order for IPAdapterAdvanced nodes:
1. weight (float) - 0.85/0.6/0.5
2. weight_type (string) - "ease in-out"
3. combine_embeds (string) - "average"
4. start_at (float) - 0.0
5. end_at (float) - 1.0
6. embeds_scaling (string) - "V only"

Previous order had combine_embeds and embeds_scaling values swapped,
causing validation errors.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-23 01:07:09 +01:00
0a648caf04 fix: use IPAdapterAdvanced for composition workflow
Changed both IPAdapter nodes to IPAdapterAdvanced for better control
and consistency with the face workflow. IPAdapterAdvanced provides
additional parameters for fine-tuning the adapter behavior.

Updated widget values for both nodes:
- weight: 0.6/0.5 (composition influence strength)
- noise: 0.0
- weight_type: "ease in-out"
- combine_embeds: 1.0
- start_at: 0.0
- end_at: 1.0

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-23 01:05:34 +01:00
603c56edf6 fix: use IPAdapterAdvanced instead of IPAdapterFaceID
Changed node type from IPAdapterFaceID to IPAdapterAdvanced to work
with VIT-G preset. IPAdapterFaceID requires specialized face detection
models, while IPAdapterAdvanced works with the standard IP-Adapter
models loaded by IPAdapterUnifiedLoader.

Updated widget values to match IPAdapterAdvanced parameters:
- weight: 0.85 (face similarity strength)
- noise: 0.0
- weight_type: "ease in-out"
- combine_embeds: 1.0
- start_at: 0.0
- end_at: 1.0

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-23 01:03:48 +01:00
f05e3940aa fix: correct CLIP Vision model file extensions to .bin
Changed CLIP Vision model destination filenames from .safetensors to .bin
to match actual PyTorch model format. The files are ZIP/pickle format with
'PK' magic bytes, not safetensors format, which was causing "header too large"
deserialization errors in ComfyUI IPAdapterUnifiedLoader.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-23 01:00:56 +01:00
041958dd93 fix: update SD1.5 CLIP Vision filename to match expected pattern
Changed destination filename to CLIP-ViT-H-14-laion2B-s32B-b79K.safetensors
to match the pattern expected by IPAdapterUnifiedLoader for SD1.5 models.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-23 00:54:37 +01:00
aa311f7b48 fix: use VIT-G preset for SDXL IP-Adapter workflows
Changed from PLUS/PLUS FACE presets to VIT-G preset because:
- VIT-G preset is specifically designed for SDXL models
- It correctly maps to the ViT-bigG CLIP Vision model
- PLUS presets default to SD1.5 CLIP Vision models

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-23 00:52:51 +01:00
2791f5012d fix: correct preset name for IP-Adapter face workflow
Changed from "FACE" to "PLUS FACE (portraits)" to match the exact
preset name expected by IPAdapterUnifiedLoader.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-23 00:48:40 +01:00
a94d5fb641 fix: update CLIP Vision filename for IPAdapterUnifiedLoader
Changed CLIP-ViT-bigG destination filename to match the exact name
expected by IPAdapterUnifiedLoader: CLIP-ViT-bigG-14-laion2B-39B-b160k.safetensors

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-23 00:42:11 +01:00
7637deceeb feat: restore IP-Adapter PLUS and FACE presets in workflows
Restored original IP-Adapter presets now that models are available:
- ipadapter-composition-i2i-production-v1.json: Changed both loaders to "PLUS (high strength)"
- ipadapter-face-i2i-production-v1.json: Changed loader to "FACE"

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-23 00:39:18 +01:00
d25ad8043f Add IP-Adapter PLUS and FACE models to configuration
Added two additional IP-Adapter variants:
- ip-adapter-plus_sdxl_vit-h.safetensors (0.9 GB) - High strength composition
- ip-adapter-plus-face_sdxl_vit-h.safetensors (0.5 GB) - Face-focused generation

These enable the PLUS and FACE presets in IPAdapterUnifiedLoader.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-23 00:33:37 +01:00
613a44a7fa Change IPAdapter preset to STANDARD
Changed from PLUS/FACE presets to STANDARD preset which works with
the basic ip-adapter_sdxl.safetensors model currently installed.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-23 00:31:59 +01:00
3817b2ce22 Remove CLIP inputs from IPAdapterUnifiedLoader nodes
IPAdapterUnifiedLoader only accepts model input, not clip.
Removed CLIP connections from both workflows.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-23 00:29:54 +01:00
2716c83532 Remove link 9 from links array
Removed the stale link 9 entry from the links array.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-23 00:28:17 +01:00
c782c93f4d Remove invalid link 9 from composition workflow
Node 5 (IPAdapterUnifiedLoader) MODEL output should not connect to Node 7.
The chain is: Node 6 IPAdapter output -> Node 7 IPAdapter input[0].

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-23 00:27:06 +01:00
8616b0e231 Fix workflow validation errors
- Changed checkpoint name from 'diffusers/stable-diffusion-xl-base-1.0' to 'sd_xl_base_1.0.safetensors'
- Fixed IPAdapter end_at parameter from string "original" to float 1.0

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-23 00:25:37 +01:00
44d113f846 Add proper inputs/outputs to IP-Adapter workflow nodes
Fixed node structure for both workflows by adding:
- Input connections for each node that receives data
- Output connections with link references
- Proper link arrays matching the node connections

This ensures workflows load correctly in ComfyUI with complete graph connectivity.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-23 00:24:04 +01:00
74844842cf Fix missing node links in IP-Adapter workflows
Added proper node connections (links array) for both workflows:
- ipadapter-composition-i2i-production-v1.json: 21 links connecting dual IP-Adapter chain
- ipadapter-face-i2i-production-v1.json: 15 links connecting face IP-Adapter chain

The workflows now have complete node graphs that will load and execute properly in ComfyUI.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-23 00:17:28 +01:00
e9abaf30f1 Add placeholder reference images for IP-Adapter workflows
Added example images for image-to-image workflows:
- composition_ref1.png: Blue placeholder for first composition reference
- composition_ref2.png: Red placeholder for second composition reference
- face_reference.png: Green placeholder for face portrait reference

These placeholders ensure workflows load without errors and provide clear
instructions to users about replacing them with actual reference images.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-23 00:14:09 +01:00
a9ef505d0f fix: add TQDM_DISABLE to comfyui start.sh 2025-11-22 21:17:04 +01:00
a4771f7139 feat: add runpod environment with variables and fix workflow paths
- Add runpod env with AI_ROOT, COMFYUI_ROOT, HF_CACHE, LOGS_DIR, BIN_DIR
- Update workflows/link-comfyui to use $AI_ROOT for absolute paths
- Workflows will now link correctly from /workspace/ai/comfyui/workflows
2025-11-22 21:12:45 +01:00
257c4aeaac fix: correct comfyui command path in supervisord.conf 2025-11-22 21:06:46 +01:00
2f818a403c feat: configure supervisord to run from /workspace/ai
- Create logs directory with .gitkeep
- Update .gitignore to track logs dir but ignore log files
- Update supervisord.conf with paths relative to /workspace/ai
- Add supervisor control scripts to arty.yml (start/stop/status/restart)
- All paths now use ../ to reference parent /workspace directory
2025-11-22 21:04:19 +01:00
cdc5176d9f chore: add supervisord runtime files to .gitignore 2025-11-22 20:59:15 +01:00
e2bfffe4c0 Revert "fix: remove HF_TOKEN environment variable reference from orchestrator service"
This reverts commit 6fe7c89aea.
2025-11-22 20:55:45 +01:00
6fe7c89aea fix: remove HF_TOKEN environment variable reference from orchestrator service
The HF_TOKEN environment variable is not available in the supervisord environment.
Since the orchestrator service has autostart=false, removing the HF_TOKEN reference
to allow supervisord to start successfully.
2025-11-22 20:55:01 +01:00
fcd23d4037 fix: correct relative paths in supervisord.conf
All paths now relative from /workspace directory where supervisord runs.
This makes the configuration truly portable.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-22 20:51:59 +01:00
897dcb175a refactor: reorganize directory structure and remove hardcoded paths
Move comfyui and vllm out of models/ directory to top level for better
organization. Replace all hardcoded /workspace paths with relative paths
to make the configuration portable across different environments.

Changes:
- Move models/comfyui/ → comfyui/
- Move models/vllm/ → vllm/
- Remove models/ directory (empty)
- Update arty.yml: replace /workspace with environment variables
- Update supervisord.conf: use relative paths from /workspace/ai
- Update all script references to use new paths
- Maintain TQDM_DISABLE=1 to fix BrokenPipeError

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-22 20:49:27 +01:00
9058b1f9dd feat: add ControlNet fusion workflow with example control images
Add multi-ControlNet workflow combining depth and canny edge control for
precise composition with SDXL. Includes example control images for testing.

Changes:
- Add controlnet-fusion-production-v1.json with 18 properly linked nodes
- Add examples/control_depth.png (radial gradient depth map)
- Add examples/control_canny.png (geometric edge detection)
- Chain depth → canny ControlNet application
- Configure for SDXL with 30 steps, CFG 7.0
- Support dual control strengths (depth: 0.8, canny: 0.6)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-22 20:33:13 +01:00
70cc5d8db0 feat: add ControlNet models to model configuration
Added 4 ControlNet models for SD 1.5 and SDXL:
- control_v11p_sd15_canny (SD 1.5 edge detection)
- control_v11p_sd15_depth (SD 1.5 depth maps)
- controlnet-canny-sdxl-1.0 (SDXL edge detection)
- controlnet-depth-sdxl-1.0 (SDXL depth maps)

Total size: ~8GB for all ControlNet models
All marked as non-essential (optional downloads)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-22 20:14:12 +01:00
6a3f0ab831 remove: ControlNet fusion workflow (requires unavailable models)
The ControlNet workflow requires:
- ControlNet models (not currently installed)
- Control images (user-provided)
- ComfyUI-Advanced-ControlNet custom nodes

This workflow cannot function without these dependencies, so removing
it from production workflows. Can be re-added when ControlNet models
are available in the model orchestrator.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-22 20:11:29 +01:00
37e07b1f75 fix: add missing node connections to ControlNet fusion workflow
The ControlNet workflow had no links between nodes. Added all required
connections for a complete multi-ControlNet pipeline:

- SDXL checkpoint → model/CLIP/VAE
- Load depth & canny control images
- Load ControlNet models
- Chain ControlNet applications (depth → canny)
- Text encoders → conditioning
- Sampler → VAE decode → save/preview

Also fixed checkpoint to use sd_xl_base_1.0.safetensors

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-22 20:09:39 +01:00
4c4410a2fa fix: update batch pipeline to use SDXL instead of FLUX
Changed checkpoint from FLUX.1-schnell to sd_xl_base_1.0.safetensors
to match available models. Also updated sampling parameters for SDXL:
- Steps: 4 → 20 (SDXL needs more steps)
- CFG: 1.0 → 7.0 (standard for SDXL)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-22 20:04:12 +01:00
6fa8c21cfc fix: add missing node connections to batch pipeline workflow
The batch-pipeline workflow had no links between nodes, making it
non-functional in ComfyUI. Added all required inputs/outputs and
links to properly connect the workflow chain.

Changes:
- Added inputs/outputs to all nodes
- Created 10 links connecting the workflow
- Set batch size to 4 in EmptyLatentImage
- Simplified to 8 core nodes for clarity

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-22 20:02:17 +01:00
002d89e221 fix: disable tqdm progress bars to prevent BrokenPipeError
Add TQDM_DISABLE=1 environment variable to ComfyUI service to fix
BrokenPipeError during sampling operations. This is caused by
ComfyUI-Manager's stderr wrapper interfering with tqdm's progress bar
mechanism.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-22 19:52:50 +01:00
81e71fbdcb fix: use exact INPUT_TYPES order from node code
Verified from /workspace/ComfyUI/nodes.py KSamplerAdvanced class.
Order: add_noise, noise_seed, control, steps, cfg, sampler, scheduler, start, end, return_noise

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-22 19:23:10 +01:00
db030a70ef fix: reorder widgets_values without add_noise, use randomize
Try: [seed, control, steps, cfg, sampler, scheduler, start, end, return_noise]

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-22 19:21:33 +01:00
cda815b4da fix: remove control_after_generate from widgets_values
Remove 'fixed' control parameter, only keep actual widget values.
Final: [enable, 42, 20, 8.0, euler, normal, 0, 10000, disable]

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-22 19:19:37 +01:00
d3119b8800 fix: add complete widgets_values for KSamplerAdvanced
Include all widget parameters: add_noise, noise_seed, control_after_generate, steps, cfg, sampler_name, scheduler, start_at_step, end_at_step, return_with_leftover_noise

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-22 19:14:56 +01:00
0386a6d0cb fix: remove add_noise from widgets_values
Widgets_values should not include add_noise dropdown.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-22 19:13:25 +01:00
904c299647 fix: use default KSamplerAdvanced values
Use API defaults for KSamplerAdvanced node parameters.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-22 19:11:25 +01:00
eb3b9c3836 fix: correct KSamplerAdvanced parameters for AnimateDiff workflow
Fix parameter order in KSamplerAdvanced node:
- Change sampler from 'euler' to 'dpmpp_2m' (valid sampler)
- Change scheduler from 'normal' to 'karras' (valid scheduler)
- Parameters now: [enable, 42, 25, 7.5, dpmpp_2m, karras, 0, 25, enable]

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-22 19:09:30 +01:00
18cd87fbd1 refactor: reorganize webdav-sync into dedicated directory
Clean up project structure by organizing WebDAV sync service properly.

Changes:
- Move scripts/comfyui_webdav_sync.py → webdav-sync/webdav_sync.py
- Create webdav-sync/requirements.txt with watchdog and webdavclient3
- Remove webdav dependencies from model-orchestrator/requirements.txt
- Delete unused scripts/ folder (start-all.sh, status.sh, stop-all.sh)
- Update supervisord.conf to use new path /workspace/ai/webdav-sync/webdav_sync.py

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-22 19:03:48 +01:00
79442bd62e feat: add WebDAV sync service for ComfyUI outputs
Add Python watchdog service to automatically sync ComfyUI outputs to HiDrive WebDAV storage.

Changes:
- Add scripts/comfyui_webdav_sync.py: File watcher service using watchdog + webdavclient3
- Update model-orchestrator/requirements.txt: Add watchdog and webdavclient3 dependencies
- Update supervisord.conf: Add webdav-sync program with ENV variable support
- Update arty.yml: Add service management scripts (start/stop/restart/status/logs)

WebDAV credentials are now loaded from .env file (WEBDAV_URL, WEBDAV_USERNAME, WEBDAV_PASSWORD, WEBDAV_REMOTE_PATH)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-22 18:58:18 +01:00
71d4e22240 fix: use non-interactive davfs2 installation 2025-11-22 18:35:37 +01:00