{"id": "b2e7d4c1-8a5f-4e3b-9c6d-gmanski-ph3t2i", "revision": 0, "last_node_id": 20, "last_link_id": 22, "nodes": [{"id": 1, "type": "MarkdownNote", "pos": [-1600, -420], "size": [560, 820], "flags": {}, "order": 0, "mode": 0, "inputs": [], "outputs": [], "properties": {"Node name for S&R": "MarkdownNote"}, "widgets_values": ["## Gmanski H3 Image (P-H3)\n\n**MiniMax H3's eye for light and skin, as an 8-step still-image model.** P-H3-Image (Pruna AI) distilled H3 into an image generator: 8 steps, no CFG, up to 8 MP, text that renders. It runs here as a 2 GB LoRA on the same `fl2va` checkpoint every Gmanski Flow template uses, plus its own text encoder and VAE.\n\n### Run it\n1. Write the **Request** (plain English is fine; long, concrete prompts do best).\n2. Pick an aspect ratio / megapixels on the **Resolution** node (4 MP default; 8 MP needs ~21 GB VRAM on int8).\n3. Queue. Result: `output/Gmanski/h3_image_ph3_00001.png`.\n\n### Optional: prompt upsampler\nThe grey **Upsampler** nodes rewrite a short request into the long brief the model was trained on. `gmanski-packs install minimax-h3-pimage-upsampler` (9.75 GB), set both nodes to Mode -> Always and flip **Use upsampled prompt** to true.\n\n### Notes\n- ComfyUI **0.44.0 or newer** (PH3ImageConditioning). `MiniMaxH3SigmaShift` must stay at 1 / 1.\n- No negative prompt and no CFG: steer with the text. Character LoRAs trained for H3 fl2va stack on the model input like in Flow (Image).\n- Licence: MiniMax H3 Community License applies to the weights (the LoRA, VAE and upsampler); the text encoder is Apache 2.0.\n\n### Models\n`gmanski-packs install minimax-h3-flow minimax-h3-pimage`.\n"], "title": "Read me: Gmanski H3 Image (P-H3)", "color": "#432", "bgcolor": "#653"}, {"id": 2, "type": "UNETLoader", "pos": [500, 700], "size": [440, 90], "flags": {}, "order": 1, "mode": 0, "inputs": [{"name": "unet_name", "type": "COMBO", "link": null, "widget": {"name": "unet_name"}}, {"name": "weight_dtype", "type": "COMBO", "link": null, "widget": {"name": "weight_dtype"}}], "outputs": [{"name": "MODEL", "type": "MODEL", "links": [1]}], "properties": {"Node name for S&R": "UNETLoader", "models": [{"name": "minimax_h3_fl2va_pruned_int8_convrot.safetensors", "url": "https://huggingface.co/Comfy-Org/MiniMax-H3/resolve/main/diffusion_models/minimax_h3_fl2va_pruned_int8_convrot.safetensors", "directory": "diffusion_models"}]}, "widgets_values": ["minimax_h3_fl2va_pruned_int8_convrot.safetensors", "default"], "title": "MiniMax H3 flow checkpoint (shared with Gmanski Flow)"}, {"id": 3, "type": "LoraLoaderModelOnly", "pos": [500, 820], "size": [440, 90], "flags": {}, "order": 2, "mode": 0, "inputs": [{"name": "model", "type": "MODEL", "link": 1}, {"name": "lora_name", "type": "COMBO", "link": null, "widget": {"name": "lora_name"}}, {"name": "strength_model", "type": "FLOAT", "link": null, "widget": {"name": "strength_model"}}], "outputs": [{"name": "MODEL", "type": "MODEL", "links": [2]}], "properties": {"Node name for S&R": "LoraLoaderModelOnly", "models": [{"name": "p-h3-image_lora_bf16.safetensors", "url": "https://huggingface.co/PrunaAI/P-H3-Image-Comfy/resolve/main/loras/p-h3-image_lora_bf16.safetensors", "directory": "loras"}]}, "widgets_values": ["p-h3-image_lora_bf16.safetensors", 1.0], "title": "P-H3-Image LoRA (1.0 - this is the image model)"}, {"id": 4, "type": "MiniMaxH3SigmaShift", "pos": [500, 940], "size": [300, 110], "flags": {}, "order": 3, "mode": 0, "inputs": [{"name": "model", "type": "MODEL", "link": 2}, {"name": "shift_video", "type": "FLOAT", "link": null, "widget": {"name": "shift_video"}}, {"name": "shift_audio", "type": "FLOAT", "link": null, "widget": {"name": "shift_audio"}}], "outputs": [{"name": "MODEL", "type": "MODEL", "links": [13]}], "properties": {"Node name for S&R": "MiniMaxH3SigmaShift"}, "widgets_values": [1.0, 1.0], "title": "Sigma shift (must stay 1 / 1 for P-H3)"}, {"id": 5, "type": "CLIPLoader", "pos": [500, 1080], "size": [440, 110], "flags": {}, "order": 4, "mode": 0, "inputs": [{"name": "clip_name", "type": "COMBO", "link": null, "widget": {"name": "clip_name"}}, {"name": "type", "type": "COMBO", "link": null, "widget": {"name": "type"}}, {"name": "device", "type": "COMBO", "link": null, "widget": {"name": "device"}}], "outputs": [{"name": "CLIP", "type": "CLIP", "links": [11]}], "properties": {"Node name for S&R": "CLIPLoader", "models": [{"name": "p-h3-image_text_encoder_int8_convrot.safetensors", "url": "https://huggingface.co/PrunaAI/P-H3-Image-Comfy/resolve/main/text_encoders/p-h3-image_text_encoder_int8_convrot.safetensors", "directory": "text_encoders"}]}, "widgets_values": ["p-h3-image_text_encoder_int8_convrot.safetensors", "minimax", "default"], "title": "P-H3 text encoder"}, {"id": 6, "type": "VAELoader", "pos": [500, 1220], "size": [440, 60], "flags": {}, "order": 5, "mode": 0, "inputs": [{"name": "vae_name", "type": "COMBO", "link": null, "widget": {"name": "vae_name"}}], "outputs": [{"name": "VAE", "type": "VAE", "links": [12, 21]}], "properties": {"Node name for S&R": "VAELoader", "models": [{"name": "p-h3-image_vae_int8_convrot.safetensors", "url": "https://huggingface.co/PrunaAI/P-H3-Image-Comfy/resolve/main/vae/p-h3-image_vae_int8_convrot.safetensors", "directory": "vae"}]}, "widgets_values": ["p-h3-image_vae_int8_convrot.safetensors"], "title": "P-H3 VAE"}, {"id": 7, "type": "PrimitiveStringMultiline", "pos": [-1000, -420], "size": [480, 300], "flags": {}, "order": 6, "mode": 0, "inputs": [{"name": "value", "type": "STRING", "link": null, "widget": {"name": "value"}}], "outputs": [{"name": "STRING", "type": "STRING", "links": [3, 6]}], "properties": {"Node name for S&R": "PrimitiveStringMultiline"}, "widgets_values": ["Candid street-style photograph of a woman in a camel wool coat crossing a rain-wet Lisbon street at golden hour, tram tracks catching the light, soft film grain, 35mm lens, natural skin texture, no text or logos anywhere."], "title": "Request (your prompt)"}, {"id": 8, "type": "ResolutionSelector", "pos": [-1000, -60], "size": [300, 150], "flags": {}, "order": 7, "mode": 0, "inputs": [], "outputs": [{"name": "width", "type": "INT", "links": [9]}, {"name": "height", "type": "INT", "links": [10]}], "properties": {"Node name for S&R": "ResolutionSelector"}, "widgets_values": ["3:4 (Portrait Standard)", 4.0, 32], "title": "Resolution (4 MP default, 8 MP = ~21 GB VRAM)"}, {"id": 9, "type": "CLIPLoader", "pos": [-1000, 140], "size": [440, 110], "flags": {}, "order": 8, "mode": 4, "inputs": [{"name": "clip_name", "type": "COMBO", "link": null, "widget": {"name": "clip_name"}}, {"name": "type", "type": "COMBO", "link": null, "widget": {"name": "type"}}, {"name": "device", "type": "COMBO", "link": null, "widget": {"name": "device"}}], "outputs": [{"name": "CLIP", "type": "CLIP", "links": [4]}], "properties": {"Node name for S&R": "CLIPLoader", "models": [{"name": "p-h3-image_prompt_upsampler_int8_convrot.safetensors", "url": "https://huggingface.co/PrunaAI/P-H3-Image-Comfy/resolve/main/text_encoders/p-h3-image_prompt_upsampler_int8_convrot.safetensors", "directory": "text_encoders"}]}, "widgets_values": ["p-h3-image_prompt_upsampler_int8_convrot.safetensors", "minimax", "default"], "title": "Upsampler encoder (optional, 9.75 GB) - bypassed"}, {"id": 10, "type": "StringFormat", "pos": [-1000, 290], "size": [400, 120], "flags": {}, "order": 9, "mode": 0, "inputs": [{"name": "values.a", "type": "*", "link": 3}, {"name": "values.b", "type": "*", "link": null}, {"name": "f_string", "type": "STRING", "link": null, "widget": {"name": "f_string"}}], "outputs": [{"name": "STRING", "type": "STRING", "links": [5]}], "properties": {"Node name for S&R": "StringFormat"}, "widgets_values": ["Aspect ratio: 3:4\nRequest: {a}"], "title": "Upsampler input (aspect + request)"}, {"id": 11, "type": "TextGenerateV2", "pos": [-1000, 450], "size": [400, 290], "flags": {}, "order": 10, "mode": 4, "inputs": [{"name": "clip", "type": "CLIP", "link": 4}, {"name": "images.image1", "type": "IMAGE", "link": null}, {"name": "system_prompt", "type": "STRING", "link": null}, {"name": "prompt", "type": "STRING", "link": 5, "widget": {"name": "prompt"}}], "outputs": [{"name": "generated_text", "type": "STRING", "links": [7]}, {"name": "thinking", "type": "STRING", "links": []}], "properties": {"Node name for S&R": "TextGenerateV2"}, "widgets_values": ["", 1536, "off", true, true, "auto"], "title": "Upsampler (optional) - bypassed"}, {"id": 12, "type": "ComfySwitchNode", "pos": [-480, -60], "size": [330, 110], "flags": {}, "order": 11, "mode": 0, "inputs": [{"name": "on_false", "type": "STRING", "link": 6}, {"name": "on_true", "type": "STRING", "link": 7}, {"name": "switch", "type": "BOOLEAN", "link": null, "widget": {"name": "switch"}}], "outputs": [{"name": "output", "type": "STRING", "links": [8]}], "properties": {"Node name for S&R": "ComfySwitchNode"}, "widgets_values": [false], "title": "Use upsampled prompt? (false = your request as written)"}, {"id": 13, "type": "PH3ImageConditioning", "pos": [0, -420], "size": [430, 220], "flags": {}, "order": 12, "mode": 0, "inputs": [{"name": "clip", "type": "CLIP", "link": 11}, {"name": "vae", "type": "VAE", "link": 12}, {"name": "images.image_1", "type": "IMAGE", "link": null}, {"name": "images.image_2", "type": "IMAGE", "link": null}, {"name": "images.image_3", "type": "IMAGE", "link": null}, {"name": "prompt", "type": "STRING", "link": 8, "widget": {"name": "prompt"}}, {"name": "width", "type": "INT", "link": 9, "widget": {"name": "width"}}, {"name": "height", "type": "INT", "link": 10, "widget": {"name": "height"}}], "outputs": [{"name": "positive", "type": "CONDITIONING", "links": [14]}, {"name": "LATENT", "type": "LATENT", "links": [19]}], "properties": {"Node name for S&R": "PH3ImageConditioning"}, "widgets_values": ["", 0, 0], "title": "P-H3 conditioning (prompt from the switch, size from Resolution)"}, {"id": 14, "type": "ManualSigmas", "pos": [960, -420], "size": [420, 82], "flags": {}, "order": 13, "mode": 0, "inputs": [{"name": "sigmas", "type": "STRING", "link": null, "widget": {"name": "sigmas"}}], "outputs": [{"name": "SIGMAS", "type": "SIGMAS", "links": [18]}], "properties": {"Node name for S&R": "ManualSigmas"}, "widgets_values": ["1.0, 0.984753, 0.967905, 0.951688, 0.925372, 0.881923, 0.810083, 0.528718, 0.0"], "title": "Pruna's 8-step schedule"}, {"id": 15, "type": "KSamplerSelect", "pos": [960, -300], "size": [300, 60], "flags": {}, "order": 14, "mode": 0, "inputs": [{"name": "sampler_name", "type": "COMBO", "link": null, "widget": {"name": "sampler_name"}}], "outputs": [{"name": "SAMPLER", "type": "SAMPLER", "links": [17]}], "properties": {"Node name for S&R": "KSamplerSelect"}, "widgets_values": ["er_sde"], "title": "Sampler"}, {"id": 16, "type": "RandomNoise", "pos": [960, -200], "size": [300, 82], "flags": {}, "order": 15, "mode": 0, "inputs": [{"name": "noise_seed", "type": "INT", "link": null, "widget": {"name": "noise_seed"}}], "outputs": [{"name": "NOISE", "type": "NOISE", "links": [15]}], "properties": {"Node name for S&R": "RandomNoise"}, "widgets_values": [12345, "randomize"], "title": "Seed"}, {"id": 17, "type": "BasicGuider", "pos": [960, -80], "size": [300, 46], "flags": {}, "order": 16, "mode": 0, "inputs": [{"name": "model", "type": "MODEL", "link": 13}, {"name": "conditioning", "type": "CONDITIONING", "link": 14}], "outputs": [{"name": "GUIDER", "type": "GUIDER", "links": [16]}], "properties": {"Node name for S&R": "BasicGuider"}, "widgets_values": [], "title": "Guider (no CFG)"}, {"id": 18, "type": "SamplerCustomAdvanced", "pos": [1320, -420], "size": [300, 200], "flags": {}, "order": 17, "mode": 0, "inputs": [{"name": "noise", "type": "NOISE", "link": 15}, {"name": "guider", "type": "GUIDER", "link": 16}, {"name": "sampler", "type": "SAMPLER", "link": 17}, {"name": "sigmas", "type": "SIGMAS", "link": 18}, {"name": "latent_image", "type": "LATENT", "link": 19}], "outputs": [{"name": "LATENT", "type": "LATENT", "links": [20]}], "properties": {"Node name for S&R": "SamplerCustomAdvanced"}, "widgets_values": [], "title": "Sample (8 steps)"}, {"id": 19, "type": "VAEDecode", "pos": [1680, -420], "size": [300, 46], "flags": {}, "order": 18, "mode": 0, "inputs": [{"name": "samples", "type": "LATENT", "link": 20}, {"name": "vae", "type": "VAE", "link": 21}], "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [22]}], "properties": {"Node name for S&R": "VAEDecode"}, "widgets_values": [], "title": "Decode"}, {"id": 20, "type": "SaveImage", "pos": [1680, -320], "size": [400, 400], "flags": {}, "order": 19, "mode": 0, "inputs": [{"name": "images", "type": "IMAGE", "link": 22}, {"name": "filename_prefix", "type": "STRING", "link": null, "widget": {"name": "filename_prefix"}}], "outputs": [], "properties": {"Node name for S&R": "SaveImage"}, "widgets_values": ["Gmanski/h3_image_ph3"], "title": "Save"}], "links": [[1, 2, 0, 3, 0, "MODEL"], [2, 3, 0, 4, 0, "MODEL"], [3, 7, 0, 10, 0, "STRING"], [4, 9, 0, 11, 0, "CLIP"], [5, 10, 0, 11, 3, "STRING"], [6, 7, 0, 12, 0, "STRING"], [7, 11, 0, 12, 1, "STRING"], [8, 12, 0, 13, 5, "STRING"], [9, 8, 0, 13, 6, "INT"], [10, 8, 1, 13, 7, "INT"], [11, 5, 0, 13, 0, "CLIP"], [12, 6, 0, 13, 1, "VAE"], [13, 4, 0, 17, 0, "MODEL"], [14, 13, 0, 17, 1, "CONDITIONING"], [15, 16, 0, 18, 0, "NOISE"], [16, 17, 0, 18, 1, "GUIDER"], [17, 15, 0, 18, 2, "SAMPLER"], [18, 14, 0, 18, 3, "SIGMAS"], [19, 13, 1, 18, 4, "LATENT"], [20, 18, 0, 19, 0, "LATENT"], [21, 6, 0, 19, 1, "VAE"], [22, 19, 0, 20, 0, "IMAGE"]], "groups": [], "config": {}, "extra": {"ds": {"scale": 0.62, "offset": [1480, 420]}, "gmanski_template": "h3-image-ph3", "generator": "scripts/build_gmanski_h3_image_ph3_workflow.py", "source": "https://gmanski.com/workflows/h3-image-ph3"}, "version": 0.4}