{
  "id": "a7c3e1f2-5b4d-4f6a-9c21-3d8e7b1a0f55",
  "revision": 0,
  "last_node_id": 39,
  "last_link_id": 22,
  "nodes": [
    {
      "id": 1,
      "type": "UNETLoader",
      "pos": [
        20,
        235
      ],
      "size": [
        580,
        110
      ],
      "flags": {},
      "order": 0,
      "mode": 0,
      "inputs": [],
      "outputs": [
        {
          "name": "MODEL",
          "type": "MODEL",
          "links": [
            10
          ]
        }
      ],
      "title": "UNET / Main Image Model",
      "properties": {
        "cnr_id": "comfy-core",
        "ver": "0.42.5",
        "Node name for S&R": "UNETLoader",
        "models": [
          {
            "name": "minimax_h3_image_pruned_int8_convrot.safetensors",
            "url": "https://huggingface.co/Comfy-Org/MiniMax-H3-Image/resolve/main/diffusion_models/minimax_h3_image_pruned_int8_convrot.safetensors",
            "directory": "diffusion_models"
          }
        ]
      },
      "widgets_values": [
        "minimax_h3_image_pruned_int8_convrot.safetensors",
        "default"
      ],
      "widgets_values_named": {
        "unet_name": "minimax_h3_image_pruned_int8_convrot.safetensors",
        "weight_dtype": "default"
      }
    },
    {
      "id": 2,
      "type": "CLIPLoader",
      "pos": [
        20,
        390
      ],
      "size": [
        580,
        140
      ],
      "flags": {},
      "order": 1,
      "mode": 0,
      "inputs": [],
      "outputs": [
        {
          "name": "CLIP",
          "type": "CLIP",
          "links": [
            1
          ]
        }
      ],
      "title": "Text Encoder (reads your prompt)",
      "properties": {
        "cnr_id": "comfy-core",
        "ver": "0.42.5",
        "Node name for S&R": "CLIPLoader",
        "models": [
          {
            "name": "qwen3vl_32b_minimax_h3_int8_convrot.safetensors",
            "url": "https://huggingface.co/Comfy-Org/MiniMax-H3/resolve/main/text_encoders/qwen3vl_32b_minimax_h3_int8_convrot.safetensors",
            "directory": "text_encoders"
          }
        ]
      },
      "widgets_values": [
        "qwen3vl_32b_minimax_h3_int8_convrot.safetensors",
        "minimax",
        "default"
      ],
      "widgets_values_named": {
        "clip_name": "qwen3vl_32b_minimax_h3_int8_convrot.safetensors",
        "type": "minimax",
        "device": "default"
      }
    },
    {
      "id": 3,
      "type": "VAELoader",
      "pos": [
        20,
        575
      ],
      "size": [
        580,
        80
      ],
      "flags": {},
      "order": 2,
      "mode": 0,
      "inputs": [],
      "outputs": [
        {
          "name": "VAE",
          "type": "VAE",
          "links": [
            2,
            12
          ]
        }
      ],
      "title": "VAE (turns latent into pixels)",
      "properties": {
        "cnr_id": "comfy-core",
        "ver": "0.42.5",
        "Node name for S&R": "VAELoader",
        "models": [
          {
            "name": "minimax_h3_image_vae_fp16.safetensors",
            "url": "https://huggingface.co/Comfy-Org/MiniMax-H3-Image/resolve/main/vae/minimax_h3_image_vae_fp16.safetensors",
            "directory": "vae"
          }
        ]
      },
      "widgets_values": [
        "minimax_h3_image_vae_fp16.safetensors"
      ],
      "widgets_values_named": {
        "vae_name": "minimax_h3_image_vae_fp16.safetensors"
      }
    },
    {
      "id": 4,
      "type": "ResolutionSelector",
      "pos": [
        20,
        1035
      ],
      "size": [
        580,
        180
      ],
      "flags": {},
      "order": 3,
      "mode": 0,
      "showAdvanced": true,
      "inputs": [],
      "outputs": [
        {
          "name": "width",
          "type": "INT",
          "links": [
            3
          ]
        },
        {
          "name": "height",
          "type": "INT",
          "links": [
            4
          ]
        }
      ],
      "title": "Image Size (pick ratio + megapixels)",
      "properties": {
        "cnr_id": "comfy-core",
        "ver": "0.42.5",
        "Node name for S&R": "ResolutionSelector"
      },
      "widgets_values": [
        "16:9 (Widescreen)",
        16,
        32
      ],
      "widgets_values_named": {
        "aspect_ratio": "16:9 (Widescreen)",
        "megapixels": 16,
        "multiple": 32
      },
      "color": "#232",
      "bgcolor": "#353"
    },
    {
      "id": 5,
      "type": "PrimitiveStringMultiline",
      "pos": [
        720,
        245
      ],
      "size": [
        600,
        260
      ],
      "flags": {},
      "order": 4,
      "mode": 0,
      "inputs": [],
      "outputs": [
        {
          "name": "STRING",
          "type": "STRING",
          "links": [
            14,
            21
          ]
        }
      ],
      "title": "Your Prompt (type here)",
      "properties": {
        "cnr_id": "comfy-core",
        "ver": "0.42.5",
        "Node name for S&R": "PrimitiveStringMultiline"
      },
      "widgets_values": [
        "A realistic, ultra-detailed editorial fashion photograph shot in a completely pitch-black, empty studio room, captured from a low side-rear three-quarter angle with a full-frame camera and an 85mm f/1.4 lens on a tripod, tack-sharp focus on the model with a soft falloff into total darkness. The room has no lamps, no windows, no ambient light, no fill light and no white light of any kind: the prism is the only light source in the entire scene. A clear, polished glass triangular prism stands on a low, matte black square pedestal on the floor at the far left side of the frame, behind the model and angled toward her back. The prism glows softly from within, as if it were the source of all the light in the room, and a vivid, sharp rainbow spectrum pours out of its face in a wide, glowing cone, with clean, separate bands of red, orange, yellow, green, blue, indigo and violet sweeping to the right through fine haze and floating dust like thin luminous ribbons. Each band shines brightest near the prism and slowly spreads and softens as it travels. These rainbow rays are the only illumination, and they fall across the model's back, shoulders, raised arm, hair, legs and the basketball in distinct stripes of red, orange, yellow, green, blue and violet light, wrap softly around her turned face, and reflect in long, soft colored streaks and mirror-like reflections on the glossy dark concrete floor. Everything outside the rays falls into deep, rich black shadow. A soft prismatic glow gathers around the prism, with tiny sparkles on its polished edges. A young adult woman in her mid-twenties sits low on the floor in the center-right of the frame in a natural, athletic and graceful front-and-back split, seen in side view from behind her right side: her body faces the right side of the frame, and the camera sees her right side and most of her back. Her hips are squared and low, nearly touching the floor, her legs are stretched in one long straight line along the concrete across the whole width of the frame, with her front leg extending to the right, straight, with the heel on the floor and the boot toe pointing up, and her back leg extending to the left, straight, with the knee facing the floor and the top of her foot resting flat on the ground. Both legs are fully visible, anatomically correct, with one knee, one ankle and one foot each, in a believable, comfortable stretch that is not exaggerated or impossible. Her upright torso leans very slightly back with her chest lifted and her spine in a gentle arc, and her shoulder blades and the line of her back are clearly visible. Her right arm is stretched straight up above her head, holding the worn basketball high at the top of the frame with her fingers spread wide around it, while her left hand reaches down and rests flat on the floor in front of her front thigh for support. She turns her head over her right shoulder to look back into the camera, her chin raised, with a fierce, focused, confident expression and her lips slightly parted, so that her face shows in a clear three-quarter profile with both eyes looking straight into the lens. Her long dark hair falls down her back and over one shoulder, with a few strands lifted by a light breeze and catching tiny spots of colored light, and a thin low layer of haze drifts across the floor around her legs. She has natural skin with visible fine pores, light freckles on her cheek and nose, soft highlights on her cheekbone, defined brows, subtle smoky eye makeup and a soft nude-brown lip, and the colored light wraps over her bare shoulders, back and stretched thighs in soft, realistic gradients. She wears a deliberately rugged, distressed streetwear look that is not athletic: a cropped, washed-black cotton tank top seen from behind and the side, with a raw-cut hem, frayed edges, torn slashes across the shoulder blades, and a cutout across the lower back held with small silver safety pins, and a pair of very short high-waisted denim shorts, heavily faded, with ripped holes across the back of the thighs, frayed white threads at the hems, visible worn back pockets, belt loops and a small cutout at the hip, with a worn leather belt at the waist and a tarnished silver buckle. She wears a thin chain necklace, chunky silver rings, scuffed black leather combat boots with loose laces and slouchy rolled-down socks, and the colored light shows the texture of the torn denim and frayed cotton in sharp detail. The basketball is a worn, scuffed, vintage orange-brown leather ball with faded black seams and no logos or brand marks, its pebbled surface covered in dust and scratches, with small spectral highlights glinting across it where the rainbow rays touch it. The composition is a wide, low shot: the glowing prism on its pedestal sits in the left third, the rainbow fan sweeps across the dark, hazy air and over her back, and the model's whole body, both legs, both boots and the raised ball are fully inside the frame. The camera sits very low, close to floor level, which makes the split look long and powerful and shows the glossy floor reflections. Shallow depth of field, creamy black background, and fine film grain. The color palette is deep black and charcoal with saturated, clean rainbow colors, warm orange from the ball and natural skin tones in the colored light. The mood is strong, mysterious, artistic, edgy and cinematic, like a high-end magazine sports-fashion campaign. High dynamic range, sharp focus on her face and the ball, realistic fabric texture, true-to-life photography, lit only by the prism's rainbow light, no white light, no other light sources, no text, no logos, no watermark."
      ],
      "widgets_values_named": {
        "value": "A realistic, ultra-detailed editorial fashion photograph shot in a completely pitch-black, empty studio room, captured from a low side-rear three-quarter angle with a full-frame camera and an 85mm f/1.4 lens on a tripod, tack-sharp focus on the model with a soft falloff into total darkness. The room has no lamps, no windows, no ambient light, no fill light and no white light of any kind: the prism is the only light source in the entire scene. A clear, polished glass triangular prism stands on a low, matte black square pedestal on the floor at the far left side of the frame, behind the model and angled toward her back. The prism glows softly from within, as if it were the source of all the light in the room, and a vivid, sharp rainbow spectrum pours out of its face in a wide, glowing cone, with clean, separate bands of red, orange, yellow, green, blue, indigo and violet sweeping to the right through fine haze and floating dust like thin luminous ribbons. Each band shines brightest near the prism and slowly spreads and softens as it travels. These rainbow rays are the only illumination, and they fall across the model's back, shoulders, raised arm, hair, legs and the basketball in distinct stripes of red, orange, yellow, green, blue and violet light, wrap softly around her turned face, and reflect in long, soft colored streaks and mirror-like reflections on the glossy dark concrete floor. Everything outside the rays falls into deep, rich black shadow. A soft prismatic glow gathers around the prism, with tiny sparkles on its polished edges. A young adult woman in her mid-twenties sits low on the floor in the center-right of the frame in a natural, athletic and graceful front-and-back split, seen in side view from behind her right side: her body faces the right side of the frame, and the camera sees her right side and most of her back. Her hips are squared and low, nearly touching the floor, her legs are stretched in one long straight line along the concrete across the whole width of the frame, with her front leg extending to the right, straight, with the heel on the floor and the boot toe pointing up, and her back leg extending to the left, straight, with the knee facing the floor and the top of her foot resting flat on the ground. Both legs are fully visible, anatomically correct, with one knee, one ankle and one foot each, in a believable, comfortable stretch that is not exaggerated or impossible. Her upright torso leans very slightly back with her chest lifted and her spine in a gentle arc, and her shoulder blades and the line of her back are clearly visible. Her right arm is stretched straight up above her head, holding the worn basketball high at the top of the frame with her fingers spread wide around it, while her left hand reaches down and rests flat on the floor in front of her front thigh for support. She turns her head over her right shoulder to look back into the camera, her chin raised, with a fierce, focused, confident expression and her lips slightly parted, so that her face shows in a clear three-quarter profile with both eyes looking straight into the lens. Her long dark hair falls down her back and over one shoulder, with a few strands lifted by a light breeze and catching tiny spots of colored light, and a thin low layer of haze drifts across the floor around her legs. She has natural skin with visible fine pores, light freckles on her cheek and nose, soft highlights on her cheekbone, defined brows, subtle smoky eye makeup and a soft nude-brown lip, and the colored light wraps over her bare shoulders, back and stretched thighs in soft, realistic gradients. She wears a deliberately rugged, distressed streetwear look that is not athletic: a cropped, washed-black cotton tank top seen from behind and the side, with a raw-cut hem, frayed edges, torn slashes across the shoulder blades, and a cutout across the lower back held with small silver safety pins, and a pair of very short high-waisted denim shorts, heavily faded, with ripped holes across the back of the thighs, frayed white threads at the hems, visible worn back pockets, belt loops and a small cutout at the hip, with a worn leather belt at the waist and a tarnished silver buckle. She wears a thin chain necklace, chunky silver rings, scuffed black leather combat boots with loose laces and slouchy rolled-down socks, and the colored light shows the texture of the torn denim and frayed cotton in sharp detail. The basketball is a worn, scuffed, vintage orange-brown leather ball with faded black seams and no logos or brand marks, its pebbled surface covered in dust and scratches, with small spectral highlights glinting across it where the rainbow rays touch it. The composition is a wide, low shot: the glowing prism on its pedestal sits in the left third, the rainbow fan sweeps across the dark, hazy air and over her back, and the model's whole body, both legs, both boots and the raised ball are fully inside the frame. The camera sits very low, close to floor level, which makes the split look long and powerful and shows the glossy floor reflections. Shallow depth of field, creamy black background, and fine film grain. The color palette is deep black and charcoal with saturated, clean rainbow colors, warm orange from the ball and natural skin tones in the colored light. The mood is strong, mysterious, artistic, edgy and cinematic, like a high-end magazine sports-fashion campaign. High dynamic range, sharp focus on her face and the ball, realistic fabric texture, true-to-life photography, lit only by the prism's rainbow light, no white light, no other light sources, no text, no logos, no watermark."
      },
      "color": "#232",
      "bgcolor": "#353"
    },
    {
      "id": 6,
      "type": "CLIPLoader",
      "pos": [
        720,
        885
      ],
      "size": [
        600,
        140
      ],
      "flags": {},
      "order": 5,
      "mode": 0,
      "showAdvanced": false,
      "inputs": [],
      "outputs": [
        {
          "name": "CLIP",
          "type": "CLIP",
          "links": [
            16
          ]
        }
      ],
      "title": "Prompt Enhancer Model (small Qwen)",
      "properties": {
        "cnr_id": "comfy-core",
        "ver": "0.42.5",
        "Node name for S&R": "CLIPLoader",
        "models": [
          {
            "name": "qwen3.5_9b_w4a8_gptq.safetensors",
            "url": "https://huggingface.co/Comfy-Org/Qwen3.5/resolve/main/text_encoders/qwen3.5_9b_w4a8_gptq.safetensors",
            "directory": "text_encoders"
          }
        ]
      },
      "widgets_values": [
        "qwen3.5_9b_w4a8_gptq.safetensors",
        "minimax",
        "default"
      ],
      "widgets_values_named": {
        "clip_name": "qwen3.5_9b_w4a8_gptq.safetensors",
        "type": "minimax",
        "device": "default"
      }
    },
    {
      "id": 7,
      "type": "PrimitiveStringMultiline",
      "pos": [
        720,
        1070
      ],
      "size": [
        600,
        170
      ],
      "flags": {},
      "order": 6,
      "mode": 0,
      "inputs": [],
      "outputs": [
        {
          "name": "STRING",
          "type": "STRING",
          "links": [
            17
          ]
        }
      ],
      "title": "Enhancer: System Prompt (don't edit)",
      "properties": {
        "cnr_id": "comfy-core",
        "ver": "0.42.5",
        "Node name for S&R": "PrimitiveStringMultiline"
      },
      "widgets_values": [
        "Reason in the thinking section first. The visible final content must be exactly one JSON object with exactly two keys: expanded_caption and aspect_ratio. Every ASCII double quotation mark used as caption content inside expanded_caption must be serialized as the JSON escape sequence \\\". Do not output text outside that object."
      ],
      "widgets_values_named": {
        "value": "Reason in the thinking section first. The visible final content must be exactly one JSON object with exactly two keys: expanded_caption and aspect_ratio. Every ASCII double quotation mark used as caption content inside expanded_caption must be serialized as the JSON escape sequence \\\". Do not output text outside that object."
      },
      "color": "#333",
      "bgcolor": "#555"
    },
    {
      "id": 8,
      "type": "PrimitiveStringMultiline",
      "pos": [
        720,
        1285
      ],
      "size": [
        600,
        360
      ],
      "flags": {},
      "order": 7,
      "mode": 0,
      "inputs": [],
      "outputs": [
        {
          "name": "STRING",
          "type": "STRING",
          "links": [
            15
          ]
        }
      ],
      "title": "Enhancer: Instruction Template (don't edit)",
      "properties": {
        "cnr_id": "comfy-core",
        "ver": "0.42.5",
        "Node name for S&R": "PrimitiveStringMultiline"
      },
      "widgets_values": [
        "You are a caption-expansion and canvas-selection model for still-image\ntext-to-image generation. Rewrite input_text into a natural English detailed\ncaption and choose one aspect ratio for the requested final image. After private\nreasoning, serialize the complete caption and aspect ratio together as the one\nrequired two-key JSON object; no visible analysis, markdown, or self-talk. The\ncaption may be long when the requested image is a complex information or design artifact.\n\nRole: act like an expert visual designer and technical illustrator, not a word\nexpander. Preserve every hard fact from the input, then complete the image with\nvisible, inspectable content. The goal is not more words; the goal is that a\nviewer can inspect each important part of the image and find meaningful subjects,\nlabels, relationships, materials, data, and hierarchy.\n\nFirst choose which kind of image this is:\n- A depicted scene or photograph: prioritize subject identity, pose, contact,\nscale, environment, lighting, lens/medium, and physical plausibility.\n- A communication artifact such as poster, character card, product-design board,\nwebpage, UI, chart, dashboard, scientific/medical infographic, technical diagram,\nprinted page, packaging, cover, or multi-panel composite: build a finished\ninformation architecture, not just a scene containing the requested objects.\n\nAspect-ratio decision policy:\nChoose exactly one of these allowed ratios: 1:1, 5:4, 4:3, 3:2, 16:9, 21:9,\n4:5, 3:4, 2:3, or 9:16. Decide in the following order; earlier evidence\noverrides later evidence.\n\n1. Explicit final canvas\n- Preserve an explicit final-output ratio. Map explicit output pixel dimensions\n  by width divided by height to the closest allowed ratio.\n- Do not confuse the final canvas with a source image, reference asset, object,\n  inset, collage cell, or embedded screen.\n\n2. Requested deliverable\n- Use an explicitly requested medium or display surface. Treat each carousel\n  page, card, or slide as its own canvas unless a contact sheet, storyboard,\n  continuous strip, or combined overview is explicitly requested.\n- Prefer square or near-square for individual social posts, icons, avatars,\n  compact logos, or compact product assets; vertical for covers, posters, phone\n  stories, or mobile wallpapers; horizontal for slides, headers, banners, or\n  explicitly wide displays. Do not invent a platform or deliverable.\n\n3. Primary composition\n- The main subject, action, or information structure outweighs optional context.\n  A generic room, park, forest, sky, or cinematic background must not turn a\n  focused subject horizontal.\n- Prefer vertical for dominant upright or full-body subjects, tall structures,\n  stacked information, rising or falling motion, upward reach, or vertical\n  negative space. Prefer horizontal for genuinely side-by-side structure,\n  lateral action, broadly distributed subjects, a requested broad environment,\n  horizontal sequences, or lateral negative space. Prefer square or near-square\n  for compact, centered, radial, symmetrical, or directionally neutral content.\n\n4. Minimal completion and ratio strength\n- If the input is underspecified, form the smallest natural, content-preserving\n  composition needed to choose a ratio. Lock it before adding detailed scenery\n  or styling; do not invent a panorama, broad environment, or multi-panel layout\n  to justify it, and do not revise it because later expansion adds detail.\n- Words such as \"portrait,\" \"cinematic,\" \"video,\" \"UE5,\" \"Weta,\"\n  \"photorealistic,\" \"dramatic,\" and \"wide-angle\" do not determine orientation.\n- Use 5:4 or 4:5 for mild direction, 4:3 or 3:4 for moderate direction, and\n  3:2 or 2:3 for clear photographic direction. Reserve 16:9 and 9:16 for\n  strongly directional or mobile-first compositions, and 21:9 for genuine\n  banners, panoramas, timelines, or explicitly continuous wide layouts. When\n  evidence remains weak, prefer 1:1 or a moderate ratio.\n\nChoose and lock the ratio from the requested canvas, deliverable, and smallest\nnatural primary composition before enriching the caption. Later details added by\nthe caption-expansion rules must not retroactively change the ratio.\n\nUniversal hard rules:\n1. Preserve exact requested text, named entities, counts, formulas, data values,\ncomponent names, style, medium, orientation, and left/right/top/bottom order.\n2. Required content must be visible, not implied. If text or a label is requested,\nplace it on the surface and describe where it sits.\n3. For active bodies, solve scene geometry before pose detail. Preserve any\ndomain-native layout first: a sport court, game grid, path, lane, stair, room,\nor interface should keep its recognizable structure unless the input changes\nit. Do not move the target or redesign the ground merely to obtain a preferred\nbody view. Choose one camera only after the scene layout is fixed, then place\nthe source and target in that camera's image frame using screen-left/screen-\nright, upper/lower image position, and nearer/farther depth. Silently trace the\nsource-to-target vector in this fixed view. Derive the actor's camera-relative\norientation from that vector and state it explicitly as front-facing, back-\nfacing, left-facing profile, right-facing profile, front three-quarter, or rear\nthree-quarter, together with a frame-absolute motion direction such as leftward,\nrightward, toward the camera/foreground, or away from the camera/deeper into the\nscene. Never use only a target-relative phrase such as \"facing square 2\" or\n\"looking toward the door\". The mapping follows the chosen geometry rather than\na fixed default: a target at screen-right implies a right-facing or rightward\nbody; a target at screen-left implies a left-facing or leftward body; a target\nfarther into the scene implies a back-facing or rear-three-quarter body moving\naway; and a target nearer the camera implies a front-facing or front-three-\nquarter body moving toward the viewer. These are coordinate mappings, not\ninstructions to relocate every target. Verify the visible body surfaces before\nwriting: movement away must show the back, back of the head, or rear shoulders\nand must not show a frontal chest or full face; movement toward the camera must\nshow the face and chest; lateral movement must read as the corresponding side\nprofile. If the stated source/target positions and visible body surfaces imply\nopposite directions, revise the body orientation instead of changing the scene\nlayout. Keep gaze, chest, torso lean, leading limb, support foot or hand, and\nmotion consistent with the derived orientation and with one frozen phase. A\nlimb cannot be simultaneously ahead and behind, planted and airborne, or\nassigned to two contacts. For actions on marked ground, use an elevated high-angle oblique or near-\noverhead three-quarter camera, never a low ground-level view. Center the camera on the complete ground map and make it the dominant, fully\ncontained region of the image: show its outer boundary, every cell or segment,\nthe source, target, and full travel path. After deriving the source-to-target\nvector, place the actor's torso outside the map on the ray extending backward\nfrom the source in the direction opposite the target. Do not move the actor to\nan arbitrary side margin if that would change the apparent travel direction.\nOnly the support foot may enter the near edge of the source cell, leaving its\nlabel visible; place the leading foot in the source-target direction near their\ngap. Keep torso, limbs, hair, clothing, and cast shadow outside every later cell\nand label. Widen or elevate the camera framing rather than rotating the actor or\nrelocating the target. This placement must preserve the previously derived front,\nback, left, right, or three-quarter camera-relative orientation. Preserve conventional topology and perspective, keep every label upright and\nlarge enough to read, and show each requested label exactly once in order. If\nthe input does not specify label colors or materials, use one neutral, uniform,\nhigh-contrast marking style for every label; unspecified styling is not permission\nto assign a different color to each item. Keep the actor's hands empty unless the\ninput names a held object. Do not add loose markers, stones, chalk pieces, buckets,\nropes, toys, shadows, limbs, or cropping over any label or grid line.\nPreserve a plausible silhouette and avoid broken foreshortening, hidden critical\njoints, mirrored layouts, alternative camera choices, and blended before-and-\nafter poses. For emotion-driven photo or video frames, keep facial anatomy\nnatural and consistent with the selected viewpoint.\n4. For hands, grips, linked fingers, hugs, carrying, pointing, tools, weapons, or\nbody-object contact, choose the framing that makes the interaction readable. Use\na medium shot or waist-up view when hand/facial detail is central; do not force a\nfull-body view if it makes the required contact or expression tiny. State which\nhand or limb touches what, how the fingers or support points align, and keep\nnonessential limbs simple.\n5. Use world knowledge as visible evidence only: cultural motifs, scientific\nstructures, medical anatomy, interface conventions, manufacturing details,\nprofessional tools, materials, units, labels, measurement marks, clothing, props,\narchitecture, or environment. Do not add lore that cannot be seen.\n6. Respect requested subject count. If the prompt names event types, two\ncharacters, or one primary subject, keep the number of primary figures to that\nminimum unless extra people are requested. Background crowds, spectators, or\nstaff should read as small silhouettes or graphic texture, not extra competing\nmain subjects.\n\nFor communication artifacts, silently make a content map before writing. Divide\nthe canvas in reading order into major slots: header/title, subtitle/tagline,\nhero visual, left panel, right sidebar, card row, icon group, diagram body,\nprocess path, chart area, formula box, exploded view, inset, specification area,\nswatch strip, instruction cards, footer, screen region, or background context.\nEach major slot should normally include at least three of these: position, visible\ntext or label, concrete visual subject, function or relationship, material/data\ntreatment, and hierarchy/style treatment. Do not use vague slot fillers such as\n\"icons,\" \"details,\" \"information,\" \"supporting graphics,\" or \"annotations\"\nwithout saying what they show.\n\nMake the artifact feel complete. If the prompt asks for a card, board, poster,\ninfographic, webpage, or product sheet, add a few plausible supporting elements\nthat belong to that artifact when they help completeness: subtitle, role/profile,\nabout note, quote, ratings, legend, color key, units, variable definitions,\ndimension labels, back/side view, material stack, use-case icons, footer tips,\nQR/logo placeholder, warning, or compact specification table. Keep these as short\nreadable on-image labels or one-line captions, not prose blocks.\n\nCorrespondence and legibility rules:\n- Multi-view outputs such as floor plan plus interior render, blueprint plus\nproduct render, map plus scene, or before/after panels need a shared inventory\nand coordinate frame. Reuse the same walls, openings, furniture/components,\nmaterials, labels, and relative positions in every panel. Name the render camera\norigin or viewing direction from the plan when useful, and do not invent major\nobjects that are absent from the paired view.\n- Dense flowcharts, medical diagrams, route maps, and process infographics should\nbe simplified into a few large numbered nodes, separated lanes, or a clean\nU-shaped loop. Arrows must be thick, directional, non-crossing, and attached to\nnamed start/end nodes. Prefer legible topology and large labels over many small\nleader lines, tiny arrows, or decorative clutter.\n\nContract affordances:\n- Scientific/medical/educational infographic: include named section headers;\nmain diagram with attached component labels; arrows with correct direction and\nstart/end nodes; legends or color keys; short functional captions; key-point\ncards with icon plus meaning; definitions and units; formula box with variable\ndefinitions; and process/system context such as body, lungs, vessels, lab setup,\nmolecule, device, or environment when implied.\n- Charts, graphs, dashboards, and data screens: include chart title when useful,\naxis labels, tick labels or scale endpoints, units, legend entries, colors, data\nmarks, selected states, and values or qualitative endpoints placed consistently\nwith the visual geometry. Even if the chart appears on a photographed stage\nscreen, the screen content still needs readable chart semantics.\n- Product/cultural design board: include title/subtitle/tagline; inspiration or\nuse-case cues; large hero render; motif-specific details; front/back/side or\nscale insets when useful; exploded layers; manufacturable joints, pins, clasps,\nfasteners, seams, ribs, holes, tolerances, or contact points; material stack;\nfinish behavior; dimension labels; palette swatches; specification and craft\nicons.\n- Character card/mascot sheet: include identity/title; name tag; role/profile or\nabout area; full-body readable proportions; attribute rows with icon, label, and\nbrief meaning; props tied to the role; material swatches or callouts; optional\nrating, quote, badge, instruction row, or contextual background so it reads as a\ndesigned card/poster rather than a plain character portrait.\n- UI/web/dashboard/data graphic: include real page/screen sections, navigation,\ncontrols, fields, buttons, cards, selected states, labels, values, icons, and\nintentional empty states only when requested.\n- Public poster/cover/packaging/display graphic: include typography hierarchy,\nheadline/subtitle/supporting copy, image slots, instruction cards, icons, badges,\nborders/rules, QR/barcode/logo placeholders if requested, palette, and intentional\nnegative space. When a poster features sports, products, or people, use one clear\nhero subject per requested category unless the prompt asks for a group.\n\nStyle comes after content. Choose clean isolation for icons/logos/cutouts and\ntechnical assets; layout-rich pages or boards for design communication; believable\nenvironment, lighting, lens, and depth for photographs. Replace abstract mood and\ngeneric adjectives with specific visible cues.\n\nFinal self-check: every input requirement is visible; every major slot has real\ncontent; required text/formulas/values are exact; labels attach to correct\nstructures; arrows and data geometry are coherent; body orientation is explicit relative to the camera and agrees with the preserved scene layout, source, target, depth, gaze, support, and motion; paired panels correspond; subject count has not grown by accident;\nworld knowledge appears as visible evidence; no important surface is blank.\n\nFinal output contract:\nUse the private thinking section to plan the caption and ratio. After thinking,\nthe visible final answer must be exactly one JSON object with exactly these two\nkeys:\n\n{{\"expanded_caption\":\"ONE_DETAILED_ENGLISH_CAPTION\",\"aspect_ratio\":\"ALLOWED_RATIO\"}}\n\nFor example, serialize a caption containing the title \"你好\" as:\n{{\"expanded_caption\":\"The title reads \\\"你好\\\".\",\"aspect_ratio\":\"16:9\"}}\n\nReplace ONE_DETAILED_ENGLISH_CAPTION with one fluent English caption paragraph\nthat follows every rule above, and ALLOWED_RATIO with exactly one allowed ratio\nstring. Keep expanded_caption as one valid JSON string. Every ASCII double quotation mark used as caption content inside expanded_caption must be serialized as the JSON escape sequence \\\". Escape all other characters as valid JSON requires. Do not add or omit keys. Do not put thinking or think tags inside\nthe object. Do not output a Markdown fence, alternatives, or any text outside\nthe final JSON object.\n\ninput_text: {input text}\noutput_text:\n"
      ],
      "widgets_values_named": {
        "value": "You are a caption-expansion and canvas-selection model for still-image\ntext-to-image generation. Rewrite input_text into a natural English detailed\ncaption and choose one aspect ratio for the requested final image. After private\nreasoning, serialize the complete caption and aspect ratio together as the one\nrequired two-key JSON object; no visible analysis, markdown, or self-talk. The\ncaption may be long when the requested image is a complex information or design artifact.\n\nRole: act like an expert visual designer and technical illustrator, not a word\nexpander. Preserve every hard fact from the input, then complete the image with\nvisible, inspectable content. The goal is not more words; the goal is that a\nviewer can inspect each important part of the image and find meaningful subjects,\nlabels, relationships, materials, data, and hierarchy.\n\nFirst choose which kind of image this is:\n- A depicted scene or photograph: prioritize subject identity, pose, contact,\nscale, environment, lighting, lens/medium, and physical plausibility.\n- A communication artifact such as poster, character card, product-design board,\nwebpage, UI, chart, dashboard, scientific/medical infographic, technical diagram,\nprinted page, packaging, cover, or multi-panel composite: build a finished\ninformation architecture, not just a scene containing the requested objects.\n\nAspect-ratio decision policy:\nChoose exactly one of these allowed ratios: 1:1, 5:4, 4:3, 3:2, 16:9, 21:9,\n4:5, 3:4, 2:3, or 9:16. Decide in the following order; earlier evidence\noverrides later evidence.\n\n1. Explicit final canvas\n- Preserve an explicit final-output ratio. Map explicit output pixel dimensions\n  by width divided by height to the closest allowed ratio.\n- Do not confuse the final canvas with a source image, reference asset, object,\n  inset, collage cell, or embedded screen.\n\n2. Requested deliverable\n- Use an explicitly requested medium or display surface. Treat each carousel\n  page, card, or slide as its own canvas unless a contact sheet, storyboard,\n  continuous strip, or combined overview is explicitly requested.\n- Prefer square or near-square for individual social posts, icons, avatars,\n  compact logos, or compact product assets; vertical for covers, posters, phone\n  stories, or mobile wallpapers; horizontal for slides, headers, banners, or\n  explicitly wide displays. Do not invent a platform or deliverable.\n\n3. Primary composition\n- The main subject, action, or information structure outweighs optional context.\n  A generic room, park, forest, sky, or cinematic background must not turn a\n  focused subject horizontal.\n- Prefer vertical for dominant upright or full-body subjects, tall structures,\n  stacked information, rising or falling motion, upward reach, or vertical\n  negative space. Prefer horizontal for genuinely side-by-side structure,\n  lateral action, broadly distributed subjects, a requested broad environment,\n  horizontal sequences, or lateral negative space. Prefer square or near-square\n  for compact, centered, radial, symmetrical, or directionally neutral content.\n\n4. Minimal completion and ratio strength\n- If the input is underspecified, form the smallest natural, content-preserving\n  composition needed to choose a ratio. Lock it before adding detailed scenery\n  or styling; do not invent a panorama, broad environment, or multi-panel layout\n  to justify it, and do not revise it because later expansion adds detail.\n- Words such as \"portrait,\" \"cinematic,\" \"video,\" \"UE5,\" \"Weta,\"\n  \"photorealistic,\" \"dramatic,\" and \"wide-angle\" do not determine orientation.\n- Use 5:4 or 4:5 for mild direction, 4:3 or 3:4 for moderate direction, and\n  3:2 or 2:3 for clear photographic direction. Reserve 16:9 and 9:16 for\n  strongly directional or mobile-first compositions, and 21:9 for genuine\n  banners, panoramas, timelines, or explicitly continuous wide layouts. When\n  evidence remains weak, prefer 1:1 or a moderate ratio.\n\nChoose and lock the ratio from the requested canvas, deliverable, and smallest\nnatural primary composition before enriching the caption. Later details added by\nthe caption-expansion rules must not retroactively change the ratio.\n\nUniversal hard rules:\n1. Preserve exact requested text, named entities, counts, formulas, data values,\ncomponent names, style, medium, orientation, and left/right/top/bottom order.\n2. Required content must be visible, not implied. If text or a label is requested,\nplace it on the surface and describe where it sits.\n3. For active bodies, solve scene geometry before pose detail. Preserve any\ndomain-native layout first: a sport court, game grid, path, lane, stair, room,\nor interface should keep its recognizable structure unless the input changes\nit. Do not move the target or redesign the ground merely to obtain a preferred\nbody view. Choose one camera only after the scene layout is fixed, then place\nthe source and target in that camera's image frame using screen-left/screen-\nright, upper/lower image position, and nearer/farther depth. Silently trace the\nsource-to-target vector in this fixed view. Derive the actor's camera-relative\norientation from that vector and state it explicitly as front-facing, back-\nfacing, left-facing profile, right-facing profile, front three-quarter, or rear\nthree-quarter, together with a frame-absolute motion direction such as leftward,\nrightward, toward the camera/foreground, or away from the camera/deeper into the\nscene. Never use only a target-relative phrase such as \"facing square 2\" or\n\"looking toward the door\". The mapping follows the chosen geometry rather than\na fixed default: a target at screen-right implies a right-facing or rightward\nbody; a target at screen-left implies a left-facing or leftward body; a target\nfarther into the scene implies a back-facing or rear-three-quarter body moving\naway; and a target nearer the camera implies a front-facing or front-three-\nquarter body moving toward the viewer. These are coordinate mappings, not\ninstructions to relocate every target. Verify the visible body surfaces before\nwriting: movement away must show the back, back of the head, or rear shoulders\nand must not show a frontal chest or full face; movement toward the camera must\nshow the face and chest; lateral movement must read as the corresponding side\nprofile. If the stated source/target positions and visible body surfaces imply\nopposite directions, revise the body orientation instead of changing the scene\nlayout. Keep gaze, chest, torso lean, leading limb, support foot or hand, and\nmotion consistent with the derived orientation and with one frozen phase. A\nlimb cannot be simultaneously ahead and behind, planted and airborne, or\nassigned to two contacts. For actions on marked ground, use an elevated high-angle oblique or near-\noverhead three-quarter camera, never a low ground-level view. Center the camera on the complete ground map and make it the dominant, fully\ncontained region of the image: show its outer boundary, every cell or segment,\nthe source, target, and full travel path. After deriving the source-to-target\nvector, place the actor's torso outside the map on the ray extending backward\nfrom the source in the direction opposite the target. Do not move the actor to\nan arbitrary side margin if that would change the apparent travel direction.\nOnly the support foot may enter the near edge of the source cell, leaving its\nlabel visible; place the leading foot in the source-target direction near their\ngap. Keep torso, limbs, hair, clothing, and cast shadow outside every later cell\nand label. Widen or elevate the camera framing rather than rotating the actor or\nrelocating the target. This placement must preserve the previously derived front,\nback, left, right, or three-quarter camera-relative orientation. Preserve conventional topology and perspective, keep every label upright and\nlarge enough to read, and show each requested label exactly once in order. If\nthe input does not specify label colors or materials, use one neutral, uniform,\nhigh-contrast marking style for every label; unspecified styling is not permission\nto assign a different color to each item. Keep the actor's hands empty unless the\ninput names a held object. Do not add loose markers, stones, chalk pieces, buckets,\nropes, toys, shadows, limbs, or cropping over any label or grid line.\nPreserve a plausible silhouette and avoid broken foreshortening, hidden critical\njoints, mirrored layouts, alternative camera choices, and blended before-and-\nafter poses. For emotion-driven photo or video frames, keep facial anatomy\nnatural and consistent with the selected viewpoint.\n4. For hands, grips, linked fingers, hugs, carrying, pointing, tools, weapons, or\nbody-object contact, choose the framing that makes the interaction readable. Use\na medium shot or waist-up view when hand/facial detail is central; do not force a\nfull-body view if it makes the required contact or expression tiny. State which\nhand or limb touches what, how the fingers or support points align, and keep\nnonessential limbs simple.\n5. Use world knowledge as visible evidence only: cultural motifs, scientific\nstructures, medical anatomy, interface conventions, manufacturing details,\nprofessional tools, materials, units, labels, measurement marks, clothing, props,\narchitecture, or environment. Do not add lore that cannot be seen.\n6. Respect requested subject count. If the prompt names event types, two\ncharacters, or one primary subject, keep the number of primary figures to that\nminimum unless extra people are requested. Background crowds, spectators, or\nstaff should read as small silhouettes or graphic texture, not extra competing\nmain subjects.\n\nFor communication artifacts, silently make a content map before writing. Divide\nthe canvas in reading order into major slots: header/title, subtitle/tagline,\nhero visual, left panel, right sidebar, card row, icon group, diagram body,\nprocess path, chart area, formula box, exploded view, inset, specification area,\nswatch strip, instruction cards, footer, screen region, or background context.\nEach major slot should normally include at least three of these: position, visible\ntext or label, concrete visual subject, function or relationship, material/data\ntreatment, and hierarchy/style treatment. Do not use vague slot fillers such as\n\"icons,\" \"details,\" \"information,\" \"supporting graphics,\" or \"annotations\"\nwithout saying what they show.\n\nMake the artifact feel complete. If the prompt asks for a card, board, poster,\ninfographic, webpage, or product sheet, add a few plausible supporting elements\nthat belong to that artifact when they help completeness: subtitle, role/profile,\nabout note, quote, ratings, legend, color key, units, variable definitions,\ndimension labels, back/side view, material stack, use-case icons, footer tips,\nQR/logo placeholder, warning, or compact specification table. Keep these as short\nreadable on-image labels or one-line captions, not prose blocks.\n\nCorrespondence and legibility rules:\n- Multi-view outputs such as floor plan plus interior render, blueprint plus\nproduct render, map plus scene, or before/after panels need a shared inventory\nand coordinate frame. Reuse the same walls, openings, furniture/components,\nmaterials, labels, and relative positions in every panel. Name the render camera\norigin or viewing direction from the plan when useful, and do not invent major\nobjects that are absent from the paired view.\n- Dense flowcharts, medical diagrams, route maps, and process infographics should\nbe simplified into a few large numbered nodes, separated lanes, or a clean\nU-shaped loop. Arrows must be thick, directional, non-crossing, and attached to\nnamed start/end nodes. Prefer legible topology and large labels over many small\nleader lines, tiny arrows, or decorative clutter.\n\nContract affordances:\n- Scientific/medical/educational infographic: include named section headers;\nmain diagram with attached component labels; arrows with correct direction and\nstart/end nodes; legends or color keys; short functional captions; key-point\ncards with icon plus meaning; definitions and units; formula box with variable\ndefinitions; and process/system context such as body, lungs, vessels, lab setup,\nmolecule, device, or environment when implied.\n- Charts, graphs, dashboards, and data screens: include chart title when useful,\naxis labels, tick labels or scale endpoints, units, legend entries, colors, data\nmarks, selected states, and values or qualitative endpoints placed consistently\nwith the visual geometry. Even if the chart appears on a photographed stage\nscreen, the screen content still needs readable chart semantics.\n- Product/cultural design board: include title/subtitle/tagline; inspiration or\nuse-case cues; large hero render; motif-specific details; front/back/side or\nscale insets when useful; exploded layers; manufacturable joints, pins, clasps,\nfasteners, seams, ribs, holes, tolerances, or contact points; material stack;\nfinish behavior; dimension labels; palette swatches; specification and craft\nicons.\n- Character card/mascot sheet: include identity/title; name tag; role/profile or\nabout area; full-body readable proportions; attribute rows with icon, label, and\nbrief meaning; props tied to the role; material swatches or callouts; optional\nrating, quote, badge, instruction row, or contextual background so it reads as a\ndesigned card/poster rather than a plain character portrait.\n- UI/web/dashboard/data graphic: include real page/screen sections, navigation,\ncontrols, fields, buttons, cards, selected states, labels, values, icons, and\nintentional empty states only when requested.\n- Public poster/cover/packaging/display graphic: include typography hierarchy,\nheadline/subtitle/supporting copy, image slots, instruction cards, icons, badges,\nborders/rules, QR/barcode/logo placeholders if requested, palette, and intentional\nnegative space. When a poster features sports, products, or people, use one clear\nhero subject per requested category unless the prompt asks for a group.\n\nStyle comes after content. Choose clean isolation for icons/logos/cutouts and\ntechnical assets; layout-rich pages or boards for design communication; believable\nenvironment, lighting, lens, and depth for photographs. Replace abstract mood and\ngeneric adjectives with specific visible cues.\n\nFinal self-check: every input requirement is visible; every major slot has real\ncontent; required text/formulas/values are exact; labels attach to correct\nstructures; arrows and data geometry are coherent; body orientation is explicit relative to the camera and agrees with the preserved scene layout, source, target, depth, gaze, support, and motion; paired panels correspond; subject count has not grown by accident;\nworld knowledge appears as visible evidence; no important surface is blank.\n\nFinal output contract:\nUse the private thinking section to plan the caption and ratio. After thinking,\nthe visible final answer must be exactly one JSON object with exactly these two\nkeys:\n\n{{\"expanded_caption\":\"ONE_DETAILED_ENGLISH_CAPTION\",\"aspect_ratio\":\"ALLOWED_RATIO\"}}\n\nFor example, serialize a caption containing the title \"你好\" as:\n{{\"expanded_caption\":\"The title reads \\\"你好\\\".\",\"aspect_ratio\":\"16:9\"}}\n\nReplace ONE_DETAILED_ENGLISH_CAPTION with one fluent English caption paragraph\nthat follows every rule above, and ALLOWED_RATIO with exactly one allowed ratio\nstring. Keep expanded_caption as one valid JSON string. Every ASCII double quotation mark used as caption content inside expanded_caption must be serialized as the JSON escape sequence \\\". Escape all other characters as valid JSON requires. Do not add or omit keys. Do not put thinking or think tags inside\nthe object. Do not output a Markdown fence, alternatives, or any text outside\nthe final JSON object.\n\ninput_text: {input text}\noutput_text:\n"
      },
      "color": "#333",
      "bgcolor": "#555"
    },
    {
      "id": 9,
      "type": "StringReplace",
      "pos": [
        1380,
        650
      ],
      "size": [
        620,
        200
      ],
      "flags": {},
      "order": 17,
      "mode": 0,
      "inputs": [
        {
          "name": "string",
          "type": "STRING",
          "widget": {
            "name": "string"
          },
          "link": 15
        },
        {
          "name": "replace",
          "type": "STRING",
          "widget": {
            "name": "replace"
          },
          "link": 14
        }
      ],
      "outputs": [
        {
          "name": "STRING",
          "type": "STRING",
          "links": [
            18
          ]
        }
      ],
      "title": "Insert Your Prompt Into Template",
      "properties": {
        "cnr_id": "comfy-core",
        "ver": "0.42.5",
        "Node name for S&R": "StringReplace"
      },
      "widgets_values": [
        "",
        "{input text}",
        ""
      ],
      "widgets_values_named": {
        "string": "",
        "find": "{input text}",
        "replace": ""
      }
    },
    {
      "id": 10,
      "type": "TextGenerateV2",
      "pos": [
        1380,
        895
      ],
      "size": [
        620,
        480
      ],
      "flags": {},
      "order": 18,
      "mode": 0,
      "showAdvanced": false,
      "inputs": [
        {
          "name": "clip",
          "type": "CLIP",
          "link": 16
        },
        {
          "name": "images.image1",
          "shape": 7,
          "type": "IMAGE",
          "link": null
        },
        {
          "name": "videos.video1",
          "shape": 7,
          "type": "IMAGE",
          "link": null
        },
        {
          "name": "audios.audio1",
          "shape": 7,
          "type": "AUDIO",
          "link": null
        },
        {
          "name": "system_prompt",
          "shape": 7,
          "type": "STRING",
          "link": 17
        },
        {
          "name": "prompt",
          "type": "STRING",
          "widget": {
            "name": "prompt"
          },
          "link": 18
        }
      ],
      "outputs": [
        {
          "name": "generated_text",
          "type": "STRING",
          "links": [
            19
          ]
        },
        {
          "name": "thinking",
          "type": "STRING",
          "links": []
        }
      ],
      "title": "Enhancer: Write Detailed Caption (Qwen)",
      "properties": {
        "cnr_id": "comfy-core",
        "ver": "0.45.0",
        "Node name for S&R": "TextGenerateV2"
      },
      "widgets_values": [
        "",
        8192,
        "on",
        1,
        20,
        0.95,
        0,
        1,
        0,
        0,
        true,
        true,
        "auto"
      ],
      "widgets_values_named": {
        "prompt": "",
        "max_length": 8192,
        "sampling_mode": "on",
        "sampling_mode.temperature": 1,
        "sampling_mode.top_k": 20,
        "sampling_mode.top_p": 0.95,
        "sampling_mode.min_p": 0,
        "sampling_mode.repetition_penalty": 1,
        "sampling_mode.presence_penalty": 0,
        "sampling_mode.seed": 0,
        "thinking": true,
        "use_default_template": true,
        "mtp": "auto"
      }
    },
    {
      "id": 11,
      "type": "JsonExtractString",
      "pos": [
        1380,
        1420
      ],
      "size": [
        620,
        112
      ],
      "flags": {},
      "order": 19,
      "mode": 0,
      "inputs": [
        {
          "name": "json_string",
          "type": "STRING",
          "widget": {
            "name": "json_string"
          },
          "link": 19
        }
      ],
      "outputs": [
        {
          "name": "STRING",
          "type": "STRING",
          "links": [
            20
          ]
        }
      ],
      "title": "Pull Out Final Caption (JSON)",
      "properties": {
        "cnr_id": "comfy-core",
        "ver": "0.42.5",
        "Node name for S&R": "JsonExtractString"
      },
      "widgets_values": [
        "",
        "expanded_caption"
      ],
      "widgets_values_named": {
        "json_string": "",
        "key": "expanded_caption"
      }
    },
    {
      "id": 12,
      "type": "ComfySwitchNode",
      "pos": [
        2105.4799999999996,
        -13.619999999999958
      ],
      "size": [
        600,
        110
      ],
      "flags": {},
      "order": 20,
      "mode": 0,
      "inputs": [
        {
          "name": "on_false",
          "shape": 7,
          "type": "STRING",
          "link": 21
        },
        {
          "name": "on_true",
          "shape": 7,
          "type": "STRING",
          "link": 20
        }
      ],
      "outputs": [
        {
          "name": "output",
          "type": "STRING",
          "links": [
            5,
            22
          ]
        }
      ],
      "title": "Enhancer ON / OFF Switch",
      "properties": {
        "cnr_id": "comfy-core",
        "ver": "0.42.5",
        "Node name for S&R": "ComfySwitchNode"
      },
      "widgets_values": [
        false
      ],
      "widgets_values_named": {
        "switch": false
      },
      "color": "#322",
      "bgcolor": "#533"
    },
    {
      "id": 13,
      "type": "PreviewAny",
      "pos": [
        2105.4799999999996,
        141.38000000000028
      ],
      "size": [
        600,
        380
      ],
      "flags": {},
      "order": 22,
      "mode": 0,
      "inputs": [
        {
          "name": "source",
          "type": "*",
          "link": 22
        }
      ],
      "outputs": [
        {
          "name": "STRING",
          "type": "STRING",
          "links": []
        }
      ],
      "title": "Final Prompt Preview",
      "properties": {
        "cnr_id": "comfy-core",
        "ver": "0.42.5",
        "Node name for S&R": "PreviewAny"
      },
      "widgets_values": [],
      "widgets_values_named": {}
    },
    {
      "id": 14,
      "type": "MiniMaxH3ImageConditioning",
      "pos": [
        2095.7999999999997,
        886.8600000000004
      ],
      "size": [
        600,
        340
      ],
      "flags": {},
      "order": 21,
      "mode": 0,
      "inputs": [
        {
          "name": "clip",
          "type": "CLIP",
          "link": 1
        },
        {
          "name": "vae",
          "shape": 7,
          "type": "VAE",
          "link": 2
        },
        {
          "name": "images.image_0",
          "shape": 7,
          "type": "IMAGE",
          "link": null
        },
        {
          "name": "prompt",
          "type": "STRING",
          "widget": {
            "name": "prompt"
          },
          "link": 5
        },
        {
          "name": "width",
          "type": "INT",
          "widget": {
            "name": "width"
          },
          "link": 3
        },
        {
          "name": "height",
          "type": "INT",
          "widget": {
            "name": "height"
          },
          "link": 4
        },
        {
          "name": "images.image_1",
          "shape": 7,
          "type": "IMAGE",
          "link": null
        }
      ],
      "outputs": [
        {
          "name": "positive",
          "type": "CONDITIONING",
          "links": [
            6,
            7
          ]
        },
        {
          "name": "LATENT",
          "type": "LATENT",
          "links": [
            9
          ]
        }
      ],
      "title": "MiniMax H3 Conditioning",
      "properties": {
        "cnr_id": "comfy-core",
        "ver": "0.45.0",
        "Node name for S&R": "MiniMaxH3ImageConditioning"
      },
      "widgets_values": [
        "",
        3104,
        3104
      ],
      "widgets_values_named": {
        "prompt": "",
        "width": 3104,
        "height": 3104
      }
    },
    {
      "id": 15,
      "type": "ConditioningZeroOut",
      "pos": [
        2095.7999999999997,
        1271.8599999999988
      ],
      "size": [
        600,
        70
      ],
      "flags": {},
      "order": 23,
      "mode": 0,
      "inputs": [
        {
          "name": "conditioning",
          "type": "CONDITIONING",
          "link": 7
        }
      ],
      "outputs": [
        {
          "name": "CONDITIONING",
          "type": "CONDITIONING",
          "links": [
            8
          ]
        }
      ],
      "title": "Empty Negative (zero out)",
      "properties": {
        "cnr_id": "comfy-core",
        "ver": "0.42.5",
        "Node name for S&R": "ConditioningZeroOut"
      }
    },
    {
      "id": 16,
      "type": "KSampler",
      "pos": [
        2095.7999999999997,
        1386.8599999999988
      ],
      "size": [
        600,
        360
      ],
      "flags": {},
      "order": 24,
      "mode": 0,
      "inputs": [
        {
          "name": "model",
          "type": "MODEL",
          "link": 10
        },
        {
          "name": "positive",
          "type": "CONDITIONING",
          "link": 6
        },
        {
          "name": "negative",
          "type": "CONDITIONING",
          "link": 8
        },
        {
          "name": "latent_image",
          "type": "LATENT",
          "link": 9
        }
      ],
      "outputs": [
        {
          "name": "LATENT",
          "type": "LATENT",
          "links": [
            11
          ]
        }
      ],
      "title": "KSampler (generates the image)",
      "properties": {
        "cnr_id": "comfy-core",
        "ver": "0.42.5",
        "Node name for S&R": "KSampler"
      },
      "widgets_values": [
        298370739346187,
        "randomize",
        6,
        1,
        "euler_ancestral",
        "simple",
        1
      ],
      "widgets_values_named": {
        "seed": 298370739346187,
        "control_after_generate": "randomize",
        "steps": 6,
        "cfg": 1,
        "sampler_name": "euler_ancestral",
        "scheduler": "simple",
        "denoise": 1
      }
    },
    {
      "id": 17,
      "type": "VAEDecode",
      "pos": [
        2778.2899999999986,
        -202.4499999999998
      ],
      "size": [
        720,
        80
      ],
      "flags": {},
      "order": 25,
      "mode": 0,
      "inputs": [
        {
          "name": "samples",
          "type": "LATENT",
          "link": 11
        },
        {
          "name": "vae",
          "type": "VAE",
          "link": 12
        }
      ],
      "outputs": [
        {
          "name": "IMAGE",
          "type": "IMAGE",
          "links": [
            13
          ]
        }
      ],
      "title": "VAE Decode (latent → image)",
      "properties": {
        "cnr_id": "comfy-core",
        "ver": "0.42.5",
        "Node name for S&R": "VAEDecode"
      }
    },
    {
      "id": 18,
      "type": "SaveImage",
      "pos": [
        2778.2899999999986,
        -77.44999999999969
      ],
      "size": [
        720,
        600
      ],
      "flags": {},
      "order": 26,
      "mode": 0,
      "inputs": [
        {
          "name": "images",
          "type": "IMAGE",
          "link": 13
        }
      ],
      "outputs": [
        {
          "name": "images",
          "type": "IMAGE",
          "links": []
        }
      ],
      "properties": {
        "cnr_id": "comfy-core",
        "ver": "0.42.5",
        "Node name for S&R": "SaveImage"
      },
      "widgets_values": [
        "minimax_h3_image_t2i"
      ],
      "widgets_values_named": {
        "filename_prefix": "minimax_h3_image_t2i"
      }
    },
    {
      "id": 30,
      "type": "MarkdownNote",
      "pos": [
        0,
        -520
      ],
      "size": [
        680,
        470
      ],
      "flags": {},
      "order": 8,
      "mode": 0,
      "inputs": [],
      "outputs": [],
      "title": "START HERE",
      "properties": {},
      "widgets_values": [
        "# MiniMax H3 Image: Text to Image (Beginner Version)\n\nEverything that was hidden inside the subgraph is now **visible**. Follow the numbered groups from left to right.\n\n## How to use (4 quick steps)\n1. **Step 1:** make sure the 4 model files are downloaded (see the *Model Downloads* note).\n2. **Step 2:** pick your image size (start with the default, raise it later).\n3. **Step 3:** type your idea in the green **Your Prompt** box.\n4. Click **Run**. Your image appears in **Step 7** and is saved in `ComfyUI/output/`.\n\n## Color guide\n- 🟩 **Green nodes** = things you change\n- ⬜ **Grey nodes** = advanced text, leave as is\n- 🟥 **Red node** = the Enhancer ON/OFF switch\n\n> Update ComfyUI to the latest version first, or the MiniMax H3 nodes may be missing."
      ],
      "widgets_values_named": {
        "text": "# MiniMax H3 Image: Text to Image (Beginner Version)\n\nEverything that was hidden inside the subgraph is now **visible**. Follow the numbered groups from left to right.\n\n## How to use (4 quick steps)\n1. **Step 1:** make sure the 4 model files are downloaded (see the *Model Downloads* note).\n2. **Step 2:** pick your image size (start with the default, raise it later).\n3. **Step 3:** type your idea in the green **Your Prompt** box.\n4. Click **Run**. Your image appears in **Step 7** and is saved in `ComfyUI/output/`.\n\n## Color guide\n- 🟩 **Green nodes** = things you change\n- ⬜ **Grey nodes** = advanced text, leave as is\n- 🟥 **Red node** = the Enhancer ON/OFF switch\n\n> Update ComfyUI to the latest version first, or the MiniMax H3 nodes may be missing."
      },
      "color": "#432",
      "bgcolor": "#653"
    },
    {
      "id": 31,
      "type": "MarkdownNote",
      "pos": [
        720,
        -520
      ],
      "size": [
        900,
        470
      ],
      "flags": {},
      "order": 9,
      "mode": 0,
      "inputs": [],
      "outputs": [],
      "title": "Model Downloads",
      "properties": {},
      "widgets_values": [
        "## Model files (download these)\n\n**diffusion_models** → `ComfyUI/models/diffusion_models/`\n- [minimax_h3_image_pruned_int8_convrot.safetensors](https://huggingface.co/Comfy-Org/MiniMax-H3-Image/resolve/main/diffusion_models/minimax_h3_image_pruned_int8_convrot.safetensors) (21 GB)\n\n**text_encoders** → `ComfyUI/models/text_encoders/`\n- [qwen3vl_32b_minimax_h3_int8_convrot.safetensors](https://huggingface.co/Comfy-Org/MiniMax-H3/resolve/main/text_encoders/qwen3vl_32b_minimax_h3_int8_convrot.safetensors) (25.28 GB)\n- [qwen3.5_9b_w4a8_gptq.safetensors](https://huggingface.co/Comfy-Org/Qwen3.5/resolve/main/text_encoders/qwen3.5_9b_w4a8_gptq.safetensors) (7.34 GB) *(only used by the Prompt Enhancer)*\n\n**vae** → `ComfyUI/models/vae/`\n- [minimax_h3_image_vae_fp16.safetensors](https://huggingface.co/Comfy-Org/MiniMax-H3-Image/resolve/main/vae/minimax_h3_image_vae_fp16.safetensors) (1.17 GB)\n\nHugging Face pages: [MiniMax-H3-Image](https://huggingface.co/Comfy-Org/MiniMax-H3-Image), [MiniMax-H3](https://huggingface.co/Comfy-Org/MiniMax-H3), [Qwen3.5](https://huggingface.co/Comfy-Org/Qwen3.5)"
      ],
      "widgets_values_named": {
        "text": "## Model files (download these)\n\n**diffusion_models** → `ComfyUI/models/diffusion_models/`\n- [minimax_h3_image_pruned_int8_convrot.safetensors](https://huggingface.co/Comfy-Org/MiniMax-H3-Image/resolve/main/diffusion_models/minimax_h3_image_pruned_int8_convrot.safetensors) (21 GB)\n\n**text_encoders** → `ComfyUI/models/text_encoders/`\n- [qwen3vl_32b_minimax_h3_int8_convrot.safetensors](https://huggingface.co/Comfy-Org/MiniMax-H3/resolve/main/text_encoders/qwen3vl_32b_minimax_h3_int8_convrot.safetensors) (25.28 GB)\n- [qwen3.5_9b_w4a8_gptq.safetensors](https://huggingface.co/Comfy-Org/Qwen3.5/resolve/main/text_encoders/qwen3.5_9b_w4a8_gptq.safetensors) (7.34 GB) *(only used by the Prompt Enhancer)*\n\n**vae** → `ComfyUI/models/vae/`\n- [minimax_h3_image_vae_fp16.safetensors](https://huggingface.co/Comfy-Org/MiniMax-H3-Image/resolve/main/vae/minimax_h3_image_vae_fp16.safetensors) (1.17 GB)\n\nHugging Face pages: [MiniMax-H3-Image](https://huggingface.co/Comfy-Org/MiniMax-H3-Image), [MiniMax-H3](https://huggingface.co/Comfy-Org/MiniMax-H3), [Qwen3.5](https://huggingface.co/Comfy-Org/Qwen3.5)"
      },
      "color": "#432",
      "bgcolor": "#653"
    },
    {
      "id": 32,
      "type": "MarkdownNote",
      "pos": [
        20,
        60
      ],
      "size": [
        580,
        130
      ],
      "flags": {},
      "order": 10,
      "mode": 0,
      "inputs": [],
      "outputs": [],
      "title": "Step 1 info",
      "properties": {},
      "widgets_values": [
        "**Loads the 3 main models.**\n- *UNET* = the image brain\n- *Text Encoder* = understands your words (keep type = `minimax`)\n- *VAE* = converts the result into a real picture\n\nNothing to change here if the files are in the right folders."
      ],
      "widgets_values_named": {
        "text": "**Loads the 3 main models.**\n- *UNET* = the image brain\n- *Text Encoder* = understands your words (keep type = `minimax`)\n- *VAE* = converts the result into a real picture\n\nNothing to change here if the files are in the right folders."
      },
      "color": "#432",
      "bgcolor": "#653"
    },
    {
      "id": 33,
      "type": "MarkdownNote",
      "pos": [
        20,
        800
      ],
      "size": [
        580,
        190
      ],
      "flags": {},
      "order": 11,
      "mode": 0,
      "inputs": [],
      "outputs": [],
      "title": "Step 2 info",
      "properties": {},
      "widgets_values": [
        "**Choose the picture size.**\n- Pick an **aspect ratio** (1:1, 16:9, 3:4 …).\n- **megapixels** = how big. Default is **4 MP** (safe for most GPUs).\n- MiniMax H3 works best at about **16 MP** (range 4 to 20 MP). Raise it only if you have lots of VRAM.\n- Low resolution gives worse results with this model."
      ],
      "widgets_values_named": {
        "text": "**Choose the picture size.**\n- Pick an **aspect ratio** (1:1, 16:9, 3:4 …).\n- **megapixels** = how big. Default is **4 MP** (safe for most GPUs).\n- MiniMax H3 works best at about **16 MP** (range 4 to 20 MP). Raise it only if you have lots of VRAM.\n- Low resolution gives worse results with this model."
      },
      "color": "#432",
      "bgcolor": "#653"
    },
    {
      "id": 34,
      "type": "MarkdownNote",
      "pos": [
        720,
        60
      ],
      "size": [
        600,
        140
      ],
      "flags": {},
      "order": 12,
      "mode": 0,
      "inputs": [],
      "outputs": [],
      "title": "Step 3 info",
      "properties": {},
      "widgets_values": [
        "**Describe your image here.**\nWrite in plain English. Short is fine, because the Prompt Enhancer (Step 4) can expand it into a rich, detailed caption for you.\nTo put text inside the image, write it in quotes, like: a poster that says \"HELLO\"."
      ],
      "widgets_values_named": {
        "text": "**Describe your image here.**\nWrite in plain English. Short is fine, because the Prompt Enhancer (Step 4) can expand it into a rich, detailed caption for you.\nTo put text inside the image, write it in quotes, like: a poster that says \"HELLO\"."
      },
      "color": "#432",
      "bgcolor": "#653"
    },
    {
      "id": 35,
      "type": "MarkdownNote",
      "pos": [
        720,
        650
      ],
      "size": [
        600,
        190
      ],
      "flags": {},
      "order": 13,
      "mode": 0,
      "inputs": [],
      "outputs": [],
      "title": "Step 4 info",
      "properties": {},
      "widgets_values": [
        "**Prompt Enhancer (optional helper).**\nA small Qwen model rewrites your short idea into a long, detailed caption and also picks a good aspect ratio.\n\nHow it flows: your prompt → inserted into the instruction template → Qwen writes JSON → we pull out `expanded_caption`.\n\nYou normally **don't edit** anything in this group. The two grey text boxes are the model's instructions. Switch it ON/OFF in Step 5."
      ],
      "widgets_values_named": {
        "text": "**Prompt Enhancer (optional helper).**\nA small Qwen model rewrites your short idea into a long, detailed caption and also picks a good aspect ratio.\n\nHow it flows: your prompt → inserted into the instruction template → Qwen writes JSON → we pull out `expanded_caption`.\n\nYou normally **don't edit** anything in this group. The two grey text boxes are the model's instructions. Switch it ON/OFF in Step 5."
      },
      "color": "#432",
      "bgcolor": "#653"
    },
    {
      "id": 36,
      "type": "MarkdownNote",
      "pos": [
        2105.4799999999996,
        -208.61999999999946
      ],
      "size": [
        600,
        150
      ],
      "flags": {},
      "order": 14,
      "mode": 0,
      "inputs": [],
      "outputs": [],
      "title": "Step 5 info",
      "properties": {},
      "widgets_values": [
        "**Choose which prompt is used.**\n- Switch **ON (True)** → uses the *enhanced* long caption.\n- Switch **OFF (False)** → uses exactly what you typed.\n\nThe preview box shows the final text that goes to the image model. (It fills in after you run.)"
      ],
      "widgets_values_named": {
        "text": "**Choose which prompt is used.**\n- Switch **ON (True)** → uses the *enhanced* long caption.\n- Switch **OFF (False)** → uses exactly what you typed.\n\nThe preview box shows the final text that goes to the image model. (It fills in after you run.)"
      },
      "color": "#432",
      "bgcolor": "#653"
    },
    {
      "id": 37,
      "type": "MarkdownNote",
      "pos": [
        2095.7999999999997,
        651.8600000000006
      ],
      "size": [
        600,
        190
      ],
      "flags": {},
      "order": 15,
      "mode": 0,
      "inputs": [],
      "outputs": [],
      "title": "Step 6 info",
      "properties": {},
      "widgets_values": [
        "**Make the image.**\n- *Conditioning* turns the prompt into the data the model needs, plus an empty latent canvas of your chosen size.\n- *Empty Negative* = a blank negative prompt (this model does not use a negative prompt).\n- *KSampler* does the drawing. Defaults are tuned for this model: **6 steps, cfg 1, euler / simple**. Change the **seed** for a different picture."
      ],
      "widgets_values_named": {
        "text": "**Make the image.**\n- *Conditioning* turns the prompt into the data the model needs, plus an empty latent canvas of your chosen size.\n- *Empty Negative* = a blank negative prompt (this model does not use a negative prompt).\n- *KSampler* does the drawing. Defaults are tuned for this model: **6 steps, cfg 1, euler / simple**. Change the **seed** for a different picture."
      },
      "color": "#432",
      "bgcolor": "#653"
    },
    {
      "id": 38,
      "type": "MarkdownNote",
      "pos": [
        2778.2899999999986,
        -357.4499999999994
      ],
      "size": [
        720,
        110
      ],
      "flags": {},
      "order": 16,
      "mode": 0,
      "inputs": [],
      "outputs": [],
      "title": "Step 7 info",
      "properties": {},
      "widgets_values": [
        "**Finish.** The latent is decoded into a normal image and saved to `ComfyUI/output/` with the prefix `minimax_h3_image_t2i`."
      ],
      "widgets_values_named": {
        "text": "**Finish.** The latent is decoded into a normal image and saved to `ComfyUI/output/` with the prefix `minimax_h3_image_t2i`."
      },
      "color": "#432",
      "bgcolor": "#653"
    }
  ],
  "links": [
    [
      1,
      2,
      0,
      14,
      0,
      "CLIP"
    ],
    [
      2,
      3,
      0,
      14,
      1,
      "VAE"
    ],
    [
      3,
      4,
      0,
      14,
      4,
      "INT"
    ],
    [
      4,
      4,
      1,
      14,
      5,
      "INT"
    ],
    [
      5,
      12,
      0,
      14,
      3,
      "STRING"
    ],
    [
      6,
      14,
      0,
      16,
      1,
      "CONDITIONING"
    ],
    [
      7,
      14,
      0,
      15,
      0,
      "CONDITIONING"
    ],
    [
      8,
      15,
      0,
      16,
      2,
      "CONDITIONING"
    ],
    [
      9,
      14,
      1,
      16,
      3,
      "LATENT"
    ],
    [
      10,
      1,
      0,
      16,
      0,
      "MODEL"
    ],
    [
      11,
      16,
      0,
      17,
      0,
      "LATENT"
    ],
    [
      12,
      3,
      0,
      17,
      1,
      "VAE"
    ],
    [
      13,
      17,
      0,
      18,
      0,
      "IMAGE"
    ],
    [
      15,
      8,
      0,
      9,
      0,
      "STRING"
    ],
    [
      19,
      10,
      0,
      11,
      0,
      "STRING"
    ],
    [
      20,
      11,
      0,
      12,
      1,
      "STRING"
    ],
    [
      21,
      5,
      0,
      12,
      0,
      "STRING"
    ],
    [
      22,
      12,
      0,
      13,
      0,
      "STRING"
    ],
    [
      16,
      6,
      0,
      10,
      0,
      "CLIP"
    ],
    [
      17,
      7,
      0,
      10,
      4,
      "STRING"
    ],
    [
      18,
      9,
      0,
      10,
      5,
      "STRING"
    ],
    [
      14,
      5,
      0,
      9,
      1,
      "STRING"
    ]
  ],
  "groups": [
    {
      "id": 1,
      "title": "STEP 1 - Load Models",
      "bounding": [
        0,
        0,
        620,
        700
      ],
      "color": "#3f789e",
      "flags": {}
    },
    {
      "id": 2,
      "title": "STEP 2 - Image Size",
      "bounding": [
        0,
        740,
        620,
        520
      ],
      "color": "#3f789e",
      "flags": {}
    },
    {
      "id": 3,
      "title": "STEP 3 - Write Your Prompt",
      "bounding": [
        700,
        0,
        640,
        550
      ],
      "color": "#3f8e5a",
      "flags": {}
    },
    {
      "id": 4,
      "title": "STEP 4 - Prompt Enhancer (optional helper)",
      "bounding": [
        700,
        590,
        1320,
        1100
      ],
      "color": "#8e7a3f",
      "flags": {}
    },
    {
      "id": 5,
      "title": "STEP 5 - Choose Final Prompt (ON / OFF)",
      "bounding": [
        2085.4799999999996,
        -268.61999999999983,
        640,
        835
      ],
      "color": "#a1309b",
      "flags": {}
    },
    {
      "id": 6,
      "title": "STEP 6 - Generate",
      "bounding": [
        2075.7999999999997,
        591.8600000000006,
        640,
        1200
      ],
      "color": "#b06634",
      "flags": {}
    },
    {
      "id": 7,
      "title": "STEP 7 - Decode & Save",
      "bounding": [
        2758.2899999999986,
        -417.4499999999994,
        760,
        985
      ],
      "color": "#3f789e",
      "flags": {}
    }
  ],
  "config": {},
  "extra": {
    "ds": {
      "scale": 0.6830134553650705,
      "offset": [
        -346.79608409941096,
        357.29985192182517
      ]
    },
    "frontendVersion": "1.58.5",
    "VHS_latentpreview": false,
    "VHS_latentpreviewrate": 0,
    "VHS_MetadataImage": true,
    "VHS_KeepIntermediate": true
  },
  "extensions": {
    "widget_idx_map": {
      "16": {
        "seed": 0,
        "sampler_name": 4,
        "scheduler": 5
      }
    },
    "seed_widgets": {
      "16": 0
    }
  },
  "version": 0.4
}