diff --git a/diagrams/alibabacloud/__init__.py b/diagrams/alibabacloud/__init__.py
index a64c2002..7d4fa2b5 100644
--- a/diagrams/alibabacloud/__init__.py
+++ b/diagrams/alibabacloud/__init__.py
@@ -10,3 +10,7 @@ class _AlibabaCloud(Node):
_icon_dir = "resources/alibabacloud"
fontcolor = "#ffffff"
+
+
+class AlibabaCloud(_AlibabaCloud):
+ _icon = "alibabacloud.png"
diff --git a/diagrams/aws/__init__.py b/diagrams/aws/__init__.py
index 1550a0df..cdf31c3c 100644
--- a/diagrams/aws/__init__.py
+++ b/diagrams/aws/__init__.py
@@ -10,3 +10,7 @@ class _AWS(Node):
_icon_dir = "resources/aws"
fontcolor = "#ffffff"
+
+
+class AWS(_AWS):
+ _icon = "aws.png"
diff --git a/diagrams/azure/__init__.py b/diagrams/azure/__init__.py
index 0b80ace0..5f7c2b29 100644
--- a/diagrams/azure/__init__.py
+++ b/diagrams/azure/__init__.py
@@ -10,3 +10,7 @@ class _Azure(Node):
_icon_dir = "resources/azure"
fontcolor = "#ffffff"
+
+
+class Azure(_Azure):
+ _icon = "azure.png"
diff --git a/diagrams/digitalocean/__init__.py b/diagrams/digitalocean/__init__.py
index 29daae0b..e9557d1b 100644
--- a/diagrams/digitalocean/__init__.py
+++ b/diagrams/digitalocean/__init__.py
@@ -10,3 +10,7 @@ class _DigitalOcean(Node):
_icon_dir = "resources/digitalocean"
fontcolor = "#ffffff"
+
+
+class DigitalOcean(_DigitalOcean):
+ _icon = "digitalocean.png"
diff --git a/diagrams/elastic/__init__.py b/diagrams/elastic/__init__.py
index 786fa60e..17b86961 100644
--- a/diagrams/elastic/__init__.py
+++ b/diagrams/elastic/__init__.py
@@ -10,3 +10,7 @@ class _Elastic(Node):
_icon_dir = "resources/elastic"
fontcolor = "#ffffff"
+
+
+class Elastic(_Elastic):
+ _icon = "elastic.png"
diff --git a/diagrams/firebase/__init__.py b/diagrams/firebase/__init__.py
index 5cd693ec..11c65802 100644
--- a/diagrams/firebase/__init__.py
+++ b/diagrams/firebase/__init__.py
@@ -10,3 +10,7 @@ class _Firebase(Node):
_icon_dir = "resources/firebase"
fontcolor = "#ffffff"
+
+
+class Firebase(_Firebase):
+ _icon = "firebase.png"
diff --git a/diagrams/gcp/__init__.py b/diagrams/gcp/__init__.py
index 1188a8d0..2ca41aed 100644
--- a/diagrams/gcp/__init__.py
+++ b/diagrams/gcp/__init__.py
@@ -10,3 +10,7 @@ class _GCP(Node):
_icon_dir = "resources/gcp"
fontcolor = "#2d3436"
+
+
+class GCP(_GCP):
+ _icon = "gcp.png"
diff --git a/diagrams/generic/__init__.py b/diagrams/generic/__init__.py
index 70db6868..de86d4f5 100644
--- a/diagrams/generic/__init__.py
+++ b/diagrams/generic/__init__.py
@@ -10,3 +10,7 @@ class _Generic(Node):
_icon_dir = "resources/generic"
fontcolor = "#ffffff"
+
+
+class Generic(_Generic):
+ _icon = "generic.png"
diff --git a/diagrams/ibm/__init__.py b/diagrams/ibm/__init__.py
index 450fa366..31896d6e 100644
--- a/diagrams/ibm/__init__.py
+++ b/diagrams/ibm/__init__.py
@@ -10,3 +10,7 @@ class _IBM(Node):
_icon_dir = "resources/ibm"
fontcolor = "#ffffff"
+
+
+class IBM(_IBM):
+ _icon = "ibm.png"
diff --git a/diagrams/k8s/__init__.py b/diagrams/k8s/__init__.py
index 6a137b4b..871bd2d3 100644
--- a/diagrams/k8s/__init__.py
+++ b/diagrams/k8s/__init__.py
@@ -10,3 +10,7 @@ class _K8S(Node):
_icon_dir = "resources/k8s"
fontcolor = "#2d3436"
+
+
+class K8S(_K8S):
+ _icon = "k8s.png"
diff --git a/diagrams/oci/__init__.py b/diagrams/oci/__init__.py
index 7613b884..8dacc920 100644
--- a/diagrams/oci/__init__.py
+++ b/diagrams/oci/__init__.py
@@ -10,3 +10,7 @@ class _OCI(Node):
_icon_dir = "resources/oci"
fontcolor = "#312D2A"
+
+
+class OCI(_OCI):
+ _icon = "oci.png"
diff --git a/diagrams/onprem/__init__.py b/diagrams/onprem/__init__.py
index 73d3e1fb..232c0630 100644
--- a/diagrams/onprem/__init__.py
+++ b/diagrams/onprem/__init__.py
@@ -10,3 +10,7 @@ class _OnPrem(Node):
_icon_dir = "resources/onprem"
fontcolor = "#ffffff"
+
+
+class OnPrem(_OnPrem):
+ _icon = "onprem.png"
diff --git a/diagrams/openstack/__init__.py b/diagrams/openstack/__init__.py
index 7b36e1bb..46541103 100644
--- a/diagrams/openstack/__init__.py
+++ b/diagrams/openstack/__init__.py
@@ -10,3 +10,7 @@ class _OpenStack(Node):
_icon_dir = "resources/openstack"
fontcolor = "#ffffff"
+
+
+class OpenStack(_OpenStack):
+ _icon = "openstack.png"
diff --git a/diagrams/outscale/__init__.py b/diagrams/outscale/__init__.py
index 917b4bfe..391ac4dd 100644
--- a/diagrams/outscale/__init__.py
+++ b/diagrams/outscale/__init__.py
@@ -6,3 +6,7 @@ class _Outscale(Node):
_icon_dir = "resources/outscale"
fontcolor = "#ffffff"
+
+
+class Outscale(_Outscale):
+ _icon = "outscale.png"
diff --git a/diagrams/programming/__init__.py b/diagrams/programming/__init__.py
index 7a846e12..504cea66 100644
--- a/diagrams/programming/__init__.py
+++ b/diagrams/programming/__init__.py
@@ -10,3 +10,7 @@ class _Programming(Node):
_icon_dir = "resources/programming"
fontcolor = "#ffffff"
+
+
+class Programming(_Programming):
+ _icon = "programming.png"
diff --git a/diagrams/saas/__init__.py b/diagrams/saas/__init__.py
index ecae1d80..e0acaccd 100644
--- a/diagrams/saas/__init__.py
+++ b/diagrams/saas/__init__.py
@@ -10,3 +10,7 @@ class _Saas(Node):
_icon_dir = "resources/saas"
fontcolor = "#ffffff"
+
+
+class Saas(_Saas):
+ _icon = "saas.png"
diff --git a/docs/nodes/alibabacloud.md b/docs/nodes/alibabacloud.md
index 4edb6f89..a2744737 100644
--- a/docs/nodes/alibabacloud.md
+++ b/docs/nodes/alibabacloud.md
@@ -5,12 +5,6 @@ title: AlibabaCloud
Node classes list of the alibabacloud provider.
-## alibabacloud.alibabacloud
-
-
-
-**diagrams.alibabacloud.alibabacloud.AlibabaCloud**
-
## alibabacloud.analytics
diff --git a/docs/nodes/aws.md b/docs/nodes/aws.md
index 96403d71..aede97f7 100644
--- a/docs/nodes/aws.md
+++ b/docs/nodes/aws.md
@@ -104,12 +104,6 @@ Node classes list of the aws provider.
**diagrams.aws.ar.Sumerian**
-## aws.aws
-
-
-
-**diagrams.aws.aws.AWS**
-
## aws.blockchain
diff --git a/docs/nodes/azure.md b/docs/nodes/azure.md
index f6700e3b..875471e8 100644
--- a/docs/nodes/azure.md
+++ b/docs/nodes/azure.md
@@ -44,12 +44,6 @@ Node classes list of the azure provider.
**diagrams.azure.analytics.SynapseAnalytics**
-## azure.azure
-
-
-
-**diagrams.azure.azure.Azure**
-
## azure.compute
diff --git a/docs/nodes/digitalocean.md b/docs/nodes/digitalocean.md
index 104d42dc..c29118c9 100644
--- a/docs/nodes/digitalocean.md
+++ b/docs/nodes/digitalocean.md
@@ -47,12 +47,6 @@ Node classes list of the digitalocean provider.
**diagrams.digitalocean.database.DbaasStandby**
-## digitalocean.digitalocean
-
-
-
-**diagrams.digitalocean.digitalocean.DigitalOcean**
-
## digitalocean.network
diff --git a/docs/nodes/elastic.md b/docs/nodes/elastic.md
index 8fe653d4..8c1212d4 100644
--- a/docs/nodes/elastic.md
+++ b/docs/nodes/elastic.md
@@ -47,12 +47,6 @@ Node classes list of the elastic provider.
**diagrams.elastic.beats.Winlogbeat**
-## elastic.elastic
-
-
-
-**diagrams.elastic.elastic.Elastic**
-
## elastic.elasticsearch
diff --git a/docs/nodes/firebase.md b/docs/nodes/firebase.md
index b558f919..15c45822 100644
--- a/docs/nodes/firebase.md
+++ b/docs/nodes/firebase.md
@@ -41,12 +41,6 @@ Node classes list of the firebase provider.
**diagrams.firebase.extentions.Extensions**
-## firebase.firebase
-
-
-
-**diagrams.firebase.firebase.Firebase**
-
## firebase.grow
diff --git a/docs/nodes/gcp.md b/docs/nodes/gcp.md
index 95dc4e2e..800489d5 100644
--- a/docs/nodes/gcp.md
+++ b/docs/nodes/gcp.md
@@ -146,12 +146,6 @@ Node classes list of the gcp provider.
**diagrams.gcp.devtools.ToolsForVisualStudio**
-## gcp.gcp
-
-
-
-**diagrams.gcp.gcp.GCP**
-
## gcp.iot
diff --git a/docs/nodes/generic.md b/docs/nodes/generic.md
index 9d9022a8..054164bf 100644
--- a/docs/nodes/generic.md
+++ b/docs/nodes/generic.md
@@ -32,12 +32,6 @@ Node classes list of the generic provider.
**diagrams.generic.device.Tablet**
-## generic.generic
-
-
-
-**diagrams.generic.generic.Generic**
-
## generic.network
diff --git a/docs/nodes/ibm.md b/docs/nodes/ibm.md
index 826ef75a..1bb30682 100644
--- a/docs/nodes/ibm.md
+++ b/docs/nodes/ibm.md
@@ -323,12 +323,6 @@ Node classes list of the ibm provider.
**diagrams.ibm.general.TransformationConnectivity**
-## ibm.ibm
-
-
-
-**diagrams.ibm.ibm.IBM**
-
## ibm.infrastructure
diff --git a/docs/nodes/k8s.md b/docs/nodes/k8s.md
index 94023154..3459d9e0 100644
--- a/docs/nodes/k8s.md
+++ b/docs/nodes/k8s.md
@@ -104,12 +104,6 @@ Node classes list of the k8s provider.
**diagrams.k8s.infra.Node**
-## k8s.k8s
-
-
-
-**diagrams.k8s.k8s.K8S**
-
## k8s.network
diff --git a/docs/nodes/oci.md b/docs/nodes/oci.md
index 806bcf2c..2d0c6fa8 100644
--- a/docs/nodes/oci.md
+++ b/docs/nodes/oci.md
@@ -344,12 +344,6 @@ Node classes list of the oci provider.
**diagrams.oci.network.Vcn**
-## oci.oci
-
-
-
-**diagrams.oci.oci.OCI**
-
## oci.security
diff --git a/docs/nodes/onprem.md b/docs/nodes/onprem.md
index 3a9d9ccb..149ebf90 100644
--- a/docs/nodes/onprem.md
+++ b/docs/nodes/onprem.md
@@ -482,12 +482,6 @@ Node classes list of the onprem provider.
**diagrams.onprem.network.Zookeeper**
-## onprem.onprem
-
-
-
-**diagrams.onprem.onprem.OnPrem**
-
## onprem.proxmox
diff --git a/docs/nodes/openstack.md b/docs/nodes/openstack.md
index 6a498d8f..c88727a1 100644
--- a/docs/nodes/openstack.md
+++ b/docs/nodes/openstack.md
@@ -119,12 +119,6 @@ Node classes list of the openstack provider.
**diagrams.openstack.nfv.Tacker**
-## openstack.openstack
-
-
-
-**diagrams.openstack.openstack.OpenStack**
-
## openstack.optimization
diff --git a/docs/nodes/outscale.md b/docs/nodes/outscale.md
index 3655dd07..34a25c16 100644
--- a/docs/nodes/outscale.md
+++ b/docs/nodes/outscale.md
@@ -35,12 +35,6 @@ Node classes list of the outscale provider.
**diagrams.outscale.network.SiteToSiteVpng**
-## outscale.outscale
-
-
-
-**diagrams.outscale.outscale.Outscale**
-
## outscale.security
diff --git a/docs/nodes/saas.md b/docs/nodes/saas.md
index 29f65eb8..68bdeea9 100644
--- a/docs/nodes/saas.md
+++ b/docs/nodes/saas.md
@@ -119,12 +119,6 @@ Node classes list of the saas provider.
**diagrams.saas.recommendation.Recombee**
-## saas.saas
-
-
-
-**diagrams.saas.saas.Saas**
-
## saas.security
diff --git a/scripts/generate.py b/scripts/generate.py
index 8d8973b2..299f3941 100644
--- a/scripts/generate.py
+++ b/scripts/generate.py
@@ -89,8 +89,10 @@ def generate(pvd: str) -> None:
pngs = list(filter(lambda f: f.endswith(".png"), files))
paths = list(filter(lambda f: "rounded" not in f, pngs))
- # Build the provider itself.
+ # Skip the top-root directory.
typ = os.path.basename(root)
+ if typ == pvd:
+ continue
resource_root = os.path.relpath(root, base)
classes = gen_classes(pvd, typ, paths)