{
  "schemaVersion": 1,
  "date": "2026-09-07",
  "packageId": "python-modules",
  "scope": "Configured membership and registered descriptions, not live licensing or calculation certification",
  "web": {
    "commit": "1cd12e8b173ba72aa5c95c98a14772b7ee537997",
    "branch": "main13.0",
    "dirty": true
  },
  "desktop": {
    "commit": "40606b705b2df95e550ffef5e98ab733ccc66229",
    "branch": "fix-iteration/v10",
    "dirty": false
  },
  "files": [
    {
      "repo": "LV-Atlas-Web",
      "path": "src/LvAtlasWeb.Api/App_Data/module-groups.json",
      "sha256": "d0da0a140fc83c6515f154d00c04a7d4c71d98adbb7a615b9f0301412cb1e80f"
    },
    {
      "repo": "LV-Atlas-Web",
      "path": "src/modules/xml/ModuleInfoList.xml",
      "sha256": "09d40bef101969fdcc2c17efbd30c5945ec2d8b3c3e19283a21784f9daec0c7e"
    },
    {
      "repo": "LV-Atlas-Web",
      "path": "src/modules/info/Modules.info.json",
      "sha256": "6fe0be8839983494b89eb757aded9ac817c2b59a5b9a7e8f9ae1f1d6dfda93d1"
    },
    {
      "repo": "LV-Atlas-Web",
      "path": "src/modules/info/ModuleWebUi.json",
      "sha256": "57634dac5bd6d9a5fffb58f6e4f6f2e1cb0a75b476dc678be8e10534ff1358a5"
    },
    {
      "repo": "LV-Atlas-Web",
      "path": "src/LvAtlasWeb.Client/wwwroot/index.html",
      "sha256": "9549c82a03e9ba5a181fdf3732f07fef2a9f5312bee31d30e016b099e6ff4570"
    },
    {
      "repo": "LV-Atlas-Web",
      "path": "src/LvAtlasWeb.Api/python_modules/additive/module.json",
      "sha256": "a22d1c66f1245fc39e18d7cd60457f333e339e231a81099c6b15680cfb1dbcf7"
    },
    {
      "repo": "LV-Atlas-Web",
      "path": "src/LvAtlasWeb.Api/python_modules/additive/calculate.py",
      "sha256": "c0b4c4e62ce9c2b7d83488f76394ccce2c688febbf948f85279e01acd815358f"
    },
    {
      "repo": "LV-Atlas-Web",
      "path": "src/LvAtlasWeb.Api/Services/PythonMeshFileService.cs",
      "sha256": "5286dccdd5a2200c77d2570c6aa1c89949a7e7bd147594c903b9d81084521f0b"
    },
    {
      "repo": "LV-Atlas-Web",
      "path": "src/LvAtlasWeb.Api/Controllers/PythonModuleController.cs",
      "sha256": "a0b87170f00e045ef5e7fa9aded6a4eb7d076577067c8f0f0f1d8ea1c1b9d776"
    },
    {
      "repo": "LV-Atlas-Web",
      "path": "src/LvAtlasWeb.Client/Components/UiMeshUpload.razor",
      "sha256": "93a57154275a6b51cd314d489f3ae1c1810a3c0cec6ed657e8ed8fa5fdd39b6a"
    },
    {
      "repo": "LV-Atlas-Web",
      "path": "src/LvAtlasWeb.Client/Components/DynamicModuleView.razor",
      "sha256": "a4c7aaec243b9462fee833481091e0d47d38d341b9abd3b7780bb9dd83210d4b"
    }
  ],
  "members": [
    {
      "token": "python-additive",
      "registryToken": "",
      "displayName": "",
      "registered": false,
      "description": {
        "de": "",
        "en": ""
      },
      "headlines": [
        {
          "de": "",
          "en": ""
        },
        {
          "de": "",
          "en": ""
        }
      ],
      "source": {
        "de": "",
        "en": "",
        "neutral": ""
      }
    }
  ],
  "pythonDescriptor": {
    "module": {
      "id": "python-additive",
      "name": {
        "en": "Additive Manufacturing - Layer Hatch",
        "de": "Additive Fertigung - Schichtschraffur"
      },
      "description": {
        "en": "Calculate laser scan paths for SLM/SLS 3D printing. Upload an STL/OBJ file to analyze.",
        "de": "Berechne Laser-Scanpfade für SLM/SLS 3D-Druck. Laden Sie eine STL/OBJ-Datei hoch."
      },
      "version": "1.4.0",
      "author": "LV-Atlas",
      "category": "python",
      "dependencies": [
        "numpy",
        "trimesh",
        "shapely",
        "PythonSLM",
        "matplotlib",
        "scipy"
      ]
    },
    "ui": {
      "categories": [
        "ClientModule"
      ]
    },
    "variables": [
      {
        "id": 1,
        "symbol": "slice_plane",
        "name": {
          "en": "Slice Plane",
          "de": "Schnittebene"
        },
        "type": "input",
        "default": 3,
        "options": [
          {
            "id": 1,
            "label": {
              "en": "X Plane (YZ cross-section)",
              "de": "X-Ebene (YZ-Schnitt)"
            }
          },
          {
            "id": 2,
            "label": {
              "en": "Y Plane (XZ cross-section)",
              "de": "Y-Ebene (XZ-Schnitt)"
            }
          },
          {
            "id": 3,
            "label": {
              "en": "Z Plane (XY cross-section)",
              "de": "Z-Ebene (XY-Schnitt)"
            }
          }
        ]
      },
      {
        "id": 2,
        "symbol": "slice_pos",
        "name": {
          "en": "Slice Position",
          "de": "Schnittposition"
        },
        "type": "input",
        "unit": "mm"
      },
      {
        "id": 3,
        "symbol": "hatch_angle",
        "name": {
          "en": "Hatch Angle",
          "de": "Schraffurwinkel"
        },
        "type": "input",
        "unit": "°"
      },
      {
        "id": 4,
        "symbol": "hatch_spacing",
        "name": {
          "en": "Hatch Spacing",
          "de": "Schraffurabstand"
        },
        "type": "input",
        "unit": "mm"
      },
      {
        "id": 5,
        "symbol": "scan_speed",
        "name": {
          "en": "Scan Speed",
          "de": "Scangeschwindigkeit"
        },
        "type": "input",
        "unit": "mm/s"
      },
      {
        "id": 6,
        "symbol": "P_hatch",
        "name": {
          "en": "Hatch Laser Power",
          "de": "Laserleistung Schraffur"
        },
        "type": "input",
        "unit": "W"
      },
      {
        "id": 7,
        "symbol": "v_contour",
        "name": {
          "en": "Contour Scan Speed",
          "de": "Scangeschwindigkeit Kontur"
        },
        "type": "input",
        "unit": "mm/s"
      },
      {
        "id": 8,
        "symbol": "P_contour",
        "name": {
          "en": "Contour Laser Power",
          "de": "Laserleistung Kontur"
        },
        "type": "input",
        "unit": "W"
      },
      {
        "id": 9,
        "symbol": "t_layer",
        "name": {
          "en": "Layer Thickness",
          "de": "Schichtdicke"
        },
        "type": "input",
        "unit": "µm"
      },
      {
        "id": 10,
        "symbol": "material",
        "name": {
          "en": "Material",
          "de": "Werkstoff"
        },
        "type": "input",
        "default": 1,
        "options": [
          {
            "id": 1,
            "label": {
              "en": "Inconel 718",
              "de": "Inconel 718"
            }
          },
          {
            "id": 2,
            "label": {
              "en": "AlSi10Mg",
              "de": "AlSi10Mg"
            }
          }
        ]
      },
      {
        "id": 11,
        "symbol": "d_beam",
        "name": {
          "en": "Beam Diameter",
          "de": "Strahldurchmesser"
        },
        "type": "input",
        "unit": "mm",
        "default": 0.08
      },
      {
        "id": 12,
        "symbol": "n_hatches",
        "name": {
          "en": "Number of Hatch Lines",
          "de": "Anzahl Schraffurlinien"
        },
        "type": "output"
      },
      {
        "id": 13,
        "symbol": "L_total",
        "name": {
          "en": "Total Path Length",
          "de": "Gesamte Pfadlänge"
        },
        "type": "output",
        "unit": "mm"
      },
      {
        "id": 14,
        "symbol": "t_scan",
        "name": {
          "en": "Estimated Scan Time",
          "de": "Geschätzte Scanzeit"
        },
        "type": "output",
        "unit": "s"
      },
      {
        "id": 15,
        "symbol": "A_slice",
        "name": {
          "en": "Slice Area",
          "de": "Schnittfläche"
        },
        "type": "output",
        "unit": "mm²"
      },
      {
        "id": 16,
        "symbol": "sigma_override",
        "name": {
          "en": "Sigma Override (visual)",
          "de": "Sigma Override (visuell)"
        },
        "type": "input",
        "unit": "mm"
      },
      {
        "id": 17,
        "symbol": "w_overhang",
        "name": {
          "en": "Overhang Sensitivity",
          "de": "Ueberhang-Empfindlichkeit"
        },
        "type": "input",
        "unit": "",
        "default": 2,
        "min": 0,
        "max": 5
      }
    ]
  },
  "identityReview": "python-additive is defined by its own Python module descriptor and handled explicitly by DynamicModuleView. It is absent from the two legacy mask/custom-WebUI catalogues; no alias or production package definition has been changed."
}
