Lazy Image Loader
Crop to any aspect ratio by dragging, no crop node required
- IMAGE
- width
- height
Lazy Image Loader is ComfyUI's built-in Load Image with the boring parts cut out and a crop tool bolted on. It reads from the global input/ folder, then cover-crops to a target aspect ratio - default 9:16, phone style - with live drag-to-position right in the node preview. For image-to-video work, where a start frame almost never matches the canvas you're about to generate into, that's the difference between a working workflow and a chain of three crop/resize nodes.
How it works
Load an image from the image dropdown (subfolders of input/ included), pick an aspect_ratio from the list - 9:16, 16:9, 1:1, 4:5, 3:4, 4:3, 2:3, 21:9, or Original (no crop) - and with auto_crop on it computes a cover-crop: scale the image so it fills the ratio, then trim the overflow. offset_x / offset_y (each −1 to 1) pan within the crop window, and zoom (1× to 4×) tightens it, which is your tool for killing dead sky or letterboxing before it ever hits the sampler. The node outputs the final IMAGE, plus width and height so downstream nodes can read the real canvas size.
The crop math is plain cover-crop - it keeps the center by default and lets you drag to wherever the subject actually is. The browser extension the pack ships (js/lazy_image_loader.js) is where the quality-of-life lives:
- Drag inside the preview to pan, watch the pan/zoom readout update live.
- Drop an image on the preview to upload it straight into
input/. - Browse… file picker and an Open input folder button that opens your
input/directory in the OS file manager. - A flip horizontal toggle on the toolbar, for those mirrored-reference-moment moments.
Where it fits in a workflow
This is the node you reach for when a frame needs framing control. The pack's intended shape: Lazy Image Loader → LazyPrompt - Vision Describe (or LazyPrompt Engineer with an LM Studio vision model) → a prompt that describes exactly what's in that cropped frame. Crop to 9:16 or whatever your video target is before describing, so the LLM isn't talking about the parts you're about to crop off anyway. It's also a straight Load Image replacement whenever you want the preview and the crop without extra nodes.
Install and gotchas
Same pack install as the rest: ComfyUI Manager → search vsaan212/Vsaan212-workflow-utilities, or clone into custom_nodes and restart. The README calls out one real gotcha: if the node is missing from the menu after you update the pack, restart ComfyUI - it lives under vsaan212/lazy. It's pure Python + the extension, no extra model downloads, and the only pack dependency it pulls is Pillow/numpy which ComfyUI already ships.
Small things worth knowing: the preview can look empty right after an upload - press R to refresh or pick the file from the combo. auto_crop off passes the full image through untouched, so keep it on unless you're doing your own resize downstream. And if you're feeding a model with a native canvas (like the MiniMax H3 line this pack also targets), you'll generally crop to that model's ratio here and let width/height tell the rest of the graph what you actually made.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| image | COMBO | 2 options: , example.png | |
| workflow_role | COMBO | Image2video First frame | Which MiniMax / Prompt Engineer role this loader feeds. Paired with global_selector_input to hard-gate the IMAGE output. |
| aspect_ratio | COMBO | 9:16 (Phone) | 9 options: 9:16 (Phone), 16:9 (Landscape), 1:1 (Square), 4:5 (Instagram), 3:4 (Portrait), 4:3 (Classic), +3 |
| auto_crop | BOOLEAN | true | — |
| resize_by_megapixels | BOOLEAN | false | When ON, scale the (cropped) image to width×height from megapixels × aspect (Comfy ResolutionSelector math, multiple of 32). Wire those outputs into MiniMax width/height. |
| megapixels | FLOAT | 1.00.2–4 | Target megapixels (0.2–4.0). Uses 1024² units like ResolutionSelector. 0.98 @ 16:9 → 1344×768 (H3 native). |
| offset_x | FLOAT | 0.00-1–1 | — |
| offset_y | FLOAT | 0.00-1–1 | — |
| zoom | FLOAT | 1.001–4 | — |
| flip_horizontal | BOOLEAN | false | — |
| global_selector_inputopt | STRING | From Lazy Global Selector. When set, IMAGE is only emitted if workflow_role matches the mode (else None — optional downstream). |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |
| width | INT | — |
| height | INT | — |