{ "last_node_id": 8, "last_link_id": 10, "nodes": [ { "id": 1, "type": "LoadImage", "pos": [50, 150], "size": [315, 314], "flags": {}, "order": 0, "mode": 0, "outputs": [ { "name": "IMAGE", "type": "IMAGE", "links": [1], "shape": 3 } ], "properties": {}, "widgets_values": [ "texture.png", "image" ] }, { "id": 2, "type": "SeamlessTiling", "pos": [450, 150], "size": [315, 150], "flags": {}, "order": 1, "mode": 0, "inputs": [ { "name": "image", "type": "IMAGE", "link": 1 } ], "outputs": [ { "name": "image", "type": "IMAGE", "links": [2, 3], "shape": 3 }, { "name": "edge_mask", "type": "IMAGE", "links": null, "shape": 3 } ], "properties": {}, "widgets_values": [ "blend_edges", 0.1 ] }, { "id": 3, "type": "TextureOffset", "pos": [850, 150], "size": [315, 200], "flags": {}, "order": 2, "mode": 0, "inputs": [ { "name": "image", "type": "IMAGE", "link": 2 } ], "outputs": [ { "name": "image", "type": "IMAGE", "links": [4], "shape": 3 }, { "name": "edge_mask", "type": "IMAGE", "links": null, "shape": 3 } ], "properties": {}, "widgets_values": [ 0.5, 0.5, 0.0, "repeat", 0.1 ], "title": "Texture Offset (Test Seams)" }, { "id": 4, "type": "TextureTiler", "pos": [1250, 150], "size": [315, 150], "flags": {}, "order": 3, "mode": 0, "inputs": [ { "name": "image", "type": "IMAGE", "link": 4 } ], "outputs": [ { "name": "image", "type": "IMAGE", "links": [5], "shape": 3 } ], "properties": {}, "widgets_values": [ 3, 3, false ], "title": "Texture Tiler (3x3 Preview)" }, { "id": 5, "type": "PreviewImage", "pos": [1650, 150], "size": [600, 600], "flags": {}, "order": 4, "mode": 0, "inputs": [ { "name": "images", "type": "IMAGE", "link": 5 } ], "properties": {}, "title": "Tiled Preview (Check Seams!)" }, { "id": 6, "type": "TextureTiler", "pos": [850, 450], "size": [315, 150], "flags": {}, "order": 5, "mode": 0, "inputs": [ { "name": "image", "type": "IMAGE", "link": 3 } ], "outputs": [ { "name": "image", "type": "IMAGE", "links": [6], "shape": 3 } ], "properties": {}, "widgets_values": [ 2, 2, false ], "title": "Texture Tiler (2x2 Original)" }, { "id": 7, "type": "PreviewImage", "pos": [1250, 450], "size": [500, 500], "flags": {}, "order": 6, "mode": 0, "inputs": [ { "name": "images", "type": "IMAGE", "link": 6 } ], "properties": {}, "title": "2x2 Preview (No Offset)" }, { "id": 8, "type": "Note", "pos": [50, 550], "size": [700, 200], "flags": {}, "order": 7, "mode": 0, "properties": {}, "widgets_values": [ "WORKFLOW: Texture Offset & Tiling Preview\n\n1. Load texture\n2. Seamless Tiling Maker creates seamless version\n3. UPPER BRANCH: Texture Offset (0.5, 0.5) shifts by half\n → Then tiles 3x3 to CHECK FOR SEAMS at different positions\n4. LOWER BRANCH: Direct 2x2 tiling without offset\n\nPURPOSE:\n- Offset by 0.5 (half) moves seams to center - reveals ANY remaining seams\n- Tiler creates grid to visualize how texture repeats\n- Compare both previews to ensure perfect seamless tiling\n\nNEW FEATURES:\n- Texture Offset now outputs EDGE MASK showing affected areas!\n- Texture Tiler has 'scale_to_input' option:\n * OFF (default) = Large preview (output size × tiles)\n * ON = Same size output (tiles scaled down - preview density!)\n\nTIPS:\n- If you see seams in the offset version, increase blend_width in Seamless Tiling\n- Try different offset values (0.25, 0.75) to test thoroughly\n- Use edge_mask to see exactly where wrapping occurs\n- Try scale_to_input ON with 4x4 tiles to preview pattern frequency!" ], "bgcolor": "#335" } ], "links": [ [1, 1, 0, 2, 0, "IMAGE"], [2, 2, 0, 3, 0, "IMAGE"], [3, 2, 0, 6, 0, "IMAGE"], [4, 3, 0, 4, 0, "IMAGE"], [5, 4, 0, 5, 0, "IMAGE"], [6, 6, 0, 7, 0, "IMAGE"] ], "groups": [], "config": {}, "extra": {}, "version": 0.4 }