Hi @cybor09,
Thanks for reaching out to us. You can achieve such grouping by simply registering your plugins in a regular way (please find a code snippet below). It's a default behavior that organizes all your plugins under a folder named after your plugin folder.
Let me know if you have any further questions.
Cheers,
Ilia

*.pyp file content:
import c4d, os
from c4d import gui
PLUGIN1_ID = 999121031
PLUGIN2_ID = 999121032
PLUGIN3_ID = 999121033
class PC_12103_1(c4d.plugins.CommandData):
def Execute(self, doc):
print("Execute the 1st command")
return True
class PC_12103_2(c4d.plugins.CommandData):
def Execute(self, doc):
print("Execute the 2nd command")
return True
class PC_12103_3(c4d.plugins.CommandData):
def Execute(self, doc):
print("Execute the 3rd command")
return True
def loadIconBMP(iconName: str) -> c4d.bitmaps.BaseBitmap:
directory, _ = os.path.split(__file__)
fn = os.path.join(directory, "res", iconName)
# Creates a BaseBitmap
bmp = c4d.bitmaps.BaseBitmap()
if bmp is None:
raise MemoryError("Failed to create a BaseBitmap.")
# Init the BaseBitmap with the icon
if bmp.InitWith(fn)[0] != c4d.IMAGERESULT_OK:
raise MemoryError("Failed to initialize the BaseBitmap.")
return bmp
if __name__ == "__main__":
c4d.plugins.RegisterCommandPlugin(PLUGIN1_ID, "1st Cmd", 0, loadIconBMP("icon1.tif"), "", PC_12103_1())
c4d.plugins.RegisterCommandPlugin(PLUGIN2_ID, "2nd Cmd", 0, loadIconBMP("icon2.png"), "", PC_12103_2())
c4d.plugins.RegisterCommandPlugin(PLUGIN3_ID, "3rd Cmd", 0, loadIconBMP("icon3.png"), "", PC_12103_3())
Plugin folder structure:
