This node loads an image from the ``output`` folder via a dropdown, with the newest image pre-selected. It is designed as a replacement for ComfyUI's built-in **LoadImageOutput** node. It supports auto-refresh after generation, so it automatically picks up newly generated images without manual interaction. The node also supports the MaskEditor (right-click → "Open in MaskEditor"), and painted masks are preserved across workflow executions and tab switches. If no image is available, the node falls back to a 512×512 black image to prevent blocking the workflow. This node does the following: - Lists all images in the ``output`` folder (optionally including subfolders), sorted by modification time (newest first). - Shows a dropdown to select any image from the list, with a live preview below the widgets. - When ``Auto refresh after generation`` is enabled, automatically detects newly generated images after workflow execution and selects them. If no new image appeared, the current selection (and any painted mask) is preserved. - Supports the MaskEditor: painted masks are saved to ``input/clipspace/`` by ComfyUI's MaskEditor. The node detects this and loads the masked image as both the preview and the source for the ``mask`` output. - Loads the selected image, corrects EXIF orientation, converts to RGB, and extracts the alpha channel as a mask (if present). Images with transparency (RGBA or palette-based) produce an inverted alpha mask; images without alpha produce an empty (all-zero) mask. - Falls back to a 512×512 black image with an empty mask when no valid image is found or the file is missing. Parameters: | Parameter | Type | Description | | -------- | ---- | ----------- | | image | COMBO (UI-only) | Dropdown listing images from the ``output`` folder, sorted newest-first. This widget is not sent to the backend; it controls the hidden ``image`` widget. | | Auto refresh after generation | BOOLEAN | When true, the node automatically updates the dropdown and selects the newest image after each workflow execution — but only if a genuinely new file appeared. Default: ``true``. | Buttons: | Button | Description | | -------- | ----------- | | Refresh | Re-scans the output folder and selects the newest image. | | Choose file to upload | Opens a file picker to upload an image into the ``output`` folder, then selects it. | Outputs: | Parameter | Type | Description | | -------- | ---- | ----------- | | image | IMAGE | The loaded image as a float32 tensor ``(1, H, W, 3)`` (RGB, 0–1 range). When a painted mask exists, this is the original image from clipspace (without the mask overlay). | | mask | MASK | A float32 tensor ``(1, H, W)``. Derived from the alpha channel (inverted) if the image has transparency, or from the MaskEditor's painted mask. All-zero if neither exists. | Node Properties (right-click → Properties): | Property | Type | Default | Description | | -------- | ---- | ------- | ----------- | | include_subfolders | BOOLEAN | true | When true, the dropdown lists images from all subfolders inside the ``output`` directory. When false, only top-level files are shown. Changing this re-scans and selects the newest image. | Notes: - The dropdown always shows ``output``-folder images. When you paint a mask via the MaskEditor, the masked image is saved to ``input/clipspace/`` by ComfyUI internally. The node detects this, updates the hidden ``image`` widget to point at the clipspace file, and shows the masked preview — but the dropdown still displays the original output image. - Painted masks are preserved across workflow executions (when no new file is generated), tab switches, and page reloads. The hidden ``image`` widget stores the full annotated path (e.g. ``clipspace/clipspace-painted-masked-xxx.png [input]``) which is serialized with the workflow. - Auto-refresh works by snapshotting the newest file before execution starts. After execution completes, it compares the new file list — only if a different file now sits at position 0 does it switch selection (and clear any painted mask). If no new file appeared, the current selection and mask are untouched. - If the selected file no longer exists on disk (e.g. manually deleted), the node falls back to a 512×512 black image rather than erroring. This ensures downstream nodes always receive valid tensors. - Supported image formats: ``.png``, ``.jpg``/``.jpeg``, ``.webp``, ``.bmp``, ``.gif``, ``.tiff``/``.tif``. - The file list is fetched via a custom API endpoint (``GET /vslinx/output_images_list?include_subfolders=true|false``) to avoid blocking the UI on large output folders. - ``IS_CHANGED`` uses a SHA-256 hash of the file contents, so re-executions are skipped when the selected image hasn't changed on disk.