{
  "config": {},
  "extra": {
    "VHS_KeepIntermediate": true,
    "VHS_MetadataImage": true,
    "VHS_latentpreview": false,
    "VHS_latentpreviewrate": 0,
    "ds": {
      "offset": [
        2671.701625917571,
        -718.2491202327444
      ],
      "scale": 0.20409917658186214
    },
    "frontendVersion": "1.43.16"
  },
  "groups": [
    {
      "bounding": [
        -120.52378697225322,
        1555.7214622345991,
        2206.83837858467,
        969.0060815751735
      ],
      "color": "#3f789e",
      "flags": {},
      "id": 12,
      "title": "3x3 Contact Sheet"
    },
    {
      "bounding": [
        -121.66693148440527,
        2549.247405521898,
        2704.924070079837,
        1243.6642492547635
      ],
      "color": "#3f789e",
      "flags": {},
      "id": 13,
      "title": "Select Image"
    }
  ],
  "id": "84b61d59-4e55-42ac-a974-edb4856427b2",
  "last_link_id": 74,
  "last_node_id": 94,
  "links": [
    [
      67,
      88,
      0,
      84,
      5,
      "IMAGE"
    ],
    [
      68,
      86,
      0,
      84,
      6,
      "IMAGE"
    ],
    [
      69,
      91,
      0,
      84,
      11,
      "STRING"
    ],
    [
      70,
      86,
      0,
      85,
      5,
      "IMAGE"
    ],
    [
      71,
      89,
      0,
      85,
      6,
      "IMAGE"
    ],
    [
      72,
      85,
      0,
      87,
      0,
      "IMAGE"
    ],
    [
      73,
      84,
      0,
      90,
      0,
      "IMAGE"
    ],
    [
      74,
      83,
      0,
      91,
      2,
      "STRING"
    ]
  ],
  "nodes": [
    {
      "flags": {},
      "id": 83,
      "inputs": [
        {
          "link": null,
          "localized_name": "choice",
          "name": "choice",
          "type": "COMBO",
          "widget": {
            "name": "choice"
          }
        }
      ],
      "mode": 4,
      "order": 0,
      "outputs": [
        {
          "links": [
            74
          ],
          "localized_name": "STRING",
          "name": "STRING",
          "type": "STRING"
        },
        {
          "links": null,
          "localized_name": "INDEX",
          "name": "INDEX",
          "type": "INT"
        }
      ],
      "pos": [
        -90.05239306208523,
        3183.3944399849797
      ],
      "properties": {
        "Node name for S&R": "CustomCombo"
      },
      "size": [
        550,
        530
      ],
      "title": "Custom Combo (Frame / Mode)",
      "type": "CustomCombo",
      "widgets_values": [
        "Top Left",
        0,
        "Top Left",
        "Top Center",
        "Top Right",
        "Middle Left",
        "Center",
        "Middle Right",
        "Bottom Left",
        "Bottom Center",
        "Bottom Right",
        ""
      ]
    },
    {
      "bgcolor": "#653",
      "color": "#432",
      "flags": {},
      "id": 84,
      "inputs": [
        {
          "link": null,
          "localized_name": "prompt",
          "name": "prompt",
          "type": "STRING",
          "widget": {
            "name": "prompt"
          }
        },
        {
          "link": null,
          "localized_name": "model",
          "name": "model",
          "type": "COMFY_DYNAMICCOMBO_V3",
          "widget": {
            "name": "model"
          }
        },
        {
          "link": null,
          "localized_name": "model.aspect_ratio",
          "name": "model.aspect_ratio",
          "type": "COMBO",
          "widget": {
            "name": "model.aspect_ratio"
          }
        },
        {
          "link": null,
          "localized_name": "model.resolution",
          "name": "model.resolution",
          "type": "COMBO",
          "widget": {
            "name": "model.resolution"
          }
        },
        {
          "link": null,
          "localized_name": "model.thinking_level",
          "name": "model.thinking_level",
          "type": "COMBO",
          "widget": {
            "name": "model.thinking_level"
          }
        },
        {
          "label": "image_1",
          "link": 67,
          "localized_name": "model.images.image_1",
          "name": "model.images.image_1",
          "shape": 7,
          "type": "IMAGE"
        },
        {
          "label": "image_2",
          "link": 68,
          "localized_name": "model.images.image_2",
          "name": "model.images.image_2",
          "shape": 7,
          "type": "IMAGE"
        },
        {
          "label": "image_3",
          "link": null,
          "localized_name": "model.images.image_3",
          "name": "model.images.image_3",
          "shape": 7,
          "type": "IMAGE"
        },
        {
          "label": "files",
          "link": null,
          "localized_name": "model.files",
          "name": "model.files",
          "shape": 7,
          "type": "GEMINI_INPUT_FILES"
        },
        {
          "link": null,
          "localized_name": "seed",
          "name": "seed",
          "type": "INT",
          "widget": {
            "name": "seed"
          }
        },
        {
          "link": null,
          "localized_name": "response_modalities",
          "name": "response_modalities",
          "type": "COMBO",
          "widget": {
            "name": "response_modalities"
          }
        },
        {
          "link": 69,
          "localized_name": "system_prompt",
          "name": "system_prompt",
          "shape": 7,
          "type": "STRING",
          "widget": {
            "name": "system_prompt"
          }
        }
      ],
      "mode": 4,
      "order": 9,
      "outputs": [
        {
          "links": [
            73
          ],
          "localized_name": "IMAGE",
          "name": "IMAGE",
          "type": "IMAGE"
        },
        {
          "links": null,
          "localized_name": "STRING",
          "name": "STRING",
          "type": "STRING"
        },
        {
          "links": null,
          "localized_name": "thought_image",
          "name": "thought_image",
          "type": "IMAGE"
        }
      ],
      "pos": [
        695.9759957333986,
        2625.9048788978143
      ],
      "properties": {
        "Node name for S&R": "GeminiNanoBanana2V2"
      },
      "showAdvanced": true,
      "size": [
        680,
        488.86663818359375
      ],
      "type": "GeminiNanoBanana2V2",
      "widgets_values": [
        "Recreate the specified tile from this grid exactly as it appears, as a full standalone 16:9 high-resolution image. Change nothing.",
        "Nano Banana 2 (Gemini 3.1 Flash Image)",
        "16:9",
        "1K",
        "MINIMAL",
        80546337378168,
        "randomize",
        "IMAGE",
        ""
      ]
    },
    {
      "bgcolor": "#653",
      "color": "#432",
      "flags": {},
      "id": 85,
      "inputs": [
        {
          "link": null,
          "localized_name": "prompt",
          "name": "prompt",
          "type": "STRING",
          "widget": {
            "name": "prompt"
          }
        },
        {
          "link": null,
          "localized_name": "model",
          "name": "model",
          "type": "COMFY_DYNAMICCOMBO_V3",
          "widget": {
            "name": "model"
          }
        },
        {
          "link": null,
          "localized_name": "model.aspect_ratio",
          "name": "model.aspect_ratio",
          "type": "COMBO",
          "widget": {
            "name": "model.aspect_ratio"
          }
        },
        {
          "link": null,
          "localized_name": "model.resolution",
          "name": "model.resolution",
          "type": "COMBO",
          "widget": {
            "name": "model.resolution"
          }
        },
        {
          "link": null,
          "localized_name": "model.thinking_level",
          "name": "model.thinking_level",
          "type": "COMBO",
          "widget": {
            "name": "model.thinking_level"
          }
        },
        {
          "label": "image_1",
          "link": 70,
          "localized_name": "model.images.image_1",
          "name": "model.images.image_1",
          "shape": 7,
          "type": "IMAGE"
        },
        {
          "label": "image_2",
          "link": 71,
          "localized_name": "model.images.image_2",
          "name": "model.images.image_2",
          "shape": 7,
          "type": "IMAGE"
        },
        {
          "label": "image_3",
          "link": null,
          "localized_name": "model.images.image_3",
          "name": "model.images.image_3",
          "shape": 7,
          "type": "IMAGE"
        },
        {
          "label": "files",
          "link": null,
          "localized_name": "model.files",
          "name": "model.files",
          "shape": 7,
          "type": "GEMINI_INPUT_FILES"
        },
        {
          "link": null,
          "localized_name": "seed",
          "name": "seed",
          "type": "INT",
          "widget": {
            "name": "seed"
          }
        },
        {
          "link": null,
          "localized_name": "response_modalities",
          "name": "response_modalities",
          "type": "COMBO",
          "widget": {
            "name": "response_modalities"
          }
        },
        {
          "link": null,
          "localized_name": "system_prompt",
          "name": "system_prompt",
          "shape": 7,
          "type": "STRING",
          "widget": {
            "name": "system_prompt"
          }
        }
      ],
      "mode": 0,
      "order": 8,
      "outputs": [
        {
          "links": [
            72
          ],
          "localized_name": "IMAGE",
          "name": "IMAGE",
          "type": "IMAGE"
        },
        {
          "links": null,
          "localized_name": "STRING",
          "name": "STRING",
          "type": "STRING"
        },
        {
          "links": null,
          "localized_name": "thought_image",
          "name": "thought_image",
          "type": "IMAGE"
        }
      ],
      "pos": [
        309.8608665306342,
        1675.0339482479046
      ],
      "properties": {
        "Node name for S&R": "GeminiNanoBanana2V2"
      },
      "showAdvanced": true,
      "size": [
        727.7999877929688,
        488.86663818359375
      ],
      "type": "GeminiNanoBanana2V2",
      "widgets_values": [
        "Cinematic espionage scene inside a luxurious mansion during an elite nighttime gala, a covert spy blending in among wealthy guests in black-tie attire, crystal chandeliers, champagne, marble floors, subtle tension beneath the glamorous atmosphere, concealed earpiece, tailored suit, security guards watching the crowd, the spy carefully moving through the party while scanning the environment, warm golden lighting, shallow depth of field, anamorphic lens look, realistic details, stylish spy-thriller atmosphere, luxury mixed with danger, tense undercover infiltration before the mission begins.",
        "Nano Banana 2 (Gemini 3.1 Flash Image)",
        "16:9",
        "2K",
        "MINIMAL",
        67045532994688,
        "randomize",
        "IMAGE",
        "You are an image generation assistant that creates contact sheet style grid images. When the user gives you a subject or theme, you generate a single image containing a seamless grid of distinct variations with dramatic forced perspective.\n\nDEFAULTS:\n- Grid size: 3×3 (9 tiles — 3 across, 3 down) unless the user specifies otherwise\n- Aspect ratio: 16:9 overall. Each individual tile within the grid should also read as a widescreen 16:9 cinematic frame.\n- Borders: NONE. Tiles sit edge-to-edge with no visible gaps, lines, or dividers. The only separation is the natural framing of each image's own composition.\n- Perspective: Every tile uses strong dramatic forced perspective — exaggerated depth, vanishing points, low/high camera angles, foreshortening, converging lines.\n\nINSTRUCTIONS:\n1. When the user provides a subject, determine what kind of variations make sense (angles, poses, expressions, colorways, environments, art styles, lighting, outfits, etc.). If unclear, ask.\n2. Write a specific description for each of the 9 tile positions, each with its own unique forced perspective angle and widescreen cinematic framing.\n3. Format your image generation prompt as the following JSON structure:\n\n{\n  \"image_type\": \"3x3 contact sheet grid\",\n  \"layout\": {\n    \"grid\": \"3 columns × 3 rows of equally sized widescreen 16:9 tiles\",\n    \"spacing\": \"NO visible borders, gaps, or dividing lines between tiles. Tiles sit edge-to-edge seamlessly. The only separation is the natural edge of each image's own composition and framing.\",\n    \"alignment\": \"perfectly aligned rows and columns, uniform tile sizes\",\n    \"perspective\": \"every single tile uses strong dramatic forced perspective — exaggerated depth, vanishing points, low or high camera angles, foreshortening, converging lines\"\n  },\n  \"content\": {\n    \"subject\": \"[the user's subject]\",\n    \"variation_strategy\": \"[how each tile differs]\",\n    \"per_tile_descriptions\": [\n      \"Top-left: [specific variation + forced perspective angle + widescreen cinematic framing]\",\n      \"Top-center: [specific variation + forced perspective angle + widescreen cinematic framing]\",\n      \"Top-right: [specific variation + forced perspective angle + widescreen cinematic framing]\",\n      \"Middle-left: [specific variation + forced perspective angle + widescreen cinematic framing]\",\n      \"Middle-center: [specific variation + forced perspective angle + widescreen cinematic framing]\",\n      \"Middle-right: [specific variation + forced perspective angle + widescreen cinematic framing]\",\n      \"Bottom-left: [specific variation + forced perspective angle + widescreen cinematic framing]\",\n      \"Bottom-center: [specific variation + forced perspective angle + widescreen cinematic framing]\",\n      \"Bottom-right: [specific variation + forced perspective angle + widescreen cinematic framing]\"\n    ]\n  },\n  \"style\": {\n    \"consistency\": \"all tiles share the same overall art style, color grading, and quality level\",\n    \"look\": \"[the user's requested style, or clean professional photography by default]\"\n  },\n  \"critical_rules\": \"9 separate tiles in a perfect 3x3 grid. Each tile is a widescreen 16:9 frame. All tiles must be the same size. No tile should be cut off or overlap another. NO white lines, NO borders, NO gaps between tiles — completely seamless edge-to-edge. Every tile MUST use dramatic forced perspective with exaggerated depth and vanishing points.\"\n}\n\n4. If the output has visible borders, gaps, or flat perspective, regenerate and reinforce: \"CRITICAL: Absolutely NO borders or gaps. Tiles must be completely seamless edge-to-edge. Every tile MUST have dramatic forced perspective with widescreen 16:9 framing per tile.\"\n5. Keywords like \"contact sheet\", \"mood board\", \"reference sheet\" help models understand the grid layout.\n6. For character variations, add \"character turnaround sheet\" or \"expression sheet\"."
      ]
    },
    {
      "flags": {},
      "id": 86,
      "inputs": [
        {
          "link": null,
          "localized_name": "image",
          "name": "image",
          "type": "COMBO",
          "widget": {
            "name": "image"
          }
        },
        {
          "link": null,
          "localized_name": "choose file to upload",
          "name": "upload",
          "type": "IMAGEUPLOAD",
          "widget": {
            "name": "upload"
          }
        }
      ],
      "mode": 0,
      "order": 1,
      "outputs": [
        {
          "links": [
            68,
            70
          ],
          "localized_name": "IMAGE",
          "name": "IMAGE",
          "type": "IMAGE"
        },
        {
          "links": null,
          "localized_name": "MASK",
          "name": "MASK",
          "type": "MASK"
        }
      ],
      "pos": [
        -110.52378697225322,
        1625.7214622345991
      ],
      "properties": {
        "Node name for S&R": "LoadImage"
      },
      "size": [
        290,
        400
      ],
      "title": "Subject",
      "type": "LoadImage",
      "widgets_values": [
        "e10bcf347aebe69a6b276dd23ebbf720614d1acc739d360dc970856eb8ca508e.png",
        "image"
      ]
    },
    {
      "flags": {},
      "id": 87,
      "inputs": [
        {
          "link": 72,
          "localized_name": "images",
          "name": "images",
          "type": "IMAGE"
        },
        {
          "link": null,
          "localized_name": "filename_prefix",
          "name": "filename_prefix",
          "type": "STRING",
          "widget": {
            "name": "filename_prefix"
          }
        }
      ],
      "mode": 0,
      "order": 10,
      "outputs": [],
      "pos": [
        1091.1252138603422,
        1674.2093988611673
      ],
      "properties": {},
      "size": [
        970,
        750
      ],
      "type": "SaveImage",
      "widgets_values": [
        "ComfyUI"
      ]
    },
    {
      "flags": {},
      "id": 88,
      "inputs": [
        {
          "link": null,
          "localized_name": "image",
          "name": "image",
          "type": "COMBO",
          "widget": {
            "name": "image"
          }
        },
        {
          "link": null,
          "localized_name": "choose file to upload",
          "name": "upload",
          "type": "IMAGEUPLOAD",
          "widget": {
            "name": "upload"
          }
        }
      ],
      "mode": 4,
      "order": 2,
      "outputs": [
        {
          "links": [
            67
          ],
          "localized_name": "IMAGE",
          "name": "IMAGE",
          "type": "IMAGE"
        },
        {
          "links": null,
          "localized_name": "MASK",
          "name": "MASK",
          "type": "MASK"
        }
      ],
      "pos": [
        -71.58411890488992,
        2630.054531337816
      ],
      "properties": {
        "Node name for S&R": "LoadImage"
      },
      "size": [
        700,
        440
      ],
      "type": "LoadImage",
      "widgets_values": [
        "8d7fa53c05d3681db7fef830c382e4a52cbaaeacaa1e0e9863247a6da8a1b730.png [output]",
        "image"
      ]
    },
    {
      "flags": {},
      "id": 89,
      "inputs": [
        {
          "link": null,
          "localized_name": "image",
          "name": "image",
          "type": "COMBO",
          "widget": {
            "name": "image"
          }
        },
        {
          "link": null,
          "localized_name": "choose file to upload",
          "name": "upload",
          "type": "IMAGEUPLOAD",
          "widget": {
            "name": "upload"
          }
        }
      ],
      "mode": 0,
      "order": 3,
      "outputs": [
        {
          "links": [
            71
          ],
          "localized_name": "IMAGE",
          "name": "IMAGE",
          "type": "IMAGE"
        },
        {
          "links": null,
          "localized_name": "MASK",
          "name": "MASK",
          "type": "MASK"
        }
      ],
      "pos": [
        -110.52378697225322,
        2105.721462234599
      ],
      "properties": {
        "Node name for S&R": "LoadImage"
      },
      "size": [
        290,
        400
      ],
      "title": "Outfit",
      "type": "LoadImage",
      "widgets_values": [
        "5944f66b7a477bb672cfa3b0157d4a8a4a601a3e948a102b522959246f573b38.png",
        "image"
      ]
    },
    {
      "flags": {},
      "id": 90,
      "inputs": [
        {
          "link": 73,
          "localized_name": "images",
          "name": "images",
          "type": "IMAGE"
        },
        {
          "link": null,
          "localized_name": "filename_prefix",
          "name": "filename_prefix",
          "type": "STRING",
          "widget": {
            "name": "filename_prefix"
          }
        }
      ],
      "mode": 4,
      "order": 11,
      "outputs": [],
      "pos": [
        1408.7280135374576,
        2657.2108056252514
      ],
      "properties": {},
      "size": [
        1060.050048828125,
        1064.3499755859375
      ],
      "type": "SaveImage",
      "widgets_values": [
        "ComfyUI"
      ]
    },
    {
      "flags": {},
      "id": 91,
      "inputs": [
        {
          "link": null,
          "localized_name": "string",
          "name": "string",
          "type": "STRING",
          "widget": {
            "name": "string"
          }
        },
        {
          "link": null,
          "localized_name": "find",
          "name": "find",
          "type": "STRING",
          "widget": {
            "name": "find"
          }
        },
        {
          "link": 74,
          "localized_name": "replace",
          "name": "replace",
          "type": "STRING",
          "widget": {
            "name": "replace"
          }
        }
      ],
      "mode": 4,
      "order": 7,
      "outputs": [
        {
          "links": [
            69
          ],
          "localized_name": "STRING",
          "name": "STRING",
          "type": "STRING"
        }
      ],
      "pos": [
        502.45278611634785,
        3169.6831515129907
      ],
      "properties": {
        "Node name for S&R": "StringReplace"
      },
      "size": [
        730,
        570
      ],
      "type": "StringReplace",
      "widgets_values": [
        "Look at this reference image — it is a 3x3 grid of nine widescreen images. Focus ONLY on the {{VIEW}} tile. Recreate that exact image as a standalone full 16:9 widescreen image at maximum quality and resolution. Match the subject, composition, style, lighting, color palette, mood, forced perspective, camera angle, and every visual detail as closely as possible. This should look like the original tile but rendered as a full high-resolution image with crisp detail, sharp textures, and no compression artifacts. Do not include any other tiles — just this one image, full frame.",
        "{{VIEW}}",
        "Middle Right"
      ]
    },
    {
      "bgcolor": "#593930",
      "color": "#332922",
      "flags": {
        "collapsed": false
      },
      "id": 92,
      "inputs": [],
      "mode": 0,
      "order": 4,
      "outputs": [],
      "pos": [
        -124.03095604241844,
        1198.915196596161
      ],
      "properties": {},
      "size": [
        785.4166870117188,
        306.76666259765625
      ],
      "title": "Model links",
      "type": "MarkdownNote",
      "widgets_values": [
        "# 3x3 Contact Sheet Workflow Guide\n\nThis workflow is split into 3 main sections:\n\n1. Main Contact Sheet Generator\n2. Grid Image Loader\n3. Individual Image Extraction Groups\n\nThe purpose of this workflow is to quickly generate multiple image ideas in a single 3x3 grid, then select one of those images to recreate in higher quality as an individual image.\n\n---"
      ]
    },
    {
      "bgcolor": "#653",
      "color": "#432",
      "flags": {
        "collapsed": false
      },
      "id": 93,
      "inputs": [],
      "mode": 0,
      "order": 5,
      "outputs": [],
      "pos": [
        -712.9928185872277,
        1588.2810961549455
      ],
      "properties": {},
      "size": [
        549.8499755859375,
        495.83331298828125
      ],
      "title": "Step 1",
      "type": "MarkdownNote",
      "widgets_values": [
        "## Step 1 — Generate The Contact Sheet\n\nStart by adding your subject reference image.\n\nYou can also optionally add additional reference images for:\n- outfit consistency\n- character consistency\n- style references\n\nThen enter a simple prompt describing your idea, concept, action, or scene.\n\nYou do not need to over-describe the prompt.  \nThe Nano Banana prompt node already expands and improves your input automatically.\n\nBefore running the workflow:\n\n- Make sure the group called **Select Image** is bypassed\n- Select the nodes in that group\n- Press `Ctrl + B` to disable them\n\nThen run the main contact sheet group to generate your 3x3 contact sheet with multiple variations of your concept."
      ]
    },
    {
      "bgcolor": "#653",
      "color": "#432",
      "flags": {
        "collapsed": false
      },
      "id": 94,
      "inputs": [],
      "mode": 0,
      "order": 6,
      "outputs": [],
      "pos": [
        -714.4803872956982,
        2594.4971087160557
      ],
      "properties": {},
      "size": [
        554.9166870117188,
        1146.2332763671875
      ],
      "title": "Step 1",
      "type": "MarkdownNote",
      "widgets_values": [
        "## Step 2 — Select And Generate An Image\n\nAfter generating the contact sheet:\n\n- Select all nodes in the **Select Image** group\n- Press `Ctrl + B` again to remove bypass and enable the group.\n- Bypass the `3x3 Contact Sheet` group so it doesn't run again but you may want to leave your `Subject` image node active so that the group below will see what the subject looks like.\n\nThen:\n\n1. Click the image selection area\n2. Open:\n   - `Inputs & Outputs`\n   - then `Outputs`\n3. Select the contact sheet you just generated\n\nNext, go to the **Custom Combo Frame Mode** node.\n\nUnder the `Custom Combo` node, select the image position you want from the contact sheet:\n\n- Top Left\n- Top Center\n- Top Right\n- Middle Left\n- Center\n- Middle Right\n- Bottom Left\n- Bottom Center\n- Bottom Right\n\nMake sure the selected position matches the image you liked from the contact sheet.\n\nThen run the workflow.\n\nThe workflow will isolate that frame and recreate it as a higher-quality standalone image.\n\n## Notes\n\n- If the result is slightly inaccurate, try generating again\n- Occasionally the workflow may select the wrong part of the grid, but usually it matches correctly after another pass\n- You can continue generating more variations from the same contact sheet\n- Or bypass the selection group again and return to the main contact sheet generator to create a completely new grid of results"
      ]
    }
  ],
  "revision": 0,
  "version": 0.4
}