{
  "format": "tensorviz.graph",
  "version": 3,
  "exportedAt": "2026-09-17T07:00:38.449307+00:00",
  "status": "static",
  "warningCount": 0,
  "document": {
    "schemaVersion": 2,
    "semantic": {
      "graph_id": "snapshot",
      "name": "PromptableMaskDecoder",
      "revision": 0,
      "nodes": [
        {
          "node_id": "input",
          "kind": "input",
          "op": "Input",
          "params": {
            "shape": "1,3,8"
          },
          "in_ports": [],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "input",
              "name": "Input",
              "displayName": "Input",
              "description": "Model input node",
              "icon": "ArrowRight",
              "category": "io",
              "parameters": [
                {
                  "name": "shape",
                  "type": "string",
                  "defaultValue": "1,3,224,224",
                  "required": true,
                  "description": "Input tensor shape (comma-separated, e.g., 1,3,224,224)"
                },
                {
                  "name": "name",
                  "type": "string",
                  "defaultValue": "input",
                  "required": false,
                  "description": "Name for this input"
                }
              ]
            }
          }
        },
        {
          "node_id": "flatten@PromptableMaskDecoder#0",
          "kind": "layer",
          "op": "Flatten",
          "params": {
            "start_dim": 2
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "flatten",
              "name": "Flatten",
              "displayName": "Flatten",
              "description": "Flattens input tensor contiguously",
              "icon": "Maximize2",
              "category": "tensor",
              "parameters": [
                {
                  "name": "start_dim",
                  "type": "number",
                  "defaultValue": 1,
                  "required": false,
                  "description": "First dim to flatten",
                  "min": 0
                },
                {
                  "name": "end_dim",
                  "type": "number",
                  "defaultValue": -1,
                  "required": false,
                  "description": "Last dim to flatten"
                }
              ]
            }
          }
        },
        {
          "node_id": "prompt_encoder",
          "kind": "module",
          "op": "Module",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "module",
              "name": "Module",
              "displayName": "Module",
              "description": "Custom module group (nn.Module)",
              "icon": "Package",
              "category": "module",
              "parameters": [
                {
                  "name": "name",
                  "type": "string",
                  "defaultValue": "CustomModule",
                  "required": true,
                  "description": "Module class name"
                },
                {
                  "name": "description",
                  "type": "string",
                  "defaultValue": "",
                  "required": false,
                  "description": "Module description"
                }
              ]
            },
            "moduleInstanceId": "prompt_encoder",
            "moduleTemplateId": "model::PromptEncoder",
            "isGroup": true,
            "moduleMembers": [
              "prompt_encoder.position",
              "prompt_encoder.type_embedding",
              "add@prompt_encoder#0"
            ],
            "moduleLayerCount": 3
          }
        },
        {
          "node_id": "python@PromptableMaskDecoder#0",
          "kind": "layer",
          "op": "Python",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "python",
              "name": "Python",
              "displayName": "Python",
              "description": "A statement from the source file that has no graph equivalent. Its code is kept verbatim and its shape is unknown until the model is traced.",
              "icon": "Hash",
              "category": "misc",
              "parameters": []
            }
          }
        },
        {
          "node_id": "output_tokens",
          "kind": "layer",
          "op": "Parameter",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "parameter",
              "description": "",
              "category": "misc",
              "icon": "Box",
              "parameters": [],
              "name": "Parameter",
              "displayName": "Parameter"
            }
          }
        },
        {
          "node_id": "cat@PromptableMaskDecoder#0",
          "kind": "layer",
          "op": "torch.cat",
          "params": {
            "dim": 1
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "cat",
              "name": "torch.cat",
              "displayName": "torch.cat",
              "description": "PyTorch cat operation",
              "icon": "Activity",
              "category": "tensor",
              "parameters": [
                {
                  "name": "dim",
                  "type": "string",
                  "defaultValue": "",
                  "required": false,
                  "description": "Dimension(s) to apply the operation on"
                }
              ]
            }
          }
        },
        {
          "node_id": "no_mask",
          "kind": "layer",
          "op": "Parameter",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "parameter",
              "description": "",
              "category": "misc",
              "icon": "Box",
              "parameters": [],
              "name": "Parameter",
              "displayName": "Parameter"
            }
          }
        },
        {
          "node_id": "add@PromptableMaskDecoder#0",
          "kind": "layer",
          "op": "torch.add",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "add",
              "name": "torch.add",
              "displayName": "torch.add",
              "description": "PyTorch add operation",
              "icon": "Activity",
              "category": "tensor",
              "parameters": [
                {
                  "name": "dim",
                  "type": "string",
                  "defaultValue": "",
                  "required": false,
                  "description": "Dimension(s) to apply the operation on"
                }
              ]
            }
          }
        },
        {
          "node_id": "decoder",
          "kind": "module",
          "op": "Module",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "module",
              "name": "Module",
              "displayName": "Module",
              "description": "Custom module group (nn.Module)",
              "icon": "Package",
              "category": "module",
              "parameters": [
                {
                  "name": "name",
                  "type": "string",
                  "defaultValue": "CustomModule",
                  "required": true,
                  "description": "Module class name"
                },
                {
                  "name": "description",
                  "type": "string",
                  "defaultValue": "",
                  "required": false,
                  "description": "Module description"
                }
              ]
            },
            "moduleInstanceId": "decoder",
            "moduleTemplateId": "model::TwoWayDecoder",
            "isGroup": true,
            "moduleMembers": [
              "decoder.first",
              "decoder.second",
              "add@decoder#0",
              "add@decoder#1",
              "decoder.final_attention",
              "add@decoder#2",
              "decoder.final_norm"
            ],
            "moduleLayerCount": 72
          }
        },
        {
          "node_id": "upscale",
          "kind": "module",
          "op": "Module",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "module",
              "name": "Module",
              "displayName": "Module",
              "description": "Custom module group (nn.Module)",
              "icon": "Package",
              "category": "module",
              "parameters": [
                {
                  "name": "name",
                  "type": "string",
                  "defaultValue": "CustomModule",
                  "required": true,
                  "description": "Module class name"
                },
                {
                  "name": "description",
                  "type": "string",
                  "defaultValue": "",
                  "required": false,
                  "description": "Module description"
                }
              ]
            },
            "moduleInstanceId": "upscale",
            "moduleTemplateId": "model::Upscale",
            "isGroup": true,
            "moduleMembers": [
              "upscale.first",
              "permute@upscale#0",
              "upscale.norm",
              "permute@upscale#1",
              "gelu@upscale#0",
              "upscale.second",
              "gelu@upscale#1"
            ],
            "moduleLayerCount": 7
          }
        },
        {
          "node_id": "masks",
          "kind": "module",
          "op": "Module",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "module",
              "name": "Module",
              "displayName": "Module",
              "description": "Custom module group (nn.Module)",
              "icon": "Package",
              "category": "module",
              "parameters": [
                {
                  "name": "name",
                  "type": "string",
                  "defaultValue": "CustomModule",
                  "required": true,
                  "description": "Module class name"
                },
                {
                  "name": "description",
                  "type": "string",
                  "defaultValue": "",
                  "required": false,
                  "description": "Module description"
                }
              ]
            },
            "moduleInstanceId": "masks",
            "moduleTemplateId": "model::MaskHeads",
            "isGroup": true,
            "moduleMembers": [
              "flatten@masks#0",
              "masks.mask0",
              "masks.mask1",
              "masks.mask2",
              "stack@masks#0",
              "python@masks#0"
            ],
            "moduleLayerCount": 18
          }
        },
        {
          "node_id": "flatten@PromptableMaskDecoder#1",
          "kind": "layer",
          "op": "Flatten",
          "params": {
            "start_dim": 1
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "flatten",
              "name": "Flatten",
              "displayName": "Flatten",
              "description": "Flattens input tensor contiguously",
              "icon": "Maximize2",
              "category": "tensor",
              "parameters": [
                {
                  "name": "start_dim",
                  "type": "number",
                  "defaultValue": 1,
                  "required": false,
                  "description": "First dim to flatten",
                  "min": 0
                },
                {
                  "name": "end_dim",
                  "type": "number",
                  "defaultValue": -1,
                  "required": false,
                  "description": "Last dim to flatten"
                }
              ]
            }
          }
        },
        {
          "node_id": "quality",
          "kind": "module",
          "op": "Module",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "module",
              "name": "Module",
              "displayName": "Module",
              "description": "Custom module group (nn.Module)",
              "icon": "Package",
              "category": "module",
              "parameters": [
                {
                  "name": "name",
                  "type": "string",
                  "defaultValue": "CustomModule",
                  "required": true,
                  "description": "Module class name"
                },
                {
                  "name": "description",
                  "type": "string",
                  "defaultValue": "",
                  "required": false,
                  "description": "Module description"
                }
              ]
            },
            "moduleInstanceId": "quality",
            "moduleTemplateId": "model::QualityHead",
            "isGroup": true,
            "moduleMembers": [
              "quality.first",
              "relu@quality#0",
              "quality.second",
              "relu@quality#1",
              "quality.scores"
            ],
            "moduleLayerCount": 5
          }
        },
        {
          "node_id": "cat@PromptableMaskDecoder#1",
          "kind": "layer",
          "op": "torch.cat",
          "params": {
            "dim": -1
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "cat",
              "name": "torch.cat",
              "displayName": "torch.cat",
              "description": "PyTorch cat operation",
              "icon": "Activity",
              "category": "tensor",
              "parameters": [
                {
                  "name": "dim",
                  "type": "string",
                  "defaultValue": "",
                  "required": false,
                  "description": "Dimension(s) to apply the operation on"
                }
              ]
            }
          }
        },
        {
          "node_id": "output",
          "kind": "output",
          "op": "Output",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [],
          "metadata": {
            "layerType": {
              "id": "output",
              "name": "Output",
              "displayName": "Output",
              "description": "Model output node",
              "icon": "ArrowLeft",
              "category": "io",
              "parameters": [
                {
                  "name": "name",
                  "type": "string",
                  "defaultValue": "output",
                  "required": false,
                  "description": "Name for this output"
                }
              ]
            }
          }
        },
        {
          "node_id": "prompt_encoder.position",
          "kind": "module",
          "op": "Module",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "module",
              "name": "Module",
              "displayName": "Module",
              "description": "Custom module group (nn.Module)",
              "icon": "Package",
              "category": "module",
              "parameters": [
                {
                  "name": "name",
                  "type": "string",
                  "defaultValue": "CustomModule",
                  "required": true,
                  "description": "Module class name"
                },
                {
                  "name": "description",
                  "type": "string",
                  "defaultValue": "",
                  "required": false,
                  "description": "Module description"
                }
              ]
            },
            "parentId": "prompt_encoder",
            "moduleInstanceId": "prompt_encoder.position",
            "moduleTemplateId": "model::PositionEncoding",
            "isGroup": true,
            "moduleMembers": [
              "cat@prompt_encoder.position#0"
            ],
            "moduleLayerCount": 1
          }
        },
        {
          "node_id": "prompt_encoder.type_embedding",
          "kind": "layer",
          "op": "Embedding",
          "params": {
            "num_embeddings": 4,
            "embedding_dim": 8
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "embedding",
              "name": "Embedding",
              "displayName": "Embedding",
              "description": "Lookup table for dense vector embeddings",
              "icon": "Hash",
              "category": "embedding",
              "parameters": [
                {
                  "name": "num_embeddings",
                  "type": "number",
                  "defaultValue": 10000,
                  "required": true,
                  "description": "Size of the dictionary of embeddings",
                  "min": 1
                },
                {
                  "name": "embedding_dim",
                  "type": "number",
                  "defaultValue": 128,
                  "required": true,
                  "description": "Size of each embedding vector",
                  "min": 1
                },
                {
                  "name": "padding_idx",
                  "type": "number",
                  "defaultValue": 0,
                  "required": false,
                  "description": "Pad output with zeros at this index",
                  "min": 0
                },
                {
                  "name": "max_norm",
                  "type": "number",
                  "defaultValue": 0,
                  "required": false,
                  "description": "If > 0, re-normalizes embeddings with norm > max_norm",
                  "min": 0
                },
                {
                  "name": "sparse",
                  "type": "boolean",
                  "defaultValue": false,
                  "required": false,
                  "description": "If True, gradient w.r.t. weight is sparse"
                }
              ]
            },
            "parentId": "prompt_encoder"
          }
        },
        {
          "node_id": "add@prompt_encoder#0",
          "kind": "layer",
          "op": "torch.add",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "add",
              "name": "torch.add",
              "displayName": "torch.add",
              "description": "PyTorch add operation",
              "icon": "Activity",
              "category": "tensor",
              "parameters": [
                {
                  "name": "dim",
                  "type": "string",
                  "defaultValue": "",
                  "required": false,
                  "description": "Dimension(s) to apply the operation on"
                }
              ]
            },
            "parentId": "prompt_encoder"
          }
        },
        {
          "node_id": "cat@prompt_encoder.position#0",
          "kind": "layer",
          "op": "torch.cat",
          "params": {
            "dim": -1
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "cat",
              "name": "torch.cat",
              "displayName": "torch.cat",
              "description": "PyTorch cat operation",
              "icon": "Activity",
              "category": "tensor",
              "parameters": [
                {
                  "name": "dim",
                  "type": "string",
                  "defaultValue": "",
                  "required": false,
                  "description": "Dimension(s) to apply the operation on"
                }
              ]
            },
            "parentId": "prompt_encoder.position"
          }
        },
        {
          "node_id": "decoder.first",
          "kind": "module",
          "op": "Module",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "module",
              "name": "Module",
              "displayName": "Module",
              "description": "Custom module group (nn.Module)",
              "icon": "Package",
              "category": "module",
              "parameters": [
                {
                  "name": "name",
                  "type": "string",
                  "defaultValue": "CustomModule",
                  "required": true,
                  "description": "Module class name"
                },
                {
                  "name": "description",
                  "type": "string",
                  "defaultValue": "",
                  "required": false,
                  "description": "Module description"
                }
              ]
            },
            "parentId": "decoder",
            "moduleInstanceId": "decoder.first",
            "moduleTemplateId": "model::TwoWayBlock",
            "isGroup": true,
            "moduleMembers": [
              "decoder.first.self_attention",
              "add@decoder.first#0",
              "decoder.first.self_norm",
              "add@decoder.first#1",
              "decoder.first.token_to_image",
              "add@decoder.first#2",
              "decoder.first.token_norm",
              "decoder.first.up",
              "decoder.first.relu",
              "decoder.first.down",
              "add@decoder.first#3",
              "decoder.first.mlp_norm",
              "add@decoder.first#4",
              "decoder.first.image_to_token",
              "add@decoder.first#5",
              "decoder.first.image_norm"
            ],
            "moduleLayerCount": 31
          }
        },
        {
          "node_id": "decoder.second",
          "kind": "module",
          "op": "Module",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "module",
              "name": "Module",
              "displayName": "Module",
              "description": "Custom module group (nn.Module)",
              "icon": "Package",
              "category": "module",
              "parameters": [
                {
                  "name": "name",
                  "type": "string",
                  "defaultValue": "CustomModule",
                  "required": true,
                  "description": "Module class name"
                },
                {
                  "name": "description",
                  "type": "string",
                  "defaultValue": "",
                  "required": false,
                  "description": "Module description"
                }
              ]
            },
            "parentId": "decoder",
            "moduleInstanceId": "decoder.second",
            "moduleTemplateId": "model::TwoWayBlock",
            "isGroup": true,
            "moduleMembers": [
              "decoder.second.self_attention",
              "add@decoder.second#0",
              "decoder.second.self_norm",
              "add@decoder.second#1",
              "decoder.second.token_to_image",
              "add@decoder.second#2",
              "decoder.second.token_norm",
              "decoder.second.up",
              "decoder.second.relu",
              "decoder.second.down",
              "add@decoder.second#3",
              "decoder.second.mlp_norm",
              "add@decoder.second#4",
              "decoder.second.image_to_token",
              "add@decoder.second#5",
              "decoder.second.image_norm"
            ],
            "moduleLayerCount": 31
          }
        },
        {
          "node_id": "add@decoder#0",
          "kind": "layer",
          "op": "torch.add",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "add",
              "name": "torch.add",
              "displayName": "torch.add",
              "description": "PyTorch add operation",
              "icon": "Activity",
              "category": "tensor",
              "parameters": [
                {
                  "name": "dim",
                  "type": "string",
                  "defaultValue": "",
                  "required": false,
                  "description": "Dimension(s) to apply the operation on"
                }
              ]
            },
            "parentId": "decoder"
          }
        },
        {
          "node_id": "add@decoder#1",
          "kind": "layer",
          "op": "torch.add",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "add",
              "name": "torch.add",
              "displayName": "torch.add",
              "description": "PyTorch add operation",
              "icon": "Activity",
              "category": "tensor",
              "parameters": [
                {
                  "name": "dim",
                  "type": "string",
                  "defaultValue": "",
                  "required": false,
                  "description": "Dimension(s) to apply the operation on"
                }
              ]
            },
            "parentId": "decoder"
          }
        },
        {
          "node_id": "decoder.final_attention",
          "kind": "module",
          "op": "Module",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "module",
              "name": "Module",
              "displayName": "Module",
              "description": "Custom module group (nn.Module)",
              "icon": "Package",
              "category": "module",
              "parameters": [
                {
                  "name": "name",
                  "type": "string",
                  "defaultValue": "CustomModule",
                  "required": true,
                  "description": "Module class name"
                },
                {
                  "name": "description",
                  "type": "string",
                  "defaultValue": "",
                  "required": false,
                  "description": "Module description"
                }
              ]
            },
            "parentId": "decoder",
            "moduleInstanceId": "decoder.final_attention",
            "moduleTemplateId": "model::Attention",
            "isGroup": true,
            "moduleMembers": [
              "decoder.final_attention.query",
              "decoder.final_attention.key",
              "div@decoder.final_attention#0",
              "decoder.final_attention.value",
              "decoder.final_attention.softmax",
              "decoder.final_attention.project"
            ],
            "moduleLayerCount": 6
          }
        },
        {
          "node_id": "add@decoder#2",
          "kind": "layer",
          "op": "torch.add",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "add",
              "name": "torch.add",
              "displayName": "torch.add",
              "description": "PyTorch add operation",
              "icon": "Activity",
              "category": "tensor",
              "parameters": [
                {
                  "name": "dim",
                  "type": "string",
                  "defaultValue": "",
                  "required": false,
                  "description": "Dimension(s) to apply the operation on"
                }
              ]
            },
            "parentId": "decoder"
          }
        },
        {
          "node_id": "decoder.final_norm",
          "kind": "layer",
          "op": "LayerNorm",
          "params": {
            "normalized_shape": 8
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "layernorm",
              "name": "LayerNorm",
              "displayName": "LayerNorm",
              "description": "Layer Normalization",
              "icon": "Layers",
              "category": "norm",
              "parameters": [
                {
                  "name": "normalized_shape",
                  "type": "string",
                  "defaultValue": "512",
                  "required": true,
                  "description": "Input shape for normalization (comma-separated for multi-dim, e.g., 512)"
                },
                {
                  "name": "eps",
                  "type": "number",
                  "defaultValue": 0.00001,
                  "required": false,
                  "description": "Value for numerical stability",
                  "min": 0
                },
                {
                  "name": "elementwise_affine",
                  "type": "boolean",
                  "defaultValue": true,
                  "required": false,
                  "description": "If True, learnable affine parameters"
                }
              ]
            },
            "parentId": "decoder"
          }
        },
        {
          "node_id": "decoder.first.self_attention",
          "kind": "module",
          "op": "Module",
          "params": {
            "arg_0": 8
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "module",
              "name": "Module",
              "displayName": "Module",
              "description": "Custom module group (nn.Module)",
              "icon": "Package",
              "category": "module",
              "parameters": [
                {
                  "name": "name",
                  "type": "string",
                  "defaultValue": "CustomModule",
                  "required": true,
                  "description": "Module class name"
                },
                {
                  "name": "description",
                  "type": "string",
                  "defaultValue": "",
                  "required": false,
                  "description": "Module description"
                }
              ]
            },
            "parentId": "decoder.first",
            "moduleInstanceId": "decoder.first.self_attention",
            "moduleTemplateId": "model::Attention",
            "isGroup": true,
            "moduleMembers": [
              "decoder.first.self_attention.query",
              "decoder.first.self_attention.key",
              "div@decoder.first.self_attention#0",
              "decoder.first.self_attention.value",
              "decoder.first.self_attention.softmax",
              "decoder.first.self_attention.project"
            ],
            "moduleLayerCount": 6
          }
        },
        {
          "node_id": "add@decoder.first#0",
          "kind": "layer",
          "op": "torch.add",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "add",
              "name": "torch.add",
              "displayName": "torch.add",
              "description": "PyTorch add operation",
              "icon": "Activity",
              "category": "tensor",
              "parameters": [
                {
                  "name": "dim",
                  "type": "string",
                  "defaultValue": "",
                  "required": false,
                  "description": "Dimension(s) to apply the operation on"
                }
              ]
            },
            "parentId": "decoder.first"
          }
        },
        {
          "node_id": "decoder.first.self_norm",
          "kind": "layer",
          "op": "LayerNorm",
          "params": {
            "normalized_shape": 8
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "layernorm",
              "name": "LayerNorm",
              "displayName": "LayerNorm",
              "description": "Layer Normalization",
              "icon": "Layers",
              "category": "norm",
              "parameters": [
                {
                  "name": "normalized_shape",
                  "type": "string",
                  "defaultValue": "512",
                  "required": true,
                  "description": "Input shape for normalization (comma-separated for multi-dim, e.g., 512)"
                },
                {
                  "name": "eps",
                  "type": "number",
                  "defaultValue": 0.00001,
                  "required": false,
                  "description": "Value for numerical stability",
                  "min": 0
                },
                {
                  "name": "elementwise_affine",
                  "type": "boolean",
                  "defaultValue": true,
                  "required": false,
                  "description": "If True, learnable affine parameters"
                }
              ]
            },
            "parentId": "decoder.first"
          }
        },
        {
          "node_id": "add@decoder.first#1",
          "kind": "layer",
          "op": "torch.add",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "add",
              "name": "torch.add",
              "displayName": "torch.add",
              "description": "PyTorch add operation",
              "icon": "Activity",
              "category": "tensor",
              "parameters": [
                {
                  "name": "dim",
                  "type": "string",
                  "defaultValue": "",
                  "required": false,
                  "description": "Dimension(s) to apply the operation on"
                }
              ]
            },
            "parentId": "decoder.first"
          }
        },
        {
          "node_id": "decoder.first.token_to_image",
          "kind": "module",
          "op": "Module",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "module",
              "name": "Module",
              "displayName": "Module",
              "description": "Custom module group (nn.Module)",
              "icon": "Package",
              "category": "module",
              "parameters": [
                {
                  "name": "name",
                  "type": "string",
                  "defaultValue": "CustomModule",
                  "required": true,
                  "description": "Module class name"
                },
                {
                  "name": "description",
                  "type": "string",
                  "defaultValue": "",
                  "required": false,
                  "description": "Module description"
                }
              ]
            },
            "parentId": "decoder.first",
            "moduleInstanceId": "decoder.first.token_to_image",
            "moduleTemplateId": "model::Attention",
            "isGroup": true,
            "moduleMembers": [
              "decoder.first.token_to_image.query",
              "decoder.first.token_to_image.key",
              "div@decoder.first.token_to_image#0",
              "decoder.first.token_to_image.value",
              "decoder.first.token_to_image.softmax",
              "decoder.first.token_to_image.project"
            ],
            "moduleLayerCount": 6
          }
        },
        {
          "node_id": "add@decoder.first#2",
          "kind": "layer",
          "op": "torch.add",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "add",
              "name": "torch.add",
              "displayName": "torch.add",
              "description": "PyTorch add operation",
              "icon": "Activity",
              "category": "tensor",
              "parameters": [
                {
                  "name": "dim",
                  "type": "string",
                  "defaultValue": "",
                  "required": false,
                  "description": "Dimension(s) to apply the operation on"
                }
              ]
            },
            "parentId": "decoder.first"
          }
        },
        {
          "node_id": "decoder.first.token_norm",
          "kind": "layer",
          "op": "LayerNorm",
          "params": {
            "normalized_shape": 8
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "layernorm",
              "name": "LayerNorm",
              "displayName": "LayerNorm",
              "description": "Layer Normalization",
              "icon": "Layers",
              "category": "norm",
              "parameters": [
                {
                  "name": "normalized_shape",
                  "type": "string",
                  "defaultValue": "512",
                  "required": true,
                  "description": "Input shape for normalization (comma-separated for multi-dim, e.g., 512)"
                },
                {
                  "name": "eps",
                  "type": "number",
                  "defaultValue": 0.00001,
                  "required": false,
                  "description": "Value for numerical stability",
                  "min": 0
                },
                {
                  "name": "elementwise_affine",
                  "type": "boolean",
                  "defaultValue": true,
                  "required": false,
                  "description": "If True, learnable affine parameters"
                }
              ]
            },
            "parentId": "decoder.first"
          }
        },
        {
          "node_id": "decoder.first.up",
          "kind": "layer",
          "op": "Linear",
          "params": {
            "in_features": 8,
            "out_features": 32
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "linear",
              "name": "Linear",
              "displayName": "Linear",
              "description": "Fully Connected Layer",
              "icon": "Minus",
              "category": "linear",
              "parameters": [
                {
                  "name": "in_features",
                  "type": "number",
                  "defaultValue": 512,
                  "required": true,
                  "description": "Size of input features",
                  "min": 1
                },
                {
                  "name": "out_features",
                  "type": "number",
                  "defaultValue": 256,
                  "required": true,
                  "description": "Size of output features",
                  "min": 1
                },
                {
                  "name": "bias",
                  "type": "boolean",
                  "defaultValue": true,
                  "required": false,
                  "description": "If set to False, the layer will not learn an additive bias"
                }
              ]
            },
            "parentId": "decoder.first"
          }
        },
        {
          "node_id": "decoder.first.relu",
          "kind": "layer",
          "op": "ReLU",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "relu",
              "name": "ReLU",
              "displayName": "ReLU",
              "description": "Rectified Linear Unit",
              "icon": "TrendingUp",
              "category": "activation",
              "parameters": [
                {
                  "name": "inplace",
                  "type": "boolean",
                  "defaultValue": false,
                  "required": false,
                  "description": "Can optionally do the operation in-place"
                }
              ]
            },
            "parentId": "decoder.first"
          }
        },
        {
          "node_id": "decoder.first.down",
          "kind": "layer",
          "op": "Linear",
          "params": {
            "in_features": 32,
            "out_features": 8
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "linear",
              "name": "Linear",
              "displayName": "Linear",
              "description": "Fully Connected Layer",
              "icon": "Minus",
              "category": "linear",
              "parameters": [
                {
                  "name": "in_features",
                  "type": "number",
                  "defaultValue": 512,
                  "required": true,
                  "description": "Size of input features",
                  "min": 1
                },
                {
                  "name": "out_features",
                  "type": "number",
                  "defaultValue": 256,
                  "required": true,
                  "description": "Size of output features",
                  "min": 1
                },
                {
                  "name": "bias",
                  "type": "boolean",
                  "defaultValue": true,
                  "required": false,
                  "description": "If set to False, the layer will not learn an additive bias"
                }
              ]
            },
            "parentId": "decoder.first"
          }
        },
        {
          "node_id": "add@decoder.first#3",
          "kind": "layer",
          "op": "torch.add",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "add",
              "name": "torch.add",
              "displayName": "torch.add",
              "description": "PyTorch add operation",
              "icon": "Activity",
              "category": "tensor",
              "parameters": [
                {
                  "name": "dim",
                  "type": "string",
                  "defaultValue": "",
                  "required": false,
                  "description": "Dimension(s) to apply the operation on"
                }
              ]
            },
            "parentId": "decoder.first"
          }
        },
        {
          "node_id": "decoder.first.mlp_norm",
          "kind": "layer",
          "op": "LayerNorm",
          "params": {
            "normalized_shape": 8
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "layernorm",
              "name": "LayerNorm",
              "displayName": "LayerNorm",
              "description": "Layer Normalization",
              "icon": "Layers",
              "category": "norm",
              "parameters": [
                {
                  "name": "normalized_shape",
                  "type": "string",
                  "defaultValue": "512",
                  "required": true,
                  "description": "Input shape for normalization (comma-separated for multi-dim, e.g., 512)"
                },
                {
                  "name": "eps",
                  "type": "number",
                  "defaultValue": 0.00001,
                  "required": false,
                  "description": "Value for numerical stability",
                  "min": 0
                },
                {
                  "name": "elementwise_affine",
                  "type": "boolean",
                  "defaultValue": true,
                  "required": false,
                  "description": "If True, learnable affine parameters"
                }
              ]
            },
            "parentId": "decoder.first"
          }
        },
        {
          "node_id": "add@decoder.first#4",
          "kind": "layer",
          "op": "torch.add",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "add",
              "name": "torch.add",
              "displayName": "torch.add",
              "description": "PyTorch add operation",
              "icon": "Activity",
              "category": "tensor",
              "parameters": [
                {
                  "name": "dim",
                  "type": "string",
                  "defaultValue": "",
                  "required": false,
                  "description": "Dimension(s) to apply the operation on"
                }
              ]
            },
            "parentId": "decoder.first"
          }
        },
        {
          "node_id": "decoder.first.image_to_token",
          "kind": "module",
          "op": "Module",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "module",
              "name": "Module",
              "displayName": "Module",
              "description": "Custom module group (nn.Module)",
              "icon": "Package",
              "category": "module",
              "parameters": [
                {
                  "name": "name",
                  "type": "string",
                  "defaultValue": "CustomModule",
                  "required": true,
                  "description": "Module class name"
                },
                {
                  "name": "description",
                  "type": "string",
                  "defaultValue": "",
                  "required": false,
                  "description": "Module description"
                }
              ]
            },
            "parentId": "decoder.first",
            "moduleInstanceId": "decoder.first.image_to_token",
            "moduleTemplateId": "model::Attention",
            "isGroup": true,
            "moduleMembers": [
              "decoder.first.image_to_token.query",
              "decoder.first.image_to_token.key",
              "div@decoder.first.image_to_token#0",
              "decoder.first.image_to_token.value",
              "decoder.first.image_to_token.softmax",
              "decoder.first.image_to_token.project"
            ],
            "moduleLayerCount": 6
          }
        },
        {
          "node_id": "add@decoder.first#5",
          "kind": "layer",
          "op": "torch.add",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "add",
              "name": "torch.add",
              "displayName": "torch.add",
              "description": "PyTorch add operation",
              "icon": "Activity",
              "category": "tensor",
              "parameters": [
                {
                  "name": "dim",
                  "type": "string",
                  "defaultValue": "",
                  "required": false,
                  "description": "Dimension(s) to apply the operation on"
                }
              ]
            },
            "parentId": "decoder.first"
          }
        },
        {
          "node_id": "decoder.first.image_norm",
          "kind": "layer",
          "op": "LayerNorm",
          "params": {
            "normalized_shape": 8
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "layernorm",
              "name": "LayerNorm",
              "displayName": "LayerNorm",
              "description": "Layer Normalization",
              "icon": "Layers",
              "category": "norm",
              "parameters": [
                {
                  "name": "normalized_shape",
                  "type": "string",
                  "defaultValue": "512",
                  "required": true,
                  "description": "Input shape for normalization (comma-separated for multi-dim, e.g., 512)"
                },
                {
                  "name": "eps",
                  "type": "number",
                  "defaultValue": 0.00001,
                  "required": false,
                  "description": "Value for numerical stability",
                  "min": 0
                },
                {
                  "name": "elementwise_affine",
                  "type": "boolean",
                  "defaultValue": true,
                  "required": false,
                  "description": "If True, learnable affine parameters"
                }
              ]
            },
            "parentId": "decoder.first"
          }
        },
        {
          "node_id": "decoder.first.self_attention.query",
          "kind": "layer",
          "op": "Linear",
          "params": {
            "in_features": 8,
            "out_features": 4
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "linear",
              "name": "Linear",
              "displayName": "Linear",
              "description": "Fully Connected Layer",
              "icon": "Minus",
              "category": "linear",
              "parameters": [
                {
                  "name": "in_features",
                  "type": "number",
                  "defaultValue": 512,
                  "required": true,
                  "description": "Size of input features",
                  "min": 1
                },
                {
                  "name": "out_features",
                  "type": "number",
                  "defaultValue": 256,
                  "required": true,
                  "description": "Size of output features",
                  "min": 1
                },
                {
                  "name": "bias",
                  "type": "boolean",
                  "defaultValue": true,
                  "required": false,
                  "description": "If set to False, the layer will not learn an additive bias"
                }
              ]
            },
            "parentId": "decoder.first.self_attention"
          }
        },
        {
          "node_id": "decoder.first.self_attention.key",
          "kind": "layer",
          "op": "Linear",
          "params": {
            "in_features": 8,
            "out_features": 4
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "linear",
              "name": "Linear",
              "displayName": "Linear",
              "description": "Fully Connected Layer",
              "icon": "Minus",
              "category": "linear",
              "parameters": [
                {
                  "name": "in_features",
                  "type": "number",
                  "defaultValue": 512,
                  "required": true,
                  "description": "Size of input features",
                  "min": 1
                },
                {
                  "name": "out_features",
                  "type": "number",
                  "defaultValue": 256,
                  "required": true,
                  "description": "Size of output features",
                  "min": 1
                },
                {
                  "name": "bias",
                  "type": "boolean",
                  "defaultValue": true,
                  "required": false,
                  "description": "If set to False, the layer will not learn an additive bias"
                }
              ]
            },
            "parentId": "decoder.first.self_attention"
          }
        },
        {
          "node_id": "div@decoder.first.self_attention#0",
          "kind": "layer",
          "op": "torch.div",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "div",
              "name": "torch.div",
              "displayName": "torch.div",
              "description": "PyTorch div operation",
              "icon": "Activity",
              "category": "tensor",
              "parameters": [
                {
                  "name": "dim",
                  "type": "string",
                  "defaultValue": "",
                  "required": false,
                  "description": "Dimension(s) to apply the operation on"
                }
              ]
            },
            "parentId": "decoder.first.self_attention"
          }
        },
        {
          "node_id": "decoder.first.self_attention.value",
          "kind": "layer",
          "op": "Linear",
          "params": {
            "in_features": 8,
            "out_features": 4
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "linear",
              "name": "Linear",
              "displayName": "Linear",
              "description": "Fully Connected Layer",
              "icon": "Minus",
              "category": "linear",
              "parameters": [
                {
                  "name": "in_features",
                  "type": "number",
                  "defaultValue": 512,
                  "required": true,
                  "description": "Size of input features",
                  "min": 1
                },
                {
                  "name": "out_features",
                  "type": "number",
                  "defaultValue": 256,
                  "required": true,
                  "description": "Size of output features",
                  "min": 1
                },
                {
                  "name": "bias",
                  "type": "boolean",
                  "defaultValue": true,
                  "required": false,
                  "description": "If set to False, the layer will not learn an additive bias"
                }
              ]
            },
            "parentId": "decoder.first.self_attention"
          }
        },
        {
          "node_id": "decoder.first.self_attention.softmax",
          "kind": "layer",
          "op": "Softmax",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "softmax",
              "name": "Softmax",
              "displayName": "Softmax",
              "description": "Softmax over a dimension",
              "icon": "TrendingUp",
              "category": "activation",
              "parameters": [
                {
                  "name": "dim",
                  "type": "number",
                  "defaultValue": 1,
                  "required": true,
                  "description": "Dimension along which Softmax is computed"
                }
              ]
            },
            "parentId": "decoder.first.self_attention"
          }
        },
        {
          "node_id": "decoder.first.self_attention.project",
          "kind": "layer",
          "op": "Linear",
          "params": {
            "in_features": 4,
            "out_features": 8
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "linear",
              "name": "Linear",
              "displayName": "Linear",
              "description": "Fully Connected Layer",
              "icon": "Minus",
              "category": "linear",
              "parameters": [
                {
                  "name": "in_features",
                  "type": "number",
                  "defaultValue": 512,
                  "required": true,
                  "description": "Size of input features",
                  "min": 1
                },
                {
                  "name": "out_features",
                  "type": "number",
                  "defaultValue": 256,
                  "required": true,
                  "description": "Size of output features",
                  "min": 1
                },
                {
                  "name": "bias",
                  "type": "boolean",
                  "defaultValue": true,
                  "required": false,
                  "description": "If set to False, the layer will not learn an additive bias"
                }
              ]
            },
            "parentId": "decoder.first.self_attention"
          }
        },
        {
          "node_id": "decoder.first.token_to_image.query",
          "kind": "layer",
          "op": "Linear",
          "params": {
            "in_features": 8,
            "out_features": 4
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "linear",
              "name": "Linear",
              "displayName": "Linear",
              "description": "Fully Connected Layer",
              "icon": "Minus",
              "category": "linear",
              "parameters": [
                {
                  "name": "in_features",
                  "type": "number",
                  "defaultValue": 512,
                  "required": true,
                  "description": "Size of input features",
                  "min": 1
                },
                {
                  "name": "out_features",
                  "type": "number",
                  "defaultValue": 256,
                  "required": true,
                  "description": "Size of output features",
                  "min": 1
                },
                {
                  "name": "bias",
                  "type": "boolean",
                  "defaultValue": true,
                  "required": false,
                  "description": "If set to False, the layer will not learn an additive bias"
                }
              ]
            },
            "parentId": "decoder.first.token_to_image"
          }
        },
        {
          "node_id": "decoder.first.token_to_image.key",
          "kind": "layer",
          "op": "Linear",
          "params": {
            "in_features": 8,
            "out_features": 4
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "linear",
              "name": "Linear",
              "displayName": "Linear",
              "description": "Fully Connected Layer",
              "icon": "Minus",
              "category": "linear",
              "parameters": [
                {
                  "name": "in_features",
                  "type": "number",
                  "defaultValue": 512,
                  "required": true,
                  "description": "Size of input features",
                  "min": 1
                },
                {
                  "name": "out_features",
                  "type": "number",
                  "defaultValue": 256,
                  "required": true,
                  "description": "Size of output features",
                  "min": 1
                },
                {
                  "name": "bias",
                  "type": "boolean",
                  "defaultValue": true,
                  "required": false,
                  "description": "If set to False, the layer will not learn an additive bias"
                }
              ]
            },
            "parentId": "decoder.first.token_to_image"
          }
        },
        {
          "node_id": "div@decoder.first.token_to_image#0",
          "kind": "layer",
          "op": "torch.div",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "div",
              "name": "torch.div",
              "displayName": "torch.div",
              "description": "PyTorch div operation",
              "icon": "Activity",
              "category": "tensor",
              "parameters": [
                {
                  "name": "dim",
                  "type": "string",
                  "defaultValue": "",
                  "required": false,
                  "description": "Dimension(s) to apply the operation on"
                }
              ]
            },
            "parentId": "decoder.first.token_to_image"
          }
        },
        {
          "node_id": "decoder.first.token_to_image.value",
          "kind": "layer",
          "op": "Linear",
          "params": {
            "in_features": 8,
            "out_features": 4
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "linear",
              "name": "Linear",
              "displayName": "Linear",
              "description": "Fully Connected Layer",
              "icon": "Minus",
              "category": "linear",
              "parameters": [
                {
                  "name": "in_features",
                  "type": "number",
                  "defaultValue": 512,
                  "required": true,
                  "description": "Size of input features",
                  "min": 1
                },
                {
                  "name": "out_features",
                  "type": "number",
                  "defaultValue": 256,
                  "required": true,
                  "description": "Size of output features",
                  "min": 1
                },
                {
                  "name": "bias",
                  "type": "boolean",
                  "defaultValue": true,
                  "required": false,
                  "description": "If set to False, the layer will not learn an additive bias"
                }
              ]
            },
            "parentId": "decoder.first.token_to_image"
          }
        },
        {
          "node_id": "decoder.first.token_to_image.softmax",
          "kind": "layer",
          "op": "Softmax",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "softmax",
              "name": "Softmax",
              "displayName": "Softmax",
              "description": "Softmax over a dimension",
              "icon": "TrendingUp",
              "category": "activation",
              "parameters": [
                {
                  "name": "dim",
                  "type": "number",
                  "defaultValue": 1,
                  "required": true,
                  "description": "Dimension along which Softmax is computed"
                }
              ]
            },
            "parentId": "decoder.first.token_to_image"
          }
        },
        {
          "node_id": "decoder.first.token_to_image.project",
          "kind": "layer",
          "op": "Linear",
          "params": {
            "in_features": 4,
            "out_features": 8
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "linear",
              "name": "Linear",
              "displayName": "Linear",
              "description": "Fully Connected Layer",
              "icon": "Minus",
              "category": "linear",
              "parameters": [
                {
                  "name": "in_features",
                  "type": "number",
                  "defaultValue": 512,
                  "required": true,
                  "description": "Size of input features",
                  "min": 1
                },
                {
                  "name": "out_features",
                  "type": "number",
                  "defaultValue": 256,
                  "required": true,
                  "description": "Size of output features",
                  "min": 1
                },
                {
                  "name": "bias",
                  "type": "boolean",
                  "defaultValue": true,
                  "required": false,
                  "description": "If set to False, the layer will not learn an additive bias"
                }
              ]
            },
            "parentId": "decoder.first.token_to_image"
          }
        },
        {
          "node_id": "decoder.first.image_to_token.query",
          "kind": "layer",
          "op": "Linear",
          "params": {
            "in_features": 8,
            "out_features": 4
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "linear",
              "name": "Linear",
              "displayName": "Linear",
              "description": "Fully Connected Layer",
              "icon": "Minus",
              "category": "linear",
              "parameters": [
                {
                  "name": "in_features",
                  "type": "number",
                  "defaultValue": 512,
                  "required": true,
                  "description": "Size of input features",
                  "min": 1
                },
                {
                  "name": "out_features",
                  "type": "number",
                  "defaultValue": 256,
                  "required": true,
                  "description": "Size of output features",
                  "min": 1
                },
                {
                  "name": "bias",
                  "type": "boolean",
                  "defaultValue": true,
                  "required": false,
                  "description": "If set to False, the layer will not learn an additive bias"
                }
              ]
            },
            "parentId": "decoder.first.image_to_token"
          }
        },
        {
          "node_id": "decoder.first.image_to_token.key",
          "kind": "layer",
          "op": "Linear",
          "params": {
            "in_features": 8,
            "out_features": 4
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "linear",
              "name": "Linear",
              "displayName": "Linear",
              "description": "Fully Connected Layer",
              "icon": "Minus",
              "category": "linear",
              "parameters": [
                {
                  "name": "in_features",
                  "type": "number",
                  "defaultValue": 512,
                  "required": true,
                  "description": "Size of input features",
                  "min": 1
                },
                {
                  "name": "out_features",
                  "type": "number",
                  "defaultValue": 256,
                  "required": true,
                  "description": "Size of output features",
                  "min": 1
                },
                {
                  "name": "bias",
                  "type": "boolean",
                  "defaultValue": true,
                  "required": false,
                  "description": "If set to False, the layer will not learn an additive bias"
                }
              ]
            },
            "parentId": "decoder.first.image_to_token"
          }
        },
        {
          "node_id": "div@decoder.first.image_to_token#0",
          "kind": "layer",
          "op": "torch.div",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "div",
              "name": "torch.div",
              "displayName": "torch.div",
              "description": "PyTorch div operation",
              "icon": "Activity",
              "category": "tensor",
              "parameters": [
                {
                  "name": "dim",
                  "type": "string",
                  "defaultValue": "",
                  "required": false,
                  "description": "Dimension(s) to apply the operation on"
                }
              ]
            },
            "parentId": "decoder.first.image_to_token"
          }
        },
        {
          "node_id": "decoder.first.image_to_token.value",
          "kind": "layer",
          "op": "Linear",
          "params": {
            "in_features": 8,
            "out_features": 4
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "linear",
              "name": "Linear",
              "displayName": "Linear",
              "description": "Fully Connected Layer",
              "icon": "Minus",
              "category": "linear",
              "parameters": [
                {
                  "name": "in_features",
                  "type": "number",
                  "defaultValue": 512,
                  "required": true,
                  "description": "Size of input features",
                  "min": 1
                },
                {
                  "name": "out_features",
                  "type": "number",
                  "defaultValue": 256,
                  "required": true,
                  "description": "Size of output features",
                  "min": 1
                },
                {
                  "name": "bias",
                  "type": "boolean",
                  "defaultValue": true,
                  "required": false,
                  "description": "If set to False, the layer will not learn an additive bias"
                }
              ]
            },
            "parentId": "decoder.first.image_to_token"
          }
        },
        {
          "node_id": "decoder.first.image_to_token.softmax",
          "kind": "layer",
          "op": "Softmax",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "softmax",
              "name": "Softmax",
              "displayName": "Softmax",
              "description": "Softmax over a dimension",
              "icon": "TrendingUp",
              "category": "activation",
              "parameters": [
                {
                  "name": "dim",
                  "type": "number",
                  "defaultValue": 1,
                  "required": true,
                  "description": "Dimension along which Softmax is computed"
                }
              ]
            },
            "parentId": "decoder.first.image_to_token"
          }
        },
        {
          "node_id": "decoder.first.image_to_token.project",
          "kind": "layer",
          "op": "Linear",
          "params": {
            "in_features": 4,
            "out_features": 8
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "linear",
              "name": "Linear",
              "displayName": "Linear",
              "description": "Fully Connected Layer",
              "icon": "Minus",
              "category": "linear",
              "parameters": [
                {
                  "name": "in_features",
                  "type": "number",
                  "defaultValue": 512,
                  "required": true,
                  "description": "Size of input features",
                  "min": 1
                },
                {
                  "name": "out_features",
                  "type": "number",
                  "defaultValue": 256,
                  "required": true,
                  "description": "Size of output features",
                  "min": 1
                },
                {
                  "name": "bias",
                  "type": "boolean",
                  "defaultValue": true,
                  "required": false,
                  "description": "If set to False, the layer will not learn an additive bias"
                }
              ]
            },
            "parentId": "decoder.first.image_to_token"
          }
        },
        {
          "node_id": "decoder.second.self_attention",
          "kind": "module",
          "op": "Module",
          "params": {
            "arg_0": 8
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "module",
              "name": "Module",
              "displayName": "Module",
              "description": "Custom module group (nn.Module)",
              "icon": "Package",
              "category": "module",
              "parameters": [
                {
                  "name": "name",
                  "type": "string",
                  "defaultValue": "CustomModule",
                  "required": true,
                  "description": "Module class name"
                },
                {
                  "name": "description",
                  "type": "string",
                  "defaultValue": "",
                  "required": false,
                  "description": "Module description"
                }
              ]
            },
            "parentId": "decoder.second",
            "moduleInstanceId": "decoder.second.self_attention",
            "moduleTemplateId": "model::Attention",
            "isGroup": true,
            "moduleMembers": [
              "decoder.second.self_attention.query",
              "decoder.second.self_attention.key",
              "div@decoder.second.self_attention#0",
              "decoder.second.self_attention.value",
              "decoder.second.self_attention.softmax",
              "decoder.second.self_attention.project"
            ],
            "moduleLayerCount": 6
          }
        },
        {
          "node_id": "add@decoder.second#0",
          "kind": "layer",
          "op": "torch.add",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "add",
              "name": "torch.add",
              "displayName": "torch.add",
              "description": "PyTorch add operation",
              "icon": "Activity",
              "category": "tensor",
              "parameters": [
                {
                  "name": "dim",
                  "type": "string",
                  "defaultValue": "",
                  "required": false,
                  "description": "Dimension(s) to apply the operation on"
                }
              ]
            },
            "parentId": "decoder.second"
          }
        },
        {
          "node_id": "decoder.second.self_norm",
          "kind": "layer",
          "op": "LayerNorm",
          "params": {
            "normalized_shape": 8
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "layernorm",
              "name": "LayerNorm",
              "displayName": "LayerNorm",
              "description": "Layer Normalization",
              "icon": "Layers",
              "category": "norm",
              "parameters": [
                {
                  "name": "normalized_shape",
                  "type": "string",
                  "defaultValue": "512",
                  "required": true,
                  "description": "Input shape for normalization (comma-separated for multi-dim, e.g., 512)"
                },
                {
                  "name": "eps",
                  "type": "number",
                  "defaultValue": 0.00001,
                  "required": false,
                  "description": "Value for numerical stability",
                  "min": 0
                },
                {
                  "name": "elementwise_affine",
                  "type": "boolean",
                  "defaultValue": true,
                  "required": false,
                  "description": "If True, learnable affine parameters"
                }
              ]
            },
            "parentId": "decoder.second"
          }
        },
        {
          "node_id": "add@decoder.second#1",
          "kind": "layer",
          "op": "torch.add",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "add",
              "name": "torch.add",
              "displayName": "torch.add",
              "description": "PyTorch add operation",
              "icon": "Activity",
              "category": "tensor",
              "parameters": [
                {
                  "name": "dim",
                  "type": "string",
                  "defaultValue": "",
                  "required": false,
                  "description": "Dimension(s) to apply the operation on"
                }
              ]
            },
            "parentId": "decoder.second"
          }
        },
        {
          "node_id": "decoder.second.token_to_image",
          "kind": "module",
          "op": "Module",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "module",
              "name": "Module",
              "displayName": "Module",
              "description": "Custom module group (nn.Module)",
              "icon": "Package",
              "category": "module",
              "parameters": [
                {
                  "name": "name",
                  "type": "string",
                  "defaultValue": "CustomModule",
                  "required": true,
                  "description": "Module class name"
                },
                {
                  "name": "description",
                  "type": "string",
                  "defaultValue": "",
                  "required": false,
                  "description": "Module description"
                }
              ]
            },
            "parentId": "decoder.second",
            "moduleInstanceId": "decoder.second.token_to_image",
            "moduleTemplateId": "model::Attention",
            "isGroup": true,
            "moduleMembers": [
              "decoder.second.token_to_image.query",
              "decoder.second.token_to_image.key",
              "div@decoder.second.token_to_image#0",
              "decoder.second.token_to_image.value",
              "decoder.second.token_to_image.softmax",
              "decoder.second.token_to_image.project"
            ],
            "moduleLayerCount": 6
          }
        },
        {
          "node_id": "add@decoder.second#2",
          "kind": "layer",
          "op": "torch.add",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "add",
              "name": "torch.add",
              "displayName": "torch.add",
              "description": "PyTorch add operation",
              "icon": "Activity",
              "category": "tensor",
              "parameters": [
                {
                  "name": "dim",
                  "type": "string",
                  "defaultValue": "",
                  "required": false,
                  "description": "Dimension(s) to apply the operation on"
                }
              ]
            },
            "parentId": "decoder.second"
          }
        },
        {
          "node_id": "decoder.second.token_norm",
          "kind": "layer",
          "op": "LayerNorm",
          "params": {
            "normalized_shape": 8
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "layernorm",
              "name": "LayerNorm",
              "displayName": "LayerNorm",
              "description": "Layer Normalization",
              "icon": "Layers",
              "category": "norm",
              "parameters": [
                {
                  "name": "normalized_shape",
                  "type": "string",
                  "defaultValue": "512",
                  "required": true,
                  "description": "Input shape for normalization (comma-separated for multi-dim, e.g., 512)"
                },
                {
                  "name": "eps",
                  "type": "number",
                  "defaultValue": 0.00001,
                  "required": false,
                  "description": "Value for numerical stability",
                  "min": 0
                },
                {
                  "name": "elementwise_affine",
                  "type": "boolean",
                  "defaultValue": true,
                  "required": false,
                  "description": "If True, learnable affine parameters"
                }
              ]
            },
            "parentId": "decoder.second"
          }
        },
        {
          "node_id": "decoder.second.up",
          "kind": "layer",
          "op": "Linear",
          "params": {
            "in_features": 8,
            "out_features": 32
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "linear",
              "name": "Linear",
              "displayName": "Linear",
              "description": "Fully Connected Layer",
              "icon": "Minus",
              "category": "linear",
              "parameters": [
                {
                  "name": "in_features",
                  "type": "number",
                  "defaultValue": 512,
                  "required": true,
                  "description": "Size of input features",
                  "min": 1
                },
                {
                  "name": "out_features",
                  "type": "number",
                  "defaultValue": 256,
                  "required": true,
                  "description": "Size of output features",
                  "min": 1
                },
                {
                  "name": "bias",
                  "type": "boolean",
                  "defaultValue": true,
                  "required": false,
                  "description": "If set to False, the layer will not learn an additive bias"
                }
              ]
            },
            "parentId": "decoder.second"
          }
        },
        {
          "node_id": "decoder.second.relu",
          "kind": "layer",
          "op": "ReLU",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "relu",
              "name": "ReLU",
              "displayName": "ReLU",
              "description": "Rectified Linear Unit",
              "icon": "TrendingUp",
              "category": "activation",
              "parameters": [
                {
                  "name": "inplace",
                  "type": "boolean",
                  "defaultValue": false,
                  "required": false,
                  "description": "Can optionally do the operation in-place"
                }
              ]
            },
            "parentId": "decoder.second"
          }
        },
        {
          "node_id": "decoder.second.down",
          "kind": "layer",
          "op": "Linear",
          "params": {
            "in_features": 32,
            "out_features": 8
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "linear",
              "name": "Linear",
              "displayName": "Linear",
              "description": "Fully Connected Layer",
              "icon": "Minus",
              "category": "linear",
              "parameters": [
                {
                  "name": "in_features",
                  "type": "number",
                  "defaultValue": 512,
                  "required": true,
                  "description": "Size of input features",
                  "min": 1
                },
                {
                  "name": "out_features",
                  "type": "number",
                  "defaultValue": 256,
                  "required": true,
                  "description": "Size of output features",
                  "min": 1
                },
                {
                  "name": "bias",
                  "type": "boolean",
                  "defaultValue": true,
                  "required": false,
                  "description": "If set to False, the layer will not learn an additive bias"
                }
              ]
            },
            "parentId": "decoder.second"
          }
        },
        {
          "node_id": "add@decoder.second#3",
          "kind": "layer",
          "op": "torch.add",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "add",
              "name": "torch.add",
              "displayName": "torch.add",
              "description": "PyTorch add operation",
              "icon": "Activity",
              "category": "tensor",
              "parameters": [
                {
                  "name": "dim",
                  "type": "string",
                  "defaultValue": "",
                  "required": false,
                  "description": "Dimension(s) to apply the operation on"
                }
              ]
            },
            "parentId": "decoder.second"
          }
        },
        {
          "node_id": "decoder.second.mlp_norm",
          "kind": "layer",
          "op": "LayerNorm",
          "params": {
            "normalized_shape": 8
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "layernorm",
              "name": "LayerNorm",
              "displayName": "LayerNorm",
              "description": "Layer Normalization",
              "icon": "Layers",
              "category": "norm",
              "parameters": [
                {
                  "name": "normalized_shape",
                  "type": "string",
                  "defaultValue": "512",
                  "required": true,
                  "description": "Input shape for normalization (comma-separated for multi-dim, e.g., 512)"
                },
                {
                  "name": "eps",
                  "type": "number",
                  "defaultValue": 0.00001,
                  "required": false,
                  "description": "Value for numerical stability",
                  "min": 0
                },
                {
                  "name": "elementwise_affine",
                  "type": "boolean",
                  "defaultValue": true,
                  "required": false,
                  "description": "If True, learnable affine parameters"
                }
              ]
            },
            "parentId": "decoder.second"
          }
        },
        {
          "node_id": "add@decoder.second#4",
          "kind": "layer",
          "op": "torch.add",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "add",
              "name": "torch.add",
              "displayName": "torch.add",
              "description": "PyTorch add operation",
              "icon": "Activity",
              "category": "tensor",
              "parameters": [
                {
                  "name": "dim",
                  "type": "string",
                  "defaultValue": "",
                  "required": false,
                  "description": "Dimension(s) to apply the operation on"
                }
              ]
            },
            "parentId": "decoder.second"
          }
        },
        {
          "node_id": "decoder.second.image_to_token",
          "kind": "module",
          "op": "Module",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "module",
              "name": "Module",
              "displayName": "Module",
              "description": "Custom module group (nn.Module)",
              "icon": "Package",
              "category": "module",
              "parameters": [
                {
                  "name": "name",
                  "type": "string",
                  "defaultValue": "CustomModule",
                  "required": true,
                  "description": "Module class name"
                },
                {
                  "name": "description",
                  "type": "string",
                  "defaultValue": "",
                  "required": false,
                  "description": "Module description"
                }
              ]
            },
            "parentId": "decoder.second",
            "moduleInstanceId": "decoder.second.image_to_token",
            "moduleTemplateId": "model::Attention",
            "isGroup": true,
            "moduleMembers": [
              "decoder.second.image_to_token.query",
              "decoder.second.image_to_token.key",
              "div@decoder.second.image_to_token#0",
              "decoder.second.image_to_token.value",
              "decoder.second.image_to_token.softmax",
              "decoder.second.image_to_token.project"
            ],
            "moduleLayerCount": 6
          }
        },
        {
          "node_id": "add@decoder.second#5",
          "kind": "layer",
          "op": "torch.add",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "add",
              "name": "torch.add",
              "displayName": "torch.add",
              "description": "PyTorch add operation",
              "icon": "Activity",
              "category": "tensor",
              "parameters": [
                {
                  "name": "dim",
                  "type": "string",
                  "defaultValue": "",
                  "required": false,
                  "description": "Dimension(s) to apply the operation on"
                }
              ]
            },
            "parentId": "decoder.second"
          }
        },
        {
          "node_id": "decoder.second.image_norm",
          "kind": "layer",
          "op": "LayerNorm",
          "params": {
            "normalized_shape": 8
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "layernorm",
              "name": "LayerNorm",
              "displayName": "LayerNorm",
              "description": "Layer Normalization",
              "icon": "Layers",
              "category": "norm",
              "parameters": [
                {
                  "name": "normalized_shape",
                  "type": "string",
                  "defaultValue": "512",
                  "required": true,
                  "description": "Input shape for normalization (comma-separated for multi-dim, e.g., 512)"
                },
                {
                  "name": "eps",
                  "type": "number",
                  "defaultValue": 0.00001,
                  "required": false,
                  "description": "Value for numerical stability",
                  "min": 0
                },
                {
                  "name": "elementwise_affine",
                  "type": "boolean",
                  "defaultValue": true,
                  "required": false,
                  "description": "If True, learnable affine parameters"
                }
              ]
            },
            "parentId": "decoder.second"
          }
        },
        {
          "node_id": "decoder.second.self_attention.query",
          "kind": "layer",
          "op": "Linear",
          "params": {
            "in_features": 8,
            "out_features": 4
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "linear",
              "name": "Linear",
              "displayName": "Linear",
              "description": "Fully Connected Layer",
              "icon": "Minus",
              "category": "linear",
              "parameters": [
                {
                  "name": "in_features",
                  "type": "number",
                  "defaultValue": 512,
                  "required": true,
                  "description": "Size of input features",
                  "min": 1
                },
                {
                  "name": "out_features",
                  "type": "number",
                  "defaultValue": 256,
                  "required": true,
                  "description": "Size of output features",
                  "min": 1
                },
                {
                  "name": "bias",
                  "type": "boolean",
                  "defaultValue": true,
                  "required": false,
                  "description": "If set to False, the layer will not learn an additive bias"
                }
              ]
            },
            "parentId": "decoder.second.self_attention"
          }
        },
        {
          "node_id": "decoder.second.self_attention.key",
          "kind": "layer",
          "op": "Linear",
          "params": {
            "in_features": 8,
            "out_features": 4
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "linear",
              "name": "Linear",
              "displayName": "Linear",
              "description": "Fully Connected Layer",
              "icon": "Minus",
              "category": "linear",
              "parameters": [
                {
                  "name": "in_features",
                  "type": "number",
                  "defaultValue": 512,
                  "required": true,
                  "description": "Size of input features",
                  "min": 1
                },
                {
                  "name": "out_features",
                  "type": "number",
                  "defaultValue": 256,
                  "required": true,
                  "description": "Size of output features",
                  "min": 1
                },
                {
                  "name": "bias",
                  "type": "boolean",
                  "defaultValue": true,
                  "required": false,
                  "description": "If set to False, the layer will not learn an additive bias"
                }
              ]
            },
            "parentId": "decoder.second.self_attention"
          }
        },
        {
          "node_id": "div@decoder.second.self_attention#0",
          "kind": "layer",
          "op": "torch.div",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "div",
              "name": "torch.div",
              "displayName": "torch.div",
              "description": "PyTorch div operation",
              "icon": "Activity",
              "category": "tensor",
              "parameters": [
                {
                  "name": "dim",
                  "type": "string",
                  "defaultValue": "",
                  "required": false,
                  "description": "Dimension(s) to apply the operation on"
                }
              ]
            },
            "parentId": "decoder.second.self_attention"
          }
        },
        {
          "node_id": "decoder.second.self_attention.value",
          "kind": "layer",
          "op": "Linear",
          "params": {
            "in_features": 8,
            "out_features": 4
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "linear",
              "name": "Linear",
              "displayName": "Linear",
              "description": "Fully Connected Layer",
              "icon": "Minus",
              "category": "linear",
              "parameters": [
                {
                  "name": "in_features",
                  "type": "number",
                  "defaultValue": 512,
                  "required": true,
                  "description": "Size of input features",
                  "min": 1
                },
                {
                  "name": "out_features",
                  "type": "number",
                  "defaultValue": 256,
                  "required": true,
                  "description": "Size of output features",
                  "min": 1
                },
                {
                  "name": "bias",
                  "type": "boolean",
                  "defaultValue": true,
                  "required": false,
                  "description": "If set to False, the layer will not learn an additive bias"
                }
              ]
            },
            "parentId": "decoder.second.self_attention"
          }
        },
        {
          "node_id": "decoder.second.self_attention.softmax",
          "kind": "layer",
          "op": "Softmax",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "softmax",
              "name": "Softmax",
              "displayName": "Softmax",
              "description": "Softmax over a dimension",
              "icon": "TrendingUp",
              "category": "activation",
              "parameters": [
                {
                  "name": "dim",
                  "type": "number",
                  "defaultValue": 1,
                  "required": true,
                  "description": "Dimension along which Softmax is computed"
                }
              ]
            },
            "parentId": "decoder.second.self_attention"
          }
        },
        {
          "node_id": "decoder.second.self_attention.project",
          "kind": "layer",
          "op": "Linear",
          "params": {
            "in_features": 4,
            "out_features": 8
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "linear",
              "name": "Linear",
              "displayName": "Linear",
              "description": "Fully Connected Layer",
              "icon": "Minus",
              "category": "linear",
              "parameters": [
                {
                  "name": "in_features",
                  "type": "number",
                  "defaultValue": 512,
                  "required": true,
                  "description": "Size of input features",
                  "min": 1
                },
                {
                  "name": "out_features",
                  "type": "number",
                  "defaultValue": 256,
                  "required": true,
                  "description": "Size of output features",
                  "min": 1
                },
                {
                  "name": "bias",
                  "type": "boolean",
                  "defaultValue": true,
                  "required": false,
                  "description": "If set to False, the layer will not learn an additive bias"
                }
              ]
            },
            "parentId": "decoder.second.self_attention"
          }
        },
        {
          "node_id": "decoder.second.token_to_image.query",
          "kind": "layer",
          "op": "Linear",
          "params": {
            "in_features": 8,
            "out_features": 4
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "linear",
              "name": "Linear",
              "displayName": "Linear",
              "description": "Fully Connected Layer",
              "icon": "Minus",
              "category": "linear",
              "parameters": [
                {
                  "name": "in_features",
                  "type": "number",
                  "defaultValue": 512,
                  "required": true,
                  "description": "Size of input features",
                  "min": 1
                },
                {
                  "name": "out_features",
                  "type": "number",
                  "defaultValue": 256,
                  "required": true,
                  "description": "Size of output features",
                  "min": 1
                },
                {
                  "name": "bias",
                  "type": "boolean",
                  "defaultValue": true,
                  "required": false,
                  "description": "If set to False, the layer will not learn an additive bias"
                }
              ]
            },
            "parentId": "decoder.second.token_to_image"
          }
        },
        {
          "node_id": "decoder.second.token_to_image.key",
          "kind": "layer",
          "op": "Linear",
          "params": {
            "in_features": 8,
            "out_features": 4
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "linear",
              "name": "Linear",
              "displayName": "Linear",
              "description": "Fully Connected Layer",
              "icon": "Minus",
              "category": "linear",
              "parameters": [
                {
                  "name": "in_features",
                  "type": "number",
                  "defaultValue": 512,
                  "required": true,
                  "description": "Size of input features",
                  "min": 1
                },
                {
                  "name": "out_features",
                  "type": "number",
                  "defaultValue": 256,
                  "required": true,
                  "description": "Size of output features",
                  "min": 1
                },
                {
                  "name": "bias",
                  "type": "boolean",
                  "defaultValue": true,
                  "required": false,
                  "description": "If set to False, the layer will not learn an additive bias"
                }
              ]
            },
            "parentId": "decoder.second.token_to_image"
          }
        },
        {
          "node_id": "div@decoder.second.token_to_image#0",
          "kind": "layer",
          "op": "torch.div",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "div",
              "name": "torch.div",
              "displayName": "torch.div",
              "description": "PyTorch div operation",
              "icon": "Activity",
              "category": "tensor",
              "parameters": [
                {
                  "name": "dim",
                  "type": "string",
                  "defaultValue": "",
                  "required": false,
                  "description": "Dimension(s) to apply the operation on"
                }
              ]
            },
            "parentId": "decoder.second.token_to_image"
          }
        },
        {
          "node_id": "decoder.second.token_to_image.value",
          "kind": "layer",
          "op": "Linear",
          "params": {
            "in_features": 8,
            "out_features": 4
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "linear",
              "name": "Linear",
              "displayName": "Linear",
              "description": "Fully Connected Layer",
              "icon": "Minus",
              "category": "linear",
              "parameters": [
                {
                  "name": "in_features",
                  "type": "number",
                  "defaultValue": 512,
                  "required": true,
                  "description": "Size of input features",
                  "min": 1
                },
                {
                  "name": "out_features",
                  "type": "number",
                  "defaultValue": 256,
                  "required": true,
                  "description": "Size of output features",
                  "min": 1
                },
                {
                  "name": "bias",
                  "type": "boolean",
                  "defaultValue": true,
                  "required": false,
                  "description": "If set to False, the layer will not learn an additive bias"
                }
              ]
            },
            "parentId": "decoder.second.token_to_image"
          }
        },
        {
          "node_id": "decoder.second.token_to_image.softmax",
          "kind": "layer",
          "op": "Softmax",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "softmax",
              "name": "Softmax",
              "displayName": "Softmax",
              "description": "Softmax over a dimension",
              "icon": "TrendingUp",
              "category": "activation",
              "parameters": [
                {
                  "name": "dim",
                  "type": "number",
                  "defaultValue": 1,
                  "required": true,
                  "description": "Dimension along which Softmax is computed"
                }
              ]
            },
            "parentId": "decoder.second.token_to_image"
          }
        },
        {
          "node_id": "decoder.second.token_to_image.project",
          "kind": "layer",
          "op": "Linear",
          "params": {
            "in_features": 4,
            "out_features": 8
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "linear",
              "name": "Linear",
              "displayName": "Linear",
              "description": "Fully Connected Layer",
              "icon": "Minus",
              "category": "linear",
              "parameters": [
                {
                  "name": "in_features",
                  "type": "number",
                  "defaultValue": 512,
                  "required": true,
                  "description": "Size of input features",
                  "min": 1
                },
                {
                  "name": "out_features",
                  "type": "number",
                  "defaultValue": 256,
                  "required": true,
                  "description": "Size of output features",
                  "min": 1
                },
                {
                  "name": "bias",
                  "type": "boolean",
                  "defaultValue": true,
                  "required": false,
                  "description": "If set to False, the layer will not learn an additive bias"
                }
              ]
            },
            "parentId": "decoder.second.token_to_image"
          }
        },
        {
          "node_id": "decoder.second.image_to_token.query",
          "kind": "layer",
          "op": "Linear",
          "params": {
            "in_features": 8,
            "out_features": 4
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "linear",
              "name": "Linear",
              "displayName": "Linear",
              "description": "Fully Connected Layer",
              "icon": "Minus",
              "category": "linear",
              "parameters": [
                {
                  "name": "in_features",
                  "type": "number",
                  "defaultValue": 512,
                  "required": true,
                  "description": "Size of input features",
                  "min": 1
                },
                {
                  "name": "out_features",
                  "type": "number",
                  "defaultValue": 256,
                  "required": true,
                  "description": "Size of output features",
                  "min": 1
                },
                {
                  "name": "bias",
                  "type": "boolean",
                  "defaultValue": true,
                  "required": false,
                  "description": "If set to False, the layer will not learn an additive bias"
                }
              ]
            },
            "parentId": "decoder.second.image_to_token"
          }
        },
        {
          "node_id": "decoder.second.image_to_token.key",
          "kind": "layer",
          "op": "Linear",
          "params": {
            "in_features": 8,
            "out_features": 4
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "linear",
              "name": "Linear",
              "displayName": "Linear",
              "description": "Fully Connected Layer",
              "icon": "Minus",
              "category": "linear",
              "parameters": [
                {
                  "name": "in_features",
                  "type": "number",
                  "defaultValue": 512,
                  "required": true,
                  "description": "Size of input features",
                  "min": 1
                },
                {
                  "name": "out_features",
                  "type": "number",
                  "defaultValue": 256,
                  "required": true,
                  "description": "Size of output features",
                  "min": 1
                },
                {
                  "name": "bias",
                  "type": "boolean",
                  "defaultValue": true,
                  "required": false,
                  "description": "If set to False, the layer will not learn an additive bias"
                }
              ]
            },
            "parentId": "decoder.second.image_to_token"
          }
        },
        {
          "node_id": "div@decoder.second.image_to_token#0",
          "kind": "layer",
          "op": "torch.div",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "div",
              "name": "torch.div",
              "displayName": "torch.div",
              "description": "PyTorch div operation",
              "icon": "Activity",
              "category": "tensor",
              "parameters": [
                {
                  "name": "dim",
                  "type": "string",
                  "defaultValue": "",
                  "required": false,
                  "description": "Dimension(s) to apply the operation on"
                }
              ]
            },
            "parentId": "decoder.second.image_to_token"
          }
        },
        {
          "node_id": "decoder.second.image_to_token.value",
          "kind": "layer",
          "op": "Linear",
          "params": {
            "in_features": 8,
            "out_features": 4
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "linear",
              "name": "Linear",
              "displayName": "Linear",
              "description": "Fully Connected Layer",
              "icon": "Minus",
              "category": "linear",
              "parameters": [
                {
                  "name": "in_features",
                  "type": "number",
                  "defaultValue": 512,
                  "required": true,
                  "description": "Size of input features",
                  "min": 1
                },
                {
                  "name": "out_features",
                  "type": "number",
                  "defaultValue": 256,
                  "required": true,
                  "description": "Size of output features",
                  "min": 1
                },
                {
                  "name": "bias",
                  "type": "boolean",
                  "defaultValue": true,
                  "required": false,
                  "description": "If set to False, the layer will not learn an additive bias"
                }
              ]
            },
            "parentId": "decoder.second.image_to_token"
          }
        },
        {
          "node_id": "decoder.second.image_to_token.softmax",
          "kind": "layer",
          "op": "Softmax",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "softmax",
              "name": "Softmax",
              "displayName": "Softmax",
              "description": "Softmax over a dimension",
              "icon": "TrendingUp",
              "category": "activation",
              "parameters": [
                {
                  "name": "dim",
                  "type": "number",
                  "defaultValue": 1,
                  "required": true,
                  "description": "Dimension along which Softmax is computed"
                }
              ]
            },
            "parentId": "decoder.second.image_to_token"
          }
        },
        {
          "node_id": "decoder.second.image_to_token.project",
          "kind": "layer",
          "op": "Linear",
          "params": {
            "in_features": 4,
            "out_features": 8
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "linear",
              "name": "Linear",
              "displayName": "Linear",
              "description": "Fully Connected Layer",
              "icon": "Minus",
              "category": "linear",
              "parameters": [
                {
                  "name": "in_features",
                  "type": "number",
                  "defaultValue": 512,
                  "required": true,
                  "description": "Size of input features",
                  "min": 1
                },
                {
                  "name": "out_features",
                  "type": "number",
                  "defaultValue": 256,
                  "required": true,
                  "description": "Size of output features",
                  "min": 1
                },
                {
                  "name": "bias",
                  "type": "boolean",
                  "defaultValue": true,
                  "required": false,
                  "description": "If set to False, the layer will not learn an additive bias"
                }
              ]
            },
            "parentId": "decoder.second.image_to_token"
          }
        },
        {
          "node_id": "decoder.final_attention.query",
          "kind": "layer",
          "op": "Linear",
          "params": {
            "in_features": 8,
            "out_features": 4
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "linear",
              "name": "Linear",
              "displayName": "Linear",
              "description": "Fully Connected Layer",
              "icon": "Minus",
              "category": "linear",
              "parameters": [
                {
                  "name": "in_features",
                  "type": "number",
                  "defaultValue": 512,
                  "required": true,
                  "description": "Size of input features",
                  "min": 1
                },
                {
                  "name": "out_features",
                  "type": "number",
                  "defaultValue": 256,
                  "required": true,
                  "description": "Size of output features",
                  "min": 1
                },
                {
                  "name": "bias",
                  "type": "boolean",
                  "defaultValue": true,
                  "required": false,
                  "description": "If set to False, the layer will not learn an additive bias"
                }
              ]
            },
            "parentId": "decoder.final_attention"
          }
        },
        {
          "node_id": "decoder.final_attention.key",
          "kind": "layer",
          "op": "Linear",
          "params": {
            "in_features": 8,
            "out_features": 4
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "linear",
              "name": "Linear",
              "displayName": "Linear",
              "description": "Fully Connected Layer",
              "icon": "Minus",
              "category": "linear",
              "parameters": [
                {
                  "name": "in_features",
                  "type": "number",
                  "defaultValue": 512,
                  "required": true,
                  "description": "Size of input features",
                  "min": 1
                },
                {
                  "name": "out_features",
                  "type": "number",
                  "defaultValue": 256,
                  "required": true,
                  "description": "Size of output features",
                  "min": 1
                },
                {
                  "name": "bias",
                  "type": "boolean",
                  "defaultValue": true,
                  "required": false,
                  "description": "If set to False, the layer will not learn an additive bias"
                }
              ]
            },
            "parentId": "decoder.final_attention"
          }
        },
        {
          "node_id": "div@decoder.final_attention#0",
          "kind": "layer",
          "op": "torch.div",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "div",
              "name": "torch.div",
              "displayName": "torch.div",
              "description": "PyTorch div operation",
              "icon": "Activity",
              "category": "tensor",
              "parameters": [
                {
                  "name": "dim",
                  "type": "string",
                  "defaultValue": "",
                  "required": false,
                  "description": "Dimension(s) to apply the operation on"
                }
              ]
            },
            "parentId": "decoder.final_attention"
          }
        },
        {
          "node_id": "decoder.final_attention.value",
          "kind": "layer",
          "op": "Linear",
          "params": {
            "in_features": 8,
            "out_features": 4
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "linear",
              "name": "Linear",
              "displayName": "Linear",
              "description": "Fully Connected Layer",
              "icon": "Minus",
              "category": "linear",
              "parameters": [
                {
                  "name": "in_features",
                  "type": "number",
                  "defaultValue": 512,
                  "required": true,
                  "description": "Size of input features",
                  "min": 1
                },
                {
                  "name": "out_features",
                  "type": "number",
                  "defaultValue": 256,
                  "required": true,
                  "description": "Size of output features",
                  "min": 1
                },
                {
                  "name": "bias",
                  "type": "boolean",
                  "defaultValue": true,
                  "required": false,
                  "description": "If set to False, the layer will not learn an additive bias"
                }
              ]
            },
            "parentId": "decoder.final_attention"
          }
        },
        {
          "node_id": "decoder.final_attention.softmax",
          "kind": "layer",
          "op": "Softmax",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "softmax",
              "name": "Softmax",
              "displayName": "Softmax",
              "description": "Softmax over a dimension",
              "icon": "TrendingUp",
              "category": "activation",
              "parameters": [
                {
                  "name": "dim",
                  "type": "number",
                  "defaultValue": 1,
                  "required": true,
                  "description": "Dimension along which Softmax is computed"
                }
              ]
            },
            "parentId": "decoder.final_attention"
          }
        },
        {
          "node_id": "decoder.final_attention.project",
          "kind": "layer",
          "op": "Linear",
          "params": {
            "in_features": 4,
            "out_features": 8
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "linear",
              "name": "Linear",
              "displayName": "Linear",
              "description": "Fully Connected Layer",
              "icon": "Minus",
              "category": "linear",
              "parameters": [
                {
                  "name": "in_features",
                  "type": "number",
                  "defaultValue": 512,
                  "required": true,
                  "description": "Size of input features",
                  "min": 1
                },
                {
                  "name": "out_features",
                  "type": "number",
                  "defaultValue": 256,
                  "required": true,
                  "description": "Size of output features",
                  "min": 1
                },
                {
                  "name": "bias",
                  "type": "boolean",
                  "defaultValue": true,
                  "required": false,
                  "description": "If set to False, the layer will not learn an additive bias"
                }
              ]
            },
            "parentId": "decoder.final_attention"
          }
        },
        {
          "node_id": "upscale.first",
          "kind": "layer",
          "op": "ConvTranspose2d",
          "params": {
            "in_channels": 8,
            "out_channels": 4,
            "kernel_size": 2,
            "stride": 2
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "convtranspose2d",
              "name": "ConvTranspose2d",
              "displayName": "ConvTranspose2D",
              "description": "2D Transposed Convolutional Layer",
              "icon": "ChevronsRight",
              "category": "conv",
              "parameters": [
                {
                  "name": "in_channels",
                  "type": "number",
                  "defaultValue": 64,
                  "required": true,
                  "description": "Number of input channels",
                  "min": 1
                },
                {
                  "name": "out_channels",
                  "type": "number",
                  "defaultValue": 32,
                  "required": true,
                  "description": "Number of output channels",
                  "min": 1
                },
                {
                  "name": "kernel_size",
                  "type": "number",
                  "defaultValue": 3,
                  "required": true,
                  "description": "Size of the convolving kernel",
                  "min": 1
                },
                {
                  "name": "stride",
                  "type": "number",
                  "defaultValue": 1,
                  "required": false,
                  "description": "Stride of the convolution",
                  "min": 1
                },
                {
                  "name": "padding",
                  "type": "number",
                  "defaultValue": 0,
                  "required": false,
                  "description": "Zero-padding added to input",
                  "min": 0
                },
                {
                  "name": "output_padding",
                  "type": "number",
                  "defaultValue": 0,
                  "required": false,
                  "description": "Additional size added to one side of the output shape",
                  "min": 0
                },
                {
                  "name": "groups",
                  "type": "number",
                  "defaultValue": 1,
                  "required": false,
                  "description": "Number of blocked connections",
                  "min": 1
                },
                {
                  "name": "bias",
                  "type": "boolean",
                  "defaultValue": true,
                  "required": false,
                  "description": "If True, adds a learnable bias"
                }
              ]
            },
            "parentId": "upscale"
          }
        },
        {
          "node_id": "permute@upscale#0",
          "kind": "layer",
          "op": "torch.permute",
          "params": {
            "dims": [
              0,
              2,
              3,
              1
            ]
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "permute",
              "name": "torch.permute",
              "displayName": "torch.permute",
              "description": "PyTorch permute operation",
              "icon": "Activity",
              "category": "tensor",
              "parameters": [
                {
                  "name": "dims",
                  "type": "string",
                  "defaultValue": "",
                  "required": false,
                  "description": "The new dimension order — one entry per dimension, e.g. 0,2,3,1"
                }
              ]
            },
            "parentId": "upscale"
          }
        },
        {
          "node_id": "upscale.norm",
          "kind": "layer",
          "op": "LayerNorm",
          "params": {
            "normalized_shape": 4
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "layernorm",
              "name": "LayerNorm",
              "displayName": "LayerNorm",
              "description": "Layer Normalization",
              "icon": "Layers",
              "category": "norm",
              "parameters": [
                {
                  "name": "normalized_shape",
                  "type": "string",
                  "defaultValue": "512",
                  "required": true,
                  "description": "Input shape for normalization (comma-separated for multi-dim, e.g., 512)"
                },
                {
                  "name": "eps",
                  "type": "number",
                  "defaultValue": 0.00001,
                  "required": false,
                  "description": "Value for numerical stability",
                  "min": 0
                },
                {
                  "name": "elementwise_affine",
                  "type": "boolean",
                  "defaultValue": true,
                  "required": false,
                  "description": "If True, learnable affine parameters"
                }
              ]
            },
            "parentId": "upscale"
          }
        },
        {
          "node_id": "permute@upscale#1",
          "kind": "layer",
          "op": "torch.permute",
          "params": {
            "dims": [
              0,
              3,
              1,
              2
            ]
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "permute",
              "name": "torch.permute",
              "displayName": "torch.permute",
              "description": "PyTorch permute operation",
              "icon": "Activity",
              "category": "tensor",
              "parameters": [
                {
                  "name": "dims",
                  "type": "string",
                  "defaultValue": "",
                  "required": false,
                  "description": "The new dimension order — one entry per dimension, e.g. 0,2,3,1"
                }
              ]
            },
            "parentId": "upscale"
          }
        },
        {
          "node_id": "gelu@upscale#0",
          "kind": "layer",
          "op": "GELU",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "gelu",
              "name": "GELU",
              "displayName": "GELU",
              "description": "Gaussian Error Linear Unit",
              "icon": "TrendingUp",
              "category": "activation",
              "parameters": [
                {
                  "name": "approximate",
                  "type": "select",
                  "defaultValue": "none",
                  "required": false,
                  "description": "The gelu approximation algorithm to use: 'none' or 'tanh'",
                  "options": [
                    "none",
                    "tanh"
                  ]
                }
              ]
            },
            "parentId": "upscale"
          }
        },
        {
          "node_id": "upscale.second",
          "kind": "layer",
          "op": "ConvTranspose2d",
          "params": {
            "in_channels": 4,
            "out_channels": 2,
            "kernel_size": 2,
            "stride": 2
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "convtranspose2d",
              "name": "ConvTranspose2d",
              "displayName": "ConvTranspose2D",
              "description": "2D Transposed Convolutional Layer",
              "icon": "ChevronsRight",
              "category": "conv",
              "parameters": [
                {
                  "name": "in_channels",
                  "type": "number",
                  "defaultValue": 64,
                  "required": true,
                  "description": "Number of input channels",
                  "min": 1
                },
                {
                  "name": "out_channels",
                  "type": "number",
                  "defaultValue": 32,
                  "required": true,
                  "description": "Number of output channels",
                  "min": 1
                },
                {
                  "name": "kernel_size",
                  "type": "number",
                  "defaultValue": 3,
                  "required": true,
                  "description": "Size of the convolving kernel",
                  "min": 1
                },
                {
                  "name": "stride",
                  "type": "number",
                  "defaultValue": 1,
                  "required": false,
                  "description": "Stride of the convolution",
                  "min": 1
                },
                {
                  "name": "padding",
                  "type": "number",
                  "defaultValue": 0,
                  "required": false,
                  "description": "Zero-padding added to input",
                  "min": 0
                },
                {
                  "name": "output_padding",
                  "type": "number",
                  "defaultValue": 0,
                  "required": false,
                  "description": "Additional size added to one side of the output shape",
                  "min": 0
                },
                {
                  "name": "groups",
                  "type": "number",
                  "defaultValue": 1,
                  "required": false,
                  "description": "Number of blocked connections",
                  "min": 1
                },
                {
                  "name": "bias",
                  "type": "boolean",
                  "defaultValue": true,
                  "required": false,
                  "description": "If True, adds a learnable bias"
                }
              ]
            },
            "parentId": "upscale"
          }
        },
        {
          "node_id": "gelu@upscale#1",
          "kind": "layer",
          "op": "GELU",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "gelu",
              "name": "GELU",
              "displayName": "GELU",
              "description": "Gaussian Error Linear Unit",
              "icon": "TrendingUp",
              "category": "activation",
              "parameters": [
                {
                  "name": "approximate",
                  "type": "select",
                  "defaultValue": "none",
                  "required": false,
                  "description": "The gelu approximation algorithm to use: 'none' or 'tanh'",
                  "options": [
                    "none",
                    "tanh"
                  ]
                }
              ]
            },
            "parentId": "upscale"
          }
        },
        {
          "node_id": "flatten@masks#0",
          "kind": "layer",
          "op": "Flatten",
          "params": {
            "start_dim": 2
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "flatten",
              "name": "Flatten",
              "displayName": "Flatten",
              "description": "Flattens input tensor contiguously",
              "icon": "Maximize2",
              "category": "tensor",
              "parameters": [
                {
                  "name": "start_dim",
                  "type": "number",
                  "defaultValue": 1,
                  "required": false,
                  "description": "First dim to flatten",
                  "min": 0
                },
                {
                  "name": "end_dim",
                  "type": "number",
                  "defaultValue": -1,
                  "required": false,
                  "description": "Last dim to flatten"
                }
              ]
            },
            "parentId": "masks"
          }
        },
        {
          "node_id": "masks.mask0",
          "kind": "module",
          "op": "Module",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "module",
              "name": "Module",
              "displayName": "Module",
              "description": "Custom module group (nn.Module)",
              "icon": "Package",
              "category": "module",
              "parameters": [
                {
                  "name": "name",
                  "type": "string",
                  "defaultValue": "CustomModule",
                  "required": true,
                  "description": "Module class name"
                },
                {
                  "name": "description",
                  "type": "string",
                  "defaultValue": "",
                  "required": false,
                  "description": "Module description"
                }
              ]
            },
            "parentId": "masks",
            "moduleInstanceId": "masks.mask0",
            "moduleTemplateId": "model::Hypernetwork",
            "isGroup": true,
            "moduleMembers": [
              "masks.mask0.first",
              "relu@masks.mask0#0",
              "masks.mask0.second",
              "relu@masks.mask0#1",
              "masks.mask0.project"
            ],
            "moduleLayerCount": 5
          }
        },
        {
          "node_id": "masks.mask1",
          "kind": "module",
          "op": "Module",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "module",
              "name": "Module",
              "displayName": "Module",
              "description": "Custom module group (nn.Module)",
              "icon": "Package",
              "category": "module",
              "parameters": [
                {
                  "name": "name",
                  "type": "string",
                  "defaultValue": "CustomModule",
                  "required": true,
                  "description": "Module class name"
                },
                {
                  "name": "description",
                  "type": "string",
                  "defaultValue": "",
                  "required": false,
                  "description": "Module description"
                }
              ]
            },
            "parentId": "masks",
            "moduleInstanceId": "masks.mask1",
            "moduleTemplateId": "model::Hypernetwork",
            "isGroup": true,
            "moduleMembers": [
              "masks.mask1.first",
              "relu@masks.mask1#0",
              "masks.mask1.second",
              "relu@masks.mask1#1",
              "masks.mask1.project"
            ],
            "moduleLayerCount": 5
          }
        },
        {
          "node_id": "masks.mask2",
          "kind": "module",
          "op": "Module",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "module",
              "name": "Module",
              "displayName": "Module",
              "description": "Custom module group (nn.Module)",
              "icon": "Package",
              "category": "module",
              "parameters": [
                {
                  "name": "name",
                  "type": "string",
                  "defaultValue": "CustomModule",
                  "required": true,
                  "description": "Module class name"
                },
                {
                  "name": "description",
                  "type": "string",
                  "defaultValue": "",
                  "required": false,
                  "description": "Module description"
                }
              ]
            },
            "parentId": "masks",
            "moduleInstanceId": "masks.mask2",
            "moduleTemplateId": "model::Hypernetwork",
            "isGroup": true,
            "moduleMembers": [
              "masks.mask2.first",
              "relu@masks.mask2#0",
              "masks.mask2.second",
              "relu@masks.mask2#1",
              "masks.mask2.project"
            ],
            "moduleLayerCount": 5
          }
        },
        {
          "node_id": "stack@masks#0",
          "kind": "layer",
          "op": "torch.stack",
          "params": {
            "dim": 1
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "stack",
              "name": "torch.stack",
              "displayName": "torch.stack",
              "description": "PyTorch stack operation",
              "icon": "Activity",
              "category": "tensor",
              "parameters": [
                {
                  "name": "dim",
                  "type": "string",
                  "defaultValue": "",
                  "required": false,
                  "description": "Dimension(s) to apply the operation on"
                }
              ]
            },
            "parentId": "masks"
          }
        },
        {
          "node_id": "python@masks#0",
          "kind": "layer",
          "op": "Python",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "python",
              "name": "Python",
              "displayName": "Python",
              "description": "A statement from the source file that has no graph equivalent. Its code is kept verbatim and its shape is unknown until the model is traced.",
              "icon": "Hash",
              "category": "misc",
              "parameters": []
            },
            "parentId": "masks"
          }
        },
        {
          "node_id": "masks.mask0.first",
          "kind": "layer",
          "op": "Linear",
          "params": {
            "in_features": 8,
            "out_features": 8
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "linear",
              "name": "Linear",
              "displayName": "Linear",
              "description": "Fully Connected Layer",
              "icon": "Minus",
              "category": "linear",
              "parameters": [
                {
                  "name": "in_features",
                  "type": "number",
                  "defaultValue": 512,
                  "required": true,
                  "description": "Size of input features",
                  "min": 1
                },
                {
                  "name": "out_features",
                  "type": "number",
                  "defaultValue": 256,
                  "required": true,
                  "description": "Size of output features",
                  "min": 1
                },
                {
                  "name": "bias",
                  "type": "boolean",
                  "defaultValue": true,
                  "required": false,
                  "description": "If set to False, the layer will not learn an additive bias"
                }
              ]
            },
            "parentId": "masks.mask0"
          }
        },
        {
          "node_id": "relu@masks.mask0#0",
          "kind": "layer",
          "op": "ReLU",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "relu",
              "name": "ReLU",
              "displayName": "ReLU",
              "description": "Rectified Linear Unit",
              "icon": "TrendingUp",
              "category": "activation",
              "parameters": [
                {
                  "name": "inplace",
                  "type": "boolean",
                  "defaultValue": false,
                  "required": false,
                  "description": "Can optionally do the operation in-place"
                }
              ]
            },
            "parentId": "masks.mask0"
          }
        },
        {
          "node_id": "masks.mask0.second",
          "kind": "layer",
          "op": "Linear",
          "params": {
            "in_features": 8,
            "out_features": 8
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "linear",
              "name": "Linear",
              "displayName": "Linear",
              "description": "Fully Connected Layer",
              "icon": "Minus",
              "category": "linear",
              "parameters": [
                {
                  "name": "in_features",
                  "type": "number",
                  "defaultValue": 512,
                  "required": true,
                  "description": "Size of input features",
                  "min": 1
                },
                {
                  "name": "out_features",
                  "type": "number",
                  "defaultValue": 256,
                  "required": true,
                  "description": "Size of output features",
                  "min": 1
                },
                {
                  "name": "bias",
                  "type": "boolean",
                  "defaultValue": true,
                  "required": false,
                  "description": "If set to False, the layer will not learn an additive bias"
                }
              ]
            },
            "parentId": "masks.mask0"
          }
        },
        {
          "node_id": "relu@masks.mask0#1",
          "kind": "layer",
          "op": "ReLU",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "relu",
              "name": "ReLU",
              "displayName": "ReLU",
              "description": "Rectified Linear Unit",
              "icon": "TrendingUp",
              "category": "activation",
              "parameters": [
                {
                  "name": "inplace",
                  "type": "boolean",
                  "defaultValue": false,
                  "required": false,
                  "description": "Can optionally do the operation in-place"
                }
              ]
            },
            "parentId": "masks.mask0"
          }
        },
        {
          "node_id": "masks.mask0.project",
          "kind": "layer",
          "op": "Linear",
          "params": {
            "in_features": 8,
            "out_features": 2
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "linear",
              "name": "Linear",
              "displayName": "Linear",
              "description": "Fully Connected Layer",
              "icon": "Minus",
              "category": "linear",
              "parameters": [
                {
                  "name": "in_features",
                  "type": "number",
                  "defaultValue": 512,
                  "required": true,
                  "description": "Size of input features",
                  "min": 1
                },
                {
                  "name": "out_features",
                  "type": "number",
                  "defaultValue": 256,
                  "required": true,
                  "description": "Size of output features",
                  "min": 1
                },
                {
                  "name": "bias",
                  "type": "boolean",
                  "defaultValue": true,
                  "required": false,
                  "description": "If set to False, the layer will not learn an additive bias"
                }
              ]
            },
            "parentId": "masks.mask0"
          }
        },
        {
          "node_id": "masks.mask1.first",
          "kind": "layer",
          "op": "Linear",
          "params": {
            "in_features": 8,
            "out_features": 8
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "linear",
              "name": "Linear",
              "displayName": "Linear",
              "description": "Fully Connected Layer",
              "icon": "Minus",
              "category": "linear",
              "parameters": [
                {
                  "name": "in_features",
                  "type": "number",
                  "defaultValue": 512,
                  "required": true,
                  "description": "Size of input features",
                  "min": 1
                },
                {
                  "name": "out_features",
                  "type": "number",
                  "defaultValue": 256,
                  "required": true,
                  "description": "Size of output features",
                  "min": 1
                },
                {
                  "name": "bias",
                  "type": "boolean",
                  "defaultValue": true,
                  "required": false,
                  "description": "If set to False, the layer will not learn an additive bias"
                }
              ]
            },
            "parentId": "masks.mask1"
          }
        },
        {
          "node_id": "relu@masks.mask1#0",
          "kind": "layer",
          "op": "ReLU",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "relu",
              "name": "ReLU",
              "displayName": "ReLU",
              "description": "Rectified Linear Unit",
              "icon": "TrendingUp",
              "category": "activation",
              "parameters": [
                {
                  "name": "inplace",
                  "type": "boolean",
                  "defaultValue": false,
                  "required": false,
                  "description": "Can optionally do the operation in-place"
                }
              ]
            },
            "parentId": "masks.mask1"
          }
        },
        {
          "node_id": "masks.mask1.second",
          "kind": "layer",
          "op": "Linear",
          "params": {
            "in_features": 8,
            "out_features": 8
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "linear",
              "name": "Linear",
              "displayName": "Linear",
              "description": "Fully Connected Layer",
              "icon": "Minus",
              "category": "linear",
              "parameters": [
                {
                  "name": "in_features",
                  "type": "number",
                  "defaultValue": 512,
                  "required": true,
                  "description": "Size of input features",
                  "min": 1
                },
                {
                  "name": "out_features",
                  "type": "number",
                  "defaultValue": 256,
                  "required": true,
                  "description": "Size of output features",
                  "min": 1
                },
                {
                  "name": "bias",
                  "type": "boolean",
                  "defaultValue": true,
                  "required": false,
                  "description": "If set to False, the layer will not learn an additive bias"
                }
              ]
            },
            "parentId": "masks.mask1"
          }
        },
        {
          "node_id": "relu@masks.mask1#1",
          "kind": "layer",
          "op": "ReLU",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "relu",
              "name": "ReLU",
              "displayName": "ReLU",
              "description": "Rectified Linear Unit",
              "icon": "TrendingUp",
              "category": "activation",
              "parameters": [
                {
                  "name": "inplace",
                  "type": "boolean",
                  "defaultValue": false,
                  "required": false,
                  "description": "Can optionally do the operation in-place"
                }
              ]
            },
            "parentId": "masks.mask1"
          }
        },
        {
          "node_id": "masks.mask1.project",
          "kind": "layer",
          "op": "Linear",
          "params": {
            "in_features": 8,
            "out_features": 2
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "linear",
              "name": "Linear",
              "displayName": "Linear",
              "description": "Fully Connected Layer",
              "icon": "Minus",
              "category": "linear",
              "parameters": [
                {
                  "name": "in_features",
                  "type": "number",
                  "defaultValue": 512,
                  "required": true,
                  "description": "Size of input features",
                  "min": 1
                },
                {
                  "name": "out_features",
                  "type": "number",
                  "defaultValue": 256,
                  "required": true,
                  "description": "Size of output features",
                  "min": 1
                },
                {
                  "name": "bias",
                  "type": "boolean",
                  "defaultValue": true,
                  "required": false,
                  "description": "If set to False, the layer will not learn an additive bias"
                }
              ]
            },
            "parentId": "masks.mask1"
          }
        },
        {
          "node_id": "masks.mask2.first",
          "kind": "layer",
          "op": "Linear",
          "params": {
            "in_features": 8,
            "out_features": 8
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "linear",
              "name": "Linear",
              "displayName": "Linear",
              "description": "Fully Connected Layer",
              "icon": "Minus",
              "category": "linear",
              "parameters": [
                {
                  "name": "in_features",
                  "type": "number",
                  "defaultValue": 512,
                  "required": true,
                  "description": "Size of input features",
                  "min": 1
                },
                {
                  "name": "out_features",
                  "type": "number",
                  "defaultValue": 256,
                  "required": true,
                  "description": "Size of output features",
                  "min": 1
                },
                {
                  "name": "bias",
                  "type": "boolean",
                  "defaultValue": true,
                  "required": false,
                  "description": "If set to False, the layer will not learn an additive bias"
                }
              ]
            },
            "parentId": "masks.mask2"
          }
        },
        {
          "node_id": "relu@masks.mask2#0",
          "kind": "layer",
          "op": "ReLU",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "relu",
              "name": "ReLU",
              "displayName": "ReLU",
              "description": "Rectified Linear Unit",
              "icon": "TrendingUp",
              "category": "activation",
              "parameters": [
                {
                  "name": "inplace",
                  "type": "boolean",
                  "defaultValue": false,
                  "required": false,
                  "description": "Can optionally do the operation in-place"
                }
              ]
            },
            "parentId": "masks.mask2"
          }
        },
        {
          "node_id": "masks.mask2.second",
          "kind": "layer",
          "op": "Linear",
          "params": {
            "in_features": 8,
            "out_features": 8
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "linear",
              "name": "Linear",
              "displayName": "Linear",
              "description": "Fully Connected Layer",
              "icon": "Minus",
              "category": "linear",
              "parameters": [
                {
                  "name": "in_features",
                  "type": "number",
                  "defaultValue": 512,
                  "required": true,
                  "description": "Size of input features",
                  "min": 1
                },
                {
                  "name": "out_features",
                  "type": "number",
                  "defaultValue": 256,
                  "required": true,
                  "description": "Size of output features",
                  "min": 1
                },
                {
                  "name": "bias",
                  "type": "boolean",
                  "defaultValue": true,
                  "required": false,
                  "description": "If set to False, the layer will not learn an additive bias"
                }
              ]
            },
            "parentId": "masks.mask2"
          }
        },
        {
          "node_id": "relu@masks.mask2#1",
          "kind": "layer",
          "op": "ReLU",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "relu",
              "name": "ReLU",
              "displayName": "ReLU",
              "description": "Rectified Linear Unit",
              "icon": "TrendingUp",
              "category": "activation",
              "parameters": [
                {
                  "name": "inplace",
                  "type": "boolean",
                  "defaultValue": false,
                  "required": false,
                  "description": "Can optionally do the operation in-place"
                }
              ]
            },
            "parentId": "masks.mask2"
          }
        },
        {
          "node_id": "masks.mask2.project",
          "kind": "layer",
          "op": "Linear",
          "params": {
            "in_features": 8,
            "out_features": 2
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "linear",
              "name": "Linear",
              "displayName": "Linear",
              "description": "Fully Connected Layer",
              "icon": "Minus",
              "category": "linear",
              "parameters": [
                {
                  "name": "in_features",
                  "type": "number",
                  "defaultValue": 512,
                  "required": true,
                  "description": "Size of input features",
                  "min": 1
                },
                {
                  "name": "out_features",
                  "type": "number",
                  "defaultValue": 256,
                  "required": true,
                  "description": "Size of output features",
                  "min": 1
                },
                {
                  "name": "bias",
                  "type": "boolean",
                  "defaultValue": true,
                  "required": false,
                  "description": "If set to False, the layer will not learn an additive bias"
                }
              ]
            },
            "parentId": "masks.mask2"
          }
        },
        {
          "node_id": "quality.first",
          "kind": "layer",
          "op": "Linear",
          "params": {
            "in_features": 8,
            "out_features": 8
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "linear",
              "name": "Linear",
              "displayName": "Linear",
              "description": "Fully Connected Layer",
              "icon": "Minus",
              "category": "linear",
              "parameters": [
                {
                  "name": "in_features",
                  "type": "number",
                  "defaultValue": 512,
                  "required": true,
                  "description": "Size of input features",
                  "min": 1
                },
                {
                  "name": "out_features",
                  "type": "number",
                  "defaultValue": 256,
                  "required": true,
                  "description": "Size of output features",
                  "min": 1
                },
                {
                  "name": "bias",
                  "type": "boolean",
                  "defaultValue": true,
                  "required": false,
                  "description": "If set to False, the layer will not learn an additive bias"
                }
              ]
            },
            "parentId": "quality"
          }
        },
        {
          "node_id": "relu@quality#0",
          "kind": "layer",
          "op": "ReLU",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "relu",
              "name": "ReLU",
              "displayName": "ReLU",
              "description": "Rectified Linear Unit",
              "icon": "TrendingUp",
              "category": "activation",
              "parameters": [
                {
                  "name": "inplace",
                  "type": "boolean",
                  "defaultValue": false,
                  "required": false,
                  "description": "Can optionally do the operation in-place"
                }
              ]
            },
            "parentId": "quality"
          }
        },
        {
          "node_id": "quality.second",
          "kind": "layer",
          "op": "Linear",
          "params": {
            "in_features": 8,
            "out_features": 8
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "linear",
              "name": "Linear",
              "displayName": "Linear",
              "description": "Fully Connected Layer",
              "icon": "Minus",
              "category": "linear",
              "parameters": [
                {
                  "name": "in_features",
                  "type": "number",
                  "defaultValue": 512,
                  "required": true,
                  "description": "Size of input features",
                  "min": 1
                },
                {
                  "name": "out_features",
                  "type": "number",
                  "defaultValue": 256,
                  "required": true,
                  "description": "Size of output features",
                  "min": 1
                },
                {
                  "name": "bias",
                  "type": "boolean",
                  "defaultValue": true,
                  "required": false,
                  "description": "If set to False, the layer will not learn an additive bias"
                }
              ]
            },
            "parentId": "quality"
          }
        },
        {
          "node_id": "relu@quality#1",
          "kind": "layer",
          "op": "ReLU",
          "params": {},
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "relu",
              "name": "ReLU",
              "displayName": "ReLU",
              "description": "Rectified Linear Unit",
              "icon": "TrendingUp",
              "category": "activation",
              "parameters": [
                {
                  "name": "inplace",
                  "type": "boolean",
                  "defaultValue": false,
                  "required": false,
                  "description": "Can optionally do the operation in-place"
                }
              ]
            },
            "parentId": "quality"
          }
        },
        {
          "node_id": "quality.scores",
          "kind": "layer",
          "op": "Linear",
          "params": {
            "in_features": 8,
            "out_features": 3
          },
          "in_ports": [
            "x"
          ],
          "out_ports": [
            "y"
          ],
          "metadata": {
            "layerType": {
              "id": "linear",
              "name": "Linear",
              "displayName": "Linear",
              "description": "Fully Connected Layer",
              "icon": "Minus",
              "category": "linear",
              "parameters": [
                {
                  "name": "in_features",
                  "type": "number",
                  "defaultValue": 512,
                  "required": true,
                  "description": "Size of input features",
                  "min": 1
                },
                {
                  "name": "out_features",
                  "type": "number",
                  "defaultValue": 256,
                  "required": true,
                  "description": "Size of output features",
                  "min": 1
                },
                {
                  "name": "bias",
                  "type": "boolean",
                  "defaultValue": true,
                  "required": false,
                  "description": "If set to False, the layer will not learn an additive bias"
                }
              ]
            },
            "parentId": "quality"
          }
        }
      ],
      "edges": [
        {
          "edge_id": "edge-1",
          "source_node_id": "cat@prompt_encoder.position#0",
          "target_node_id": "add@prompt_encoder#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-2",
          "source_node_id": "prompt_encoder.position",
          "target_node_id": "add@prompt_encoder#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-3",
          "source_node_id": "prompt_encoder.type_embedding",
          "target_node_id": "add@prompt_encoder#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-4",
          "source_node_id": "decoder.first.self_attention.query",
          "target_node_id": "div@decoder.first.self_attention#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-5",
          "source_node_id": "decoder.first.self_attention.key",
          "target_node_id": "div@decoder.first.self_attention#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-6",
          "source_node_id": "div@decoder.first.self_attention#0",
          "target_node_id": "decoder.first.self_attention.softmax",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-7",
          "source_node_id": "decoder.first.self_attention.softmax",
          "target_node_id": "decoder.first.self_attention.project",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-8",
          "source_node_id": "decoder.first.self_attention.value",
          "target_node_id": "decoder.first.self_attention.project",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-9",
          "source_node_id": "decoder.first.token_to_image.query",
          "target_node_id": "div@decoder.first.token_to_image#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-10",
          "source_node_id": "decoder.first.token_to_image.key",
          "target_node_id": "div@decoder.first.token_to_image#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-11",
          "source_node_id": "div@decoder.first.token_to_image#0",
          "target_node_id": "decoder.first.token_to_image.softmax",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-12",
          "source_node_id": "decoder.first.token_to_image.softmax",
          "target_node_id": "decoder.first.token_to_image.project",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-13",
          "source_node_id": "decoder.first.token_to_image.value",
          "target_node_id": "decoder.first.token_to_image.project",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-14",
          "source_node_id": "decoder.first.image_to_token.query",
          "target_node_id": "div@decoder.first.image_to_token#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-15",
          "source_node_id": "decoder.first.image_to_token.key",
          "target_node_id": "div@decoder.first.image_to_token#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-16",
          "source_node_id": "div@decoder.first.image_to_token#0",
          "target_node_id": "decoder.first.image_to_token.softmax",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-17",
          "source_node_id": "decoder.first.image_to_token.softmax",
          "target_node_id": "decoder.first.image_to_token.project",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-18",
          "source_node_id": "decoder.first.image_to_token.value",
          "target_node_id": "decoder.first.image_to_token.project",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-19",
          "source_node_id": "decoder.first.self_attention.project",
          "target_node_id": "add@decoder.first#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-20",
          "source_node_id": "decoder.first.self_attention",
          "target_node_id": "add@decoder.first#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-21",
          "source_node_id": "add@decoder.first#0",
          "target_node_id": "decoder.first.self_norm",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-22",
          "source_node_id": "decoder.first.self_norm",
          "target_node_id": "add@decoder.first#1",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-23",
          "source_node_id": "add@decoder.first#1",
          "target_node_id": "decoder.first.token_to_image.query",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-24",
          "source_node_id": "add@decoder.first#1",
          "target_node_id": "decoder.first.token_to_image.key",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-25",
          "source_node_id": "add@decoder.first#1",
          "target_node_id": "decoder.first.token_to_image.value",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-26",
          "source_node_id": "add@decoder.first#1",
          "target_node_id": "decoder.first.token_to_image",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-27",
          "source_node_id": "decoder.first.self_norm",
          "target_node_id": "add@decoder.first#2",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-28",
          "source_node_id": "decoder.first.token_to_image.project",
          "target_node_id": "add@decoder.first#2",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-29",
          "source_node_id": "decoder.first.token_to_image",
          "target_node_id": "add@decoder.first#2",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-30",
          "source_node_id": "add@decoder.first#2",
          "target_node_id": "decoder.first.token_norm",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-31",
          "source_node_id": "decoder.first.token_norm",
          "target_node_id": "decoder.first.up",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-32",
          "source_node_id": "decoder.first.up",
          "target_node_id": "decoder.first.relu",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-33",
          "source_node_id": "decoder.first.relu",
          "target_node_id": "decoder.first.down",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-34",
          "source_node_id": "decoder.first.token_norm",
          "target_node_id": "add@decoder.first#3",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-35",
          "source_node_id": "decoder.first.down",
          "target_node_id": "add@decoder.first#3",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-36",
          "source_node_id": "add@decoder.first#3",
          "target_node_id": "decoder.first.mlp_norm",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-37",
          "source_node_id": "decoder.first.mlp_norm",
          "target_node_id": "add@decoder.first#4",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-38",
          "source_node_id": "add@decoder.first#4",
          "target_node_id": "decoder.first.image_to_token.query",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-39",
          "source_node_id": "add@decoder.first#4",
          "target_node_id": "decoder.first.image_to_token.key",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-40",
          "source_node_id": "add@decoder.first#4",
          "target_node_id": "decoder.first.image_to_token.value",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-41",
          "source_node_id": "add@decoder.first#4",
          "target_node_id": "decoder.first.image_to_token",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-42",
          "source_node_id": "decoder.first.mlp_norm",
          "target_node_id": "decoder.first.image_to_token.query",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-43",
          "source_node_id": "decoder.first.mlp_norm",
          "target_node_id": "decoder.first.image_to_token.key",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-44",
          "source_node_id": "decoder.first.mlp_norm",
          "target_node_id": "decoder.first.image_to_token.value",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-45",
          "source_node_id": "decoder.first.mlp_norm",
          "target_node_id": "decoder.first.image_to_token",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-46",
          "source_node_id": "decoder.first.image_to_token.project",
          "target_node_id": "add@decoder.first#5",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-47",
          "source_node_id": "decoder.first.image_to_token",
          "target_node_id": "add@decoder.first#5",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-48",
          "source_node_id": "add@decoder.first#5",
          "target_node_id": "decoder.first.image_norm",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-49",
          "source_node_id": "decoder.second.self_attention.query",
          "target_node_id": "div@decoder.second.self_attention#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-50",
          "source_node_id": "decoder.second.self_attention.key",
          "target_node_id": "div@decoder.second.self_attention#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-51",
          "source_node_id": "div@decoder.second.self_attention#0",
          "target_node_id": "decoder.second.self_attention.softmax",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-52",
          "source_node_id": "decoder.second.self_attention.softmax",
          "target_node_id": "decoder.second.self_attention.project",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-53",
          "source_node_id": "decoder.second.self_attention.value",
          "target_node_id": "decoder.second.self_attention.project",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-54",
          "source_node_id": "decoder.second.token_to_image.query",
          "target_node_id": "div@decoder.second.token_to_image#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-55",
          "source_node_id": "decoder.second.token_to_image.key",
          "target_node_id": "div@decoder.second.token_to_image#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-56",
          "source_node_id": "div@decoder.second.token_to_image#0",
          "target_node_id": "decoder.second.token_to_image.softmax",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-57",
          "source_node_id": "decoder.second.token_to_image.softmax",
          "target_node_id": "decoder.second.token_to_image.project",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-58",
          "source_node_id": "decoder.second.token_to_image.value",
          "target_node_id": "decoder.second.token_to_image.project",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-59",
          "source_node_id": "decoder.second.image_to_token.query",
          "target_node_id": "div@decoder.second.image_to_token#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-60",
          "source_node_id": "decoder.second.image_to_token.key",
          "target_node_id": "div@decoder.second.image_to_token#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-61",
          "source_node_id": "div@decoder.second.image_to_token#0",
          "target_node_id": "decoder.second.image_to_token.softmax",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-62",
          "source_node_id": "decoder.second.image_to_token.softmax",
          "target_node_id": "decoder.second.image_to_token.project",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-63",
          "source_node_id": "decoder.second.image_to_token.value",
          "target_node_id": "decoder.second.image_to_token.project",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-64",
          "source_node_id": "decoder.second.self_attention.project",
          "target_node_id": "add@decoder.second#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-65",
          "source_node_id": "decoder.second.self_attention",
          "target_node_id": "add@decoder.second#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-66",
          "source_node_id": "add@decoder.second#0",
          "target_node_id": "decoder.second.self_norm",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-67",
          "source_node_id": "decoder.second.self_norm",
          "target_node_id": "add@decoder.second#1",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-68",
          "source_node_id": "add@decoder.second#1",
          "target_node_id": "decoder.second.token_to_image.query",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-69",
          "source_node_id": "add@decoder.second#1",
          "target_node_id": "decoder.second.token_to_image.key",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-70",
          "source_node_id": "add@decoder.second#1",
          "target_node_id": "decoder.second.token_to_image.value",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-71",
          "source_node_id": "add@decoder.second#1",
          "target_node_id": "decoder.second.token_to_image",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-72",
          "source_node_id": "decoder.second.self_norm",
          "target_node_id": "add@decoder.second#2",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-73",
          "source_node_id": "decoder.second.token_to_image.project",
          "target_node_id": "add@decoder.second#2",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-74",
          "source_node_id": "decoder.second.token_to_image",
          "target_node_id": "add@decoder.second#2",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-75",
          "source_node_id": "add@decoder.second#2",
          "target_node_id": "decoder.second.token_norm",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-76",
          "source_node_id": "decoder.second.token_norm",
          "target_node_id": "decoder.second.up",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-77",
          "source_node_id": "decoder.second.up",
          "target_node_id": "decoder.second.relu",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-78",
          "source_node_id": "decoder.second.relu",
          "target_node_id": "decoder.second.down",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-79",
          "source_node_id": "decoder.second.token_norm",
          "target_node_id": "add@decoder.second#3",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-80",
          "source_node_id": "decoder.second.down",
          "target_node_id": "add@decoder.second#3",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-81",
          "source_node_id": "add@decoder.second#3",
          "target_node_id": "decoder.second.mlp_norm",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-82",
          "source_node_id": "decoder.second.mlp_norm",
          "target_node_id": "add@decoder.second#4",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-83",
          "source_node_id": "add@decoder.second#4",
          "target_node_id": "decoder.second.image_to_token.query",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-84",
          "source_node_id": "add@decoder.second#4",
          "target_node_id": "decoder.second.image_to_token.key",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-85",
          "source_node_id": "add@decoder.second#4",
          "target_node_id": "decoder.second.image_to_token.value",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-86",
          "source_node_id": "add@decoder.second#4",
          "target_node_id": "decoder.second.image_to_token",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-87",
          "source_node_id": "decoder.second.mlp_norm",
          "target_node_id": "decoder.second.image_to_token.query",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-88",
          "source_node_id": "decoder.second.mlp_norm",
          "target_node_id": "decoder.second.image_to_token.key",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-89",
          "source_node_id": "decoder.second.mlp_norm",
          "target_node_id": "decoder.second.image_to_token.value",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-90",
          "source_node_id": "decoder.second.mlp_norm",
          "target_node_id": "decoder.second.image_to_token",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-91",
          "source_node_id": "decoder.second.image_to_token.project",
          "target_node_id": "add@decoder.second#5",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-92",
          "source_node_id": "decoder.second.image_to_token",
          "target_node_id": "add@decoder.second#5",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-93",
          "source_node_id": "add@decoder.second#5",
          "target_node_id": "decoder.second.image_norm",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-94",
          "source_node_id": "decoder.final_attention.query",
          "target_node_id": "div@decoder.final_attention#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-95",
          "source_node_id": "decoder.final_attention.key",
          "target_node_id": "div@decoder.final_attention#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-96",
          "source_node_id": "div@decoder.final_attention#0",
          "target_node_id": "decoder.final_attention.softmax",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-97",
          "source_node_id": "decoder.final_attention.softmax",
          "target_node_id": "decoder.final_attention.project",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-98",
          "source_node_id": "decoder.final_attention.value",
          "target_node_id": "decoder.final_attention.project",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-99",
          "source_node_id": "decoder.first.mlp_norm",
          "target_node_id": "decoder.second.self_attention.query",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-100",
          "source_node_id": "decoder.first.mlp_norm",
          "target_node_id": "decoder.second.self_attention.key",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-101",
          "source_node_id": "decoder.first.mlp_norm",
          "target_node_id": "decoder.second.self_attention.value",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-102",
          "source_node_id": "decoder.first.mlp_norm",
          "target_node_id": "add@decoder.second#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-103",
          "source_node_id": "decoder.first.mlp_norm",
          "target_node_id": "add@decoder.second#1",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-104",
          "source_node_id": "decoder.first.mlp_norm",
          "target_node_id": "decoder.second.token_to_image.query",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-105",
          "source_node_id": "decoder.first.mlp_norm",
          "target_node_id": "decoder.second.token_to_image.key",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-106",
          "source_node_id": "decoder.first.mlp_norm",
          "target_node_id": "decoder.second.token_to_image.value",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-107",
          "source_node_id": "decoder.first.mlp_norm",
          "target_node_id": "add@decoder.second#4",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-108",
          "source_node_id": "decoder.first.mlp_norm",
          "target_node_id": "decoder.second.image_to_token.query",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-109",
          "source_node_id": "decoder.first.mlp_norm",
          "target_node_id": "decoder.second.image_to_token.key",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-110",
          "source_node_id": "decoder.first.mlp_norm",
          "target_node_id": "decoder.second.image_to_token.value",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-111",
          "source_node_id": "decoder.first.mlp_norm",
          "target_node_id": "add@decoder.second#5",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-112",
          "source_node_id": "decoder.first.image_norm",
          "target_node_id": "decoder.second.self_attention.query",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-113",
          "source_node_id": "decoder.first.image_norm",
          "target_node_id": "decoder.second.self_attention.key",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-114",
          "source_node_id": "decoder.first.image_norm",
          "target_node_id": "decoder.second.self_attention.value",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-115",
          "source_node_id": "decoder.first.image_norm",
          "target_node_id": "add@decoder.second#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-116",
          "source_node_id": "decoder.first.image_norm",
          "target_node_id": "add@decoder.second#1",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-117",
          "source_node_id": "decoder.first.image_norm",
          "target_node_id": "decoder.second.token_to_image.query",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-118",
          "source_node_id": "decoder.first.image_norm",
          "target_node_id": "decoder.second.token_to_image.key",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-119",
          "source_node_id": "decoder.first.image_norm",
          "target_node_id": "decoder.second.token_to_image.value",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-120",
          "source_node_id": "decoder.first.image_norm",
          "target_node_id": "add@decoder.second#4",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-121",
          "source_node_id": "decoder.first.image_norm",
          "target_node_id": "decoder.second.image_to_token.query",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-122",
          "source_node_id": "decoder.first.image_norm",
          "target_node_id": "decoder.second.image_to_token.key",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-123",
          "source_node_id": "decoder.first.image_norm",
          "target_node_id": "decoder.second.image_to_token.value",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-124",
          "source_node_id": "decoder.first.image_norm",
          "target_node_id": "add@decoder.second#5",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-125",
          "source_node_id": "decoder.first",
          "target_node_id": "decoder.second",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-126",
          "source_node_id": "decoder.second.mlp_norm",
          "target_node_id": "add@decoder#1",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-127",
          "source_node_id": "decoder.second.image_norm",
          "target_node_id": "add@decoder#1",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-128",
          "source_node_id": "decoder.second",
          "target_node_id": "add@decoder#1",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-129",
          "source_node_id": "decoder.second.mlp_norm",
          "target_node_id": "add@decoder#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-130",
          "source_node_id": "decoder.second.image_norm",
          "target_node_id": "add@decoder#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-131",
          "source_node_id": "decoder.second",
          "target_node_id": "add@decoder#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-132",
          "source_node_id": "add@decoder#1",
          "target_node_id": "decoder.final_attention.query",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-133",
          "source_node_id": "add@decoder#1",
          "target_node_id": "decoder.final_attention.key",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-134",
          "source_node_id": "add@decoder#1",
          "target_node_id": "decoder.final_attention.value",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-135",
          "source_node_id": "add@decoder#1",
          "target_node_id": "decoder.final_attention",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-136",
          "source_node_id": "add@decoder#0",
          "target_node_id": "decoder.final_attention.query",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-137",
          "source_node_id": "add@decoder#0",
          "target_node_id": "decoder.final_attention.key",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-138",
          "source_node_id": "add@decoder#0",
          "target_node_id": "decoder.final_attention.value",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-139",
          "source_node_id": "add@decoder#0",
          "target_node_id": "decoder.final_attention",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-140",
          "source_node_id": "decoder.second.mlp_norm",
          "target_node_id": "decoder.final_attention.query",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-141",
          "source_node_id": "decoder.second.mlp_norm",
          "target_node_id": "decoder.final_attention.key",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-142",
          "source_node_id": "decoder.second.mlp_norm",
          "target_node_id": "decoder.final_attention.value",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-143",
          "source_node_id": "decoder.second.image_norm",
          "target_node_id": "decoder.final_attention.query",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-144",
          "source_node_id": "decoder.second.image_norm",
          "target_node_id": "decoder.final_attention.key",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-145",
          "source_node_id": "decoder.second.image_norm",
          "target_node_id": "decoder.final_attention.value",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-146",
          "source_node_id": "decoder.second",
          "target_node_id": "decoder.final_attention",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-147",
          "source_node_id": "decoder.second.mlp_norm",
          "target_node_id": "add@decoder#2",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-148",
          "source_node_id": "decoder.second.image_norm",
          "target_node_id": "add@decoder#2",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-149",
          "source_node_id": "decoder.second",
          "target_node_id": "add@decoder#2",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-150",
          "source_node_id": "decoder.final_attention.project",
          "target_node_id": "add@decoder#2",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-151",
          "source_node_id": "decoder.final_attention",
          "target_node_id": "add@decoder#2",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-152",
          "source_node_id": "add@decoder#2",
          "target_node_id": "decoder.final_norm",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-153",
          "source_node_id": "upscale.first",
          "target_node_id": "permute@upscale#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-154",
          "source_node_id": "permute@upscale#0",
          "target_node_id": "upscale.norm",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-155",
          "source_node_id": "upscale.norm",
          "target_node_id": "permute@upscale#1",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-156",
          "source_node_id": "permute@upscale#1",
          "target_node_id": "gelu@upscale#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-157",
          "source_node_id": "gelu@upscale#0",
          "target_node_id": "upscale.second",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-158",
          "source_node_id": "upscale.second",
          "target_node_id": "gelu@upscale#1",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-159",
          "source_node_id": "masks.mask0.first",
          "target_node_id": "relu@masks.mask0#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-160",
          "source_node_id": "relu@masks.mask0#0",
          "target_node_id": "masks.mask0.second",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-161",
          "source_node_id": "masks.mask0.second",
          "target_node_id": "relu@masks.mask0#1",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-162",
          "source_node_id": "relu@masks.mask0#1",
          "target_node_id": "masks.mask0.project",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-163",
          "source_node_id": "masks.mask1.first",
          "target_node_id": "relu@masks.mask1#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-164",
          "source_node_id": "relu@masks.mask1#0",
          "target_node_id": "masks.mask1.second",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-165",
          "source_node_id": "masks.mask1.second",
          "target_node_id": "relu@masks.mask1#1",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-166",
          "source_node_id": "relu@masks.mask1#1",
          "target_node_id": "masks.mask1.project",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-167",
          "source_node_id": "masks.mask2.first",
          "target_node_id": "relu@masks.mask2#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-168",
          "source_node_id": "relu@masks.mask2#0",
          "target_node_id": "masks.mask2.second",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-169",
          "source_node_id": "masks.mask2.second",
          "target_node_id": "relu@masks.mask2#1",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-170",
          "source_node_id": "relu@masks.mask2#1",
          "target_node_id": "masks.mask2.project",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-171",
          "source_node_id": "masks.mask0.project",
          "target_node_id": "stack@masks#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-172",
          "source_node_id": "masks.mask0",
          "target_node_id": "stack@masks#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-173",
          "source_node_id": "masks.mask1.project",
          "target_node_id": "stack@masks#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-174",
          "source_node_id": "masks.mask1",
          "target_node_id": "stack@masks#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-175",
          "source_node_id": "masks.mask2.project",
          "target_node_id": "stack@masks#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-176",
          "source_node_id": "masks.mask2",
          "target_node_id": "stack@masks#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-177",
          "source_node_id": "stack@masks#0",
          "target_node_id": "python@masks#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-178",
          "source_node_id": "flatten@masks#0",
          "target_node_id": "python@masks#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-179",
          "source_node_id": "quality.first",
          "target_node_id": "relu@quality#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-180",
          "source_node_id": "relu@quality#0",
          "target_node_id": "quality.second",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-181",
          "source_node_id": "quality.second",
          "target_node_id": "relu@quality#1",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-182",
          "source_node_id": "relu@quality#1",
          "target_node_id": "quality.scores",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-183",
          "source_node_id": "input",
          "target_node_id": "cat@prompt_encoder.position#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-184",
          "source_node_id": "input",
          "target_node_id": "prompt_encoder.type_embedding",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-185",
          "source_node_id": "input",
          "target_node_id": "prompt_encoder",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-186",
          "source_node_id": "output_tokens",
          "target_node_id": "cat@PromptableMaskDecoder#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-187",
          "source_node_id": "input",
          "target_node_id": "cat@PromptableMaskDecoder#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-188",
          "source_node_id": "add@prompt_encoder#0",
          "target_node_id": "cat@PromptableMaskDecoder#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-189",
          "source_node_id": "prompt_encoder",
          "target_node_id": "cat@PromptableMaskDecoder#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-190",
          "source_node_id": "input",
          "target_node_id": "flatten@PromptableMaskDecoder#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-191",
          "source_node_id": "flatten@PromptableMaskDecoder#0",
          "target_node_id": "add@PromptableMaskDecoder#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-192",
          "source_node_id": "no_mask",
          "target_node_id": "add@PromptableMaskDecoder#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-193",
          "source_node_id": "add@prompt_encoder#0",
          "target_node_id": "python@PromptableMaskDecoder#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-194",
          "source_node_id": "prompt_encoder",
          "target_node_id": "python@PromptableMaskDecoder#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-195",
          "source_node_id": "cat@PromptableMaskDecoder#0",
          "target_node_id": "decoder.first.self_attention.query",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-196",
          "source_node_id": "cat@PromptableMaskDecoder#0",
          "target_node_id": "decoder.first.self_attention.key",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-197",
          "source_node_id": "cat@PromptableMaskDecoder#0",
          "target_node_id": "decoder.first.self_attention.value",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-198",
          "source_node_id": "cat@PromptableMaskDecoder#0",
          "target_node_id": "add@decoder.first#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-199",
          "source_node_id": "cat@PromptableMaskDecoder#0",
          "target_node_id": "add@decoder.first#1",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-200",
          "source_node_id": "cat@PromptableMaskDecoder#0",
          "target_node_id": "decoder.first.token_to_image.query",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-201",
          "source_node_id": "cat@PromptableMaskDecoder#0",
          "target_node_id": "decoder.first.token_to_image.key",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-202",
          "source_node_id": "cat@PromptableMaskDecoder#0",
          "target_node_id": "decoder.first.token_to_image.value",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-203",
          "source_node_id": "cat@PromptableMaskDecoder#0",
          "target_node_id": "add@decoder.first#4",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-204",
          "source_node_id": "cat@PromptableMaskDecoder#0",
          "target_node_id": "decoder.first.image_to_token.query",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-205",
          "source_node_id": "cat@PromptableMaskDecoder#0",
          "target_node_id": "decoder.first.image_to_token.key",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-206",
          "source_node_id": "cat@PromptableMaskDecoder#0",
          "target_node_id": "decoder.first.image_to_token.value",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-207",
          "source_node_id": "cat@PromptableMaskDecoder#0",
          "target_node_id": "add@decoder.first#5",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-208",
          "source_node_id": "cat@PromptableMaskDecoder#0",
          "target_node_id": "decoder.second.self_attention.query",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-209",
          "source_node_id": "cat@PromptableMaskDecoder#0",
          "target_node_id": "decoder.second.self_attention.key",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-210",
          "source_node_id": "cat@PromptableMaskDecoder#0",
          "target_node_id": "decoder.second.self_attention.value",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-211",
          "source_node_id": "cat@PromptableMaskDecoder#0",
          "target_node_id": "add@decoder.second#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-212",
          "source_node_id": "cat@PromptableMaskDecoder#0",
          "target_node_id": "add@decoder.second#1",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-213",
          "source_node_id": "cat@PromptableMaskDecoder#0",
          "target_node_id": "decoder.second.token_to_image.query",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-214",
          "source_node_id": "cat@PromptableMaskDecoder#0",
          "target_node_id": "decoder.second.token_to_image.key",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-215",
          "source_node_id": "cat@PromptableMaskDecoder#0",
          "target_node_id": "decoder.second.token_to_image.value",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-216",
          "source_node_id": "cat@PromptableMaskDecoder#0",
          "target_node_id": "add@decoder.second#4",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-217",
          "source_node_id": "cat@PromptableMaskDecoder#0",
          "target_node_id": "decoder.second.image_to_token.query",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-218",
          "source_node_id": "cat@PromptableMaskDecoder#0",
          "target_node_id": "decoder.second.image_to_token.key",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-219",
          "source_node_id": "cat@PromptableMaskDecoder#0",
          "target_node_id": "decoder.second.image_to_token.value",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-220",
          "source_node_id": "cat@PromptableMaskDecoder#0",
          "target_node_id": "add@decoder.second#5",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-221",
          "source_node_id": "cat@PromptableMaskDecoder#0",
          "target_node_id": "add@decoder#1",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-222",
          "source_node_id": "cat@PromptableMaskDecoder#0",
          "target_node_id": "add@decoder#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-223",
          "source_node_id": "cat@PromptableMaskDecoder#0",
          "target_node_id": "decoder",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-224",
          "source_node_id": "add@PromptableMaskDecoder#0",
          "target_node_id": "decoder.first.self_attention.query",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-225",
          "source_node_id": "add@PromptableMaskDecoder#0",
          "target_node_id": "decoder.first.self_attention.key",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-226",
          "source_node_id": "add@PromptableMaskDecoder#0",
          "target_node_id": "decoder.first.self_attention.value",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-227",
          "source_node_id": "add@PromptableMaskDecoder#0",
          "target_node_id": "add@decoder.first#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-228",
          "source_node_id": "add@PromptableMaskDecoder#0",
          "target_node_id": "add@decoder.first#1",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-229",
          "source_node_id": "add@PromptableMaskDecoder#0",
          "target_node_id": "decoder.first.token_to_image.query",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-230",
          "source_node_id": "add@PromptableMaskDecoder#0",
          "target_node_id": "decoder.first.token_to_image.key",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-231",
          "source_node_id": "add@PromptableMaskDecoder#0",
          "target_node_id": "decoder.first.token_to_image.value",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-232",
          "source_node_id": "add@PromptableMaskDecoder#0",
          "target_node_id": "add@decoder.first#4",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-233",
          "source_node_id": "add@PromptableMaskDecoder#0",
          "target_node_id": "decoder.first.image_to_token.query",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-234",
          "source_node_id": "add@PromptableMaskDecoder#0",
          "target_node_id": "decoder.first.image_to_token.key",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-235",
          "source_node_id": "add@PromptableMaskDecoder#0",
          "target_node_id": "decoder.first.image_to_token.value",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-236",
          "source_node_id": "add@PromptableMaskDecoder#0",
          "target_node_id": "add@decoder.first#5",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-237",
          "source_node_id": "add@PromptableMaskDecoder#0",
          "target_node_id": "decoder.second.self_attention.query",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-238",
          "source_node_id": "add@PromptableMaskDecoder#0",
          "target_node_id": "decoder.second.self_attention.key",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-239",
          "source_node_id": "add@PromptableMaskDecoder#0",
          "target_node_id": "decoder.second.self_attention.value",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-240",
          "source_node_id": "add@PromptableMaskDecoder#0",
          "target_node_id": "add@decoder.second#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-241",
          "source_node_id": "add@PromptableMaskDecoder#0",
          "target_node_id": "add@decoder.second#1",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-242",
          "source_node_id": "add@PromptableMaskDecoder#0",
          "target_node_id": "decoder.second.token_to_image.query",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-243",
          "source_node_id": "add@PromptableMaskDecoder#0",
          "target_node_id": "decoder.second.token_to_image.key",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-244",
          "source_node_id": "add@PromptableMaskDecoder#0",
          "target_node_id": "decoder.second.token_to_image.value",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-245",
          "source_node_id": "add@PromptableMaskDecoder#0",
          "target_node_id": "add@decoder.second#4",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-246",
          "source_node_id": "add@PromptableMaskDecoder#0",
          "target_node_id": "decoder.second.image_to_token.query",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-247",
          "source_node_id": "add@PromptableMaskDecoder#0",
          "target_node_id": "decoder.second.image_to_token.key",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-248",
          "source_node_id": "add@PromptableMaskDecoder#0",
          "target_node_id": "decoder.second.image_to_token.value",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-249",
          "source_node_id": "add@PromptableMaskDecoder#0",
          "target_node_id": "add@decoder.second#5",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-250",
          "source_node_id": "add@PromptableMaskDecoder#0",
          "target_node_id": "add@decoder#1",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-251",
          "source_node_id": "add@PromptableMaskDecoder#0",
          "target_node_id": "add@decoder#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-252",
          "source_node_id": "add@PromptableMaskDecoder#0",
          "target_node_id": "decoder",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-253",
          "source_node_id": "python@PromptableMaskDecoder#0",
          "target_node_id": "decoder.first.self_attention.query",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-254",
          "source_node_id": "python@PromptableMaskDecoder#0",
          "target_node_id": "decoder.first.self_attention.key",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-255",
          "source_node_id": "python@PromptableMaskDecoder#0",
          "target_node_id": "decoder.first.self_attention.value",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-256",
          "source_node_id": "python@PromptableMaskDecoder#0",
          "target_node_id": "add@decoder.first#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-257",
          "source_node_id": "python@PromptableMaskDecoder#0",
          "target_node_id": "add@decoder.first#1",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-258",
          "source_node_id": "python@PromptableMaskDecoder#0",
          "target_node_id": "decoder.first.token_to_image.query",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-259",
          "source_node_id": "python@PromptableMaskDecoder#0",
          "target_node_id": "decoder.first.token_to_image.key",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-260",
          "source_node_id": "python@PromptableMaskDecoder#0",
          "target_node_id": "decoder.first.token_to_image.value",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-261",
          "source_node_id": "python@PromptableMaskDecoder#0",
          "target_node_id": "add@decoder.first#4",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-262",
          "source_node_id": "python@PromptableMaskDecoder#0",
          "target_node_id": "decoder.first.image_to_token.query",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-263",
          "source_node_id": "python@PromptableMaskDecoder#0",
          "target_node_id": "decoder.first.image_to_token.key",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-264",
          "source_node_id": "python@PromptableMaskDecoder#0",
          "target_node_id": "decoder.first.image_to_token.value",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-265",
          "source_node_id": "python@PromptableMaskDecoder#0",
          "target_node_id": "add@decoder.first#5",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-266",
          "source_node_id": "python@PromptableMaskDecoder#0",
          "target_node_id": "decoder.second.self_attention.query",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-267",
          "source_node_id": "python@PromptableMaskDecoder#0",
          "target_node_id": "decoder.second.self_attention.key",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-268",
          "source_node_id": "python@PromptableMaskDecoder#0",
          "target_node_id": "decoder.second.self_attention.value",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-269",
          "source_node_id": "python@PromptableMaskDecoder#0",
          "target_node_id": "add@decoder.second#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-270",
          "source_node_id": "python@PromptableMaskDecoder#0",
          "target_node_id": "add@decoder.second#1",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-271",
          "source_node_id": "python@PromptableMaskDecoder#0",
          "target_node_id": "decoder.second.token_to_image.query",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-272",
          "source_node_id": "python@PromptableMaskDecoder#0",
          "target_node_id": "decoder.second.token_to_image.key",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-273",
          "source_node_id": "python@PromptableMaskDecoder#0",
          "target_node_id": "decoder.second.token_to_image.value",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-274",
          "source_node_id": "python@PromptableMaskDecoder#0",
          "target_node_id": "add@decoder.second#4",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-275",
          "source_node_id": "python@PromptableMaskDecoder#0",
          "target_node_id": "decoder.second.image_to_token.query",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-276",
          "source_node_id": "python@PromptableMaskDecoder#0",
          "target_node_id": "decoder.second.image_to_token.key",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-277",
          "source_node_id": "python@PromptableMaskDecoder#0",
          "target_node_id": "decoder.second.image_to_token.value",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-278",
          "source_node_id": "python@PromptableMaskDecoder#0",
          "target_node_id": "add@decoder.second#5",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-279",
          "source_node_id": "python@PromptableMaskDecoder#0",
          "target_node_id": "add@decoder#1",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-280",
          "source_node_id": "python@PromptableMaskDecoder#0",
          "target_node_id": "add@decoder#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-281",
          "source_node_id": "python@PromptableMaskDecoder#0",
          "target_node_id": "decoder",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-282",
          "source_node_id": "decoder.final_norm",
          "target_node_id": "upscale.first",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-283",
          "source_node_id": "decoder.second.mlp_norm",
          "target_node_id": "upscale.first",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-284",
          "source_node_id": "decoder.second.image_norm",
          "target_node_id": "upscale.first",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-285",
          "source_node_id": "decoder",
          "target_node_id": "upscale",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-286",
          "source_node_id": "decoder.final_norm",
          "target_node_id": "masks.mask0.first",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-287",
          "source_node_id": "decoder.final_norm",
          "target_node_id": "masks.mask1.first",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-288",
          "source_node_id": "decoder.final_norm",
          "target_node_id": "masks.mask2.first",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-289",
          "source_node_id": "decoder.final_norm",
          "target_node_id": "flatten@masks#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-290",
          "source_node_id": "decoder.second.mlp_norm",
          "target_node_id": "masks.mask0.first",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-291",
          "source_node_id": "decoder.second.mlp_norm",
          "target_node_id": "masks.mask1.first",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-292",
          "source_node_id": "decoder.second.mlp_norm",
          "target_node_id": "masks.mask2.first",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-293",
          "source_node_id": "decoder.second.mlp_norm",
          "target_node_id": "flatten@masks#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-294",
          "source_node_id": "decoder.second.image_norm",
          "target_node_id": "masks.mask0.first",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-295",
          "source_node_id": "decoder.second.image_norm",
          "target_node_id": "masks.mask1.first",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-296",
          "source_node_id": "decoder.second.image_norm",
          "target_node_id": "masks.mask2.first",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-297",
          "source_node_id": "decoder.second.image_norm",
          "target_node_id": "flatten@masks#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-298",
          "source_node_id": "decoder",
          "target_node_id": "masks",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-299",
          "source_node_id": "gelu@upscale#1",
          "target_node_id": "masks.mask0.first",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-300",
          "source_node_id": "gelu@upscale#1",
          "target_node_id": "masks.mask1.first",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-301",
          "source_node_id": "gelu@upscale#1",
          "target_node_id": "masks.mask2.first",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-302",
          "source_node_id": "gelu@upscale#1",
          "target_node_id": "flatten@masks#0",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-303",
          "source_node_id": "upscale",
          "target_node_id": "masks",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-304",
          "source_node_id": "decoder.final_norm",
          "target_node_id": "quality.first",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-305",
          "source_node_id": "decoder.second.mlp_norm",
          "target_node_id": "quality.first",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-306",
          "source_node_id": "decoder.second.image_norm",
          "target_node_id": "quality.first",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-307",
          "source_node_id": "decoder",
          "target_node_id": "quality",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-308",
          "source_node_id": "python@masks#0",
          "target_node_id": "flatten@PromptableMaskDecoder#1",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-309",
          "source_node_id": "masks",
          "target_node_id": "flatten@PromptableMaskDecoder#1",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-310",
          "source_node_id": "flatten@PromptableMaskDecoder#1",
          "target_node_id": "cat@PromptableMaskDecoder#1",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-311",
          "source_node_id": "quality.scores",
          "target_node_id": "cat@PromptableMaskDecoder#1",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-312",
          "source_node_id": "quality",
          "target_node_id": "cat@PromptableMaskDecoder#1",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        },
        {
          "edge_id": "edge-313",
          "source_node_id": "cat@PromptableMaskDecoder#1",
          "target_node_id": "output",
          "source_port": "y",
          "target_port": "x",
          "metadata": {}
        }
      ],
      "inputs": [],
      "modules": [],
      "operations": [],
      "metadata": {}
    },
    "view": {
      "graph_id": "snapshot",
      "node_positions": {
        "input": {
          "x": 0,
          "y": 160
        },
        "flatten@PromptableMaskDecoder#0": {
          "x": 340,
          "y": 160
        },
        "prompt_encoder": {
          "x": 680,
          "y": 160
        },
        "python@PromptableMaskDecoder#0": {
          "x": 1020,
          "y": 160
        },
        "output_tokens": {
          "x": 1360,
          "y": 160
        },
        "cat@PromptableMaskDecoder#0": {
          "x": 1700,
          "y": 160
        },
        "no_mask": {
          "x": 2040,
          "y": 160
        },
        "add@PromptableMaskDecoder#0": {
          "x": 2380,
          "y": 160
        },
        "decoder": {
          "x": 2720,
          "y": 160
        },
        "upscale": {
          "x": 3060,
          "y": 160
        },
        "masks": {
          "x": 3400,
          "y": 160
        },
        "flatten@PromptableMaskDecoder#1": {
          "x": 3740,
          "y": 160
        },
        "quality": {
          "x": 4080,
          "y": 160
        },
        "cat@PromptableMaskDecoder#1": {
          "x": 4420,
          "y": 160
        },
        "output": {
          "x": 4760,
          "y": 160
        },
        "prompt_encoder.position": {
          "x": 24,
          "y": 214
        },
        "prompt_encoder.type_embedding": {
          "x": 24,
          "y": 364
        },
        "add@prompt_encoder#0": {
          "x": 24,
          "y": 514
        },
        "cat@prompt_encoder.position#0": {
          "x": 24,
          "y": 214
        },
        "decoder.first": {
          "x": 24,
          "y": 214
        },
        "decoder.second": {
          "x": 24,
          "y": 364
        },
        "add@decoder#0": {
          "x": 24,
          "y": 514
        },
        "add@decoder#1": {
          "x": 24,
          "y": 664
        },
        "decoder.final_attention": {
          "x": 24,
          "y": 814
        },
        "add@decoder#2": {
          "x": 24,
          "y": 964
        },
        "decoder.final_norm": {
          "x": 24,
          "y": 1114
        },
        "decoder.first.self_attention": {
          "x": 24,
          "y": 214
        },
        "add@decoder.first#0": {
          "x": 24,
          "y": 364
        },
        "decoder.first.self_norm": {
          "x": 24,
          "y": 514
        },
        "add@decoder.first#1": {
          "x": 24,
          "y": 664
        },
        "decoder.first.token_to_image": {
          "x": 24,
          "y": 814
        },
        "add@decoder.first#2": {
          "x": 24,
          "y": 964
        },
        "decoder.first.token_norm": {
          "x": 24,
          "y": 1114
        },
        "decoder.first.up": {
          "x": 24,
          "y": 1264
        },
        "decoder.first.relu": {
          "x": 24,
          "y": 1414
        },
        "decoder.first.down": {
          "x": 24,
          "y": 1564
        },
        "add@decoder.first#3": {
          "x": 24,
          "y": 1714
        },
        "decoder.first.mlp_norm": {
          "x": 24,
          "y": 1864
        },
        "add@decoder.first#4": {
          "x": 24,
          "y": 2014
        },
        "decoder.first.image_to_token": {
          "x": 24,
          "y": 2164
        },
        "add@decoder.first#5": {
          "x": 24,
          "y": 2314
        },
        "decoder.first.image_norm": {
          "x": 24,
          "y": 2464
        },
        "decoder.first.self_attention.query": {
          "x": 24,
          "y": 214
        },
        "decoder.first.self_attention.key": {
          "x": 24,
          "y": 364
        },
        "div@decoder.first.self_attention#0": {
          "x": 24,
          "y": 514
        },
        "decoder.first.self_attention.value": {
          "x": 24,
          "y": 664
        },
        "decoder.first.self_attention.softmax": {
          "x": 24,
          "y": 814
        },
        "decoder.first.self_attention.project": {
          "x": 24,
          "y": 964
        },
        "decoder.first.token_to_image.query": {
          "x": 24,
          "y": 214
        },
        "decoder.first.token_to_image.key": {
          "x": 24,
          "y": 364
        },
        "div@decoder.first.token_to_image#0": {
          "x": 24,
          "y": 514
        },
        "decoder.first.token_to_image.value": {
          "x": 24,
          "y": 664
        },
        "decoder.first.token_to_image.softmax": {
          "x": 24,
          "y": 814
        },
        "decoder.first.token_to_image.project": {
          "x": 24,
          "y": 964
        },
        "decoder.first.image_to_token.query": {
          "x": 24,
          "y": 214
        },
        "decoder.first.image_to_token.key": {
          "x": 24,
          "y": 364
        },
        "div@decoder.first.image_to_token#0": {
          "x": 24,
          "y": 514
        },
        "decoder.first.image_to_token.value": {
          "x": 24,
          "y": 664
        },
        "decoder.first.image_to_token.softmax": {
          "x": 24,
          "y": 814
        },
        "decoder.first.image_to_token.project": {
          "x": 24,
          "y": 964
        },
        "decoder.second.self_attention": {
          "x": 24,
          "y": 214
        },
        "add@decoder.second#0": {
          "x": 24,
          "y": 364
        },
        "decoder.second.self_norm": {
          "x": 24,
          "y": 514
        },
        "add@decoder.second#1": {
          "x": 24,
          "y": 664
        },
        "decoder.second.token_to_image": {
          "x": 24,
          "y": 814
        },
        "add@decoder.second#2": {
          "x": 24,
          "y": 964
        },
        "decoder.second.token_norm": {
          "x": 24,
          "y": 1114
        },
        "decoder.second.up": {
          "x": 24,
          "y": 1264
        },
        "decoder.second.relu": {
          "x": 24,
          "y": 1414
        },
        "decoder.second.down": {
          "x": 24,
          "y": 1564
        },
        "add@decoder.second#3": {
          "x": 24,
          "y": 1714
        },
        "decoder.second.mlp_norm": {
          "x": 24,
          "y": 1864
        },
        "add@decoder.second#4": {
          "x": 24,
          "y": 2014
        },
        "decoder.second.image_to_token": {
          "x": 24,
          "y": 2164
        },
        "add@decoder.second#5": {
          "x": 24,
          "y": 2314
        },
        "decoder.second.image_norm": {
          "x": 24,
          "y": 2464
        },
        "decoder.second.self_attention.query": {
          "x": 24,
          "y": 214
        },
        "decoder.second.self_attention.key": {
          "x": 24,
          "y": 364
        },
        "div@decoder.second.self_attention#0": {
          "x": 24,
          "y": 514
        },
        "decoder.second.self_attention.value": {
          "x": 24,
          "y": 664
        },
        "decoder.second.self_attention.softmax": {
          "x": 24,
          "y": 814
        },
        "decoder.second.self_attention.project": {
          "x": 24,
          "y": 964
        },
        "decoder.second.token_to_image.query": {
          "x": 24,
          "y": 214
        },
        "decoder.second.token_to_image.key": {
          "x": 24,
          "y": 364
        },
        "div@decoder.second.token_to_image#0": {
          "x": 24,
          "y": 514
        },
        "decoder.second.token_to_image.value": {
          "x": 24,
          "y": 664
        },
        "decoder.second.token_to_image.softmax": {
          "x": 24,
          "y": 814
        },
        "decoder.second.token_to_image.project": {
          "x": 24,
          "y": 964
        },
        "decoder.second.image_to_token.query": {
          "x": 24,
          "y": 214
        },
        "decoder.second.image_to_token.key": {
          "x": 24,
          "y": 364
        },
        "div@decoder.second.image_to_token#0": {
          "x": 24,
          "y": 514
        },
        "decoder.second.image_to_token.value": {
          "x": 24,
          "y": 664
        },
        "decoder.second.image_to_token.softmax": {
          "x": 24,
          "y": 814
        },
        "decoder.second.image_to_token.project": {
          "x": 24,
          "y": 964
        },
        "decoder.final_attention.query": {
          "x": 24,
          "y": 214
        },
        "decoder.final_attention.key": {
          "x": 24,
          "y": 364
        },
        "div@decoder.final_attention#0": {
          "x": 24,
          "y": 514
        },
        "decoder.final_attention.value": {
          "x": 24,
          "y": 664
        },
        "decoder.final_attention.softmax": {
          "x": 24,
          "y": 814
        },
        "decoder.final_attention.project": {
          "x": 24,
          "y": 964
        },
        "upscale.first": {
          "x": 24,
          "y": 214
        },
        "permute@upscale#0": {
          "x": 24,
          "y": 364
        },
        "upscale.norm": {
          "x": 24,
          "y": 514
        },
        "permute@upscale#1": {
          "x": 24,
          "y": 664
        },
        "gelu@upscale#0": {
          "x": 24,
          "y": 814
        },
        "upscale.second": {
          "x": 24,
          "y": 964
        },
        "gelu@upscale#1": {
          "x": 24,
          "y": 1114
        },
        "flatten@masks#0": {
          "x": 24,
          "y": 214
        },
        "masks.mask0": {
          "x": 24,
          "y": 364
        },
        "masks.mask1": {
          "x": 24,
          "y": 514
        },
        "masks.mask2": {
          "x": 24,
          "y": 664
        },
        "stack@masks#0": {
          "x": 24,
          "y": 814
        },
        "python@masks#0": {
          "x": 24,
          "y": 964
        },
        "masks.mask0.first": {
          "x": 24,
          "y": 214
        },
        "relu@masks.mask0#0": {
          "x": 24,
          "y": 364
        },
        "masks.mask0.second": {
          "x": 24,
          "y": 514
        },
        "relu@masks.mask0#1": {
          "x": 24,
          "y": 664
        },
        "masks.mask0.project": {
          "x": 24,
          "y": 814
        },
        "masks.mask1.first": {
          "x": 24,
          "y": 214
        },
        "relu@masks.mask1#0": {
          "x": 24,
          "y": 364
        },
        "masks.mask1.second": {
          "x": 24,
          "y": 514
        },
        "relu@masks.mask1#1": {
          "x": 24,
          "y": 664
        },
        "masks.mask1.project": {
          "x": 24,
          "y": 814
        },
        "masks.mask2.first": {
          "x": 24,
          "y": 214
        },
        "relu@masks.mask2#0": {
          "x": 24,
          "y": 364
        },
        "masks.mask2.second": {
          "x": 24,
          "y": 514
        },
        "relu@masks.mask2#1": {
          "x": 24,
          "y": 664
        },
        "masks.mask2.project": {
          "x": 24,
          "y": 814
        },
        "quality.first": {
          "x": 24,
          "y": 214
        },
        "relu@quality#0": {
          "x": 24,
          "y": 364
        },
        "quality.second": {
          "x": 24,
          "y": 514
        },
        "relu@quality#1": {
          "x": 24,
          "y": 664
        },
        "quality.scores": {
          "x": 24,
          "y": 814
        }
      },
      "collapsed_modules": [
        "prompt_encoder",
        "decoder",
        "upscale",
        "masks",
        "quality",
        "prompt_encoder.position",
        "decoder.first",
        "decoder.second",
        "decoder.final_attention",
        "decoder.first.self_attention",
        "decoder.first.token_to_image",
        "decoder.first.image_to_token",
        "decoder.second.self_attention",
        "decoder.second.token_to_image",
        "decoder.second.image_to_token",
        "masks.mask0",
        "masks.mask1",
        "masks.mask2"
      ],
      "selection": [],
      "layout": {}
    }
  },
  "snapshotId": "snapshot-2b9a0ff6ffe7a61c",
  "collaboration": {
    "walkthrough": {
      "title": "Turn a prompt into candidate masks",
      "steps": [
        {
          "id": "prompt",
          "title": "Combine prompt geometry with its meaning",
          "note": "Random Fourier features encode normalized (x,y) coordinates. A learned type embedding distinguishes foreground/background points and the two box corners. The same image features are reused when a prompt changes.",
          "view": {
            "camera": {
              "x": 308.5,
              "y": -144,
              "z": 1.25
            },
            "nodePositions": {
              "input": {
                "x": 0,
                "y": 160
              },
              "flatten@PromptableMaskDecoder#0": {
                "x": 340,
                "y": 160
              },
              "prompt_encoder": {
                "x": 680,
                "y": 160
              },
              "python@PromptableMaskDecoder#0": {
                "x": 1020,
                "y": 160
              },
              "output_tokens": {
                "x": 1360,
                "y": 160
              },
              "cat@PromptableMaskDecoder#0": {
                "x": 1700,
                "y": 160
              },
              "no_mask": {
                "x": 2040,
                "y": 160
              },
              "add@PromptableMaskDecoder#0": {
                "x": 2380,
                "y": 160
              },
              "decoder": {
                "x": 2720,
                "y": 160
              },
              "upscale": {
                "x": 3060,
                "y": 160
              },
              "masks": {
                "x": 3400,
                "y": 160
              },
              "flatten@PromptableMaskDecoder#1": {
                "x": 3740,
                "y": 160
              },
              "quality": {
                "x": 4080,
                "y": 160
              },
              "cat@PromptableMaskDecoder#1": {
                "x": 4420,
                "y": 160
              },
              "output": {
                "x": 4760,
                "y": 160
              },
              "prompt_encoder.position": {
                "x": 24,
                "y": 214
              },
              "prompt_encoder.type_embedding": {
                "x": 24,
                "y": 364
              },
              "add@prompt_encoder#0": {
                "x": 24,
                "y": 514
              },
              "cat@prompt_encoder.position#0": {
                "x": 24,
                "y": 214
              },
              "decoder.first": {
                "x": 24,
                "y": 214
              },
              "decoder.second": {
                "x": 24,
                "y": 364
              },
              "add@decoder#0": {
                "x": 24,
                "y": 514
              },
              "add@decoder#1": {
                "x": 24,
                "y": 664
              },
              "decoder.final_attention": {
                "x": 24,
                "y": 814
              },
              "add@decoder#2": {
                "x": 24,
                "y": 964
              },
              "decoder.final_norm": {
                "x": 24,
                "y": 1114
              },
              "decoder.first.self_attention": {
                "x": 24,
                "y": 214
              },
              "add@decoder.first#0": {
                "x": 24,
                "y": 364
              },
              "decoder.first.self_norm": {
                "x": 24,
                "y": 514
              },
              "add@decoder.first#1": {
                "x": 24,
                "y": 664
              },
              "decoder.first.token_to_image": {
                "x": 24,
                "y": 814
              },
              "add@decoder.first#2": {
                "x": 24,
                "y": 964
              },
              "decoder.first.token_norm": {
                "x": 24,
                "y": 1114
              },
              "decoder.first.up": {
                "x": 24,
                "y": 1264
              },
              "decoder.first.relu": {
                "x": 24,
                "y": 1414
              },
              "decoder.first.down": {
                "x": 24,
                "y": 1564
              },
              "add@decoder.first#3": {
                "x": 24,
                "y": 1714
              },
              "decoder.first.mlp_norm": {
                "x": 24,
                "y": 1864
              },
              "add@decoder.first#4": {
                "x": 24,
                "y": 2014
              },
              "decoder.first.image_to_token": {
                "x": 24,
                "y": 2164
              },
              "add@decoder.first#5": {
                "x": 24,
                "y": 2314
              },
              "decoder.first.image_norm": {
                "x": 24,
                "y": 2464
              },
              "decoder.first.self_attention.query": {
                "x": 24,
                "y": 214
              },
              "decoder.first.self_attention.key": {
                "x": 24,
                "y": 364
              },
              "div@decoder.first.self_attention#0": {
                "x": 24,
                "y": 514
              },
              "decoder.first.self_attention.value": {
                "x": 24,
                "y": 664
              },
              "decoder.first.self_attention.softmax": {
                "x": 24,
                "y": 814
              },
              "decoder.first.self_attention.project": {
                "x": 24,
                "y": 964
              },
              "decoder.first.token_to_image.query": {
                "x": 24,
                "y": 214
              },
              "decoder.first.token_to_image.key": {
                "x": 24,
                "y": 364
              },
              "div@decoder.first.token_to_image#0": {
                "x": 24,
                "y": 514
              },
              "decoder.first.token_to_image.value": {
                "x": 24,
                "y": 664
              },
              "decoder.first.token_to_image.softmax": {
                "x": 24,
                "y": 814
              },
              "decoder.first.token_to_image.project": {
                "x": 24,
                "y": 964
              },
              "decoder.first.image_to_token.query": {
                "x": 24,
                "y": 214
              },
              "decoder.first.image_to_token.key": {
                "x": 24,
                "y": 364
              },
              "div@decoder.first.image_to_token#0": {
                "x": 24,
                "y": 514
              },
              "decoder.first.image_to_token.value": {
                "x": 24,
                "y": 664
              },
              "decoder.first.image_to_token.softmax": {
                "x": 24,
                "y": 814
              },
              "decoder.first.image_to_token.project": {
                "x": 24,
                "y": 964
              },
              "decoder.second.self_attention": {
                "x": 24,
                "y": 214
              },
              "add@decoder.second#0": {
                "x": 24,
                "y": 364
              },
              "decoder.second.self_norm": {
                "x": 24,
                "y": 514
              },
              "add@decoder.second#1": {
                "x": 24,
                "y": 664
              },
              "decoder.second.token_to_image": {
                "x": 24,
                "y": 814
              },
              "add@decoder.second#2": {
                "x": 24,
                "y": 964
              },
              "decoder.second.token_norm": {
                "x": 24,
                "y": 1114
              },
              "decoder.second.up": {
                "x": 24,
                "y": 1264
              },
              "decoder.second.relu": {
                "x": 24,
                "y": 1414
              },
              "decoder.second.down": {
                "x": 24,
                "y": 1564
              },
              "add@decoder.second#3": {
                "x": 24,
                "y": 1714
              },
              "decoder.second.mlp_norm": {
                "x": 24,
                "y": 1864
              },
              "add@decoder.second#4": {
                "x": 24,
                "y": 2014
              },
              "decoder.second.image_to_token": {
                "x": 24,
                "y": 2164
              },
              "add@decoder.second#5": {
                "x": 24,
                "y": 2314
              },
              "decoder.second.image_norm": {
                "x": 24,
                "y": 2464
              },
              "decoder.second.self_attention.query": {
                "x": 24,
                "y": 214
              },
              "decoder.second.self_attention.key": {
                "x": 24,
                "y": 364
              },
              "div@decoder.second.self_attention#0": {
                "x": 24,
                "y": 514
              },
              "decoder.second.self_attention.value": {
                "x": 24,
                "y": 664
              },
              "decoder.second.self_attention.softmax": {
                "x": 24,
                "y": 814
              },
              "decoder.second.self_attention.project": {
                "x": 24,
                "y": 964
              },
              "decoder.second.token_to_image.query": {
                "x": 24,
                "y": 214
              },
              "decoder.second.token_to_image.key": {
                "x": 24,
                "y": 364
              },
              "div@decoder.second.token_to_image#0": {
                "x": 24,
                "y": 514
              },
              "decoder.second.token_to_image.value": {
                "x": 24,
                "y": 664
              },
              "decoder.second.token_to_image.softmax": {
                "x": 24,
                "y": 814
              },
              "decoder.second.token_to_image.project": {
                "x": 24,
                "y": 964
              },
              "decoder.second.image_to_token.query": {
                "x": 24,
                "y": 214
              },
              "decoder.second.image_to_token.key": {
                "x": 24,
                "y": 364
              },
              "div@decoder.second.image_to_token#0": {
                "x": 24,
                "y": 514
              },
              "decoder.second.image_to_token.value": {
                "x": 24,
                "y": 664
              },
              "decoder.second.image_to_token.softmax": {
                "x": 24,
                "y": 814
              },
              "decoder.second.image_to_token.project": {
                "x": 24,
                "y": 964
              },
              "decoder.final_attention.query": {
                "x": 24,
                "y": 214
              },
              "decoder.final_attention.key": {
                "x": 24,
                "y": 364
              },
              "div@decoder.final_attention#0": {
                "x": 24,
                "y": 514
              },
              "decoder.final_attention.value": {
                "x": 24,
                "y": 664
              },
              "decoder.final_attention.softmax": {
                "x": 24,
                "y": 814
              },
              "decoder.final_attention.project": {
                "x": 24,
                "y": 964
              },
              "upscale.first": {
                "x": 24,
                "y": 214
              },
              "permute@upscale#0": {
                "x": 24,
                "y": 364
              },
              "upscale.norm": {
                "x": 24,
                "y": 514
              },
              "permute@upscale#1": {
                "x": 24,
                "y": 664
              },
              "gelu@upscale#0": {
                "x": 24,
                "y": 814
              },
              "upscale.second": {
                "x": 24,
                "y": 964
              },
              "gelu@upscale#1": {
                "x": 24,
                "y": 1114
              },
              "flatten@masks#0": {
                "x": 24,
                "y": 214
              },
              "masks.mask0": {
                "x": 24,
                "y": 364
              },
              "masks.mask1": {
                "x": 24,
                "y": 514
              },
              "masks.mask2": {
                "x": 24,
                "y": 664
              },
              "stack@masks#0": {
                "x": 24,
                "y": 814
              },
              "python@masks#0": {
                "x": 24,
                "y": 964
              },
              "masks.mask0.first": {
                "x": 24,
                "y": 214
              },
              "relu@masks.mask0#0": {
                "x": 24,
                "y": 364
              },
              "masks.mask0.second": {
                "x": 24,
                "y": 514
              },
              "relu@masks.mask0#1": {
                "x": 24,
                "y": 664
              },
              "masks.mask0.project": {
                "x": 24,
                "y": 814
              },
              "masks.mask1.first": {
                "x": 24,
                "y": 214
              },
              "relu@masks.mask1#0": {
                "x": 24,
                "y": 364
              },
              "masks.mask1.second": {
                "x": 24,
                "y": 514
              },
              "relu@masks.mask1#1": {
                "x": 24,
                "y": 664
              },
              "masks.mask1.project": {
                "x": 24,
                "y": 814
              },
              "masks.mask2.first": {
                "x": 24,
                "y": 214
              },
              "relu@masks.mask2#0": {
                "x": 24,
                "y": 364
              },
              "masks.mask2.second": {
                "x": 24,
                "y": 514
              },
              "relu@masks.mask2#1": {
                "x": 24,
                "y": 664
              },
              "masks.mask2.project": {
                "x": 24,
                "y": 814
              },
              "quality.first": {
                "x": 24,
                "y": 214
              },
              "relu@quality#0": {
                "x": 24,
                "y": 364
              },
              "quality.second": {
                "x": 24,
                "y": 514
              },
              "relu@quality#1": {
                "x": 24,
                "y": 664
              },
              "quality.scores": {
                "x": 24,
                "y": 814
              }
            },
            "expandedModuleIds": [
              "prompt_encoder"
            ],
            "selectedNodeIds": [
              "prompt_encoder.type_embedding"
            ],
            "viewport": {
              "width": 1100,
              "height": 700
            }
          },
          "anchors": [
            {
              "target": {
                "kind": "node",
                "nodeId": "prompt_encoder.type_embedding"
              },
              "snapshotId": "snapshot-2b9a0ff6ffe7a61c",
              "exportedAt": "2026-09-17T07:00:38.449307+00:00",
              "modelName": "PromptableMaskDecoder",
              "context": "{\"connections\":[\"{\\\"kind\\\":\\\"edge\\\",\\\"source\\\":\\\"input\\\",\\\"sourcePort\\\":\\\"y\\\",\\\"target\\\":\\\"prompt_encoder.type_embedding\\\",\\\"targetPort\\\":\\\"x\\\"}\",\"{\\\"kind\\\":\\\"edge\\\",\\\"source\\\":\\\"prompt_encoder.type_embedding\\\",\\\"sourcePort\\\":\\\"y\\\",\\\"target\\\":\\\"add@prompt_encoder#0\\\",\\\"targetPort\\\":\\\"x\\\"}\"],\"contents\":[],\"node\":{\"id\":\"prompt_encoder.type_embedding\",\"kind\":\"layer\",\"op\":\"Embedding\",\"params\":{\"embedding_dim\":8,\"num_embeddings\":4},\"parent\":\"prompt_encoder\"}}"
            }
          ]
        },
        {
          "id": "tokens",
          "title": "Let prompt and output tokens read image features",
          "note": "Three mask tokens, one quality token and the sparse prompts pass through self-attention, token-to-image attention and an MLP. Prompt and image positions are added to attention queries and keys.",
          "view": {
            "camera": {
              "x": 291,
              "y": -604,
              "z": 1.25
            },
            "nodePositions": {
              "input": {
                "x": 0,
                "y": 160
              },
              "flatten@PromptableMaskDecoder#0": {
                "x": 340,
                "y": 160
              },
              "prompt_encoder": {
                "x": 680,
                "y": 160
              },
              "python@PromptableMaskDecoder#0": {
                "x": 1020,
                "y": 160
              },
              "output_tokens": {
                "x": 1360,
                "y": 160
              },
              "cat@PromptableMaskDecoder#0": {
                "x": 1700,
                "y": 160
              },
              "no_mask": {
                "x": 2040,
                "y": 160
              },
              "add@PromptableMaskDecoder#0": {
                "x": 2380,
                "y": 160
              },
              "decoder": {
                "x": 2720,
                "y": 160
              },
              "upscale": {
                "x": 3060,
                "y": 160
              },
              "masks": {
                "x": 3400,
                "y": 160
              },
              "flatten@PromptableMaskDecoder#1": {
                "x": 3740,
                "y": 160
              },
              "quality": {
                "x": 4080,
                "y": 160
              },
              "cat@PromptableMaskDecoder#1": {
                "x": 4420,
                "y": 160
              },
              "output": {
                "x": 4760,
                "y": 160
              },
              "prompt_encoder.position": {
                "x": 24,
                "y": 214
              },
              "prompt_encoder.type_embedding": {
                "x": 24,
                "y": 364
              },
              "add@prompt_encoder#0": {
                "x": 24,
                "y": 514
              },
              "cat@prompt_encoder.position#0": {
                "x": 24,
                "y": 214
              },
              "decoder.first": {
                "x": 24,
                "y": 214
              },
              "decoder.second": {
                "x": 24,
                "y": 364
              },
              "add@decoder#0": {
                "x": 24,
                "y": 514
              },
              "add@decoder#1": {
                "x": 24,
                "y": 664
              },
              "decoder.final_attention": {
                "x": 24,
                "y": 814
              },
              "add@decoder#2": {
                "x": 24,
                "y": 964
              },
              "decoder.final_norm": {
                "x": 24,
                "y": 1114
              },
              "decoder.first.self_attention": {
                "x": 24,
                "y": 214
              },
              "add@decoder.first#0": {
                "x": 24,
                "y": 364
              },
              "decoder.first.self_norm": {
                "x": 24,
                "y": 514
              },
              "add@decoder.first#1": {
                "x": 24,
                "y": 664
              },
              "decoder.first.token_to_image": {
                "x": 24,
                "y": 814
              },
              "add@decoder.first#2": {
                "x": 24,
                "y": 964
              },
              "decoder.first.token_norm": {
                "x": 24,
                "y": 1114
              },
              "decoder.first.up": {
                "x": 24,
                "y": 1264
              },
              "decoder.first.relu": {
                "x": 24,
                "y": 1414
              },
              "decoder.first.down": {
                "x": 24,
                "y": 1564
              },
              "add@decoder.first#3": {
                "x": 24,
                "y": 1714
              },
              "decoder.first.mlp_norm": {
                "x": 24,
                "y": 1864
              },
              "add@decoder.first#4": {
                "x": 24,
                "y": 2014
              },
              "decoder.first.image_to_token": {
                "x": 24,
                "y": 2164
              },
              "add@decoder.first#5": {
                "x": 24,
                "y": 2314
              },
              "decoder.first.image_norm": {
                "x": 24,
                "y": 2464
              },
              "decoder.first.self_attention.query": {
                "x": 24,
                "y": 214
              },
              "decoder.first.self_attention.key": {
                "x": 24,
                "y": 364
              },
              "div@decoder.first.self_attention#0": {
                "x": 24,
                "y": 514
              },
              "decoder.first.self_attention.value": {
                "x": 24,
                "y": 664
              },
              "decoder.first.self_attention.softmax": {
                "x": 24,
                "y": 814
              },
              "decoder.first.self_attention.project": {
                "x": 24,
                "y": 964
              },
              "decoder.first.token_to_image.query": {
                "x": 24,
                "y": 214
              },
              "decoder.first.token_to_image.key": {
                "x": 24,
                "y": 364
              },
              "div@decoder.first.token_to_image#0": {
                "x": 24,
                "y": 514
              },
              "decoder.first.token_to_image.value": {
                "x": 24,
                "y": 664
              },
              "decoder.first.token_to_image.softmax": {
                "x": 24,
                "y": 814
              },
              "decoder.first.token_to_image.project": {
                "x": 24,
                "y": 964
              },
              "decoder.first.image_to_token.query": {
                "x": 24,
                "y": 214
              },
              "decoder.first.image_to_token.key": {
                "x": 24,
                "y": 364
              },
              "div@decoder.first.image_to_token#0": {
                "x": 24,
                "y": 514
              },
              "decoder.first.image_to_token.value": {
                "x": 24,
                "y": 664
              },
              "decoder.first.image_to_token.softmax": {
                "x": 24,
                "y": 814
              },
              "decoder.first.image_to_token.project": {
                "x": 24,
                "y": 964
              },
              "decoder.second.self_attention": {
                "x": 24,
                "y": 214
              },
              "add@decoder.second#0": {
                "x": 24,
                "y": 364
              },
              "decoder.second.self_norm": {
                "x": 24,
                "y": 514
              },
              "add@decoder.second#1": {
                "x": 24,
                "y": 664
              },
              "decoder.second.token_to_image": {
                "x": 24,
                "y": 814
              },
              "add@decoder.second#2": {
                "x": 24,
                "y": 964
              },
              "decoder.second.token_norm": {
                "x": 24,
                "y": 1114
              },
              "decoder.second.up": {
                "x": 24,
                "y": 1264
              },
              "decoder.second.relu": {
                "x": 24,
                "y": 1414
              },
              "decoder.second.down": {
                "x": 24,
                "y": 1564
              },
              "add@decoder.second#3": {
                "x": 24,
                "y": 1714
              },
              "decoder.second.mlp_norm": {
                "x": 24,
                "y": 1864
              },
              "add@decoder.second#4": {
                "x": 24,
                "y": 2014
              },
              "decoder.second.image_to_token": {
                "x": 24,
                "y": 2164
              },
              "add@decoder.second#5": {
                "x": 24,
                "y": 2314
              },
              "decoder.second.image_norm": {
                "x": 24,
                "y": 2464
              },
              "decoder.second.self_attention.query": {
                "x": 24,
                "y": 214
              },
              "decoder.second.self_attention.key": {
                "x": 24,
                "y": 364
              },
              "div@decoder.second.self_attention#0": {
                "x": 24,
                "y": 514
              },
              "decoder.second.self_attention.value": {
                "x": 24,
                "y": 664
              },
              "decoder.second.self_attention.softmax": {
                "x": 24,
                "y": 814
              },
              "decoder.second.self_attention.project": {
                "x": 24,
                "y": 964
              },
              "decoder.second.token_to_image.query": {
                "x": 24,
                "y": 214
              },
              "decoder.second.token_to_image.key": {
                "x": 24,
                "y": 364
              },
              "div@decoder.second.token_to_image#0": {
                "x": 24,
                "y": 514
              },
              "decoder.second.token_to_image.value": {
                "x": 24,
                "y": 664
              },
              "decoder.second.token_to_image.softmax": {
                "x": 24,
                "y": 814
              },
              "decoder.second.token_to_image.project": {
                "x": 24,
                "y": 964
              },
              "decoder.second.image_to_token.query": {
                "x": 24,
                "y": 214
              },
              "decoder.second.image_to_token.key": {
                "x": 24,
                "y": 364
              },
              "div@decoder.second.image_to_token#0": {
                "x": 24,
                "y": 514
              },
              "decoder.second.image_to_token.value": {
                "x": 24,
                "y": 664
              },
              "decoder.second.image_to_token.softmax": {
                "x": 24,
                "y": 814
              },
              "decoder.second.image_to_token.project": {
                "x": 24,
                "y": 964
              },
              "decoder.final_attention.query": {
                "x": 24,
                "y": 214
              },
              "decoder.final_attention.key": {
                "x": 24,
                "y": 364
              },
              "div@decoder.final_attention#0": {
                "x": 24,
                "y": 514
              },
              "decoder.final_attention.value": {
                "x": 24,
                "y": 664
              },
              "decoder.final_attention.softmax": {
                "x": 24,
                "y": 814
              },
              "decoder.final_attention.project": {
                "x": 24,
                "y": 964
              },
              "upscale.first": {
                "x": 24,
                "y": 214
              },
              "permute@upscale#0": {
                "x": 24,
                "y": 364
              },
              "upscale.norm": {
                "x": 24,
                "y": 514
              },
              "permute@upscale#1": {
                "x": 24,
                "y": 664
              },
              "gelu@upscale#0": {
                "x": 24,
                "y": 814
              },
              "upscale.second": {
                "x": 24,
                "y": 964
              },
              "gelu@upscale#1": {
                "x": 24,
                "y": 1114
              },
              "flatten@masks#0": {
                "x": 24,
                "y": 214
              },
              "masks.mask0": {
                "x": 24,
                "y": 364
              },
              "masks.mask1": {
                "x": 24,
                "y": 514
              },
              "masks.mask2": {
                "x": 24,
                "y": 664
              },
              "stack@masks#0": {
                "x": 24,
                "y": 814
              },
              "python@masks#0": {
                "x": 24,
                "y": 964
              },
              "masks.mask0.first": {
                "x": 24,
                "y": 214
              },
              "relu@masks.mask0#0": {
                "x": 24,
                "y": 364
              },
              "masks.mask0.second": {
                "x": 24,
                "y": 514
              },
              "relu@masks.mask0#1": {
                "x": 24,
                "y": 664
              },
              "masks.mask0.project": {
                "x": 24,
                "y": 814
              },
              "masks.mask1.first": {
                "x": 24,
                "y": 214
              },
              "relu@masks.mask1#0": {
                "x": 24,
                "y": 364
              },
              "masks.mask1.second": {
                "x": 24,
                "y": 514
              },
              "relu@masks.mask1#1": {
                "x": 24,
                "y": 664
              },
              "masks.mask1.project": {
                "x": 24,
                "y": 814
              },
              "masks.mask2.first": {
                "x": 24,
                "y": 214
              },
              "relu@masks.mask2#0": {
                "x": 24,
                "y": 364
              },
              "masks.mask2.second": {
                "x": 24,
                "y": 514
              },
              "relu@masks.mask2#1": {
                "x": 24,
                "y": 664
              },
              "masks.mask2.project": {
                "x": 24,
                "y": 814
              },
              "quality.first": {
                "x": 24,
                "y": 214
              },
              "relu@quality#0": {
                "x": 24,
                "y": 364
              },
              "quality.second": {
                "x": 24,
                "y": 514
              },
              "relu@quality#1": {
                "x": 24,
                "y": 664
              },
              "quality.scores": {
                "x": 24,
                "y": 814
              }
            },
            "expandedModuleIds": [
              "decoder",
              "decoder.first"
            ],
            "selectedNodeIds": [
              "decoder.first.token_to_image"
            ],
            "viewport": {
              "width": 1100,
              "height": 700
            }
          },
          "anchors": [
            {
              "target": {
                "kind": "node",
                "nodeId": "decoder.first.token_to_image"
              },
              "snapshotId": "snapshot-2b9a0ff6ffe7a61c",
              "exportedAt": "2026-09-17T07:00:38.449307+00:00",
              "modelName": "PromptableMaskDecoder",
              "context": "{\"connections\":[\"{\\\"kind\\\":\\\"edge\\\",\\\"source\\\":\\\"add@PromptableMaskDecoder#0\\\",\\\"sourcePort\\\":\\\"y\\\",\\\"target\\\":\\\"decoder.first.token_to_image.key\\\",\\\"targetPort\\\":\\\"x\\\"}\",\"{\\\"kind\\\":\\\"edge\\\",\\\"source\\\":\\\"add@PromptableMaskDecoder#0\\\",\\\"sourcePort\\\":\\\"y\\\",\\\"target\\\":\\\"decoder.first.token_to_image.query\\\",\\\"targetPort\\\":\\\"x\\\"}\",\"{\\\"kind\\\":\\\"edge\\\",\\\"source\\\":\\\"add@PromptableMaskDecoder#0\\\",\\\"sourcePort\\\":\\\"y\\\",\\\"target\\\":\\\"decoder.first.token_to_image.value\\\",\\\"targetPort\\\":\\\"x\\\"}\",\"{\\\"kind\\\":\\\"edge\\\",\\\"source\\\":\\\"add@decoder.first#1\\\",\\\"sourcePort\\\":\\\"y\\\",\\\"target\\\":\\\"decoder.first.token_to_image\\\",\\\"targetPort\\\":\\\"x\\\"}\",\"{\\\"kind\\\":\\\"edge\\\",\\\"source\\\":\\\"add@decoder.first#1\\\",\\\"sourcePort\\\":\\\"y\\\",\\\"target\\\":\\\"decoder.first.token_to_image.key\\\",\\\"targetPort\\\":\\\"x\\\"}\",\"{\\\"kind\\\":\\\"edge\\\",\\\"source\\\":\\\"add@decoder.first#1\\\",\\\"sourcePort\\\":\\\"y\\\",\\\"target\\\":\\\"decoder.first.token_to_image.query\\\",\\\"targetPort\\\":\\\"x\\\"}\",\"{\\\"kind\\\":\\\"edge\\\",\\\"source\\\":\\\"add@decoder.first#1\\\",\\\"sourcePort\\\":\\\"y\\\",\\\"target\\\":\\\"decoder.first.token_to_image.value\\\",\\\"targetPort\\\":\\\"x\\\"}\",\"{\\\"kind\\\":\\\"edge\\\",\\\"source\\\":\\\"cat@PromptableMaskDecoder#0\\\",\\\"sourcePort\\\":\\\"y\\\",\\\"target\\\":\\\"decoder.first.token_to_image.key\\\",\\\"targetPort\\\":\\\"x\\\"}\",\"{\\\"kind\\\":\\\"edge\\\",\\\"source\\\":\\\"cat@PromptableMaskDecoder#0\\\",\\\"sourcePort\\\":\\\"y\\\",\\\"target\\\":\\\"decoder.first.token_to_image.query\\\",\\\"targetPort\\\":\\\"x\\\"}\",\"{\\\"kind\\\":\\\"edge\\\",\\\"source\\\":\\\"cat@PromptableMaskDecoder#0\\\",\\\"sourcePort\\\":\\\"y\\\",\\\"target\\\":\\\"decoder.first.token_to_image.value\\\",\\\"targetPort\\\":\\\"x\\\"}\",\"{\\\"kind\\\":\\\"edge\\\",\\\"source\\\":\\\"decoder.first.token_to_image\\\",\\\"sourcePort\\\":\\\"y\\\",\\\"target\\\":\\\"add@decoder.first#2\\\",\\\"targetPort\\\":\\\"x\\\"}\",\"{\\\"kind\\\":\\\"edge\\\",\\\"source\\\":\\\"decoder.first.token_to_image.key\\\",\\\"sourcePort\\\":\\\"y\\\",\\\"target\\\":\\\"div@decoder.first.token_to_image#0\\\",\\\"targetPort\\\":\\\"x\\\"}\",\"{\\\"kind\\\":\\\"edge\\\",\\\"source\\\":\\\"decoder.first.token_to_image.project\\\",\\\"sourcePort\\\":\\\"y\\\",\\\"target\\\":\\\"add@decoder.first#2\\\",\\\"targetPort\\\":\\\"x\\\"}\",\"{\\\"kind\\\":\\\"edge\\\",\\\"source\\\":\\\"decoder.first.token_to_image.query\\\",\\\"sourcePort\\\":\\\"y\\\",\\\"target\\\":\\\"div@decoder.first.token_to_image#0\\\",\\\"targetPort\\\":\\\"x\\\"}\",\"{\\\"kind\\\":\\\"edge\\\",\\\"source\\\":\\\"decoder.first.token_to_image.softmax\\\",\\\"sourcePort\\\":\\\"y\\\",\\\"target\\\":\\\"decoder.first.token_to_image.project\\\",\\\"targetPort\\\":\\\"x\\\"}\",\"{\\\"kind\\\":\\\"edge\\\",\\\"source\\\":\\\"decoder.first.token_to_image.value\\\",\\\"sourcePort\\\":\\\"y\\\",\\\"target\\\":\\\"decoder.first.token_to_image.project\\\",\\\"targetPort\\\":\\\"x\\\"}\",\"{\\\"kind\\\":\\\"edge\\\",\\\"source\\\":\\\"div@decoder.first.token_to_image#0\\\",\\\"sourcePort\\\":\\\"y\\\",\\\"target\\\":\\\"decoder.first.token_to_image.softmax\\\",\\\"targetPort\\\":\\\"x\\\"}\",\"{\\\"kind\\\":\\\"edge\\\",\\\"source\\\":\\\"python@PromptableMaskDecoder#0\\\",\\\"sourcePort\\\":\\\"y\\\",\\\"target\\\":\\\"decoder.first.token_to_image.key\\\",\\\"targetPort\\\":\\\"x\\\"}\",\"{\\\"kind\\\":\\\"edge\\\",\\\"source\\\":\\\"python@PromptableMaskDecoder#0\\\",\\\"sourcePort\\\":\\\"y\\\",\\\"target\\\":\\\"decoder.first.token_to_image.query\\\",\\\"targetPort\\\":\\\"x\\\"}\",\"{\\\"kind\\\":\\\"edge\\\",\\\"source\\\":\\\"python@PromptableMaskDecoder#0\\\",\\\"sourcePort\\\":\\\"y\\\",\\\"target\\\":\\\"decoder.first.token_to_image.value\\\",\\\"targetPort\\\":\\\"x\\\"}\"],\"contents\":[\"{\\\"id\\\":\\\"decoder.first.token_to_image.key\\\",\\\"kind\\\":\\\"layer\\\",\\\"op\\\":\\\"Linear\\\",\\\"params\\\":{\\\"in_features\\\":8,\\\"out_features\\\":4},\\\"parent\\\":\\\"decoder.first.token_to_image\\\"}\",\"{\\\"id\\\":\\\"decoder.first.token_to_image.project\\\",\\\"kind\\\":\\\"layer\\\",\\\"op\\\":\\\"Linear\\\",\\\"params\\\":{\\\"in_features\\\":4,\\\"out_features\\\":8},\\\"parent\\\":\\\"decoder.first.token_to_image\\\"}\",\"{\\\"id\\\":\\\"decoder.first.token_to_image.query\\\",\\\"kind\\\":\\\"layer\\\",\\\"op\\\":\\\"Linear\\\",\\\"params\\\":{\\\"in_features\\\":8,\\\"out_features\\\":4},\\\"parent\\\":\\\"decoder.first.token_to_image\\\"}\",\"{\\\"id\\\":\\\"decoder.first.token_to_image.softmax\\\",\\\"kind\\\":\\\"layer\\\",\\\"op\\\":\\\"Softmax\\\",\\\"params\\\":{},\\\"parent\\\":\\\"decoder.first.token_to_image\\\"}\",\"{\\\"id\\\":\\\"decoder.first.token_to_image.value\\\",\\\"kind\\\":\\\"layer\\\",\\\"op\\\":\\\"Linear\\\",\\\"params\\\":{\\\"in_features\\\":8,\\\"out_features\\\":4},\\\"parent\\\":\\\"decoder.first.token_to_image\\\"}\",\"{\\\"id\\\":\\\"div@decoder.first.token_to_image#0\\\",\\\"kind\\\":\\\"layer\\\",\\\"op\\\":\\\"torch.div\\\",\\\"params\\\":{},\\\"parent\\\":\\\"decoder.first.token_to_image\\\"}\"],\"node\":{\"id\":\"decoder.first.token_to_image\",\"kind\":\"module\",\"op\":\"Module\",\"params\":{},\"parent\":\"decoder.first\"}}"
            }
          ]
        },
        {
          "id": "image",
          "title": "Update image features with prompt information",
          "note": "Attention also runs in the reverse direction: image locations query the updated tokens. A second two-way block repeats this exchange, followed by a final token-to-image read. Both representation streams can now depend on the prompt.",
          "view": {
            "camera": {
              "x": 291,
              "y": -1954,
              "z": 1.25
            },
            "nodePositions": {
              "input": {
                "x": 0,
                "y": 160
              },
              "flatten@PromptableMaskDecoder#0": {
                "x": 340,
                "y": 160
              },
              "prompt_encoder": {
                "x": 680,
                "y": 160
              },
              "python@PromptableMaskDecoder#0": {
                "x": 1020,
                "y": 160
              },
              "output_tokens": {
                "x": 1360,
                "y": 160
              },
              "cat@PromptableMaskDecoder#0": {
                "x": 1700,
                "y": 160
              },
              "no_mask": {
                "x": 2040,
                "y": 160
              },
              "add@PromptableMaskDecoder#0": {
                "x": 2380,
                "y": 160
              },
              "decoder": {
                "x": 2720,
                "y": 160
              },
              "upscale": {
                "x": 3060,
                "y": 160
              },
              "masks": {
                "x": 3400,
                "y": 160
              },
              "flatten@PromptableMaskDecoder#1": {
                "x": 3740,
                "y": 160
              },
              "quality": {
                "x": 4080,
                "y": 160
              },
              "cat@PromptableMaskDecoder#1": {
                "x": 4420,
                "y": 160
              },
              "output": {
                "x": 4760,
                "y": 160
              },
              "prompt_encoder.position": {
                "x": 24,
                "y": 214
              },
              "prompt_encoder.type_embedding": {
                "x": 24,
                "y": 364
              },
              "add@prompt_encoder#0": {
                "x": 24,
                "y": 514
              },
              "cat@prompt_encoder.position#0": {
                "x": 24,
                "y": 214
              },
              "decoder.first": {
                "x": 24,
                "y": 214
              },
              "decoder.second": {
                "x": 24,
                "y": 364
              },
              "add@decoder#0": {
                "x": 24,
                "y": 514
              },
              "add@decoder#1": {
                "x": 24,
                "y": 664
              },
              "decoder.final_attention": {
                "x": 24,
                "y": 814
              },
              "add@decoder#2": {
                "x": 24,
                "y": 964
              },
              "decoder.final_norm": {
                "x": 24,
                "y": 1114
              },
              "decoder.first.self_attention": {
                "x": 24,
                "y": 214
              },
              "add@decoder.first#0": {
                "x": 24,
                "y": 364
              },
              "decoder.first.self_norm": {
                "x": 24,
                "y": 514
              },
              "add@decoder.first#1": {
                "x": 24,
                "y": 664
              },
              "decoder.first.token_to_image": {
                "x": 24,
                "y": 814
              },
              "add@decoder.first#2": {
                "x": 24,
                "y": 964
              },
              "decoder.first.token_norm": {
                "x": 24,
                "y": 1114
              },
              "decoder.first.up": {
                "x": 24,
                "y": 1264
              },
              "decoder.first.relu": {
                "x": 24,
                "y": 1414
              },
              "decoder.first.down": {
                "x": 24,
                "y": 1564
              },
              "add@decoder.first#3": {
                "x": 24,
                "y": 1714
              },
              "decoder.first.mlp_norm": {
                "x": 24,
                "y": 1864
              },
              "add@decoder.first#4": {
                "x": 24,
                "y": 2014
              },
              "decoder.first.image_to_token": {
                "x": 24,
                "y": 2164
              },
              "add@decoder.first#5": {
                "x": 24,
                "y": 2314
              },
              "decoder.first.image_norm": {
                "x": 24,
                "y": 2464
              },
              "decoder.first.self_attention.query": {
                "x": 24,
                "y": 214
              },
              "decoder.first.self_attention.key": {
                "x": 24,
                "y": 364
              },
              "div@decoder.first.self_attention#0": {
                "x": 24,
                "y": 514
              },
              "decoder.first.self_attention.value": {
                "x": 24,
                "y": 664
              },
              "decoder.first.self_attention.softmax": {
                "x": 24,
                "y": 814
              },
              "decoder.first.self_attention.project": {
                "x": 24,
                "y": 964
              },
              "decoder.first.token_to_image.query": {
                "x": 24,
                "y": 214
              },
              "decoder.first.token_to_image.key": {
                "x": 24,
                "y": 364
              },
              "div@decoder.first.token_to_image#0": {
                "x": 24,
                "y": 514
              },
              "decoder.first.token_to_image.value": {
                "x": 24,
                "y": 664
              },
              "decoder.first.token_to_image.softmax": {
                "x": 24,
                "y": 814
              },
              "decoder.first.token_to_image.project": {
                "x": 24,
                "y": 964
              },
              "decoder.first.image_to_token.query": {
                "x": 24,
                "y": 214
              },
              "decoder.first.image_to_token.key": {
                "x": 24,
                "y": 364
              },
              "div@decoder.first.image_to_token#0": {
                "x": 24,
                "y": 514
              },
              "decoder.first.image_to_token.value": {
                "x": 24,
                "y": 664
              },
              "decoder.first.image_to_token.softmax": {
                "x": 24,
                "y": 814
              },
              "decoder.first.image_to_token.project": {
                "x": 24,
                "y": 964
              },
              "decoder.second.self_attention": {
                "x": 24,
                "y": 214
              },
              "add@decoder.second#0": {
                "x": 24,
                "y": 364
              },
              "decoder.second.self_norm": {
                "x": 24,
                "y": 514
              },
              "add@decoder.second#1": {
                "x": 24,
                "y": 664
              },
              "decoder.second.token_to_image": {
                "x": 24,
                "y": 814
              },
              "add@decoder.second#2": {
                "x": 24,
                "y": 964
              },
              "decoder.second.token_norm": {
                "x": 24,
                "y": 1114
              },
              "decoder.second.up": {
                "x": 24,
                "y": 1264
              },
              "decoder.second.relu": {
                "x": 24,
                "y": 1414
              },
              "decoder.second.down": {
                "x": 24,
                "y": 1564
              },
              "add@decoder.second#3": {
                "x": 24,
                "y": 1714
              },
              "decoder.second.mlp_norm": {
                "x": 24,
                "y": 1864
              },
              "add@decoder.second#4": {
                "x": 24,
                "y": 2014
              },
              "decoder.second.image_to_token": {
                "x": 24,
                "y": 2164
              },
              "add@decoder.second#5": {
                "x": 24,
                "y": 2314
              },
              "decoder.second.image_norm": {
                "x": 24,
                "y": 2464
              },
              "decoder.second.self_attention.query": {
                "x": 24,
                "y": 214
              },
              "decoder.second.self_attention.key": {
                "x": 24,
                "y": 364
              },
              "div@decoder.second.self_attention#0": {
                "x": 24,
                "y": 514
              },
              "decoder.second.self_attention.value": {
                "x": 24,
                "y": 664
              },
              "decoder.second.self_attention.softmax": {
                "x": 24,
                "y": 814
              },
              "decoder.second.self_attention.project": {
                "x": 24,
                "y": 964
              },
              "decoder.second.token_to_image.query": {
                "x": 24,
                "y": 214
              },
              "decoder.second.token_to_image.key": {
                "x": 24,
                "y": 364
              },
              "div@decoder.second.token_to_image#0": {
                "x": 24,
                "y": 514
              },
              "decoder.second.token_to_image.value": {
                "x": 24,
                "y": 664
              },
              "decoder.second.token_to_image.softmax": {
                "x": 24,
                "y": 814
              },
              "decoder.second.token_to_image.project": {
                "x": 24,
                "y": 964
              },
              "decoder.second.image_to_token.query": {
                "x": 24,
                "y": 214
              },
              "decoder.second.image_to_token.key": {
                "x": 24,
                "y": 364
              },
              "div@decoder.second.image_to_token#0": {
                "x": 24,
                "y": 514
              },
              "decoder.second.image_to_token.value": {
                "x": 24,
                "y": 664
              },
              "decoder.second.image_to_token.softmax": {
                "x": 24,
                "y": 814
              },
              "decoder.second.image_to_token.project": {
                "x": 24,
                "y": 964
              },
              "decoder.final_attention.query": {
                "x": 24,
                "y": 214
              },
              "decoder.final_attention.key": {
                "x": 24,
                "y": 364
              },
              "div@decoder.final_attention#0": {
                "x": 24,
                "y": 514
              },
              "decoder.final_attention.value": {
                "x": 24,
                "y": 664
              },
              "decoder.final_attention.softmax": {
                "x": 24,
                "y": 814
              },
              "decoder.final_attention.project": {
                "x": 24,
                "y": 964
              },
              "upscale.first": {
                "x": 24,
                "y": 214
              },
              "permute@upscale#0": {
                "x": 24,
                "y": 364
              },
              "upscale.norm": {
                "x": 24,
                "y": 514
              },
              "permute@upscale#1": {
                "x": 24,
                "y": 664
              },
              "gelu@upscale#0": {
                "x": 24,
                "y": 814
              },
              "upscale.second": {
                "x": 24,
                "y": 964
              },
              "gelu@upscale#1": {
                "x": 24,
                "y": 1114
              },
              "flatten@masks#0": {
                "x": 24,
                "y": 214
              },
              "masks.mask0": {
                "x": 24,
                "y": 364
              },
              "masks.mask1": {
                "x": 24,
                "y": 514
              },
              "masks.mask2": {
                "x": 24,
                "y": 664
              },
              "stack@masks#0": {
                "x": 24,
                "y": 814
              },
              "python@masks#0": {
                "x": 24,
                "y": 964
              },
              "masks.mask0.first": {
                "x": 24,
                "y": 214
              },
              "relu@masks.mask0#0": {
                "x": 24,
                "y": 364
              },
              "masks.mask0.second": {
                "x": 24,
                "y": 514
              },
              "relu@masks.mask0#1": {
                "x": 24,
                "y": 664
              },
              "masks.mask0.project": {
                "x": 24,
                "y": 814
              },
              "masks.mask1.first": {
                "x": 24,
                "y": 214
              },
              "relu@masks.mask1#0": {
                "x": 24,
                "y": 364
              },
              "masks.mask1.second": {
                "x": 24,
                "y": 514
              },
              "relu@masks.mask1#1": {
                "x": 24,
                "y": 664
              },
              "masks.mask1.project": {
                "x": 24,
                "y": 814
              },
              "masks.mask2.first": {
                "x": 24,
                "y": 214
              },
              "relu@masks.mask2#0": {
                "x": 24,
                "y": 364
              },
              "masks.mask2.second": {
                "x": 24,
                "y": 514
              },
              "relu@masks.mask2#1": {
                "x": 24,
                "y": 664
              },
              "masks.mask2.project": {
                "x": 24,
                "y": 814
              },
              "quality.first": {
                "x": 24,
                "y": 214
              },
              "relu@quality#0": {
                "x": 24,
                "y": 364
              },
              "quality.second": {
                "x": 24,
                "y": 514
              },
              "relu@quality#1": {
                "x": 24,
                "y": 664
              },
              "quality.scores": {
                "x": 24,
                "y": 814
              }
            },
            "expandedModuleIds": [
              "decoder",
              "decoder.first"
            ],
            "selectedNodeIds": [
              "decoder.first.image_to_token"
            ],
            "viewport": {
              "width": 1100,
              "height": 700
            }
          },
          "anchors": [
            {
              "target": {
                "kind": "node",
                "nodeId": "decoder.first.image_to_token"
              },
              "snapshotId": "snapshot-2b9a0ff6ffe7a61c",
              "exportedAt": "2026-09-17T07:00:38.449307+00:00",
              "modelName": "PromptableMaskDecoder",
              "context": "{\"connections\":[\"{\\\"kind\\\":\\\"edge\\\",\\\"source\\\":\\\"add@PromptableMaskDecoder#0\\\",\\\"sourcePort\\\":\\\"y\\\",\\\"target\\\":\\\"decoder.first.image_to_token.key\\\",\\\"targetPort\\\":\\\"x\\\"}\",\"{\\\"kind\\\":\\\"edge\\\",\\\"source\\\":\\\"add@PromptableMaskDecoder#0\\\",\\\"sourcePort\\\":\\\"y\\\",\\\"target\\\":\\\"decoder.first.image_to_token.query\\\",\\\"targetPort\\\":\\\"x\\\"}\",\"{\\\"kind\\\":\\\"edge\\\",\\\"source\\\":\\\"add@PromptableMaskDecoder#0\\\",\\\"sourcePort\\\":\\\"y\\\",\\\"target\\\":\\\"decoder.first.image_to_token.value\\\",\\\"targetPort\\\":\\\"x\\\"}\",\"{\\\"kind\\\":\\\"edge\\\",\\\"source\\\":\\\"add@decoder.first#4\\\",\\\"sourcePort\\\":\\\"y\\\",\\\"target\\\":\\\"decoder.first.image_to_token\\\",\\\"targetPort\\\":\\\"x\\\"}\",\"{\\\"kind\\\":\\\"edge\\\",\\\"source\\\":\\\"add@decoder.first#4\\\",\\\"sourcePort\\\":\\\"y\\\",\\\"target\\\":\\\"decoder.first.image_to_token.key\\\",\\\"targetPort\\\":\\\"x\\\"}\",\"{\\\"kind\\\":\\\"edge\\\",\\\"source\\\":\\\"add@decoder.first#4\\\",\\\"sourcePort\\\":\\\"y\\\",\\\"target\\\":\\\"decoder.first.image_to_token.query\\\",\\\"targetPort\\\":\\\"x\\\"}\",\"{\\\"kind\\\":\\\"edge\\\",\\\"source\\\":\\\"add@decoder.first#4\\\",\\\"sourcePort\\\":\\\"y\\\",\\\"target\\\":\\\"decoder.first.image_to_token.value\\\",\\\"targetPort\\\":\\\"x\\\"}\",\"{\\\"kind\\\":\\\"edge\\\",\\\"source\\\":\\\"cat@PromptableMaskDecoder#0\\\",\\\"sourcePort\\\":\\\"y\\\",\\\"target\\\":\\\"decoder.first.image_to_token.key\\\",\\\"targetPort\\\":\\\"x\\\"}\",\"{\\\"kind\\\":\\\"edge\\\",\\\"source\\\":\\\"cat@PromptableMaskDecoder#0\\\",\\\"sourcePort\\\":\\\"y\\\",\\\"target\\\":\\\"decoder.first.image_to_token.query\\\",\\\"targetPort\\\":\\\"x\\\"}\",\"{\\\"kind\\\":\\\"edge\\\",\\\"source\\\":\\\"cat@PromptableMaskDecoder#0\\\",\\\"sourcePort\\\":\\\"y\\\",\\\"target\\\":\\\"decoder.first.image_to_token.value\\\",\\\"targetPort\\\":\\\"x\\\"}\",\"{\\\"kind\\\":\\\"edge\\\",\\\"source\\\":\\\"decoder.first.image_to_token\\\",\\\"sourcePort\\\":\\\"y\\\",\\\"target\\\":\\\"add@decoder.first#5\\\",\\\"targetPort\\\":\\\"x\\\"}\",\"{\\\"kind\\\":\\\"edge\\\",\\\"source\\\":\\\"decoder.first.image_to_token.key\\\",\\\"sourcePort\\\":\\\"y\\\",\\\"target\\\":\\\"div@decoder.first.image_to_token#0\\\",\\\"targetPort\\\":\\\"x\\\"}\",\"{\\\"kind\\\":\\\"edge\\\",\\\"source\\\":\\\"decoder.first.image_to_token.project\\\",\\\"sourcePort\\\":\\\"y\\\",\\\"target\\\":\\\"add@decoder.first#5\\\",\\\"targetPort\\\":\\\"x\\\"}\",\"{\\\"kind\\\":\\\"edge\\\",\\\"source\\\":\\\"decoder.first.image_to_token.query\\\",\\\"sourcePort\\\":\\\"y\\\",\\\"target\\\":\\\"div@decoder.first.image_to_token#0\\\",\\\"targetPort\\\":\\\"x\\\"}\",\"{\\\"kind\\\":\\\"edge\\\",\\\"source\\\":\\\"decoder.first.image_to_token.softmax\\\",\\\"sourcePort\\\":\\\"y\\\",\\\"target\\\":\\\"decoder.first.image_to_token.project\\\",\\\"targetPort\\\":\\\"x\\\"}\",\"{\\\"kind\\\":\\\"edge\\\",\\\"source\\\":\\\"decoder.first.image_to_token.value\\\",\\\"sourcePort\\\":\\\"y\\\",\\\"target\\\":\\\"decoder.first.image_to_token.project\\\",\\\"targetPort\\\":\\\"x\\\"}\",\"{\\\"kind\\\":\\\"edge\\\",\\\"source\\\":\\\"decoder.first.mlp_norm\\\",\\\"sourcePort\\\":\\\"y\\\",\\\"target\\\":\\\"decoder.first.image_to_token\\\",\\\"targetPort\\\":\\\"x\\\"}\",\"{\\\"kind\\\":\\\"edge\\\",\\\"source\\\":\\\"decoder.first.mlp_norm\\\",\\\"sourcePort\\\":\\\"y\\\",\\\"target\\\":\\\"decoder.first.image_to_token.key\\\",\\\"targetPort\\\":\\\"x\\\"}\",\"{\\\"kind\\\":\\\"edge\\\",\\\"source\\\":\\\"decoder.first.mlp_norm\\\",\\\"sourcePort\\\":\\\"y\\\",\\\"target\\\":\\\"decoder.first.image_to_token.query\\\",\\\"targetPort\\\":\\\"x\\\"}\",\"{\\\"kind\\\":\\\"edge\\\",\\\"source\\\":\\\"decoder.first.mlp_norm\\\",\\\"sourcePort\\\":\\\"y\\\",\\\"target\\\":\\\"decoder.first.image_to_token.value\\\",\\\"targetPort\\\":\\\"x\\\"}\",\"{\\\"kind\\\":\\\"edge\\\",\\\"source\\\":\\\"div@decoder.first.image_to_token#0\\\",\\\"sourcePort\\\":\\\"y\\\",\\\"target\\\":\\\"decoder.first.image_to_token.softmax\\\",\\\"targetPort\\\":\\\"x\\\"}\",\"{\\\"kind\\\":\\\"edge\\\",\\\"source\\\":\\\"python@PromptableMaskDecoder#0\\\",\\\"sourcePort\\\":\\\"y\\\",\\\"target\\\":\\\"decoder.first.image_to_token.key\\\",\\\"targetPort\\\":\\\"x\\\"}\",\"{\\\"kind\\\":\\\"edge\\\",\\\"source\\\":\\\"python@PromptableMaskDecoder#0\\\",\\\"sourcePort\\\":\\\"y\\\",\\\"target\\\":\\\"decoder.first.image_to_token.query\\\",\\\"targetPort\\\":\\\"x\\\"}\",\"{\\\"kind\\\":\\\"edge\\\",\\\"source\\\":\\\"python@PromptableMaskDecoder#0\\\",\\\"sourcePort\\\":\\\"y\\\",\\\"target\\\":\\\"decoder.first.image_to_token.value\\\",\\\"targetPort\\\":\\\"x\\\"}\"],\"contents\":[\"{\\\"id\\\":\\\"decoder.first.image_to_token.key\\\",\\\"kind\\\":\\\"layer\\\",\\\"op\\\":\\\"Linear\\\",\\\"params\\\":{\\\"in_features\\\":8,\\\"out_features\\\":4},\\\"parent\\\":\\\"decoder.first.image_to_token\\\"}\",\"{\\\"id\\\":\\\"decoder.first.image_to_token.project\\\",\\\"kind\\\":\\\"layer\\\",\\\"op\\\":\\\"Linear\\\",\\\"params\\\":{\\\"in_features\\\":4,\\\"out_features\\\":8},\\\"parent\\\":\\\"decoder.first.image_to_token\\\"}\",\"{\\\"id\\\":\\\"decoder.first.image_to_token.query\\\",\\\"kind\\\":\\\"layer\\\",\\\"op\\\":\\\"Linear\\\",\\\"params\\\":{\\\"in_features\\\":8,\\\"out_features\\\":4},\\\"parent\\\":\\\"decoder.first.image_to_token\\\"}\",\"{\\\"id\\\":\\\"decoder.first.image_to_token.softmax\\\",\\\"kind\\\":\\\"layer\\\",\\\"op\\\":\\\"Softmax\\\",\\\"params\\\":{},\\\"parent\\\":\\\"decoder.first.image_to_token\\\"}\",\"{\\\"id\\\":\\\"decoder.first.image_to_token.value\\\",\\\"kind\\\":\\\"layer\\\",\\\"op\\\":\\\"Linear\\\",\\\"params\\\":{\\\"in_features\\\":8,\\\"out_features\\\":4},\\\"parent\\\":\\\"decoder.first.image_to_token\\\"}\",\"{\\\"id\\\":\\\"div@decoder.first.image_to_token#0\\\",\\\"kind\\\":\\\"layer\\\",\\\"op\\\":\\\"torch.div\\\",\\\"params\\\":{},\\\"parent\\\":\\\"decoder.first.image_to_token\\\"}\"],\"node\":{\"id\":\"decoder.first.image_to_token\",\"kind\":\"module\",\"op\":\"Module\",\"params\":{},\"parent\":\"decoder.first\"}}"
            }
          ]
        },
        {
          "id": "masks",
          "title": "Use mask tokens as dynamic pixel classifiers",
          "note": "Each mask token passes through its own MLP to produce two feature weights. A dot product with every upscaled image location creates one candidate mask logit. A separate quality head scores the three candidates; none of these random outputs is a trained segmentation result.",
          "view": {
            "camera": {
              "x": 308.5,
              "y": -594,
              "z": 1.25
            },
            "nodePositions": {
              "input": {
                "x": 0,
                "y": 160
              },
              "flatten@PromptableMaskDecoder#0": {
                "x": 340,
                "y": 160
              },
              "prompt_encoder": {
                "x": 680,
                "y": 160
              },
              "python@PromptableMaskDecoder#0": {
                "x": 1020,
                "y": 160
              },
              "output_tokens": {
                "x": 1360,
                "y": 160
              },
              "cat@PromptableMaskDecoder#0": {
                "x": 1700,
                "y": 160
              },
              "no_mask": {
                "x": 2040,
                "y": 160
              },
              "add@PromptableMaskDecoder#0": {
                "x": 2380,
                "y": 160
              },
              "decoder": {
                "x": 2720,
                "y": 160
              },
              "upscale": {
                "x": 3060,
                "y": 160
              },
              "masks": {
                "x": 3400,
                "y": 160
              },
              "flatten@PromptableMaskDecoder#1": {
                "x": 3740,
                "y": 160
              },
              "quality": {
                "x": 4080,
                "y": 160
              },
              "cat@PromptableMaskDecoder#1": {
                "x": 4420,
                "y": 160
              },
              "output": {
                "x": 4760,
                "y": 160
              },
              "prompt_encoder.position": {
                "x": 24,
                "y": 214
              },
              "prompt_encoder.type_embedding": {
                "x": 24,
                "y": 364
              },
              "add@prompt_encoder#0": {
                "x": 24,
                "y": 514
              },
              "cat@prompt_encoder.position#0": {
                "x": 24,
                "y": 214
              },
              "decoder.first": {
                "x": 24,
                "y": 214
              },
              "decoder.second": {
                "x": 24,
                "y": 364
              },
              "add@decoder#0": {
                "x": 24,
                "y": 514
              },
              "add@decoder#1": {
                "x": 24,
                "y": 664
              },
              "decoder.final_attention": {
                "x": 24,
                "y": 814
              },
              "add@decoder#2": {
                "x": 24,
                "y": 964
              },
              "decoder.final_norm": {
                "x": 24,
                "y": 1114
              },
              "decoder.first.self_attention": {
                "x": 24,
                "y": 214
              },
              "add@decoder.first#0": {
                "x": 24,
                "y": 364
              },
              "decoder.first.self_norm": {
                "x": 24,
                "y": 514
              },
              "add@decoder.first#1": {
                "x": 24,
                "y": 664
              },
              "decoder.first.token_to_image": {
                "x": 24,
                "y": 814
              },
              "add@decoder.first#2": {
                "x": 24,
                "y": 964
              },
              "decoder.first.token_norm": {
                "x": 24,
                "y": 1114
              },
              "decoder.first.up": {
                "x": 24,
                "y": 1264
              },
              "decoder.first.relu": {
                "x": 24,
                "y": 1414
              },
              "decoder.first.down": {
                "x": 24,
                "y": 1564
              },
              "add@decoder.first#3": {
                "x": 24,
                "y": 1714
              },
              "decoder.first.mlp_norm": {
                "x": 24,
                "y": 1864
              },
              "add@decoder.first#4": {
                "x": 24,
                "y": 2014
              },
              "decoder.first.image_to_token": {
                "x": 24,
                "y": 2164
              },
              "add@decoder.first#5": {
                "x": 24,
                "y": 2314
              },
              "decoder.first.image_norm": {
                "x": 24,
                "y": 2464
              },
              "decoder.first.self_attention.query": {
                "x": 24,
                "y": 214
              },
              "decoder.first.self_attention.key": {
                "x": 24,
                "y": 364
              },
              "div@decoder.first.self_attention#0": {
                "x": 24,
                "y": 514
              },
              "decoder.first.self_attention.value": {
                "x": 24,
                "y": 664
              },
              "decoder.first.self_attention.softmax": {
                "x": 24,
                "y": 814
              },
              "decoder.first.self_attention.project": {
                "x": 24,
                "y": 964
              },
              "decoder.first.token_to_image.query": {
                "x": 24,
                "y": 214
              },
              "decoder.first.token_to_image.key": {
                "x": 24,
                "y": 364
              },
              "div@decoder.first.token_to_image#0": {
                "x": 24,
                "y": 514
              },
              "decoder.first.token_to_image.value": {
                "x": 24,
                "y": 664
              },
              "decoder.first.token_to_image.softmax": {
                "x": 24,
                "y": 814
              },
              "decoder.first.token_to_image.project": {
                "x": 24,
                "y": 964
              },
              "decoder.first.image_to_token.query": {
                "x": 24,
                "y": 214
              },
              "decoder.first.image_to_token.key": {
                "x": 24,
                "y": 364
              },
              "div@decoder.first.image_to_token#0": {
                "x": 24,
                "y": 514
              },
              "decoder.first.image_to_token.value": {
                "x": 24,
                "y": 664
              },
              "decoder.first.image_to_token.softmax": {
                "x": 24,
                "y": 814
              },
              "decoder.first.image_to_token.project": {
                "x": 24,
                "y": 964
              },
              "decoder.second.self_attention": {
                "x": 24,
                "y": 214
              },
              "add@decoder.second#0": {
                "x": 24,
                "y": 364
              },
              "decoder.second.self_norm": {
                "x": 24,
                "y": 514
              },
              "add@decoder.second#1": {
                "x": 24,
                "y": 664
              },
              "decoder.second.token_to_image": {
                "x": 24,
                "y": 814
              },
              "add@decoder.second#2": {
                "x": 24,
                "y": 964
              },
              "decoder.second.token_norm": {
                "x": 24,
                "y": 1114
              },
              "decoder.second.up": {
                "x": 24,
                "y": 1264
              },
              "decoder.second.relu": {
                "x": 24,
                "y": 1414
              },
              "decoder.second.down": {
                "x": 24,
                "y": 1564
              },
              "add@decoder.second#3": {
                "x": 24,
                "y": 1714
              },
              "decoder.second.mlp_norm": {
                "x": 24,
                "y": 1864
              },
              "add@decoder.second#4": {
                "x": 24,
                "y": 2014
              },
              "decoder.second.image_to_token": {
                "x": 24,
                "y": 2164
              },
              "add@decoder.second#5": {
                "x": 24,
                "y": 2314
              },
              "decoder.second.image_norm": {
                "x": 24,
                "y": 2464
              },
              "decoder.second.self_attention.query": {
                "x": 24,
                "y": 214
              },
              "decoder.second.self_attention.key": {
                "x": 24,
                "y": 364
              },
              "div@decoder.second.self_attention#0": {
                "x": 24,
                "y": 514
              },
              "decoder.second.self_attention.value": {
                "x": 24,
                "y": 664
              },
              "decoder.second.self_attention.softmax": {
                "x": 24,
                "y": 814
              },
              "decoder.second.self_attention.project": {
                "x": 24,
                "y": 964
              },
              "decoder.second.token_to_image.query": {
                "x": 24,
                "y": 214
              },
              "decoder.second.token_to_image.key": {
                "x": 24,
                "y": 364
              },
              "div@decoder.second.token_to_image#0": {
                "x": 24,
                "y": 514
              },
              "decoder.second.token_to_image.value": {
                "x": 24,
                "y": 664
              },
              "decoder.second.token_to_image.softmax": {
                "x": 24,
                "y": 814
              },
              "decoder.second.token_to_image.project": {
                "x": 24,
                "y": 964
              },
              "decoder.second.image_to_token.query": {
                "x": 24,
                "y": 214
              },
              "decoder.second.image_to_token.key": {
                "x": 24,
                "y": 364
              },
              "div@decoder.second.image_to_token#0": {
                "x": 24,
                "y": 514
              },
              "decoder.second.image_to_token.value": {
                "x": 24,
                "y": 664
              },
              "decoder.second.image_to_token.softmax": {
                "x": 24,
                "y": 814
              },
              "decoder.second.image_to_token.project": {
                "x": 24,
                "y": 964
              },
              "decoder.final_attention.query": {
                "x": 24,
                "y": 214
              },
              "decoder.final_attention.key": {
                "x": 24,
                "y": 364
              },
              "div@decoder.final_attention#0": {
                "x": 24,
                "y": 514
              },
              "decoder.final_attention.value": {
                "x": 24,
                "y": 664
              },
              "decoder.final_attention.softmax": {
                "x": 24,
                "y": 814
              },
              "decoder.final_attention.project": {
                "x": 24,
                "y": 964
              },
              "upscale.first": {
                "x": 24,
                "y": 214
              },
              "permute@upscale#0": {
                "x": 24,
                "y": 364
              },
              "upscale.norm": {
                "x": 24,
                "y": 514
              },
              "permute@upscale#1": {
                "x": 24,
                "y": 664
              },
              "gelu@upscale#0": {
                "x": 24,
                "y": 814
              },
              "upscale.second": {
                "x": 24,
                "y": 964
              },
              "gelu@upscale#1": {
                "x": 24,
                "y": 1114
              },
              "flatten@masks#0": {
                "x": 24,
                "y": 214
              },
              "masks.mask0": {
                "x": 24,
                "y": 364
              },
              "masks.mask1": {
                "x": 24,
                "y": 514
              },
              "masks.mask2": {
                "x": 24,
                "y": 664
              },
              "stack@masks#0": {
                "x": 24,
                "y": 814
              },
              "python@masks#0": {
                "x": 24,
                "y": 964
              },
              "masks.mask0.first": {
                "x": 24,
                "y": 214
              },
              "relu@masks.mask0#0": {
                "x": 24,
                "y": 364
              },
              "masks.mask0.second": {
                "x": 24,
                "y": 514
              },
              "relu@masks.mask0#1": {
                "x": 24,
                "y": 664
              },
              "masks.mask0.project": {
                "x": 24,
                "y": 814
              },
              "masks.mask1.first": {
                "x": 24,
                "y": 214
              },
              "relu@masks.mask1#0": {
                "x": 24,
                "y": 364
              },
              "masks.mask1.second": {
                "x": 24,
                "y": 514
              },
              "relu@masks.mask1#1": {
                "x": 24,
                "y": 664
              },
              "masks.mask1.project": {
                "x": 24,
                "y": 814
              },
              "masks.mask2.first": {
                "x": 24,
                "y": 214
              },
              "relu@masks.mask2#0": {
                "x": 24,
                "y": 364
              },
              "masks.mask2.second": {
                "x": 24,
                "y": 514
              },
              "relu@masks.mask2#1": {
                "x": 24,
                "y": 664
              },
              "masks.mask2.project": {
                "x": 24,
                "y": 814
              },
              "quality.first": {
                "x": 24,
                "y": 214
              },
              "relu@quality#0": {
                "x": 24,
                "y": 364
              },
              "quality.second": {
                "x": 24,
                "y": 514
              },
              "relu@quality#1": {
                "x": 24,
                "y": 664
              },
              "quality.scores": {
                "x": 24,
                "y": 814
              }
            },
            "expandedModuleIds": [
              "masks",
              "masks.mask0"
            ],
            "selectedNodeIds": [
              "masks.mask0.project"
            ],
            "viewport": {
              "width": 1100,
              "height": 700
            }
          },
          "anchors": [
            {
              "target": {
                "kind": "node",
                "nodeId": "masks.mask0.project"
              },
              "snapshotId": "snapshot-2b9a0ff6ffe7a61c",
              "exportedAt": "2026-09-17T07:00:38.449307+00:00",
              "modelName": "PromptableMaskDecoder",
              "context": "{\"connections\":[\"{\\\"kind\\\":\\\"edge\\\",\\\"source\\\":\\\"masks.mask0.project\\\",\\\"sourcePort\\\":\\\"y\\\",\\\"target\\\":\\\"stack@masks#0\\\",\\\"targetPort\\\":\\\"x\\\"}\",\"{\\\"kind\\\":\\\"edge\\\",\\\"source\\\":\\\"relu@masks.mask0#1\\\",\\\"sourcePort\\\":\\\"y\\\",\\\"target\\\":\\\"masks.mask0.project\\\",\\\"targetPort\\\":\\\"x\\\"}\"],\"contents\":[],\"node\":{\"id\":\"masks.mask0.project\",\"kind\":\"layer\",\"op\":\"Linear\",\"params\":{\"in_features\":8,\"out_features\":2},\"parent\":\"masks.mask0\"}}"
            }
          ]
        }
      ]
    },
    "threads": [],
    "savedViews": [
      {
        "id": "prompt",
        "title": "Combine prompt geometry with its meaning",
        "note": "Random Fourier features encode normalized (x,y) coordinates. A learned type embedding distinguishes foreground/background points and the two box corners. The same image features are reused when a prompt changes.",
        "view": {
          "camera": {
            "x": 308.5,
            "y": -144,
            "z": 1.25
          },
          "nodePositions": {
            "input": {
              "x": 0,
              "y": 160
            },
            "flatten@PromptableMaskDecoder#0": {
              "x": 340,
              "y": 160
            },
            "prompt_encoder": {
              "x": 680,
              "y": 160
            },
            "python@PromptableMaskDecoder#0": {
              "x": 1020,
              "y": 160
            },
            "output_tokens": {
              "x": 1360,
              "y": 160
            },
            "cat@PromptableMaskDecoder#0": {
              "x": 1700,
              "y": 160
            },
            "no_mask": {
              "x": 2040,
              "y": 160
            },
            "add@PromptableMaskDecoder#0": {
              "x": 2380,
              "y": 160
            },
            "decoder": {
              "x": 2720,
              "y": 160
            },
            "upscale": {
              "x": 3060,
              "y": 160
            },
            "masks": {
              "x": 3400,
              "y": 160
            },
            "flatten@PromptableMaskDecoder#1": {
              "x": 3740,
              "y": 160
            },
            "quality": {
              "x": 4080,
              "y": 160
            },
            "cat@PromptableMaskDecoder#1": {
              "x": 4420,
              "y": 160
            },
            "output": {
              "x": 4760,
              "y": 160
            },
            "prompt_encoder.position": {
              "x": 24,
              "y": 214
            },
            "prompt_encoder.type_embedding": {
              "x": 24,
              "y": 364
            },
            "add@prompt_encoder#0": {
              "x": 24,
              "y": 514
            },
            "cat@prompt_encoder.position#0": {
              "x": 24,
              "y": 214
            },
            "decoder.first": {
              "x": 24,
              "y": 214
            },
            "decoder.second": {
              "x": 24,
              "y": 364
            },
            "add@decoder#0": {
              "x": 24,
              "y": 514
            },
            "add@decoder#1": {
              "x": 24,
              "y": 664
            },
            "decoder.final_attention": {
              "x": 24,
              "y": 814
            },
            "add@decoder#2": {
              "x": 24,
              "y": 964
            },
            "decoder.final_norm": {
              "x": 24,
              "y": 1114
            },
            "decoder.first.self_attention": {
              "x": 24,
              "y": 214
            },
            "add@decoder.first#0": {
              "x": 24,
              "y": 364
            },
            "decoder.first.self_norm": {
              "x": 24,
              "y": 514
            },
            "add@decoder.first#1": {
              "x": 24,
              "y": 664
            },
            "decoder.first.token_to_image": {
              "x": 24,
              "y": 814
            },
            "add@decoder.first#2": {
              "x": 24,
              "y": 964
            },
            "decoder.first.token_norm": {
              "x": 24,
              "y": 1114
            },
            "decoder.first.up": {
              "x": 24,
              "y": 1264
            },
            "decoder.first.relu": {
              "x": 24,
              "y": 1414
            },
            "decoder.first.down": {
              "x": 24,
              "y": 1564
            },
            "add@decoder.first#3": {
              "x": 24,
              "y": 1714
            },
            "decoder.first.mlp_norm": {
              "x": 24,
              "y": 1864
            },
            "add@decoder.first#4": {
              "x": 24,
              "y": 2014
            },
            "decoder.first.image_to_token": {
              "x": 24,
              "y": 2164
            },
            "add@decoder.first#5": {
              "x": 24,
              "y": 2314
            },
            "decoder.first.image_norm": {
              "x": 24,
              "y": 2464
            },
            "decoder.first.self_attention.query": {
              "x": 24,
              "y": 214
            },
            "decoder.first.self_attention.key": {
              "x": 24,
              "y": 364
            },
            "div@decoder.first.self_attention#0": {
              "x": 24,
              "y": 514
            },
            "decoder.first.self_attention.value": {
              "x": 24,
              "y": 664
            },
            "decoder.first.self_attention.softmax": {
              "x": 24,
              "y": 814
            },
            "decoder.first.self_attention.project": {
              "x": 24,
              "y": 964
            },
            "decoder.first.token_to_image.query": {
              "x": 24,
              "y": 214
            },
            "decoder.first.token_to_image.key": {
              "x": 24,
              "y": 364
            },
            "div@decoder.first.token_to_image#0": {
              "x": 24,
              "y": 514
            },
            "decoder.first.token_to_image.value": {
              "x": 24,
              "y": 664
            },
            "decoder.first.token_to_image.softmax": {
              "x": 24,
              "y": 814
            },
            "decoder.first.token_to_image.project": {
              "x": 24,
              "y": 964
            },
            "decoder.first.image_to_token.query": {
              "x": 24,
              "y": 214
            },
            "decoder.first.image_to_token.key": {
              "x": 24,
              "y": 364
            },
            "div@decoder.first.image_to_token#0": {
              "x": 24,
              "y": 514
            },
            "decoder.first.image_to_token.value": {
              "x": 24,
              "y": 664
            },
            "decoder.first.image_to_token.softmax": {
              "x": 24,
              "y": 814
            },
            "decoder.first.image_to_token.project": {
              "x": 24,
              "y": 964
            },
            "decoder.second.self_attention": {
              "x": 24,
              "y": 214
            },
            "add@decoder.second#0": {
              "x": 24,
              "y": 364
            },
            "decoder.second.self_norm": {
              "x": 24,
              "y": 514
            },
            "add@decoder.second#1": {
              "x": 24,
              "y": 664
            },
            "decoder.second.token_to_image": {
              "x": 24,
              "y": 814
            },
            "add@decoder.second#2": {
              "x": 24,
              "y": 964
            },
            "decoder.second.token_norm": {
              "x": 24,
              "y": 1114
            },
            "decoder.second.up": {
              "x": 24,
              "y": 1264
            },
            "decoder.second.relu": {
              "x": 24,
              "y": 1414
            },
            "decoder.second.down": {
              "x": 24,
              "y": 1564
            },
            "add@decoder.second#3": {
              "x": 24,
              "y": 1714
            },
            "decoder.second.mlp_norm": {
              "x": 24,
              "y": 1864
            },
            "add@decoder.second#4": {
              "x": 24,
              "y": 2014
            },
            "decoder.second.image_to_token": {
              "x": 24,
              "y": 2164
            },
            "add@decoder.second#5": {
              "x": 24,
              "y": 2314
            },
            "decoder.second.image_norm": {
              "x": 24,
              "y": 2464
            },
            "decoder.second.self_attention.query": {
              "x": 24,
              "y": 214
            },
            "decoder.second.self_attention.key": {
              "x": 24,
              "y": 364
            },
            "div@decoder.second.self_attention#0": {
              "x": 24,
              "y": 514
            },
            "decoder.second.self_attention.value": {
              "x": 24,
              "y": 664
            },
            "decoder.second.self_attention.softmax": {
              "x": 24,
              "y": 814
            },
            "decoder.second.self_attention.project": {
              "x": 24,
              "y": 964
            },
            "decoder.second.token_to_image.query": {
              "x": 24,
              "y": 214
            },
            "decoder.second.token_to_image.key": {
              "x": 24,
              "y": 364
            },
            "div@decoder.second.token_to_image#0": {
              "x": 24,
              "y": 514
            },
            "decoder.second.token_to_image.value": {
              "x": 24,
              "y": 664
            },
            "decoder.second.token_to_image.softmax": {
              "x": 24,
              "y": 814
            },
            "decoder.second.token_to_image.project": {
              "x": 24,
              "y": 964
            },
            "decoder.second.image_to_token.query": {
              "x": 24,
              "y": 214
            },
            "decoder.second.image_to_token.key": {
              "x": 24,
              "y": 364
            },
            "div@decoder.second.image_to_token#0": {
              "x": 24,
              "y": 514
            },
            "decoder.second.image_to_token.value": {
              "x": 24,
              "y": 664
            },
            "decoder.second.image_to_token.softmax": {
              "x": 24,
              "y": 814
            },
            "decoder.second.image_to_token.project": {
              "x": 24,
              "y": 964
            },
            "decoder.final_attention.query": {
              "x": 24,
              "y": 214
            },
            "decoder.final_attention.key": {
              "x": 24,
              "y": 364
            },
            "div@decoder.final_attention#0": {
              "x": 24,
              "y": 514
            },
            "decoder.final_attention.value": {
              "x": 24,
              "y": 664
            },
            "decoder.final_attention.softmax": {
              "x": 24,
              "y": 814
            },
            "decoder.final_attention.project": {
              "x": 24,
              "y": 964
            },
            "upscale.first": {
              "x": 24,
              "y": 214
            },
            "permute@upscale#0": {
              "x": 24,
              "y": 364
            },
            "upscale.norm": {
              "x": 24,
              "y": 514
            },
            "permute@upscale#1": {
              "x": 24,
              "y": 664
            },
            "gelu@upscale#0": {
              "x": 24,
              "y": 814
            },
            "upscale.second": {
              "x": 24,
              "y": 964
            },
            "gelu@upscale#1": {
              "x": 24,
              "y": 1114
            },
            "flatten@masks#0": {
              "x": 24,
              "y": 214
            },
            "masks.mask0": {
              "x": 24,
              "y": 364
            },
            "masks.mask1": {
              "x": 24,
              "y": 514
            },
            "masks.mask2": {
              "x": 24,
              "y": 664
            },
            "stack@masks#0": {
              "x": 24,
              "y": 814
            },
            "python@masks#0": {
              "x": 24,
              "y": 964
            },
            "masks.mask0.first": {
              "x": 24,
              "y": 214
            },
            "relu@masks.mask0#0": {
              "x": 24,
              "y": 364
            },
            "masks.mask0.second": {
              "x": 24,
              "y": 514
            },
            "relu@masks.mask0#1": {
              "x": 24,
              "y": 664
            },
            "masks.mask0.project": {
              "x": 24,
              "y": 814
            },
            "masks.mask1.first": {
              "x": 24,
              "y": 214
            },
            "relu@masks.mask1#0": {
              "x": 24,
              "y": 364
            },
            "masks.mask1.second": {
              "x": 24,
              "y": 514
            },
            "relu@masks.mask1#1": {
              "x": 24,
              "y": 664
            },
            "masks.mask1.project": {
              "x": 24,
              "y": 814
            },
            "masks.mask2.first": {
              "x": 24,
              "y": 214
            },
            "relu@masks.mask2#0": {
              "x": 24,
              "y": 364
            },
            "masks.mask2.second": {
              "x": 24,
              "y": 514
            },
            "relu@masks.mask2#1": {
              "x": 24,
              "y": 664
            },
            "masks.mask2.project": {
              "x": 24,
              "y": 814
            },
            "quality.first": {
              "x": 24,
              "y": 214
            },
            "relu@quality#0": {
              "x": 24,
              "y": 364
            },
            "quality.second": {
              "x": 24,
              "y": 514
            },
            "relu@quality#1": {
              "x": 24,
              "y": 664
            },
            "quality.scores": {
              "x": 24,
              "y": 814
            }
          },
          "expandedModuleIds": [
            "prompt_encoder"
          ],
          "selectedNodeIds": [
            "prompt_encoder.type_embedding"
          ],
          "viewport": {
            "width": 1100,
            "height": 700
          }
        },
        "anchors": [
          {
            "target": {
              "kind": "node",
              "nodeId": "prompt_encoder.type_embedding"
            },
            "snapshotId": "snapshot-2b9a0ff6ffe7a61c",
            "exportedAt": "2026-09-17T07:00:38.449307+00:00",
            "modelName": "PromptableMaskDecoder",
            "context": "{\"connections\":[\"{\\\"kind\\\":\\\"edge\\\",\\\"source\\\":\\\"input\\\",\\\"sourcePort\\\":\\\"y\\\",\\\"target\\\":\\\"prompt_encoder.type_embedding\\\",\\\"targetPort\\\":\\\"x\\\"}\",\"{\\\"kind\\\":\\\"edge\\\",\\\"source\\\":\\\"prompt_encoder.type_embedding\\\",\\\"sourcePort\\\":\\\"y\\\",\\\"target\\\":\\\"add@prompt_encoder#0\\\",\\\"targetPort\\\":\\\"x\\\"}\"],\"contents\":[],\"node\":{\"id\":\"prompt_encoder.type_embedding\",\"kind\":\"layer\",\"op\":\"Embedding\",\"params\":{\"embedding_dim\":8,\"num_embeddings\":4},\"parent\":\"prompt_encoder\"}}"
          }
        ]
      }
    ],
    "openingViewId": "prompt"
  }
}
