{
  "id": "65921f96-39e0-48c0-90f0-48a3907755e3",
  "revision": 0,
  "last_node_id": 29,
  "last_link_id": 15,
  "nodes": [
    {
      "id": 21,
      "type": "SaveImage",
      "pos": [
        913.024172616747,
        8.987101490822187
      ],
      "size": [
        373.6485367550731,
        421.999244495615
      ],
      "flags": {},
      "order": 3,
      "mode": 0,
      "inputs": [
        {
          "name": "images",
          "type": "IMAGE",
          "link": 10
        }
      ],
      "outputs": [
        {
          "name": "images",
          "type": "IMAGE",
          "links": null
        }
      ],
      "title": "basecolor",
      "properties": {
        "Node name for S&R": "SaveImage"
      },
      "widgets_values": [
        "patina/%year%%month%%day%-%hour%%minute%_basecolor"
      ],
      "widgets_values_named": {
        "filename_prefix": "patina/%year%%month%%day%-%hour%%minute%_basecolor"
      }
    },
    {
      "id": 22,
      "type": "SaveImage",
      "pos": [
        69.7270991066008,
        8.987101490822187
      ],
      "size": [
        373.6485367550731,
        421.999244495615
      ],
      "flags": {},
      "order": 4,
      "mode": 0,
      "inputs": [
        {
          "name": "images",
          "type": "IMAGE",
          "link": 11
        }
      ],
      "outputs": [
        {
          "name": "images",
          "type": "IMAGE",
          "links": null
        }
      ],
      "title": "normal",
      "properties": {
        "Node name for S&R": "SaveImage"
      },
      "widgets_values": [
        "patina/%year%%month%%day%-%hour%%minute%_normal"
      ],
      "widgets_values_named": {
        "filename_prefix": "patina/%year%%month%%day%-%hour%%minute%_normal"
      }
    },
    {
      "id": 23,
      "type": "SaveImage",
      "pos": [
        491.3756358616739,
        8.987101490822187
      ],
      "size": [
        373.6485367550731,
        421.999244495615
      ],
      "flags": {},
      "order": 2,
      "mode": 0,
      "inputs": [
        {
          "name": "images",
          "type": "IMAGE",
          "link": 9
        }
      ],
      "outputs": [
        {
          "name": "images",
          "type": "IMAGE",
          "links": null
        }
      ],
      "title": "texture",
      "properties": {
        "Node name for S&R": "SaveImage"
      },
      "widgets_values": [
        "patina/%year%%month%%day%-%hour%%minute%_texture"
      ],
      "widgets_values_named": {
        "filename_prefix": "patina/%year%%month%%day%-%hour%%minute%_texture"
      }
    },
    {
      "id": 24,
      "type": "SaveImage",
      "pos": [
        913.024172616747,
        508.9863459864372
      ],
      "size": [
        373.6485367550731,
        421.999244495615
      ],
      "flags": {},
      "order": 5,
      "mode": 0,
      "inputs": [
        {
          "name": "images",
          "type": "IMAGE",
          "link": 12
        }
      ],
      "outputs": [
        {
          "name": "images",
          "type": "IMAGE",
          "links": []
        }
      ],
      "title": "roughness",
      "properties": {
        "Node name for S&R": "SaveImage"
      },
      "widgets_values": [
        "patina/%year%%month%%day%-%hour%%minute%_roughness"
      ],
      "widgets_values_named": {
        "filename_prefix": "patina/%year%%month%%day%-%hour%%minute%_roughness"
      }
    },
    {
      "id": 25,
      "type": "SaveImage",
      "pos": [
        69.7270991066008,
        508.9863459864372
      ],
      "size": [
        373.6485367550731,
        421.999244495615
      ],
      "flags": {},
      "order": 6,
      "mode": 0,
      "inputs": [
        {
          "name": "images",
          "type": "IMAGE",
          "link": 13
        }
      ],
      "outputs": [
        {
          "name": "images",
          "type": "IMAGE",
          "links": []
        }
      ],
      "title": "metalness",
      "properties": {
        "Node name for S&R": "SaveImage"
      },
      "widgets_values": [
        "patina/%year%%month%%day%-%hour%%minute%_metalness"
      ],
      "widgets_values_named": {
        "filename_prefix": "patina/%year%%month%%day%-%hour%%minute%_metalness"
      }
    },
    {
      "id": 26,
      "type": "SaveImage",
      "pos": [
        491.3756358616739,
        508.9863459864372
      ],
      "size": [
        373.6485367550731,
        421.999244495615
      ],
      "flags": {},
      "order": 7,
      "mode": 0,
      "inputs": [
        {
          "name": "images",
          "type": "IMAGE",
          "link": 14
        }
      ],
      "outputs": [
        {
          "name": "images",
          "type": "IMAGE",
          "links": []
        }
      ],
      "title": "height",
      "properties": {
        "Node name for S&R": "SaveImage"
      },
      "widgets_values": [
        "patina/%year%%month%%day%-%hour%%minute%_height"
      ],
      "widgets_values_named": {
        "filename_prefix": "patina/%year%%month%%day%-%hour%%minute%_height"
      }
    },
    {
      "id": 27,
      "type": "SaveText",
      "pos": [
        1344.4437364341845,
        10.211257943315161
      ],
      "size": [
        402.051097237096,
        411.75603311460543
      ],
      "flags": {},
      "order": 8,
      "mode": 0,
      "inputs": [
        {
          "name": "text",
          "type": "STRING",
          "link": 15
        }
      ],
      "outputs": [
        {
          "name": "text",
          "type": "STRING",
          "links": null
        }
      ],
      "title": "expanded prompt",
      "properties": {
        "Node name for S&R": "SaveText"
      },
      "widgets_values": [
        "patina/%year%%month%%day%-%hour%%minute%_expanded_prompt",
        "txt"
      ],
      "widgets_values_named": {
        "filename_prefix": "patina/%year%%month%%day%-%hour%%minute%_expanded_prompt",
        "format": "txt"
      }
    },
    {
      "id": 28,
      "type": "PatinaMaterialNode",
      "pos": [
        -475.52707550661466,
        10.285926290343436
      ],
      "size": [
        467.1889394655036,
        743.7035612159935
      ],
      "flags": {},
      "order": 0,
      "mode": 0,
      "inputs": [
        {
          "name": "image",
          "shape": 7,
          "type": "IMAGE",
          "link": null
        },
        {
          "name": "mask",
          "shape": 7,
          "type": "MASK",
          "link": null
        }
      ],
      "outputs": [
        {
          "name": "texture",
          "type": "IMAGE",
          "links": [
            9
          ]
        },
        {
          "name": "basecolor",
          "type": "IMAGE",
          "links": [
            10
          ]
        },
        {
          "name": "normal",
          "type": "IMAGE",
          "links": [
            11
          ]
        },
        {
          "name": "roughness",
          "type": "IMAGE",
          "links": [
            12
          ]
        },
        {
          "name": "metalness",
          "type": "IMAGE",
          "links": [
            13
          ]
        },
        {
          "name": "height",
          "type": "IMAGE",
          "links": [
            14
          ]
        },
        {
          "name": "expanded_prompt",
          "type": "STRING",
          "links": [
            15
          ]
        }
      ],
      "title": "Patina Material (text -> seamless PBR material)",
      "properties": {
        "Node name for S&R": "PatinaMaterialNode"
      },
      "widgets_values": [
        "weathered red brick wall with pale lime mortar joints, seamless tileable PBR texture, sharp mortar lines, subtle surface grain, even diffuse lighting, no perspective",
        "1:1 (1024x1024)",
        true,
        true,
        true,
        true,
        true,
        0,
        1555424205,
        "randomize",
        "both",
        8,
        128,
        64,
        0.6,
        false,
        false
      ],
      "widgets_values_named": {
        "prompt": "weathered red brick wall with pale lime mortar joints, seamless tileable PBR texture, sharp mortar lines, subtle surface grain, even diffuse lighting, no perspective",
        "image_size": "1:1 (1024x1024)",
        "basecolor": true,
        "normal": true,
        "roughness": true,
        "metalness": true,
        "height": true,
        "upscale_factor": 0,
        "seed": 1555424205,
        "control_after_generate": "randomize",
        "tiling_mode": "both",
        "num_inference_steps": 8,
        "tile_size": 128,
        "tile_stride": 64,
        "strength": 0.6,
        "prompt_expansion": false,
        "safety_checker": false
      },
      "color": "#432",
      "bgcolor": "#653"
    },
    {
      "id": 29,
      "type": "MarkdownNote",
      "pos": [
        -1167.2808642261145,
        10.564161613901696
      ],
      "size": [
        587.2726037200163,
        782.0166239750356
      ],
      "flags": {},
      "order": 1,
      "mode": 0,
      "inputs": [],
      "outputs": [],
      "properties": {},
      "widgets_values": [
        "# Patina Material\n\n**Text -> complete, seamlessly tiling PBR material.** One prompt returns a base texture plus\nbasecolor / normal / roughness / metalness / height maps, all generated from the same latent so they line up\npixel for pixel. This is a partner (API) node: it runs on Comfy's servers, needs an account, nothing renders locally.\n\n## Three ways to use it\n\n| mode | wiring | behaviour |\n|---|---|---|\n| text -> material | only `prompt` | invents a tileable material from the description |\n| image-to-image | `prompt` + `image` | keeps the photo's structure and redraws it toward the prompt; `strength` 0.01-1 sets how far it moves |\n| inpaint | `prompt` + `image` + `mask` | white = regenerate, black = keep; a mask without an image raises an error |\n\n## Outputs - wire in this slot order\n\n`0 texture` · `1 basecolor` · `2 normal` · `3 roughness` · `4 metalness` · `5 height` · `6 expanded_prompt`\n\nEvery map can be switched off, but at least one has to stay on. Fewer maps = a cheaper, faster run.\n\n## Tips that actually matter\n\n- `image_size`: presets 1024², 512², 4:3, 3:4, 16:9, 9:16, or `custom` (512-2048, step 16).\n- `num_inference_steps` tops out at 8 - there is nothing to gain above that.\n- `tile_size` is in latent space: 128 is about 1024 px, 64 about 512 px. `tiling_mode` = both / horizontal / vertical.\n- `prompt_expansion` is **off by default on purpose**: the LLM rewrite reframes the prompt as a photo and tends to\n  wash out the metalness map. Turn it on only when you want more surface detail and do not need a metalness map.\n- `upscale_factor` 2 or 4 upscales the **maps only** (SeedVR) - the base texture is never upscaled.\n- Describe a surface, not a scene. Add \"flat even lighting, no perspective\" and name the pattern\n  (\"running bond\", \"herringbone\", \"warp and weft\") - that is what makes the result tile.\n- Structured materials work best: wood, stone, metal, fabric, ceramic tile, concrete, leather.\n  Avoid free-form marble, flat gradients, and anything that depends on readable text - the texture generator will\n  happily invent plausible-looking nonsense.\n\n## This workflow\n\nBrick example, all five maps on. Every save node writes to `patina/<yyyymmdd>-<hhmm>_<map>`, so the files of one run\nsit next to each other in the output folder and runs from different days never mix."
      ],
      "widgets_values_named": {
        "text": "# Patina Material\n\n**Text -> complete, seamlessly tiling PBR material.** One prompt returns a base texture plus\nbasecolor / normal / roughness / metalness / height maps, all generated from the same latent so they line up\npixel for pixel. This is a partner (API) node: it runs on Comfy's servers, needs an account, nothing renders locally.\n\n## Three ways to use it\n\n| mode | wiring | behaviour |\n|---|---|---|\n| text -> material | only `prompt` | invents a tileable material from the description |\n| image-to-image | `prompt` + `image` | keeps the photo's structure and redraws it toward the prompt; `strength` 0.01-1 sets how far it moves |\n| inpaint | `prompt` + `image` + `mask` | white = regenerate, black = keep; a mask without an image raises an error |\n\n## Outputs - wire in this slot order\n\n`0 texture` · `1 basecolor` · `2 normal` · `3 roughness` · `4 metalness` · `5 height` · `6 expanded_prompt`\n\nEvery map can be switched off, but at least one has to stay on. Fewer maps = a cheaper, faster run.\n\n## Tips that actually matter\n\n- `image_size`: presets 1024², 512², 4:3, 3:4, 16:9, 9:16, or `custom` (512-2048, step 16).\n- `num_inference_steps` tops out at 8 - there is nothing to gain above that.\n- `tile_size` is in latent space: 128 is about 1024 px, 64 about 512 px. `tiling_mode` = both / horizontal / vertical.\n- `prompt_expansion` is **off by default on purpose**: the LLM rewrite reframes the prompt as a photo and tends to\n  wash out the metalness map. Turn it on only when you want more surface detail and do not need a metalness map.\n- `upscale_factor` 2 or 4 upscales the **maps only** (SeedVR) - the base texture is never upscaled.\n- Describe a surface, not a scene. Add \"flat even lighting, no perspective\" and name the pattern\n  (\"running bond\", \"herringbone\", \"warp and weft\") - that is what makes the result tile.\n- Structured materials work best: wood, stone, metal, fabric, ceramic tile, concrete, leather.\n  Avoid free-form marble, flat gradients, and anything that depends on readable text - the texture generator will\n  happily invent plausible-looking nonsense.\n\n## This workflow\n\nBrick example, all five maps on. Every save node writes to `patina/<yyyymmdd>-<hhmm>_<map>`, so the files of one run\nsit next to each other in the output folder and runs from different days never mix."
      },
      "color": "#222",
      "bgcolor": "#000"
    }
  ],
  "links": [
    [
      9,
      28,
      0,
      23,
      0,
      "IMAGE"
    ],
    [
      10,
      28,
      1,
      21,
      0,
      "IMAGE"
    ],
    [
      11,
      28,
      2,
      22,
      0,
      "IMAGE"
    ],
    [
      12,
      28,
      3,
      24,
      0,
      "IMAGE"
    ],
    [
      13,
      28,
      4,
      25,
      0,
      "IMAGE"
    ],
    [
      14,
      28,
      5,
      26,
      0,
      "IMAGE"
    ],
    [
      15,
      28,
      6,
      27,
      0,
      "STRING"
    ]
  ],
  "groups": [],
  "config": {},
  "extra": {
    "ds": {
      "scale": 0.3629431623024468,
      "offset": [
        1960.0212827127355,
        690.6981233890498
      ]
    },
    "frontendVersion": "1.57.4"
  },
  "version": 0.4
}