Nodes/ComfyUI-Simple_Readable_Metadata-SG/Simple Readable Metadata MAX-SG
ComfyUI Node

Simple Readable Metadata MAX-SG

Same metadata reader, but every number gets its own output

By ShammiG·Created 10 months ago·Updated 6 months ago· 63
Simple Readable Metadata MAX-SG
    • Simple_Readable_Metadata
    • image
    • mask
    • width
    • height
    • width_ratio
    • height_ratio
    • Resolution_in_MP
    • metadata_raw
    • Positive_Prompt
    • Negative_Prompt
    • seed
    • steps
    • cfg_scale
    • sampler
    • scheduler
    • file_name_text
    image
    show_info
    emoji_in_readable_texttrue

    If you've seen SimpleReadableMetadataSG, this is its older sibling wearing a toolbelt. SimpleReadableMetadataMAXSG reads image metadata the same way - PNG or WEBP, ComfyUI or A1111/Forge format - but instead of stopping at one readable summary and a few typed outputs, it exposes nearly every value as its own output jack. The name is not false advertising: this is the MAX version.

    You'd reach for it when the metadata values need to drive other nodes, not just inform you. Feed its seed into a re-run, use width/height or the width_ratio/height_ratio to compute aspect-ratio-aware conditioning, or read steps/cfg_scale/sampler/scheduler into a logging node. A human doing a one-off "what made this image?" is better served by the base node plus the Text Viewer - the MAX version's 17 outputs are for automation.

    The inputs

    Same family pattern as the base node:

    • image - choose from the input-folder dropdown or drag a file onto the widget.
    • show_info - here it's just on/off, not the base node's four-way toggle. It controls the on-node display.
    • emoji_in_readable_text (default on) - emoji labels in the readable summary; turn off for clean text output.

    The outputs that earn the "MAX" name

    The readable text, image and mask pass-throughs, metadata_raw, both prompts, seed, and file_name_text are the same as the base node. What MAX adds:

    • width, height (INT) - actual pixel dimensions.
    • width_ratio, height_ratio (FLOAT) - aspect-ratio values.
    • Resolution_in_MP (FLOAT) - megapixels, handy for sanity-checking against a model's native resolution.
    • steps (INT), cfg_scale (FLOAT) - generation parameters pulled from the metadata.
    • sampler and scheduler - typed as the full ComfyUI KSampler enumerations (euler, dpmpp_2m, karras, and every other option in the dropdowns), so they wire straight into sampler-config nodes without string-matching.

    The mechanism is the same parser as the base node, but the output list is the entire point: if you're building a workflow that reacts to what it reads, you don't want to string-parse the readable summary - you want real INTs and FLOATs on the wire. That's this node.

    Installing

    Pack-level setup, identical to the rest:

    cd ComfyUI/custom_nodes
    git clone https://github.com/ShammiG/ComfyUI-Simple_Readable_Metadata-SG.git
    cd ComfyUI-Simple_Readable_Metadata-SG
    pip install -r requirements.txt   # opencv-python
    

    Or Manager → Custom Nodes Manager → search Simple Readable Metadata-SG → install → restart. No model files.

    Gotchas

    Same caveats as the whole family. Metadata must actually exist in the file - stripped chunks mean nothing to read. The Node 2.0 warning applies on ComfyUI 0.3.76+: keep it OFF or the widget rendering breaks. And a MAX-specific note: an unconnected output is free - ComfyUI only computes what's wired - so leaving half the jacks dangling costs nothing. Don't be shy about only connecting what you need.

    Categoryimage/analysis

    Inputs (3)

    NameTypeDefaultDescription
    imageCOMBO1 options: example.png
    show_infoCOMBO2 options: on, off
    emoji_in_readable_textBOOLEANtrue

    Outputs (17)

    NameTypeDescription
    Simple_Readable_MetadataSTRING
    imageIMAGE
    maskMASK
    widthINT
    heightINT
    width_ratioFLOAT
    height_ratioFLOAT
    Resolution_in_MPFLOAT
    metadata_rawSTRING
    Positive_PromptSTRING
    Negative_PromptSTRING
    seedINT
    stepsINT
    cfg_scaleFLOAT
    samplereuler,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
    schedulersimple,sgm_uniform,karras,exponential,ddim_uniform,beta,normal,linear_quadratic,kl_optimal
    file_name_textSTRING