Comfy-Org / Comfy-Org/ComfyUI

Images symlinked from another directory fail to load

Open
#14,990 2 comments 0 reactions 0 assignees View on GitHub
Potential Bug
Dominant language
Python
Stars
133k
Forks
15.7k
Avg merge
1d 7h
Merged PRs (30d)
158

Description

### Custom Node Testing

- [x] I have tried disabling custom nodes and the issue persists (see [how to disable custom nodes](https://docs.comfy.org/troubleshooting/custom-node-issues#step-1%3A-test-with-all-custom-nodes-disabled) if you need help)

### Expected Behavior

The Load Image node should load images successfully when they are linked from another accessible directory.

### Actual Behavior

GUI shows 1 error `Custom validation failed for node` and looking at the error details: `Image not loaded`, `The system couldn't load this image.` when running a workflow where the chosen image is a link to a file another directory, such as in ../temp or ../output

### Steps to Reproduce

- Create a workflow with `Load Image` and an output such as `Preview Image`
- In the input directory; `ln -s ../temp/image.png link.png`
- Refresh node definitions and choose link.png in the `Load Image` node
- Observe that the image is shown in the frontend node
- Run workflow

### Debug Logs

```powershell
python main.py --disable-api-nodes --preview-method auto --listen --disable-all-custom-nodes
[WARNING] Could not autodetect AIMDO implementation, assuming Nvidia
[WARNING] WARNING: You need pytorch with cu130 or higher to use optimized CUDA operations.
[INFO] Found comfy_kitchen backend cuda: {'available': True, 'disabled': True, 'unavailable_reason': None, 'capabilities': ['adaln', 'apply_rope', 'apply_rope1', 'apply_rope_split_hal
f', 'apply_rope_split_half1', 'convrot_w4a4_linear', 'dequantize_convrot_w4a4_weight', 'dequantize_int8_convrot_weight', 'dequantize_int8_convrot_weight_dtype', 'dequantize_int8_simpl
e', 'dequantize_int8_simple_dtype', 'dequantize_nvfp4', 'dequantize_per_tensor_fp8', 'gemv_awq_w4a16', 'int8_linear', 'prepare_int4_weight_for_int8_linear', 'quantize_and_rotate_rowwi
se', 'quantize_convrot_w4a4_weight', 'quantize_int8_convrot_weight', 'quantize_int8_rowwise', 'quantize_int8_tensorwise', 'quantize_mxfp8', 'quantize_nvfp4', 'quantize_per_tensor_fp8'
, 'quantize_svdquant_w4a4', 'rms_rope', 'rms_rope1', 'rms_rope_split_half', 'rms_rope_split_half1', 'scaled_mm_nvfp4', 'scaled_mm_svdquant_w4a4', 'stochastic_rounding_fp8']}
[INFO] Found comfy_kitchen backend triton: {'available': True, 'disabled': True, 'unavailable_reason': None, 'capabilities': ['adaln', 'apply_rope', 'apply_rope1', 'apply_rope_split_h
alf', 'apply_rope_split_half1', 'dequantize_nvfp4', 'dequantize_per_tensor_fp8', 'int8_linear', 'quantize_and_rotate_rowwise', 'quantize_int8_rowwise', 'quantize_mxfp8', 'quantize_nvf
p4', 'quantize_per_tensor_fp8']}
[INFO] Found comfy_kitchen backend eager: {'available': True, 'disabled': False, 'unavailable_reason': None, 'capabilities': ['adaln', 'apply_rope', 'apply_rope1', 'apply_rope_split_h
alf', 'apply_rope_split_half1', 'convrot_w4a4_linear', 'dequantize_convrot_w4a4_weight', 'dequantize_int8_convrot_weight', 'dequantize_int8_convrot_weight_dtype', 'dequantize_int8_sim
ple', 'dequantize_int8_simple_dtype', 'dequantize_mxfp8', 'dequantize_nvfp4', 'dequantize_per_tensor_fp8', 'gemv_awq_w4a16', 'int8_linear', 'prepare_int4_weight_for_int8_linear', 'qua
ntize_and_rotate_rowwise', 'quantize_convrot_w4a4_weight', 'quantize_int8_convrot_weight', 'quantize_int8_rowwise', 'quantize_int8_tensorwise', 'quantize_mxfp8', 'quantize_nvfp4', 'qu
antize_per_tensor_fp8', 'quantize_svdquant_w4a4', 'rms_rope', 'rms_rope1', 'rms_rope_split_half', 'rms_rope_split_half1', 'scaled_mm_mxfp8', 'scaled_mm_nvfp4', 'scaled_mm_svdquant_w4a
4', 'stochastic_rounding_fp8']}
[INFO] Checkpoint files will always be loaded safely.
[INFO] Total VRAM 4030 MB, total RAM 5931 MB
[INFO] pytorch version: 2.9.1a0+gitd38164a
[INFO] Set vram state to: NORMAL_VRAM
[INFO] Device: cuda:0 NVIDIA GeForce GTX 970 : native
[INFO] Using async weight offloading with 2 streams
[INFO] Enabled pinned memory 5338.0
[INFO] Using pytorch attention
aimdo: /project/src-posix/cuda-funchooks.c:52:DEBUG:aimdo_setup_hooks: hooks successfully installed
aimdo: /project/src/control.c:247:INFO:comfy-aimdo inited for GPU: NVIDIA GeForce GTX 970 (VRAM: 4029 MB)
[INFO] DynamicVRAM support detected and enabled
[INFO] Python version: 3.13.5 (main, Jun 25 2025, 18:55:22) [GCC 14.2.0]
[INFO] ComfyUI version: 0.28.0
[INFO] comfy-aimdo version: 0.4.10
[INFO] comfy-kitchen version: 0.2.20
[INFO] comfyui-frontend-package version: 1.45.21
[INFO] comfyui-workflow-templates version: 0.11.9
[INFO] comfyui-embedded-docs version: 0.5.8
[INFO] comfy-kitchen version: 0.2.20
[INFO] comfy-aimdo version: 0.4.10
[INFO] [Prompt Server] web root: /home/hum/comfynew/lib/python3.13/site-packages/comfyui_frontend_package/static
[INFO] Asset seeder disabled
[INFO] No OpenGL_accelerate module loaded: No module named 'OpenGL_accelerate'
[INFO] Skipping loading of custom nodes
[INFO] Context impl SQLiteImpl.
[INFO] Will assume non-transactional DDL.
[INFO] Using RAM pressure cache.
[INFO] Starting server

[INFO] To see the GUI go to: http://0.0.0.0:8188
[INFO] To see the GUI go to: http://[::]:8188
[INFO] got prompt
[ERROR] Failed to validate prompt for output 2:
[ERROR] * LoadImage 1:
[ERROR] - Custom validation failed for node: image - Invalid image file: link.png
[ERROR] Output will be ignored
[WARNING] invalid prompt: {'type': 'prompt_outputs_failed_validation', 'message': 'Prompt outputs failed validation', 'details': '', 'extra_info': {}}
```

### Other

Loading linked images has been working up to and including 0.26.0 at least, but fails in 0.28.0

Contributor guide

Open the contributing guide

Research direction

Start at the Load Image node's prompt-validation path and reproduce the issue with an input-directory symlink to ../temp or ../output, using the provided workflow and command. Trace why link.png is rejected as an invalid image file in ComfyUI 0.28.0, then verify that the workflow runs successfully with the linked image while custom nodes remain disabled.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
backend
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
64/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.