Load Image SD (GeN13)
Load Image SD (GeN13) reads the A1111 settings out of an old PNG for you
- IMAGE
- MASK
- width
- height
- positive
- negative
- seed
- steps
- cfg
- sampler_name
- scheduler
- clip_skip
- info
You've got a folder of images from 2023, made in AUTOMATIC1111, and you want to make more of them in ComfyUI. The PNG doesn't drag in as a workflow - ComfyUI graphs and A1111 parameters strings are different dialects and neither reads the other - so the usual process is: open the file in a metadata viewer, copy the prompt, copy the negative, copy the seed, look up what "DPM++ 2M SDE Karras" is called this week, and rebuild the graph by hand. For one image that's an evening. For a hundred it's not happening.
Load Image SD (GeN13) does the transcription for you. Load the image, and it outputs the prompt, negative, seed, steps, CFG, sampler, scheduler, size and clip skip as actual ComfyUI-typed outputs you can wire straight into a KSampler.
How it reads the file
It looks for the A1111 parameter block where A1111 actually put it: the parameters text chunk in a PNG, or the EXIF fields of a JPG/WebP that carries one. It's all Pillow, numpy and regex - no Python dependency, no model, nothing to install beyond the pack.
Then it translates, which is the part with the value in it. A1111 sampler names map onto ComfyUI's, longest match first so DPM++ 2M SDE doesn't get eaten by DPM++ 2M, and the mapping deliberately prefers the _gpu variants (dpmpp_2m_sde_gpu, dpmpp_3m_sde_gpu) because that's what A1111 was effectively running. Scheduler names - old-style "written on the end of the sampler", new-style "Schedule type" field - both land on ComfyUI scheduler names. And clip_skip comes out already negated, because CLIP Set Last Layer wants -1 for "skip one layer" and A1111 stores 1.
The outputs
Image and mask first, same decoder as the pack's other loaders:
IMAGE,MASK- the picture, multi-frame files as a batch; mask is 1 where transparent, all zeros without alpha.width,height- from theSize:parameter, falling back to the actual image dimensions if it's missing. That distinction matters: a cropped or resized copy still remembers the original generation size.positive,negative- the prompt text, as STRING.seed(INT),steps(INT),cfg(FLOAT).sampler_name- a proper ComfyUI sampler combo, so it plugs into KSampler's sampler input directly.scheduler- deliberately a wildcard (*) rather than the core scheduler combo. That's so it also connects to KSampler (Inspire) or Impact's samplers, whose scheduler lists are longer than core's and would otherwise be a type mismatch. It's a small decision that saves people a real headache.clip_skip- already in the negative form CLIP Set Last Layer expects.info- the original parameter text with the mapping notes appended. This is the debugging output: if a value looks wrong, read this and see what it actually parsed.
A worked shape
Load Image SD → positive into CLIP Text Encode (and negative into the negative one) → sampler_name / scheduler / steps / cfg / seed into your KSampler → clip_skip into CLIP Set Last Layer → width/height into Resize (GeN13) or an Empty Latent. The only thing the node can't give you is the checkpoint, because A1111 stored a model name and hash, not a file path. Expect to pick the checkpoint by hand - and if you're lucky, the hash matches something you have on disk.
Installing
Manager → search GeN13 → install → restart. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/heigen13/ComfyUI-GeN13
pip install -r ComfyUI-GeN13/requirements.txt
The single requirement, nvidia-ml-py, is for the pack's monitor and has nothing to do with this node. No model files.
Why it might give you nothing
Metadata doesn't survive re-encoding. If the PNG went through Reddit, Discord's inline preview, a screenshot, or any editor that rewrites the file, the parameters chunk is gone and no node can recover it - the settings were text, and the text was deleted. This is the whole first half of the image I/O problem: keep the original file from SaveImage, post derivatives.
Same rule for WebP and JPEG sources: only some writers put the parameters in EXIF, so a JPEG is a maybe where a PNG is a near-certainty.
If the outputs are blank across the board, read info - it tells you what was found, and an empty or unspecific info means the file simply doesn't carry generation parameters. Also worth knowing: A1111 extension fields (Hires fix, ADetailer, ControlNet blocks) aren't reconstructed as nodes. You'll see them in the raw text and rebuild them yourself if you want them.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| image | COMBO | Source image: a PNG made with A1111 / Forge, or a JPG / WebP that carries the parameters. |
Outputs (13)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | Image: the loaded image; multi-frame files are output as a batch. |
| MASK | MASK | Mask: 1 in transparent areas; all 0 when the image has no alpha channel. |
| width | INT | Width: Size from the parameters, or the image width if missing. |
| height | INT | Height: Size from the parameters, or the image height if missing. |
| positive | STRING | Positive prompt: the prompt text from the parameters. |
| negative | STRING | Negative prompt: the Negative prompt text from the parameters. |
| seed | INT | Seed: Seed from the parameters. |
| steps | INT | Steps: Steps from the parameters. |
| cfg | FLOAT | CFG: CFG scale from the parameters. |
| sampler_name | euler,euler_cfg_pp,euler_ancestral,euler_ancestral_cfg_pp,heun,heunpp2,exp_heun_2_x0,exp_heun_2_x0_sde,dpm_2,dpm_2_ancestral,lms,dpm_fast,dpm_adaptive,dpmpp_2s_ancestral,dpmpp_2s_ancestral_cfg_pp,dpmpp_sde,dpmpp_sde_gpu,dpmpp_2m,dpmpp_2m_cfg_pp,dpmpp_2m_sde,dpmpp_2m_sde_gpu,dpmpp_2m_sde_heun,dpmpp_2m_sde_heun_gpu,dpmpp_3m_sde,dpmpp_3m_sde_gpu,ddpm,lcm,ipndm,ipndm_v,deis,res_multistep,res_multistep_cfg_pp,res_multistep_ancestral,res_multistep_ancestral_cfg_pp,gradient_estimation,gradient_estimation_cfg_pp,er_sde,seeds_2,seeds_3,sa_solver,sa_solver_pece,ddim,uni_pc,uni_pc_bh2 | Sampler: the A1111 sampler mapped to its ComfyUI name. |
| scheduler | * | Scheduler: the A1111 schedule type (Karras etc.) mapped to its ComfyUI name. |
| clip_skip | INT | Clip skip: converted to the negative value used by CLIP Set Last Layer (1 → -1, 2 → -2). |
| info | STRING | Parameters: the original parameter text, with mapping notes appended. |