git.lucas.co / hou-control
git clone https://git.lucas.co/hou-control.git

commitfaca7cc9297cc4af995f106d6527a3b0bb5e0ab2
parent124c49e5e3
authorLucas Galante <lsgalante12@gmail.com>
date2026-02-08 20:33
housekeeping: delete stinky old files

 desktop/Build copy.desk                      |  59 ---
 python3.11libs/hclib/__init__.py             |  14 -
 python3.11libs/hclib/core/__init__.py        |  19 -
 python3.11libs/hclib/core/hccam.py           | 206 ----------
 python3.11libs/hclib/core/hcdefaultcam.py    |  24 --
 python3.11libs/hclib/core/hcgeo.py           |  18 -
 python3.11libs/hclib/core/hcglobal.py        | 246 ------------
 python3.11libs/hclib/core/hcnetworkeditor.py | 149 -------
 python3.11libs/hclib/core/hcpane.py          | 119 ------
 python3.11libs/hclib/core/hcpathtab.py       |  41 --
 python3.11libs/hclib/core/hcsceneviewer.py   | 264 -------------
 python3.11libs/hclib/core/hctab.py           |  59 ---
 python3.11libs/hclib/core/hcviewport.py      |  15 -
 python3.11libs/hclib/ui/__init__.py          |   0
 python3.11libs/hclib/ui/hcfunctionpanel.py   | 251 ------------
 python3.11libs/hclib/ui/hcnewtabpanel.py     | 104 -----
 python3.11libs/hclib/ui/hcpanel.py           | 221 -----------
 python3.11libs/hclib/ui/hcresizepanel.py     |  44 ---
 python3.11libs/hclib/ui/hcstatuspanel.py     |  69 ----
 python3.11libs/hclib/ui/hcvisualizerpanel.py | 131 -------
 python3.11libs/hclib/ui/hcwidgets.py         |  18 -
 python3.11libs/hclib/utils/__init__.py       |   0
 python3.11libs/hclib/utils/hcbindings.py     | 264 -------------
 python3.11libs/hclib/utils/hclayouts.py      |  85 ----
 python3.11libs/hclib/utils/hclistener.py     | 107 -----
 python3.11libs/hclib/utils/hcmenuutils.py    |  28 --
 python3.11libs/hclib/utils/hcprinter.py      |  24 --
 python3.11libs/hclib/utils/hcradialutils.py  | 183 ---------
 python3.11libs/hclib/utils/hcutils.py        |   0
 scripts/beforescenesave.py                   |  23 --
 scripts/diffuse.py                           |  38 --
 scripts/generate_menu.py                     |  18 -
 scripts/morpho_combine_module.py             |  12 -
 scripts/morpho_combine_oninputchanged.py     |  39 --
 scripts/morpho_composite_module.py           |  70 ----
 scripts/morpho_develop_module.py             |   7 -
 scripts/morpho_panel_module.py               | 528 -------------------------
 scripts/morpho_ramp_module.py                | 113 ------
 scripts/source_created.py                    |   8 -
 scripts/source_module.py                     | 564 ---------------------------
 viewer_states/keycam_lop.py                  |   4 -
 viewer_states/keycam_settings                |  20 -
 42 files changed, 4206 deletions(-)

diff --git a/desktop/Build copy.desk b/desktop/Build copy.desk
deleted file mode 100755
index bf5fe6d..0000000
--- a/desktop/Build copy.desk	
+++ /dev/null
@@ -1,59 +0,0 @@
-fullscreen   -1
-playbarshown 1
-playbar      -1
-shelf        -1
-menubar      -1
-statusbar    -1
-radial menu set main
-root {
-    split 0.5 H {
-        split 0.299034 V {
-            tabs 0 1 {
-                pane panetab4 -a 1 -l 10 -H /obj/ -T OBJ -m sceneview
-                pane copy_of_panetab6_1 -a 1 -l 10 -H /img/ -T IMG -m imageview
-            }
-            tabs 0 1 {
-                pane panetab2 -a 1 -l 10 -H /obj/ -T OBJ -m details
-            }
-        }
-        split 0.658706 V {
-            tabs 0 1 {
-                pane panetab3 -a 1 -l 10 -H /obj/ -T OBJ -m parmeditor
-                pane panetab5 -a 0 -l 0 -H /obj/ -T OBJ -m python
-            }
-            tabs 0 1 {
-                pane panetab1 -a 0 -l 0 -H /obj/ -T OBJ -m neteditor
-            }
-        }
-    }
-}
-shelfdock -o 0 -l small_icon -G 0.50 add my_shelf_set
-viewerstow -x stow -b stow -l stow -m hide -c hide -d open ${DESKNAME}.panetab4.world
-vieweroption -a 0 ${DESKNAME}.panetab4.world
-viewlayout -s 2 ${DESKNAME}.panetab4.world
-viewtype -t ortho_right ${DESKNAME}.panetab4.world.`vpname("${DESKNAME}.panetab4.world",4)`
-viewtype -t ortho_front ${DESKNAME}.panetab4.world.`vpname("${DESKNAME}.panetab4.world",3)`
-viewtype -t ortho_top ${DESKNAME}.panetab4.world.`vpname("${DESKNAME}.panetab4.world",1)`
-viewtype -t perspective ${DESKNAME}.panetab4.world.`vpname("${DESKNAME}.panetab4.world",2)`
-geospreadsheet -c 0 -l horizontal -s 0.5 -m none -f 0 panetab2
-scenegraphtree -S 0.25 -m 2 -p "/collections /lights" -c  -i  -o  -x 1 -s 1 -M 0 -C primtype,childcount,kind,populated,loaded,activation,visibility,solo,selectability  panetab2
-parmeditor -T 0.25 -w 0 panetab3
-networkeditor -p '{\n	"backgroundimagebrightness":"1.0",\n	"gridmode":"2",\n	"showcopsmenu":"1",\n	"taskgraphcollapsemode":"Off",\n	"showtasksmenu":"1",\n	"useworkitemcolorattribute":"1",\n	"typesidebarsplit":"0.25",\n	"showmenu":"1",\n	"gridxstep":"8.0",\n	"treesplit":"0.25",\n	"showparmdialogmax":"1",\n	"perfstatname":"Time",\n	"palettemode":"0",\n	"taskgraphsortdirection":"0",\n	"showchilddep":"1",\n	"backgroundimageediting":"0",\n	"showtaskgraphperf":"0",\n	"showgrouplist":"0",\n	"showperfstats":"1",\n	"showparmdialog":"0",\n	"overviewmode":"2",\n	"showdep":"0",\n	"palettecolors":"",\n	"showspareinputdep":"1",\n	"workitemcolorattribute":"",\n	"palettesize":"300 300",\n	"showtypesidebar":"0",\n	"showtree":"0",\n	"overviewbounds":"0.000000 0.000000 440.700000 285.900000",\n	"taskgraphperfstatname":"Cook Time",\n	"gridystep":"6.0",\n	"taskgraphsortcriteria":"Automatic",\n	"workitemattrtocollapseby":"",\n	"grouplistsplit":"0.75"\n}\n' panetab1
-netcolumns -c display,xray,select,origin,capture,bone -n OBJ panetab1
-netcolumns -c display,render,template,selectabletemplate,highlight,unload,bypass,lock -n SOP panetab1
-netcolumns -c delscript,comment -n CHOPNET panetab1
-netcolumns -c display,export,audio,bypass,lock -n CHOP panetab1
-netcolumns -c startrender,bypass,lock -n ROP panetab1
-netcolumns -c delscript,comment -n SHOP panetab1
-netcolumns -c display,render,template,bypass -n COP2 panetab1
-netcolumns -c delscript,comment -n IMG panetab1
-netcolumns -c delscript,comment,input -n VOP panetab1
-netcolumns -c delscript,comment -n VOPNET panetab1
-netcolumns -c delscript,comment -n DOP panetab1
-netcolumns -c delscript,comment -n TOP panetab1
-netcolumns -c delscript,comment -n TOPNET panetab1
-netcolumns -c display,bypass,delscript,comment,input -n LOP panetab1
-netcolumns -c display,export,template,selectabletemplate,bypass -n COP panetab1
-netcolumns -c delscript,comment -n MGR panetab1
-netcolumns -c delscript,comment -n DIR panetab1
-netcolumns -c delscript,comment -n DATA panetab1
diff --git a/python3.11libs/hclib/__init__.py b/python3.11libs/hclib/__init__.py
deleted file mode 100644
index fd164ae..0000000
--- a/python3.11libs/hclib/__init__.py
+++ /dev/null
@@ -1,14 +0,0 @@
-from .core import HCCam, HCGeo, HCGlobal, HCNetworkEditor, HCPane, HCSceneViewer, HCTab
-from .utils import hcbindings, hcradialutils
-
-__all__ = [
-    "HCCam",
-    "HCGeo",
-    "HCGlobal",
-    "HCNetworkEditor",
-    "HCPane",
-    "HCUtils",
-    "HCSceneViewer",
-    "hcbindings",
-    "hcradialutils"
-]
diff --git a/python3.11libs/hclib/core/__init__.py b/python3.11libs/hclib/core/__init__.py
deleted file mode 100644
index d8e8f2a..0000000
--- a/python3.11libs/hclib/core/__init__.py
+++ /dev/null
@@ -1,19 +0,0 @@
-from .hccam import HCCam
-from .hcgeo import HCGeo
-from .hcglobal import HCGlobal
-from .hcnetworkeditor import HCNetworkEditor
-from .hcpane import HCPane
-from .hcsceneviewer import HCSceneViewer
-from .hctab import HCTab
-# from .hcviewport import HCViewport
-
-__all__ = [
-    'HCCam',
-    'HCGeo',
-    'HCGlobal',
-    'HCNetworkEditor',
-    'HCPane',
-    'HCSceneViewer',
-    'HCTab',
-    # 'HCViewport'
-]
diff --git a/python3.11libs/hclib/core/hccam.py b/python3.11libs/hclib/core/hccam.py
deleted file mode 100644
index cf48cbc..0000000
--- a/python3.11libs/hclib/core/hccam.py
+++ /dev/null
@@ -1,206 +0,0 @@
-import hou
-from .hcgeo import HCGeo
-from .hcsceneviewer import HCSceneViewer
-
-
-class HCCam:
-    def __init__(self, cam, viewer):
-        self.cam = cam
-        self.viewer = viewer
-        self.hcviewer = HCSceneViewer(viewer)
-        self.parms = Parms(cam)
-        self.fitAspectRatio()
-        self.lock()
-        self.reset()
-
-    def center(self):
-        centroid = self.hcviewer.hcgeo().centroid()
-        self.parms.t = hou.Vector3(centroid)
-        self.parms.p = hou.Vector3(centroid)
-
-    def fitAspectRatio(self):
-        self.cam.parm('resx').set(1000)
-        self.cam.parm('resy').set(1000)
-        ratio = self.viewport().size()[2] / self.viewport().size()[3]
-        self.cam.parm('aspect').set(ratio)
-
-    def frame(self):
-        centroid = self.hcviewer.hcgeo().centroid()
-        self.parms.t = hou.Vector3(centroid)
-        self.parms.p = hou.Vector3(centroid)
-        # self.parms.ow = 10
-        self.setZoom(10)
-
-    def home(self):
-        centroid = self.hcviewer.hcgeo().centroid()
-        self.parms.t = centroid
-        self.parms.p = centroid
-        # self.parms.ow = 10
-        # self.setZoom(6)
-
-    def lock(self):
-        viewport = self.viewport()
-        viewport.setCamera(self.cam)
-        viewport.lockCameraToView(1)
-
-    def movePivot(self):
-        # If origin
-        if self.parms.target == 0:
-            self.parms.t = [0, 0, self.parms.zoom]
-            self.parms.r = [45, 45, 0]
-            self.parms.p = [0, 0, self.parms.zoom * -1]
-            self.parms.ow = 10
-
-    def reset(self):
-        self.parms.t = hou.Vector3(0, 0, 2)
-        self.parms.r = hou.Vector3(0, 0, 0)
-        self.parms.p = hou.Vector3(0, 0, 0)
-        self.parms.zoom = 10
-        self.parms.ow = 10
-        self.parms.localx = hou.Vector3(1, 0, 0)
-        self.parms.localy = hou.Vector3(0, 1, 0)
-        self.parms.localz = hou.Vector3(0, 0, 1)
-        self.parms.globalx = hou.Vector3(1, 0, 0)
-        self.parms.globaly = hou.Vector3(0, 1, 0)
-        self.parms.globalz = hou.Vector3(0, 0, 1)
-        self.parms.deltat = 1
-        self.parms.deltar = 15
-        self.parms.deltazoom = 1
-
-    def rotate(self, dir):
-        axismap = {
-            'up': self.parms.localx,
-            'down': self.parms.localx,
-            'left': self.parms.globaly,
-            'right': self.parms.globaly,
-        }
-        dirmap = {'up': 1, 'down': -1, 'left': -1, 'right': 1}
-        deltamap = {
-            'up': hou.Vector3(self.parms.deltar, 0, 0),
-            'down': hou.Vector3(self.parms.deltar, 0, 0),
-            'left': hou.Vector3(0, self.parms.deltar, 0),
-            'right': hou.Vector3(0, self.parms.deltar, 0),
-        }
-        self.parms.r += deltamap[dir] * dirmap[dir]
-        m = hou.hmath.buildRotateAboutAxis(axismap[dir], self.parms.deltar * dirmap[dir])
-        self.parms.t -= self.parms.p
-        self.parms.t *= m
-        self.parms.t += self.parms.p
-        self.parms.localx *= m
-        self.parms.localy *= m
-        self.parms.localz *= m
-
-    def setView(self):
-        viewmap = {
-            'top': hou.Vector3(270, 0, 0),
-            'bottom': hou.Vector3(90, 0, 0),
-            'front': hou.Vector3(0, 180, 0),
-            'back': hou.Vector3(0, 0, 0),
-            'right': hou.Vector3(0, 90, 0),
-            'left': hou.Vector3(0, 270, 0)
-        }
-        self.hccam.r = viewmap[self.parms.view]
-
-    def setZoom(self, amt):
-        move = self.parms.localz * amt
-        self.parms.t += move
-
-    def translate(self, dir):
-        axismap = {
-            'up': self.parms.localy,
-            'down': -self.parms.localy,
-            'left': -self.parms.localx,
-            'right': self.parms.localx,
-        }
-        move = axismap[dir] * self.parms.deltat
-        self.parms.t += move
-        self.parms.p += move
-
-    def toggleProjection(self):
-        projectionmap = {
-            'perspective': 'ortho',
-            'ortho': 'perspective'
-        }
-        parm = self.cam.parm('projection')
-        parm.set(projectionmap[parm.evalAsString()])
-
-    def unlock(self):
-        self.viewport().lockCameraToView(0)
-
-    def viewport(self):
-        return self.hcviewer.viewports()[3]
-
-    def zoom(self, dir):
-        dirmap = {'out': 1, 'in': -1}
-        move = self.parms.localz * self.parms.deltazoom * dirmap[dir]
-        self.parms.t += move
-
-    def zoomOrtho(self, dir):
-        dirmap = {'out': 1, 'in': -1}
-        self.parms.ow += self.parms.deltazoom * dirmap[dir]
-
-
-class Parms:
-    def __init__(self, cam):
-        self.cam = cam
-        self._t = hou.Vector3(0, 0, 0)
-        self._r = hou.Vector3(0, 0, 0)
-        self._p = hou.Vector3(0, 0, 0)
-        self._ow = 10
-        self._projection = 'perspective'
-        self.localx = hou.Vector3(1, 0, 0)
-        self.localy = hou.Vector3(0, 1, 0)
-        self.localz = hou.Vector3(0, 0, 1)
-        self.globalx = hou.Vector3(1, 0, 0)
-        self.globaly = hou.Vector3(0, 1, 0)
-        self.globalz = hou.Vector3(0, 0, 1)
-        self.zoom = 10
-        self.deltat = 1
-        self.deltar = 15
-        self.deltazoom = 1
-        self.target = None
-
-    @property
-    def t(self):
-        return self._t
-
-    @t.setter
-    def t(self, val):
-        self._t = val
-        self.cam.parmTuple('t').set(val)
-
-    @property
-    def r(self):
-        return self._r
-
-    @r.setter
-    def r(self, val):
-        self._r = val
-        self.cam.parmTuple('r').set(val)
-
-    @property
-    def p(self):
-        return self._p
-
-    @p.setter
-    def p(self, val):
-        self._p = val
-        self.cam.parmTuple('p').set(val)
-
-    @property
-    def ow(self):
-        return self._ow
-
-    @ow.setter
-    def ow(self, val):
-        self._ow = val
-        self.cam.parm('orthowidth').set(val)
-
-    @property
-    def projection(self):
-        return self._projection
-
-    @projection.setter
-    def projection(self, val):
-        self._projection = val
-        self.cam.parm('projection').set(val)
diff --git a/python3.11libs/hclib/core/hcdefaultcam.py b/python3.11libs/hclib/core/hcdefaultcam.py
deleted file mode 100644
index 36dc445..0000000
--- a/python3.11libs/hclib/core/hcdefaultcam.py
+++ /dev/null
@@ -1,24 +0,0 @@
-import hou
-
-class HCDefaultCam:
-    def __init__(self, defaultcam):
-        self.cam = defaultcam
-
-    def frame(self):
-        for viewport in self.viewports():
-            cam = viewport.camera()
-            # Is cam default or node.
-            if not cam:
-                viewport.frameAll()
-
-    def nextView(self):
-        return
-
-    def rotate(self, key):
-        return
-
-    def translate(self, key):
-        return
-
-    def zoom(self):
-        return
diff --git a/python3.11libs/hclib/core/hcgeo.py b/python3.11libs/hclib/core/hcgeo.py
deleted file mode 100644
index 14da33b..0000000
--- a/python3.11libs/hclib/core/hcgeo.py
+++ /dev/null
@@ -1,18 +0,0 @@
-import hou
-
-class HCGeo:
-    def __init__(self, geo):
-        self.geo = geo
-
-    def bbox(self):
-        return geo.boundingBox()
-
-    def centroid(self):
-        geo_out = hou.Geometry()
-        extract_centroid = hou.sopNodeTypeCategory().nodeVerb('extractcentroid')
-        extract_centroid.setParms(
-            {'partitiontype': 2}
-        )
-        extract_centroid.execute(geo_out, [self.geo])
-        pt = geo_out.point(0)
-        return pt.position()
diff --git a/python3.11libs/hclib/core/hcglobal.py b/python3.11libs/hclib/core/hcglobal.py
deleted file mode 100644
index 6836b9b..0000000
--- a/python3.11libs/hclib/core/hcglobal.py
+++ /dev/null
@@ -1,246 +0,0 @@
-import hou
-
-
-class HCGlobal:
-    def __init__(self):
-        return
-
-    """
-    Context
-    """
-
-    def node(self):
-        return self.tab().currentNode()
-
-    """
-    Layout
-    """
-
-    def clearLayout(self):
-        tabs = self.tabs()
-        for tab in tabs:
-            if tab != tabs[0]:
-                tab.close()
-
-    def desktop(self):
-        return hou.ui.curDesktop()
-
-    def hcPane(self):
-        from .hcpane import HCPane
-
-        return HCPane(self.pane())
-
-    def hcTab(self):
-        from .hctab import HCTab
-
-        return HCTab(self.pane())
-
-    def layout(self):
-        lefts = []
-        tops = []
-        for pane in self.panes():
-            geo = pane.qtScreenGeometry()
-            lefts.append(geo.left())
-            tops.append(geo.top())
-        print(lefts)
-        print(tops)
-
-    def networkEditors(self):
-        editors = []
-        for tab in self.tabs():
-            if tab.type() == hou.paneTabType.NetworkEditor:
-                editors.append(tab)
-        return editors
-
-    def pane(self):
-        return hou.ui.paneUnderCursor()
-
-    def panes(self):
-        return self.desktop().panes()
-
-    def sceneViewers(self):
-        viewers = []
-        for tab in self.tabs():
-            if tab.type() == hou.paneTabType.SceneViewer:
-                viewers.append(tab)
-        return viewers
-
-    ## tab and tabs functions intentionally do not use the hou.ui.paneTabUnderCursor method
-    def tab(self):
-        return self.pane().currentTab()
-
-    def tabs(self):
-        return self.pane().tabs()
-
-    def viewports(self):
-        viewports = []
-        viewers = self.sceneViewers
-        for viewer in viewers:
-            for viewport in viewer.viewports():
-                viewports.append(viewport)
-        return viewports
-
-    """
-    Menus
-    """
-
-    def colorEditor(self):
-        hou.ui.selectColor()
-
-    def floatingParameterEditor(self):
-        tab = self.tab()
-        if tab.type() == hou.paneTabType.NetworkEditor:
-            hou.ui.showFloatingParameterEditor(self.node())
-        else:
-            hou.ui.setStatusMessage("Not a network editor", hou.severityType.Error)
-
-    def openFile(self):
-        hou.ui.selectFile()
-
-    """
-    Utils
-    """
-
-    def autosave(self):
-        return hou.getPreference('autoSave')
-
-    def keycam(self):
-        msgmap = {
-            "Object": "Entered keycam in an obj/object context",
-            "Sop": "Entered keycam in a sop/geometry context",
-            "Lop": "Entered keycam in a lop context"
-        }
-        viewer = self.sceneViewers()[0]
-        category = viewer.pwd().childTypeCategory().name()
-        if category in msgmap:
-            viewer.setCurrentState('keycam')
-            hou.ui.setStatusMessage(msgmap[category])
-        else:
-            hou.ui.setStatusMessage("Keycam is only available in obj, sop and lop contexts",
-                hou.severityType.Error)
-
-    def projectPath(self):
-        return hou.hipFile.path()
-
-    def reloadColorSchemes(self):
-        hou.ui.reloadColorScheme()
-        hou.ui.reloadViewportColorSchemes()
-
-    def reloadHotkeys(self):
-        from ..utils.hcbindings import load
-
-        load()
-
-    def reloadKeycam(self):
-        hou.ui.reloadViewerState('keycam')
-
-    def removeEventLoopCallbacks(self):
-        callbacks = hou.ui.eventLoopCallbacks()
-        for callback in callbacks:
-            hou.ui.removeEventLoopCallback(callback)
-
-    # def restartHoudini(self):
-        # import os
-        # import subprocess
-        # executable = sys.argv[0]
-        # executable = os.environ.get("HFS") + "/bin/houdini"
-        # subprocess.Popen([executable])
-        # hou.exit()
-        # return
-
-    def setUpdateModeAuto(self):
-        hou.setUpdateMode(hou.updateMode.AutoUpdate)
-
-    def setUpdateModeManual(self):
-        hou.setUpdateMode(hou.updateMode.Manual)
-
-    def triggerUpdate(self):
-        hou.ui.triggerUpdate()
-
-    def toggleAutoSave(self):
-        map = {'0': '1', '1': '0'}
-        hou.setPreference('autoSave', map[hou.getPreference('autoSave')])
-
-    def updateMainMenuBar(self):
-        hou.ui.updateMainMenuBar()
-
-    """
-    Visibility
-    """
-
-    def hideShelf(self):
-        self.desktop().shelfDock().show(0)
-
-    def showShelf(self):
-        self.shelfDock().show(1)
-
-    def toggleMainMenuBar(self):
-        map = {'1': '0', '0': '1'}
-        hou.setPreference('showmenu.val', map[hou.getPreference('showmenu.val')])
-
-    def toggleMenus(self):
-        visible = 0
-        panes = self.panes()
-        tabs = self.tabs()
-        editors = self.networkEditors()
-        viewers = self.sceneViewers()
-        ## Main menu
-        if hou.getPreference('showmenu.val') == '1':
-            visible = 1
-        ## Network editor menu
-        elif any(editor.getPref('showmenu') == '1' for editor in editors):
-            visible = 1
-        ## Network controls
-        elif any(tab.isShowingNetworkControls() for tab in tabs):
-            visible = 1
-        ## Scene viewer toolbars (top, right, left)
-        elif any(viewer.isShowingOperationBar() for viewer in viewers):
-            visible = 1
-        elif any(viewer.isShowingDisplayOptionsBar() for viewer in viewers):
-            visible = 1
-        elif any(viewer.isShowingSelectionBar() for viewer in viewers):
-            visible = 1
-        ## Tabs
-        elif any(pane.isShowingPaneTabs() for pane in panes):
-            visible = 1
-
-        ## Set state
-        hou.setPreference('showmenu.val', str(not visible))
-        for editor in editors:
-            editor.setPref('showmenu', str(not visible))
-        for tab in tabs:
-            tab.showNetworkControls(not visible)
-        for pane in panes:
-            pane.showPaneTabs(not visible)
-        for viewer in viewers:
-            viewer.showOperationBar(not visible)
-            viewer.showDisplayOptionsBar(not visible)
-            viewer.showSelectionBar(not visible)
-        ## Needs to be called twice for some reason
-        hou.ui.setHideAllMinimizedStowbars(visible)
-        hou.ui.setHideAllMinimizedStowbars(visible)
-
-    def toggleNetworkControls(self):
-        visible = 0
-        tabs = self.tabs()
-        for tab in tabs:
-            if tab.isShowingNetworkControls():
-                visible = 1
-        for tab in tabs:
-            tab.showNetworkControls(not visible)
-
-    def toggleStowbars(self):
-        if hou.ui.hideAllMinimizedStowbars():
-            hou.ui.setHideAllMinimizedStowbars(False)
-        else:
-            hou.ui.setHideAllMinimizedStowbars(True)
-            hou.ui.setHideAllMinimizedStowbars(True)
-
-    def toggleTabs(self):
-        visible = 0
-        panes = self.panes()
-        for pane in panes:
-            if pane.isShowingPaneTabs():
-                visible = 1
-        for pane in panes:
-            pane.showPaneTabs(not visible)
diff --git a/python3.11libs/hclib/core/hcnetworkeditor.py b/python3.11libs/hclib/core/hcnetworkeditor.py
deleted file mode 100644
index b2d53af..0000000
--- a/python3.11libs/hclib/core/hcnetworkeditor.py
+++ /dev/null
@@ -1,149 +0,0 @@
-import hou, math, types
-from .hcpathtab import HCPathTab
-
-
-class HCNetworkEditor(HCPathTab):
-    def __init__(self, tab):
-        self.tab = tab
-        self.editor = tab
-        self.deltat = 2
-
-    def addDot(self):
-        if len(self.selectedNodes()) == 1:
-            dot = self.context().createNetworkDot()
-            dot.setInput(node)
-            dot.setPosition(self.cursorPos())
-
-    def addNetworkBox(self):
-        networkbox = self.context().createNetworkBox()
-        networkbox.setPosition(self.currentNode().position())
-
-    def addStickyNote(self):
-        stickynote = self.context().createStickyNote()
-        p = self.cursorPos()
-        stickynote.setPosition(p)
-        stickynote.setColor(hou.Color(0.71, 0.78, 1.0))
-
-    def arrangeNodes(self):
-        # self.context().layoutChildren(horizontal_spacing=5, vertical_spacing=
-        return
-
-    def bounds(self):
-        return self.editor.visibleBounds()
-
-    def cursorPos(self):
-        return self.editor.cursorPosition()
-
-    def deselectAll(self):
-        self.selectedNodes().setSelected(False)
-
-    def frameAll(self):
-        self.editor.requestZoomReset()
-
-    def quantizeNodes(self):
-        return
-
-    def renameNode(self):
-        node = self.currentNode()
-        name = hou.ui.readInput("Rename_node", buttons=("Yes", "No"))
-        if name[0] == 0:
-            node.setName(name[1])
-
-    def screenSize(self):
-        return self.editor.screenBounds().size()
-
-    def setBounds(self, bounds):
-        self.editor.setVisibleBounds(bounds)
-
-    def showPathMessage(self):
-        self.editor.flashMessage(image=None, message=self.path(), duration=1)
-
-    def showRadialMenu(self):
-        from ..utils.hcradialutils import editorRadialMain
-        menu = editorRadialMain()
-        print(menu)
-        self.editor.displayRadialMenu("hc_editor_radial_menu")
-
-    def size(self):
-        return self.bounds().size()
-
-    def toggleDimUnusedNodes(self):
-        map = {
-            '0': '1',
-            '1': '0'
-        }
-        mode = self.editor.getPref('dimunusednodes')
-        self.editor.setPref('dimunusednodes', map[mode])
-
-    def toggleGridMode(self):
-        map = {
-            '0': '1',
-            '1': '2',
-            '2': '0'
-        }
-        mode = self.editor.getPref('gridmode')
-        self.editor.setPref('gridmode', map[mode])
-
-    def toggleMenu(self):
-        map = {
-            '0': '1',
-            '1': '0'
-        }
-        mode = self.editor.getPref('showmenu')
-        self.editor.setPref('showmenu', map[mode])
-
-    def toggleUpdateMode(self):
-        map = {
-            'updateMode.Manual': hou.updateMode.AutoUpdate,
-            'updateMode.AutoUpdate': hou.updateMode.Manual
-        }
-        mode = str(hou.updateModeSetting())
-        hou.setUpdateMode(map[mode])
-
-    def translateNodes(self, direction):
-        idxmap = {
-            'up': 1,
-            'down': 1,
-            'left': 0,
-            'right': 0
-        }
-        rectifiermap = {
-            'up': hou.Vector2(0, 0.85),
-            'down': hou.Vector2(0, -0.85),
-            'left': hou.Vector2(0.-0.85, 0),
-            'right': hou.Vector2(0.85, 0)
-        }
-        for node in self.selectedNodes():
-            idx = idxmap[direction]
-            p = node.position() + rectifiermap[direction]
-            val = p[idx]
-            if val%1 <= 0.5:
-                val = math.floor(val)
-            else:
-                val = math.ceil(val)
-            p[idx] = val
-            node.setPosition(p)
-
-    def translateView(self, direction):
-        xformmap = {
-            'up': hou.Vector2(0, self.deltat * self.zoomLevel()),
-            'down': hou.Vector2(0, self.deltat * self.zoomLevel() * -1),
-            'left': hou.Vector2(self.deltat * self.zoomLevel() * -1, 0),
-            'right': hou.Vector2(self.deltat * self.zoomLevel(), 0)
-        }
-        bounds = self.bounds()
-        bounds.translate(xformmap[direction])
-        self.setBounds(bounds)
-
-    def zoom(self, direction):
-        scalemap = {
-            'in': (0.75, 0.75),
-            'out': (1.25, 1.25)
-        }
-        bounds = self.bounds()
-        bounds.scale(scalemap[direction])
-        self.setBounds(bounds)
-
-    def zoomLevel(self):
-        zoomlevel = self.size()[0] / self.size()[0]
-        return zoomlevel
diff --git a/python3.11libs/hclib/core/hcpane.py b/python3.11libs/hclib/core/hcpane.py
deleted file mode 100644
index 2c0a93a..0000000
--- a/python3.11libs/hclib/core/hcpane.py
+++ /dev/null
@@ -1,119 +0,0 @@
-import hou
-from .hcglobal import HCGlobal
-
-
-class HCPane:
-
-    def __init__(self, pane):
-        self.hcglobal = HCGlobal()
-        self.pane = pane
-
-    """
-    Pane
-    """
-
-    def close(self):
-        for tab in self.tabs():
-            tab.close()
-
-    def isMaximized(self):
-        return self.pane.isMaximized()
-
-    def only(self):
-        tabs = self.hcglobal.tabs()
-        tabs.remove(self.tab())
-        for tab in tabs:
-            tab.close()
-
-    def qtScreenGeometry(self):
-        return self.pane.qtScreenGeometry()
-
-    def setIsMaximized(self, bool):
-        self.pane.setIsMaximized(bool)
-
-    def toggleMaximize(self):
-        self.setIsMaximized(not self.isMaximized())
-
-    """
-    Split
-    """
-
-    def contract(self):
-        fraction = round(self.splitFraction(), 3) + 0.1
-        self.setSplitFraction(fraction)
-        hou.ui.setStatusMessage("Pane fraction: " + str(fraction))
-
-    def expand(self):
-        fraction = round(self.splitFraction(), 3) - 0.1
-        self.setSplitFraction(fraction)
-        hou.ui.setStatusMessage("Pane fraction: " + str(fraction))
-
-    def isSplitMaximized(self):
-        return self.pane.isSplitMaximized()
-
-    # def resize(self):
-    # import hctl.ui.resizedialog
-    # panel = hctl.ui.resizedialog.resizeWidget(self)
-    # panel.show()
-
-    def setIsSplitMaximized(self, bool):
-        self.pane.setIsSplitMaximized(bool)
-
-    def setRatioHalf(self):
-        self.setSplitFraction(0.5)
-
-    def setRatioQuarter(self):
-        self.setSplitFraction(0.25)
-
-    def setRatioThird(self):
-        self.setSplitFraction(0.333)
-
-    def setSplitFraction(self, fraction):
-        self.pane.setSplitFraction(fraction)
-
-    def splitFraction(self):
-        return self.pane.getSplitFraction()
-
-    def splitHorizontal(self):
-        self.pane.splitHorizontally()
-
-    def splitRotate(self):
-        self.pane.splitRotate()
-
-    def splitSwap(self):
-        self.pane.splitSwap()
-
-    def splitVertical(self):
-        self.pane.splitVertically()
-
-    def toggleSplitMaximized(self):
-        self.setIsSplitMaximized(not self.isSplitMaximized())
-
-    """
-    Tabs
-    """
-
-    def hcTab(self):
-        from .hctab import HCTab
-
-        return HCTab(self.tab())
-
-    def isShowingTabs(self):
-        return self.pane.isShowingPaneTabs()
-
-    # def newTab(self):
-    #     reload(hcnewpanetabmenu)
-    #     newPaneTabMenu = hcnewpanetabmenu.newPaneTabMenu()
-    #     newPaneTabMenu.show()
-
-    def showTabs(self, bool):
-        self.pane.showPaneTabs(bool)
-
-    def tab(self):
-        return self.pane.currentTab()
-
-    def tabs(self):
-        return self.pane.tabs()
-
-    def toggleTabs(self):
-        self.showTabs(not self.isShowingTabs())
diff --git a/python3.11libs/hclib/core/hcpathtab.py b/python3.11libs/hclib/core/hcpathtab.py
deleted file mode 100644
index a1c10e8..0000000
--- a/python3.11libs/hclib/core/hcpathtab.py
+++ /dev/null
@@ -1,41 +0,0 @@
-import hou
-from .hcgeo import HCGeo
-from .hctab import HCTab
-
-class HCPathTab(HCTab):
-    def __init__(self, tab):
-        self.tab = tab
-
-    def context(self):
-        return self.tab.pwd()
-
-    def contextType(self):
-        return self.tab.pwd().type().name()
-
-    def currentNode(self):
-        return self.tab.currentNode()
-
-    def geo(self):
-        map = {
-            'dop': self.tab.currentNode,
-            'lop': None,
-            'obj': self.tab.pwd().children()[0].displayNode,
-            'geo': self.tab.currentNode
-        }
-        node = map[self.contextType()]()
-        return node.geometry()
-
-    def hcgeo(self):
-        return HCGeo(self.geo())
-
-    def nodeType(self):
-        return self.tab.currentNode().type().name()
-
-    def path(self):
-        return self.tab.pwd().path()
-
-    def pwd(self):
-        return self.tab.pwd()
-
-    def selectedNodes(self):
-        return self.tab.pwd().selectedChildren()
diff --git a/python3.11libs/hclib/core/hcsceneviewer.py b/python3.11libs/hclib/core/hcsceneviewer.py
deleted file mode 100644
index b70c38d..0000000
--- a/python3.11libs/hclib/core/hcsceneviewer.py
+++ /dev/null
@@ -1,264 +0,0 @@
-import hou, types
-from .hcpathtab import HCPathTab
-# Layout/viewport IDs
-#
-# DoubleSide:        2 3
-#
-# DoubleStack:       3
-#                    0
-#
-# Quad:              2 3
-#                    1 0
-#
-# QuadBottomSplit:     3
-#                    2 1 0
-#
-# QuadLeftSplit:     2
-#                    1 3
-#                    0
-#
-# TripleBottomSplit:   3
-#                    1   0
-#
-# TripleLeftSplit:   2
-#                    0 3
-#                    1
-#
-# Single:
-# setViewportLayout(layout, single=-1)
-# -1: current viewport (viewportmouse is/was over)
-# 0: top-left quad viewport (default: Top)
-# 1: top-right quad viewport (default: Perspective)
-# 2: bottom-left quad viewport (default: Front)
-# 3: bottom-right quad viewport (default: Right)
-
-class HCSceneViewer(HCPathTab):
-    def __init__(self, tab):
-        self.tab = tab
-        self.viewer = tab
-
-    """
-    Geometry
-    """
-
-    def displaySets(self):
-        displaySets = []
-        for viewport in self.viewports():
-            settings = viewport.settings()
-            displaySet = settings.displaySet(hou.displaySetType.DisplayModel)
-            displaySets.append(displaySet)
-        return(displaySets)
-
-    def toggleLightGeo(self):
-        self.setShowLights(not self.showLights())
-
-    def toggleBackface(self):
-        visible = 0
-        displaySets = self.displaySets()
-        for displaySet in displaySets:
-            if displaySet.isShowingPrimBackfaces():
-                visible = 1
-        for displaySet in displaySets:
-            displaySet.showPrimBackfaces(not visible)
-
-    def togglePointMarkers(self):
-        visible = 0
-        displaySets = self.displaySets()
-        for displaySet in displaySets:
-            if displaySet.isShowingPointMarkers():
-                visible = 1
-        for displaySet in displaySets:
-            displaySet.showPointMarkers(not visible)
-
-    def togglePointNormals(self):
-        visible = 0
-        displaySets = self.displaySets()
-        for displaySet in displaySets:
-            if displaySet.isShowingPointNormals():
-                visible = 1
-        for displaySet in displaySets:
-            displaySet.showPointNormals(not visible)
-
-    def togglePointNumbers(self):
-        visible = 0
-        displaySets = self.displaySets()
-        for displaySet in displaySets:
-            if displaySet.isShowingPointNumbers():
-                visible = 1
-        for displaySet in displaySets:
-            displaySet.showPointNumbers(not visible)
-
-    def togglePrimNormals(self):
-        visible = 0
-        displaySets = self.displaySets()
-        for displaySet in displaySets:
-            if displaySet.isShowingPrimNormals():
-                visible = 1
-            for displaySet in displaySets:
-                displaySet.showPrimNormals(not visible)
-
-    def togglePrimNumbers(self):
-        visible = 0
-        displaySets = self.displaySets()
-        for displaySet in displaySets:
-            if displaySet.isShowingPrimNumbers():
-                visible = 1
-        for displaySet in displaySets:
-            displaySet.showPrimNumbers(not visible)
-
-    def toggleVectors(self):
-        for viewport in self.viewports():
-            viewportSettings = viewport.settings()
-            vector_scale = viewportSettings.vectorScale()
-            if vector_scale == 1:
-                viewportSettings.setVectorScale(0)
-            elif vector_scale == 0:
-                viewportSettings.setVectorScale(1)
-            else:
-                viewportSettings.setVectorScale(1)
-
-    """
-    Grids
-    """
-
-    def toggleGrid(self):
-        refplane = self.referencePlane()
-        refplane.setIsVisible(not refplane.isVisible())
-
-    """
-    Layout
-    """
-
-    def layout(self):
-        return self.viewer.viewportLayout()
-
-    def layouts(self):
-        return (
-            hou.geometryViewportLayout.DoubleSide,
-            hou.geometryViewportLayout.DoubleStack,
-            hou.geometryViewportLayout.Quad,
-            hou.geometryViewportLayout.QuadBottomSplit,
-            hou.geometryViewportLayout.QuadLeftSplit,
-            hou.geometryViewportLayout.TripleBottomSplit,
-            hou.geometryViewportLayout.TripleLeftSplit,
-            hou.geometryViewportLayout.Single,
-        )
-
-    def layoutIndices(self):
-        return (
-            (2, 3),
-            (3, 0),
-            (2, 3, 1, 0),
-            (3, 2, 1, 0),
-            (2, 1, 0, 3),
-            (3, 1, 0),
-            (2, 3, 1),
-            (3),
-        )
-
-    def nextLayout(self):
-        index = self.layouts().index(self.layout())
-        new_index = (index + 1) % len(self.layouts())
-        self.setLayout(self.layouts()[new_index])
-        return
-
-    def setLayout(self, layout):
-        layoutmap = {
-            'DoubleSide': hou.geometryViewportLayout.DoubleSide,
-            'DoubleStack': hou.geometryViewportLayout.DoubleStack,
-            'Quad': hou.geometryViewportLayout.Quad,
-            'QuadBottomSplit': hou.geometryViewportLayout.QuadBottomSplit,
-            'QuadLeftSplit': hou.geometryViewportLayout.QuadLeftSplit,
-            'Single': hou.geometryViewportLayout.Single,
-            'TripleBottomSplit': hou.geometryViewportLayout.TripleBottomSplit,
-            'TripleLeftSplit': hou.geometryViewportLayout.TripleLeftSplit
-        }
-        self.viewer.setViewportLayout(layoutmap[layout])
-
-    """
-    UI
-    """
-
-    def toggleDisplayOptionsToolbar(self):
-        self.viewer.showDisplayOptionsBar(not self.viewer.isShowingDisplayOptionsBar())
-
-    def toggleGroupList(self):
-        self.viewer.setGroupListVisible(not self.viewer.isGroupListVisible())
-
-    def toggleOperationBar(self):
-        self.viewer.showOperationBar(not self.viewer.isShowingOperationBar())
-
-    def toggleSelectionBar(self):
-        self.viewer.showSelectionBar(not self.viewer.isShowingSelectionBar())
-
-    def toggleToolbars(self):
-        state1 = self.viewer.isShowingOperationBar()
-        state2 = self.viewer.isShowingDisplayOptionsBar()
-        state3 = self.viewer.isShowingSelectionBar()
-        if state1 + state2 + state3 > 0:
-            self.viewer.showOperationBar(0)
-            self.viewer.showDisplayOptionsBar(0)
-            self.viewer.showSelectionBar(0)
-        else:
-            self.viewer.showOperationBar(1)
-            self.viewer.showDisplayOptionsBar(1)
-            self.viewer.showSelectionBar(1)
-
-    """
-    Utils
-    """
-
-    def keycam(self):
-        # Contexts:
-        # Chop
-        # ChopNet
-        # Cop
-        # Cop2
-        # CopNet
-        # Data
-        # Director
-        # Dop
-        # Driver
-        # Lop
-        # Manager
-        # Object
-        # Shop
-        # Sop
-        # Top
-        # TopNet
-        # Vop
-        # VopNet
-        contextmap = {
-            "Object": "Entered keycam in an obj context",
-            "Sop": "Entered keycam in a sop context",
-            "Lop": "Entered keycam in a lop context",
-        }
-        context = self.pwd().childTypeCategory().name()
-        if context in contextmap:
-            self.viewer.setCurrentState('keycam')
-            hou.ui.setStatusMessage(contextmap[context])
-        else:
-            hou.ui.setStatusMessage("No obj, sop or lop context", hou.severityType.Error)
-
-    """
-    Viewports
-    """
-
-    def homeAllViewports(self):
-        for viewport in self.viewports():
-            viewport.home()
-
-    def viewport(self):
-        return self.viewer.curViewport()
-
-    def viewports(self):
-        return self.viewer.viewports()
-
-    def frame(self):
-        for viewport in self.viewports():
-            cam = viewport.camera()
-            # Is camera node or default.
-            if not cam:
-                viewport.frameAll()
-            else:
-                viewport.frameAll()
diff --git a/python3.11libs/hclib/core/hctab.py b/python3.11libs/hclib/core/hctab.py
deleted file mode 100644
index 16f9879..0000000
--- a/python3.11libs/hclib/core/hctab.py
+++ /dev/null
@@ -1,59 +0,0 @@
-import hou
-import types
-
-
-class HCTab():
-    def __init__(self, tab):
-        self.tab = tab
-
-    """
-    Controls
-    """
-
-    def toggleNetworkControls(self):
-        if self.tab.hasNetworkControls():
-            self.tab.showNetworkControls(not self.tab.isShowingNetworkControls())
-
-    def togglePin(self):
-        self.tab.setPin(not self.tab.isPin())
-
-    """
-    Tab
-    """
-
-    def close(self):
-        self.tab.close()
-
-    def closeOtherTabs(self):
-        for tab in self.pane().tabs():
-            if tab != self.tab:
-                tab.close()
-
-    def hcPane(self):
-        from .hcpane import HCPane
-        return HCPane(self.pane())
-
-    def setTypeDetailsView(self):
-        self.setType(hou.paneTabType.DetailsView)
-
-    def setTypeNetworkEditor(self):
-        self.setType(hou.paneTabType.NetworkEditor)
-
-    def setTypeParm(self):
-        self.setType(hou.paneTabType.Parm)
-
-    def setTypePythonShell(self):
-        self.setType(hou.paneTabType.PythonShell)
-
-    def setTypeSceneViewer(self):
-        self.setType(hou.paneTabType.SceneViewer)
-
-    def setType(self, type):
-        tab = self.tab.setType(type)
-        return tab
-
-    def pane(self):
-        return self.tab.pane()
-
-    def type(self):
-        return self.tab.type()
diff --git a/python3.11libs/hclib/core/hcviewport.py b/python3.11libs/hclib/core/hcviewport.py
deleted file mode 100644
index 5e79bfd..0000000
--- a/python3.11libs/hclib/core/hcviewport.py
+++ /dev/null
@@ -1,15 +0,0 @@
-import hou
-
-
-class HCViewport():
-    def __init__(self, viewport):
-        self.viewport = viewport
-        return
-
-    def visualizers(self):
-        category = hou.viewportVisualizerCategory.Scene
-        vis_arr = hou.viewportVisualizers.visualizers(category)
-        return vis_arr
-
-    def setType(self, type):
-        self.viewport.changeType(type)
diff --git a/python3.11libs/hclib/ui/__init__.py b/python3.11libs/hclib/ui/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/python3.11libs/hclib/ui/hcfunctionpanel.py b/python3.11libs/hclib/ui/hcfunctionpanel.py
deleted file mode 100644
index 4992493..0000000
--- a/python3.11libs/hclib/ui/hcfunctionpanel.py
+++ /dev/null
@@ -1,251 +0,0 @@
-import hou, inspect, platform
-from PySide6 import QtCore, QtGui, QtWidgets
-from PySide6.QtCore import Qt
-from fuzzyfinder import fuzzyfinder
-from .core.hcglobal import HCGlobal
-from .core.hcpane import HCPane
-from .core.tab import HCTab
-from importlib import reload
-
-
-class HCFunctionPanel(QtWidgets.QDialog):
-    def __init__(self):
-        super(HCFunctionPanel, self).__init__(hou.qt.mainWindow())
-
-        ## WINDOW PARAMETERS
-        self.resize(900, 400)
-        self.setWindowTitle("hcfunctionpanel")
-        self.setWindowFlags(Qt.Tool | Qt.WindowStaysOnTopHint)
-        # Focus the input line AFTER setting window flags
-        self.functionPanel.inputLine.setFocus()
-
-        ## OBJECTS
-        self.hc_global = HCGlobal()
-        self.hc_pane = self.hc_global.hcPane()
-        self.hc_tab = self.hc_global.hcTab()
-        # self.hc_viewport = self.hc_tab.viewport()
-
-        ## PATHS
-        self.project_path = self.hc_global.projectPath()
-        ct = self.project_path.count('/')
-        self.project_path = self.project_path.split('/', ct - 2)[-1]
-        self.network_path = self.hc_tab.pwd()
-
-        ## LAYOUT
-        self.main_layout = QtWidgets.QHBoxLayout()
-        self.function_panel = FunctionPanel(self)
-        self.main_layout.addWidget(self.function_panel)
-        self.setLayout(self.main_layout)
-
-    def closeEvent(self, event):
-        self.setParent(None)
-
-    def lists(self):
-        # Define various arrays for navigating tabs
-        self.tab_names = [tab.name() for tab in self.hc_global.tabs()]
-        self.tab_types = (
-            hou.paneTabType.ApexEditor,
-            hou.paneTabType.CompositorViewer,
-            hou.paneTabType.DetailsView,
-            hou.paneTabType.NetworkEditor,
-            hou.paneTabType.Parm,
-            hou.paneTabType.PythonPanel,
-            hou.paneTabType.PythonShell,
-            hou.paneTabType.SceneViewer,
-            hou.paneTabType.Textport
-        )
-        self.tab_type_names = (
-            "ApexEditor",
-            "CompositorViewer",
-            "DetailsView",
-            "NetworkEditor",
-            "Parm",
-            "PythonPanel",
-            "PythonShell",
-            "SceneViewer",
-            "Textport"
-        )
-        self.tab_labels = []
-        for tab in self.hc_global.tabs():
-            index = self.tab_types.index(tab.type())
-            label = self.tab_type_names[index]
-            self.tab_labels.append(label)
-
-    def nodes(self):
-        self.node = self.hc_tab.currentNode()
-
-
-class FunctionPanel(QtWidgets.QFrame):
-    def __init__(self, owner):
-        super().__init__()
-        self.owner = owner
-        self.function_list = self.FunctionList(owner)
-        self.input_line = self.InputLine(owner)
-        self.input_line.function_list = self.function_list
-        layout = QtWidgets.QVBoxLayout()
-        layout.addWidget(self.input_line)
-        layout.addWidget(self.function_list)
-        self.setFrameShape(QtWidgets.QFrame.Panel)
-        self.setLineWidth(1)
-        self.setLayout(layout)
-        self.setFixedWidth(300)
-
-
-    class InputLine(QtWidgets.QLineEdit):
-        def __init__(self, owner, parent=None):
-            super().__init__(parent)
-            self.owner = owner
-            # self.returnPressed.connect(self.function_list.exec)
-            self.key_ctl_n = QtCore.Signal()
-            self.key_ctl_p = QtCore.Signal()
-            self.key_down = QtCore.Signal()
-            self.key_up = QtCore.Signal()
-            # Enable fuzzy search
-            self.textEdited.connect(self.filter)
-
-        def event(self, event):
-            if event.type() == QtCore.QEvent.Type.KeyPress:
-                key = event.key()
-                mods = event.modifiers()
-                # Choose modifiers based on platform
-                sys = platform.system()
-                modifier = None
-
-                # Macos or linux
-                if sys == 'Darwin':
-                    modifier = Qt.MetaModifier
-                elif sys == 'linux':
-                    modifier = Qt.ControlModifier
-
-                # Highlight next item
-                if mods == modifier and key == Qt.Key_N:
-                    self.next()
-                    return True
-                elif key == Qt.Key_Down:
-                    self.next()
-                    return True
-
-                # Highlight previous item
-                elif mods == modifier and key == Qt.Key_P:
-                    self.prev()
-                    return True
-                elif key == Qt.Key_Up:
-                    self.prev()
-                    return True
-
-                # Upon nothing
-                return QtWidgets.QLineEdit.event(self, event)
-            else:
-                return QtWidgets.QLineEdit.event(self, event)
-
-        def filter(self):
-            query = self.text()
-            items = self.function_list.items()
-            item_names = [item.text() for item in items]
-            matches = list(fuzzyfinder(query, item_names))
-            for item in items:
-                if item.text() in matches:
-                    item.setHidden(0)
-                else:
-                    item.setHidden(1)
-            self.function_list.setIndex(0)
-
-        def visibleItems(self):
-            item_count = self.function_list.count()
-            items = []
-            for i in range(item_count):
-                item = self.function_list.item(i)
-                if not item.isHidden():
-                    items.append(item)
-            return(items)
-
-        def next(self):
-            items = self.visibleItems()
-            current_item = self.function_list.selectedItems()[0]
-            index = items.index(current_item)
-            index = (index + 1) % len(items)
-            self.function_list.setIndex(index)
-
-        def prev(self):
-            items = self.visibleItems()
-            current_item = self.function_list.selectedItems()[0]
-            index = items.index(current_item)
-            index = (index - 1) % len(items)
-            self.function_list.setIndex(index)
-
-
-    class FunctionList(QtWidgets.QListWidget):
-        def __init__(self, owner, parent=None):
-            super().__init__(parent)
-            self.owner = owner
-            self.populate()
-            self.itemClicked.connect(self.execute)
-            self.setSelectionMode(QtWidgets.QListWidget.SingleSelection)
-            self.setIndex(0)
-
-        def execute(self):
-            items = self.items()
-            current_item = self.selectedItems()[0]
-            index = items.index(current_item)
-            item = items[index]
-            label = item.text()
-            obj_name, method_name = label.split('.')
-            # Populate functions based on context
-            if obj_name == 'HCNetworkEditor':
-                method = getattr(self.owner.hcNetworkEditor, method_name)
-                method()
-            elif obj_name == 'HCPane':
-                method = getattr(self.owner.hcPane, method_name)
-                method()
-            elif obj_name == 'HCTab':
-                method = getattr(self.owner.hcTab, method_name)
-                method()
-            elif obj_name == 'HCSceneViewer':
-                method = getattr(self.owner.hcSceneViewer, method_name)
-                method()
-            elif obj_name == 'HCGlobal':
-                method = getattr(self.owner.hcGlobal, method_name)
-                method()
-            # Close window on function execution
-            # self.accept()
-
-        def items(self):
-            item_count = self.count()
-            items = [self.item(i) for i in range(item_count)]
-            return(items)
-
-        def populate(self):
-            items = []
-
-            for name, obj in inspect.getmembers(HCNetworkEditor, inspect.isfunction):
-                if hasattr(obj, 'interactive') and obj.interactive:
-                    items.append(('HCNetworkEditor', name))
-
-            for name, obj in inspect.getmembers(hcu.HCPane, inspect.isfunction):
-                if hasattr(obj, 'interactive') and obj.interactive:
-                    items.append(('HCPane', name))
-
-            for name, obj in inspect.getmembers(hcu.HCTab, inspect.isfunction):
-                if hasattr(obj, 'nteractive') and obj.interactive:
-                    items.append(('HCTab', name))
-
-            if self.owner.hc_tab.type() == hou.paneTabType.SceneViewer:
-                for name, obj in inspect.getmembers(HCSceneViewer, inspect.isfunction):
-                    if hasattr(obj, 'interactive') and obj.interactive:
-                        items.append(('HCSceneViewer', name))
-
-            for name, obj in inspect.getmembers(HCGlobal, inspect.isfunction):
-                if hasattr(obj, 'interactive') and obj.interactive:
-                    items.append(('HCGlobal', name))
-
-            for item in items:
-                self.addItem(item[0] + '.' + item[1])
-
-        def setIndex(self, index):
-            items = self.items()
-            counter = 0
-            for item in items:
-                if not item.isHidden():
-                    if counter == index:
-                        self.setCurrentItem(item)
-                    counter += 1
diff --git a/python3.11libs/hclib/ui/hcnewtabpanel.py b/python3.11libs/hclib/ui/hcnewtabpanel.py
deleted file mode 100644
index 50e7c11..0000000
--- a/python3.11libs/hclib/ui/hcnewtabpanel.py
+++ /dev/null
@@ -1,104 +0,0 @@
-import hou
-from fuzzyfinder import fuzzyfinder
-from PySide6 import QtCore, QtWidgets
-from PySide6.QtWidgets import QLineEdit, QDialog
-from .core.hcglobal import HCGlobal
-
-
-class inputBox(QLineEdit):
-    onTab = QtCore.Signal()
-    def event(self, event):
-        if event.type() == QtCore.QEvent.Type.KeyPress and event.key() == QtCore.Qt.Key_Tab:
-            self.onTab.emit()
-            return True
-        else:
-            return QLineEdit.event(self, event)
-
-
-class newTabPanel(QDialog):
-    def __init__(self):
-        super(newTabPanel, self).__init__(hou.qt.mainWindow())
-
-        self.hc_global = HCGlobal()
-
-        # Input box
-        self.input_box = inputBox()
-        self.input_box.onTab.connect(self.nextItem)
-        self.input_box.textEdited.connect(self.filter)
-        self.input_box.returnPressed.connect(self.execAction)
-
-        # Item array
-        self.items = []
-        self.items.append(("Geometry Spreadsheet", hou.paneTabType.DetailsView))
-        self.items.append(("Network Editor", hou.paneTabType.NetworkEditor))
-        self.items.append(("Parameters", hou.paneTabType.Parm))
-        self.items.append(("Python Shell", hou.paneTabType.PythonShell))
-        self.items.append(("Scene Viewer", hou.paneTabType.SceneViewer))
-
-        # List widget
-        self.list_widget = QtWidgets.QListWidget()
-        for item in self.items:
-            self.list_widget.addItem(item[0])
-        self.list_widget.itemClicked.connect(self.execAction)
-
-        # Make layout
-        self.layout = QtWidgets.QBoxLayout(QtWidgets.QBoxLayout.Direction.TopToBottom)
-        self.layout.addWidget(self.input_box)
-        self.layout.addWidget(self.list_widget)
-        self.setLayout(self.layout)
-        self.setIndex(0)
-
-    def closeEvent(self, event):
-        print("closing")
-        self.setParent(None)
-
-    def execAction(self):
-        current_item = self.list_widget.selectedItems()[0]
-        items = self.getItems()
-        index = items.index(current_item)
-        tab = self.hc_global.tab()
-        tab.createTab(self.items[index][1])
-        self.accept()
-
-    def filter(self):
-        text = self.input_box.text()
-        items = self.getItems()
-        names = [item.text() for item in items]
-        suggestions = fuzzyfinder(text, names)
-        suggestions = list(suggestions)
-        for item in items:
-            if item.text() in suggestions:
-                item.setHidden(0)
-            else:
-                item.setHidden(1)
-        self.setIndex(0)
-
-    def getItems(self):
-        item_count = self.list_widget.count()
-        items = [self.list_widget.item(i) for i in range(item_count)]
-        return(items)
-
-    def getVisibleItems(self):
-        item_count = self.list_widget.count()
-        items = []
-        for i in range(item_count):
-            item = self.list_widget.item(i)
-            if not item.isHidden():
-                items.append(item)
-        return(items)
-
-    def nextItem(self):
-        items = self.getVisibleItems()
-        selected_item = self.list_widget.selectedItems()[0]
-        index = items.index(selected_item)
-        index = (index + 1) % len(items)
-        self.setIndex(index)
-
-    def setIndex(self, idx):
-        items = self.getItems()
-        counter = 0
-        for item in items:
-            if not item.isHidden():
-                if counter == idx:
-                    self.listWidget.setItemSelected(item, 1)
-                counter += 1
diff --git a/python3.11libs/hclib/ui/hcpanel.py b/python3.11libs/hclib/ui/hcpanel.py
deleted file mode 100644
index d74403e..0000000
--- a/python3.11libs/hclib/ui/hcpanel.py
+++ /dev/null
@@ -1,221 +0,0 @@
-import hou
-from PySide6.QtCore import Qt
-from PySide6.QtWidgets import (
-    QCheckBox,
-    QDialog,
-    QHBoxLayout,
-    QLabel,
-    QMenu,
-    QSlider,
-    QVBoxLayout,
-)
-
-from ..core.hcglobal import HCGlobal
-from ..core.hcpane import HCPane
-from .hcwidgets import HCButton
-
-
-class HCPanel(QDialog):
-    def __init__(self, hc_tab):
-        super(HCPanel, self).__init__(hou.qt.mainWindow())
-
-        # Objects
-        self.hc_global= HCSession()
-        self.hc_tab = hc_tab
-        self.hc_pane = HCPane(hc_pane.pane())
-
-        # Window parameters
-        pane_geo = self.hcPane.qtScreenGeometry()
-        pane_center = pane_geo.center()
-        x = pane_center.x() - 200
-        y = pane_center.y() - 75
-        self.resize(200, 100)
-        self.move(x, y)
-        self.setWindowTitle("hctl panel")
-        self.setWindowFlags(Qt.Tool | Qt.WindowStaysOnTopHint)
-
-        # Utility lists
-        self.tab_types = (
-            hou.paneTabType.ApexEditor,
-            hou.paneTabType.ChannelEditor,
-            hou.paneTabType.ChannelViewer,
-            hou.paneTabType.CompositorViewer,
-            hou.paneTabType.DetailsView,
-            hou.paneTabType.IPRViewer,
-            hou.paneTabType.NetworkEditor,
-            hou.paneTabType.Parm,
-            hou.paneTabType.PythonPanel,
-            hou.paneTabType.PythonShell,
-            hou.paneTabType.SceneViewer,
-            hou.paneTabType.Textport,
-            hou.paneTabType.TreeView,
-        )
-        self.tab_names = [tab.name() for tab in self.hc_global.tabs()]
-        self.tab_type_names = (
-            "ApexEditor",
-            "Channel Editor",
-            "Channel Viewer",
-            "CompositorViewer",
-            "DetailsView",
-            "IPR Viewer",
-            "NetworkEditor",
-            "Parm",
-            "PythonPanel",
-            "PythonShell",
-            "SceneViewer",
-            "Textport",
-            "Tree View",
-        )
-        self.tab_labels = []
-        for tab in self.hc_global.tabs():
-            index = self.tab_types.index(tab.type())
-            label = self.tab_type_names[index]
-            self.tab_labels.append(label)
-
-        # Paths
-        self.project_path = hou.hipFile.name()
-        ct = self.project_path.count("/")
-        self.project_path = self.project_path.split("/", ct - 2)[-1]
-        self.network_path = self.hc_tab.pwd()
-
-        # Global column
-        global_col = QVBoxLayout()
-        # Label
-        global_label = QLabel("Global")
-        global_label.setStyleSheet("color: #909090")
-        global_col.addWidget(global_label)
-        # Toggle tabs
-        global_tabs_btn = HCButton("Tabs")
-        global_tabs_btn.clicked.connect(self.hc_global.toggleTabs)
-        global_col.addWidget(global_tabs_btn)
-        # Toggle network controls
-        global_network_controls_btn = HCButton("Network Controls")
-        global_network_controls_btn.clicked.connect(self.hc_global.toggleNetworkControls)
-        global_col.addWidget(global_network_controls_btn)
-        # Toggle autosave
-        global_col.addWidget(self.SessionAutosaveCheckBox(self))
-        # Toggle menus
-        global_menus_btn = HCButton("Menus")
-        global_menus_btn.clicked.connect(self.hc_global.toggleMenus)
-        global_col.addWidget(global_menus_btn)
-        # Toggle stowbars
-        global_stowbars_btn = HCButton("Stowbars")
-        global_stowbars_btn.clicked.connect(self.hc_global.toggleStowbars)
-        global_col.addWidget(global_stowbars_btn)
-        # Fill empty space
-        global_col.addStretch()
-
-        # Context column
-        context_col = QVBoxLayout()
-        # Label
-        context_label = QLabel("Context")
-        context_label.setStyleSheet("color: #909090")
-        context_col.addWidget(context_label)
-        # Toggle tabs
-        context_tabs_btn = HCButton("Tabs")
-        context_tabs_btn.clicked.connect(self.hc_pane.toggleTabs)
-        context_col.addWidget(context_tabs_btn)
-        # Toggle network controls
-        context_network_controls_btn = HCButton("Network Controls")
-        context_network_controls_btn.clicked.connect(self.hc_tab.toggleNetworkControls)
-        context_col.addWidget(context_network_controls_btn)
-        # Toggle pin
-        context_col.addWidget(self.TabPinCheckBox(self))
-        # Tab switcher
-        context_col.addWidget(self.TabMenu(self))
-        # Tab type switcher
-        # context_col.addWidget(self.TabTypeMenu(self))
-        # Toggle maximize
-        context_maximize_btn = HCButton("Maximize")
-        context_maximize_btn.clicked.connect(self.hc_pane.toggleMaximized)
-        context_col.addWidget(context_maximize_btn)
-        # Size slider
-        context_size_slider = QSlider(Qt.Horizontal)
-        context_size_slider.setFixedWidth(300 / 2)
-        context_size_slider.setValue(self.hc_pane.splitFraction() * 100)
-        context_size_slider.valueChanged.connect(self.sliderChange)
-        context_col.addWidget(context_size_slider)
-
-        # Scene viewer controls
-        if self.hc_tab.type() == hou.paneTabType.SceneViewer:
-            # Toggle keycam
-            context_keycam_btn = HCButton("Keycam")
-            context_keycam_btn.clicked.connect(self.hc_tab.keycam)
-            context_col.addWidget(context_keycam_btn)
-            # Home all viewports
-            context_home_btn = HCButton("Home")
-            context_home_btn.clicked.connect(self.hc_tab.homeAllViewports)
-            context_col.addWidget(context_home_btn)
-
-        # Fill empty space
-        context_col.addStretch()
-
-        # LAYOUT
-        self.layout = QHBoxLayout()
-        self.layout.addLayout(global_col)
-        self.layout.addLayout(global_col)
-        self.setLayout(self.layout)
-
-    def sliderChange(self, value):
-        self.hc_pane.setSplitFraction(value / 100)
-
-    def closeEvent(self, event):
-        self.setParent(None)
-
-    class GlobalAutosaveCheckBox(QCheckBox):
-        def __init__(self, owner):
-            super().__init__("Autosave")
-            state = owner.hc_global.autosave()
-            if state == "1":
-                self.setCheckState(Qt.Checked)
-            elif state == "0":
-                self.setCheckState(Qt.Unchecked)
-            self.clicked.connect(owner.hc_global.toggleAutoSave)
-
-    class TabPinCheckBox(QCheckBox):
-        def __init__(self, owner):
-            super().__init__("Pin")
-            self.owner = owner
-            self.clicked.connect(self.owner.hc_tab.togglePin)
-            if self.owner.hc_tab.isPin():
-                self.setCheckState(Qt.Checked)
-            else:
-                self.setCheckState(Qt.Unchecked)
-
-    class TabMenu(HCButton):
-        def __init__(self, owner):
-            super().__init__(str(owner.hc_pane.currentTab().type()).split(".")[-1])
-            self.owner = owner
-            self.tabs = self.owner.hc_pane.tabs()
-            self.tab_names = [str(tab.type()).split(".")[-1] for tab in self.tabs]
-            self.menu = QMenu(self)
-            idx = 0
-            for tab_name in self.tab_names:
-                action = self.menu.addAction(tab_name)
-                action.triggered.connect(
-                    lambda checked=False, index=idx: self.changeTab(index)
-                )
-                idx += 1
-            self.setMenu(self.menu)
-
-        def changeTab(self, index):
-            new_tab = self.tabs[index]
-            new_tab.setIsCurrentTab()
-            self.owner.close()
-
-    class TabTypeMenu(HCButton):
-        def __init__(self, owner):
-            super().__init__("menu")
-            self.owner = owner
-            menu = QMenu(self)
-            for label in owner.tab_type_names:
-                menu.addAction(label)
-            menu.triggered.connect(self.on_action_triggered)
-            self.setMenu(menu)
-
-        def on_action_triggered(self, action):
-            self.setText(action.text())
-            # index = self.owner.tab_type_names.index(action.text())
-            # tab_type = self.owner.tab_types[index]
-            # tab = self.owner.hctlTab.setType(tab_type)
-            # self.owner.hctlTab = hcu.HctlTab(tab)
diff --git a/python3.11libs/hclib/ui/hcresizepanel.py b/python3.11libs/hclib/ui/hcresizepanel.py
deleted file mode 100644
index 879ed43..0000000
--- a/python3.11libs/hclib/ui/hcresizepanel.py
+++ /dev/null
@@ -1,44 +0,0 @@
-import hou
-from PySide6 import QtGui, QtWidgets
-from PySide6.QtWidgets import QLabel, QShortcut, QBoxLayout
-
-
-class HCResizePanel(QtWidgets.QDialog):
-    def __init__(self, pane):
-        super(HCResizePanel, self).__init__(hou.qt.mainWindow())
-
-        self.pane = pane
-
-        # Keys
-        key_j = QShortcut(QtGui.QKeySequence("J"), self)
-        key_j.activated.connect(self.onJ)
-        key_k = QShortcut(QtGui.QKeySequence("K"), self)
-        key_k.activated.connect(self.onK)
-
-        self.pane_label = QLabel()
-        self.pane_label.setText("Pane: " + str(pane.currentTab().type()))
-
-        self.is_maximized_label = QLabel()
-        self.is_maximized_label.setText("Maximized: " + str(pane.isMaximized))
-
-        self.split_fraction_label = QLabel()
-        self.split_lraction_label.setText("Split Fraction: " + str(pane.getSplitFraction()))
-
-        self.layout = QBoxLayout(QBoxLayout.Direction.TopToBottom)
-        self.layout.addWidget(self.pane_label)
-        self.layout.addWidget(self.is_maximized_label)
-        self.layout.addWidget(self.split_fraction_label)
-
-        self.setLayout(self.layout)
-
-    def onJ(self):
-        split_fraction = self.pane.getSplitFraction()
-        split_fraction += 0.05
-        self.pane.setSplitFraction(split_fraction)
-        self.split_fraction_label.setText("Split Fraction: " + str(split_fraction))
-
-    def onK(self):
-        split_fraction = self.pane.getSplitFraction()
-        split_fraction -= 0.05
-        self.pane.setSplitFraction(split_fraction)
-        self.split_fraction_label.setText("Split Fraction: " + str(split_fraction))
diff --git a/python3.11libs/hclib/ui/hcstatuspanel.py b/python3.11libs/hclib/ui/hcstatuspanel.py
deleted file mode 100644
index 622f880..0000000
--- a/python3.11libs/hclib/ui/hcstatuspanel.py
+++ /dev/null
@@ -1,69 +0,0 @@
-import hou
-from PySide6 import QtWidgets
-from PySide6.QtWidgets import QLabel, QVBoxLayout
-from PySide6.QtCore import Qt
-
-
-class Dialog(QtWidgets.QDialog):
-    def __init__(self):
-        super(Dialog, self).__init__(hou.qt.mainWindow())
-        self.resize(500, 200)
-        self.setWindowTitle("hctl status")
-        self.setWindowFlags(Qt.Tool | Qt.WindowStaysOnTopHint)
-
-        # Widgets
-        self.project_path_label = QLabel("Project Path")
-        self.network_path_label = QLabel("Network Path")
-        self.tab_type_label = QLabel("Tab Type")
-
-        # Layout
-        self.layout = QVBoxLayout()
-        self.layout.addWidget(self.project_path_label)
-        self.layout.addWidget(self.network_path_label)
-        self.layout.addWidget(self.tab_type_label)
-        self.layout.addStretch()
-        self.setLayout(self.layout)
-
-        self.update()
-
-    def closeEvent(self, event):
-        self.setParent(None)
-
-    def lists(self):
-        # Arrays for navigating pane tabs
-        self.tab_types = (
-            hou.paneTabType.ApexEditor,
-            hou.paneTabType.CompositorViewer,
-            hou.paneTabType.DetailsView,
-            hou.paneTabType.NetworkEditor,
-            hou.paneTabType.Parm,
-            hou.paneTabType.PythonPanel,
-            hou.paneTabType.PythonShell,
-            hou.paneTabType.SceneViewer,
-            hou.paneTabType.Textport
-        )
-        self.tab_type_names = (
-            "ApexEditor",
-            "CompositorViewer",
-            "DetailsView",
-            "NetworkEditor",
-            "Parm",
-            "PythonPanel",
-            "PythonShell",
-            "SceneViewer",
-            "Textport"
-        )
-        self.tab_names = [tab.name() for tab in self.hc_global.tabs()]
-
-        # Populate pane tab labels array
-        self.tab_labels = []
-        for tab in self.hc_global.tabs():
-            index = self.tab_types.index(tab.type())
-            label = self.tab_type_names[index]
-            self.tab_labels.append(label)
-
-    def update(self):
-        # Labels
-        self.project_path_label.setText("Project path: " + hou.session.projectPath)
-        self.network_path_label.setText("Network Path: " + hou.session.networkPath)
-        self.tab_type_label.setText("Tab type: " + str(hou.session.tabType))
diff --git a/python3.11libs/hclib/ui/hcvisualizerpanel.py b/python3.11libs/hclib/ui/hcvisualizerpanel.py
deleted file mode 100644
index ee40680..0000000
--- a/python3.11libs/hclib/ui/hcvisualizerpanel.py
+++ /dev/null
@@ -1,131 +0,0 @@
-import hou
-from fuzzyfinder import fuzzyfinder
-from PySide6 import QtCore
-from PySide6.QtWidgets import QListWidget, QListWidgetItem, QDialog, QLineEdit, QBoxLayout
-from PySide6.QtCore import Qt, QEvent
-
-
-class filterBox(QLineEdit):
-    def __init__(self):
-        # Key handler
-        self.onTab = QtCore.Signal()
-
-    def event(self, event):
-        if event.type() == QEvent.Type.KeyPress:
-            key = event.key()
-            if key == Qt.Key_Tab:
-                self.onTab.emit()
-                return True
-        return QLineEdit.event(self, event)
-
-
-class VisualizerMenu(QDialog):
-    def __init__(self):
-        super(VisualizerMenu, self).__init__(hou.qt.mainWindow())
-
-        # Resources
-        self.viewport = hou.session.hctlSession.viewport()
-        self.vis_arr = self.viewport.visualizers()
-
-        # Filter box
-        self.filter_box = filterBox()
-        self.filter_box.onTab.connect(self.listNext)
-        self.filter_box.returnPressed.connect(self.itemToggle)
-        self.filter_box.textEdited.connect(self.listFilter)
-
-        # List widget
-        self.list_widget = QListWidget()
-        if self.vis_arr:
-            for vis in self.vis_arr:
-                list_item = QListWidgetItem()
-                item_label = vis.label()
-                item_state = vis.isActive(self.curViewport)
-
-                list_item.setText(item_label)
-
-                if item_state:
-                    list_item.setCheckState(Qt.Checked)
-                else:
-                    list_item.setCheckState(Qt.Unchecked)
-
-                self.list_widget.addItem(list_item)
-
-        self.list_widget.itemClicked.connect(self.item_toggle)
-
-        # Layout
-        self.layout = QBoxLayout(QBoxLayout.Direction.TopToBottom)
-        self.layout.addWidget(self.filter_box)
-        self.layout.addWidget(self.list_widget)
-        self.setLayout(self.layout)
-        self.listSetIndex(0)
-
-    def closeEvent(self, event):
-        print("Closing")
-        self.setParent(None)
-
-    def itemToggle(self):
-        current_item = self.list_widget.selectedItems()[0]
-        item_name = current_tem.text()
-        items = self.listGetItems()
-        item_names = [item.text() for item in items]
-        index = item_names.index(item_name)
-
-        vis = self.vis_arr[index]
-        state = vis.isActive(self.viewport)
-
-        vis.setIsActive(not state, self.viewport)
-
-        if state:
-            current_item.setCheckState(Qt.Unchecked)
-        else:
-            current_item.setCheckState(Qt.Checked)
-
-    def listFilter(self):
-        text = self.input_box.text()
-        items = self.getItems()
-        names = [item.text() for item in items]
-        suggestions = fuzzyfinder(text, names)
-        suggestions = list(suggestions)
-        for item in items:
-            if item.text() in suggestions:
-                item.setHidden(0)
-            else:
-                item.setHidden(1)
-        self.listSetIndex(0)
-
-    def listGetItems(self):
-        item_count = self.list_widget.count()
-        items = [self.list_widget.item(i) for i in range(item_count)]
-        return(items)
-
-    def listGetVisibleItems(self):
-        item_count = self.list_widget.count()
-        items = []
-        for i in range(item_count):
-            item = self.list_widget.item(i)
-            if not item.isHidden():
-                items.append(item)
-        return(items)
-
-    def listNext(self):
-        visible_items = self.listGetVisibleItems()
-        current_item = self.list_widget.selectedItems()[0]
-        index = visible_items.index(current_item)
-        index = (index + 1) % len(visible_items)
-        self.listSetIndex(index)
-
-    def listPrev(self):
-        visible_items = self.listGetVisibleItems()
-        current_item = self.list_widget.selectedItems()[0]
-        index = visible_items.index(current_item)
-        index = (index - 1) % len(visible_items)
-        self.listSetIndex(index)
-
-    def listSetIndex(self, index):
-        visible_items = self.listGetVisibleItems()
-        counter = 0
-        for visible_item in visible_items:
-            if counter == index:
-                self.list_widget.setItemSelected(visible_item, 1)
-                return
-            counter += 1
diff --git a/python3.11libs/hclib/ui/hcwidgets.py b/python3.11libs/hclib/ui/hcwidgets.py
deleted file mode 100644
index c7f1cc6..0000000
--- a/python3.11libs/hclib/ui/hcwidgets.py
+++ /dev/null
@@ -1,18 +0,0 @@
-from importlib import reload
-from PySide6 import QtWidgets
-from PySide6.QtCore import Qt
-
-
-class HCButton(QtWidgets.QPushButton):
-    def __init__(self, text, parent=None):
-        super().__init__(text, parent)
-        self.setStyleSheet("text-align: left; padding: 0 0 0 0")
-        self.setFlat(1)
-        self.setFixedSize(120, 16)
-
-
-class HCMenu(QtWidgets.QPushButton):
-    def __init__(self, label, parent=None):
-        super().__init__(label, parent)
-        self.setStyleSheet("text-align: left; padding: 0 0 0 0")
-        self.setFlat(1)
diff --git a/python3.11libs/hclib/utils/__init__.py b/python3.11libs/hclib/utils/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/python3.11libs/hclib/utils/hcbindings.py b/python3.11libs/hclib/utils/hcbindings.py
deleted file mode 100644
index 67e7c8e..0000000
--- a/python3.11libs/hclib/utils/hcbindings.py
+++ /dev/null
@@ -1,264 +0,0 @@
-import hou, platform
-
-# KEY NAMES
-# uparrow, downarrow, leftarrow, rightarrow
-# alt, cmd, shift, ctrl, tab, del, backspace, enter, esc
-# f1...f12
-# pageup, pagedown, end, home, insert
-# /, \\
-# pad0...pad9
-# padstar, padslash
-# pause
-# space
-
-def load():
-    clear_assignments()
-    remove_assignments()
-    add_assignments()
-    return
-
-
-def clear_assignments():
-    assignments = (
-        ## h
-        'h.add_key',
-        'h.aliases',
-        'h.audio_panel',
-        'h.auto_key',
-        'h.cache_manager',
-        'h.channeleditor',
-        'h.clear_cop_caches',
-        'h.comp_project_manager',
-        'h.context_help',
-        'h.desktop_mgr',
-        'h.global_animation_options',
-        'h.mat_palette',
-        'h.merge',
-        'h.new',
-        'h.next_key',
-        'h.open',
-        'h.perf_monitor',
-        # 'h.play_bwd',
-        # 'h.play_fwd',
-        # 'h.prev_key',
-        'h.python_shell',
-        # 'h.range_end',
-        # 'h.range_start',
-        'h.textport',
-        ## deskmgr
-        'deskmgr.new',
-        "deskmgr.save",
-        ## h.pane
-        'h.pane.clone',
-        'h.pane.closetab',
-        'h.pane.copytab',
-        'h.pane.edit_bookmark',
-        'h.pane.editpathastext',
-        # 'h.pane.jump_back',
-        # 'h.pane.jump_forth',
-        'h.pane.link_minus',
-        'h.pane.link_plus',
-        'h.pane.nexttab',
-        'h.pane.prevtab',
-        'h.pane.to_cop_view',
-        'h.pane.to_chanedit',
-        'h.pane.to_chop_view',
-        'h.pane.to_geosheet',
-        'h.pane.to_ipr_viewer',
-        'h.pane.to_mat_palette',
-        'h.pane.to_net',
-        'h.pane.to_old_net',
-        'h.pane.to_parm',
-        'h.pane.to_scene_view',
-        'h.pane.to_textport',
-        'h.pane.to_treeview',
-        ## h.pane.bundle
-        'h.pane.bundle.addbundle',
-        'h.pane.bundle.duplicate',
-        ## h.pane.chedit
-        'h.pane.chedit.bsave',
-        'h.pane.chedit.load',
-        'h.pane.chedit.save',
-        'h.pane.chedit.scroll_to_current_frame',
-        'h.pane.chedit.show_groups',
-        'h.pane.chedit.show_layers',
-        'h.pane.chedit.show_parmbox',
-        ## h.pane.group
-        'h.pane.group.addgroup',
-        'h.pane.group.equals',
-        'h.pane.group.minus',
-        'h.pane.group.selectall',
-        'h.pane.group.selectnone',
-        'h.pane.group.togpin',
-        'h.pane.group.togpinall',
-        ## h.pane.gview
-        'h.pane.gview.increase_subd',
-        'h.pane.gview.decrease_subd',
-        'h.pane.gview.delete',
-        'h.pane.gview.dockhudhandles',
-        'h.pane.gview.edit_snap_options',
-        'h.pane.gview.operator_menu_branch',
-        'h.pane.gview.state.view.home_selection',
-        'h.pane.gview.repeat_current',
-        'h.pane.gview.repeat_current_branch',
-        'h.pane.gview.restore_prevcam',
-        'h.pane.gview.selectstylebox',
-        'h.pane.gview.selectstylebrush',
-        'h.pane.gview.selectstylelaser',
-        'h.pane.gview.selectstylelasso',
-        ## h.pane.gview.handle
-        'h.pane.gview.handle.remove_keyframe',
-        'h.pane.gview.handle.set_keyframe',
-        ## h.pane.gview.handle.agentcollisionlayer
-        'h.pane.gview.handle.agentcollisionlayer.boxhandle',
-        'h.pane.gview.handle.agentcollisionlayer.orientationhandle',
-        ## h.pane.gview.handle.agentconfigurejoints
-        'h.pane.gview.handle.agentconfigurejoints.conehandle',
-        'h.pane.gview.handle.agentconfigurejoints.childrotationhandle',
-        ## h.pane.gview.state
-        'h.pane.gview.state.volatile_chmodify',
-        ## h.pane.wsheet
-        'h.pane.wsheet.add_image',
-        'h.pane.wsheet.add_postit',
-        'h.pane.wsheet.addfileop',
-        'h.pane.wsheet.allowdroponwire',
-        'h.pane.wsheet.batch_rename',
-        'h.pane.wsheet.color_palette',
-        'h.pane.wsheet.doautomovenodes',
-        'h.pane.wsheet.home',
-        'h.pane.wsheet.home_selected',
-        'h.pane.wsheet.up',
-        'h.pane.wsheet.down',
-        'h.pane.wsheet.left',
-        'h.pane.wsheet.right',
-        'h.pane.wsheet.edit_images',
-        'h.pane.wsheet.layout',
-        'h.pane.wsheet.layout_all',
-        'h.pane.wsheet.layout_mode',
-        'h.pane.wsheet.maximize',
-        'h.pane.wsheet.maximize_adjust',
-        'h.pane.wsheet.minimize',
-        'h.pane.wsheet.minimize_adjust',
-        'h.pane.wsheet.open_display_options',
-        'h.pane.wsheet.open_treeview',
-        'h.pane.wsheet.node_quick_nav',
-        'h.pane.wsheet.scope_chans',
-        'h.pane.wsheet.select',
-        'h.pane.wsheet.stitch_mode',
-        'h.pane.wsheet.zoom_in',
-        'h.pane.wsheet.zoom_out',
-        ## h.playbar
-        'h.playbar.next_bookmark',
-        'h.playbar.prev_bookmark',
-        'h.playbar.show_range',
-        ## inputfield
-        'inputfield.context_help',
-        'inputfield.editor',
-    )
-
-    for assignment in assignments:
-        context = assignment.rpartition('.')[0]
-        symbol = assignment
-        hou.hotkeys.clearAssignments(context, symbol)
-
-
-def remove_assignments():
-    assignments = (
-        ## h
-        ('h.copy', 'alt+c'),
-        ('h.cut', 'alt+x'),
-        ('h.find', 'alt+f'),
-    )
-
-def add_assignments():
-    assignments = (
-        ## h
-        ('h.stow_shelf', 'ctrl+['),
-        ('h.stow_shelf', 'cmd+['),
-        ## h.pane
-        ('h.pane.shelf', 'ctrl+]'),
-        ('h.pane.shelf', 'cmd+]'),
-        ## h.pane.gview
-        ('h.pane.gview.refplane', 'shift+g'),
-        ('h.pane.gview.state.view.home_selection', 'shift+s'),
-        ## h.pane.parms
-        ('h.pane.parms.edit_expression', 'ctrl+e'),
-        ## h.pane.editparms
-        ('h.pane.editparms.selectall', 'alt+h'),
-        ## h.pane.wsheet
-        ('h.pane.wsheet.bypass_mode', 'b'),
-        ('h.pane.wsheet.drop_on_wire_mode', 'pad8'),
-        ('h.pane.wsheet.doautomovenodes', 'cmd+pad9'),
-        ('h.pane.wsheet.home_selected', 'shift+s'),
-        ('h.pane.wsheet.jump_mark_1', 'pad1'),
-        ('h.pane.wsheet.jump_mark_2', 'pad2'),
-        ('h.pane.wsheet.jump_mark_3', 'pad3'),
-        ('h.pane.wsheet.jump_mark_4', 'pad4'),
-        ('h.pane.wsheet.jump_mark_5', 'pad5'),
-        ('h.pane.wsheet.up', 'shift+k'),
-        ('h.pane.wsheet.down', 'shift+j'),
-        ('h.pane.wsheet.left', 'shift+h'),
-        ('h.pane.wsheet.right', 'shift+l'),
-        ('h.pane.wsheet.set_mark_1', 'cmd+pad1'),
-        ('h.pane.wsheet.set_mark_2', 'cmd+pad2'),
-        ('h.pane.wsheet.set_mark_3', 'cmd+pad3'),
-        ('h.pane.wsheet.set_mark_4', 'cmd+pad4'),
-        ('h.pane.wsheet.set_mark_5', 'cmd+pad5'),
-        ('h.pane.wsheet.node_quick_nav', 'ctrl+s'),
-        ('h.pane.wsheet.select', 'ctrl+alt+h'),
-        ## h.pane.textport - emacs
-        ('h.pane.textport.up', 'ctrl+p'),
-        ('h.pane.textport.down', 'ctrl+n'),
-        ('h.pane.textport.next', 'ctrl+f'),
-        ('h.pane.textport.prev', 'ctrl+b'),
-        ('h.pane.textport.top', 'ctrl+a'),
-        ('h.pane.textport.bottom', 'ctrl+e'),
-        ('h.pane.textport.nextword', 'cmd+f'),
-        ('h.pane.textport.pageup', 'cmd+v'),
-        ('h.pane.textport.pagedown', 'ctrl+v'),
-        ('h.pane.textport.firstline', 'cmd+shift+,'),
-        ('h.pane.textport.lastline', 'cmd+shift+.'),
-        ('h.pane.textport.jump_to_line', 'alt+g'),
-        ('h.pane.textport.selectup', 'ctrl+shift+p'),
-        ('h.pane.textport.selectdown', 'ctrl+shift+n'),
-        ('h.pane.textport.selectnext', 'ctrl+shift+f'),
-        ('h.pane.textport.selectprev', 'ctrl+shift+b'),
-        ('h.pane.textport.selectbottom', 'ctrl+shift+e'),
-        ('h.pane.textport.selecttop', 'ctrl+shift+a'),
-        ('h.pane.textport.selectnextword', 'cmd+shift+f'),
-        ('h.pane.textport.toggle_comment', 'ctrl+;'),
-        ## inputfield - emacs
-        ('inputfield.up', 'ctrl+p'),
-        ('inputfield.down', 'ctrl+n'),
-        ('inputfield.next', 'ctrl+f'),
-        ('inputfield.prev', 'ctrl+b'),
-        ('inputfield.next_word', 'alt+f'),
-        ('inputfield.prev_word', 'alt+b'),
-        ('inputfield.end', 'ctrl+e'),
-        ('inputfield.home', 'ctrl+a'),
-    )
-
-    # list_mac = ()
-
-    # list_linux = ()
-
-    # if platform.system() == "Darwin":
-        # return
-    # elif platform.system() == "linux":
-        # return
-
-    for assignment in assignments:
-        context = assignment[0].rpartition(".")[0]
-        print(context)
-        symbol = assignment[0]
-        key = assignment[1]
-        hou.hotkeys.addAssignment(context, symbol, key)
-
-
-def bind_commands():
-
-    list = ()
-    for command in list:
-        context = binding[0]
-        command = binding[1]
-        hou.hotkeys.addCommandBinding(context, command)
diff --git a/python3.11libs/hclib/utils/hclayouts.py b/python3.11libs/hclib/utils/hclayouts.py
deleted file mode 100644
index 6c63f77..0000000
--- a/python3.11libs/hclib/utils/hclayouts.py
+++ /dev/null
@@ -1,85 +0,0 @@
-from ..core.hcglobal import HCGlobal
-
-def setLayoutQuad(self, hcglobal):
-    hcglobal.clearLayout()
-    hcglobal.tabs()[0].setType(hou.paneTabType.PythonShell)
-    hcglobal.panes()[0].splitHorizontally()
-    hcglobal.panes()[0].splitVertically()
-    hcglobal.panes()[1].splitVertically()
-
-def setLayoutRamp(self, hc_global):
-    hcglobal.removeEventLoopCallbacks()
-    hcglobal.clearLayout()
-    hcglobal.panes()[0].splitVertically()
-    hcglobal.paneTabs()[1].setType(hou.paneTabType.Parm)
-    hcglobal.panes()[1].setSplitRatio(0.3)
-    hcglobal.panes()[1].createTab()
-
-def setLayoutTriH(self):
-    hcglobal.removeEventLoopCallbacks()
-    hcglobal.clearLayout()
-    # Make panes
-    hcglobal.tabs()[0].setType(hou.paneTabType.PythonShell)
-    hcglobal.panes()[0].splitHorizontally()
-    hcglobal.panes()[1].splitHorizontally()
-    # Make paneTabs
-    hcglobal.panes()[1].createTab(hou.paneTabType.PythonShell)
-    hcglobal.panes()[1].tabs()[0].setIsCurrentTab()
-    # Set types
-    hcglobal.panes()[0].tabs()[0].setType(hou.paneTabType.SceneViewer)
-    hcglobal.panes()[1].tabs()[0].setType(hou.paneTabType.Parm)
-    hcglobal.panes()[1].tabs()[1].setType(hou.paneTabType.DetailsView)
-    hcglobal.panes()[2].tabs()[0].setType(hou.paneTabType.NetworkEditor)
-    # Ratios
-    hcglobal.panes()[0].setSplitFraction(0.5)
-    hou.session.last_pane = self.pane()
-    hou.ui.addEventLoopCallback(triHCallback)
-
-def triHCallback(hcglobal):
-    panes = hcglobal.panes()
-    pane = hcglobal.pane()
-    if str(pane) != str(hou.session.lastPane):
-        hou.session.last_pane = pane
-        if str(pane) == str(panes[1]):
-            pane.setSplitFraction(0.6)
-        elif str(pane) == str(panes[2]):
-            pane.setSplitFraction(0.3)
-    return True
-
-def setLayoutTriV(hcglobal):
-    # Remove callbacks
-    hcglobal.removeEventLoopCallbacks()
-    # Reset layout
-    hcglobal.clearLayout()
-    # Make panes
-    hcglobal.panes()[0].tabs()[0].setType(hou.paneTabType.PythonShell)
-    hcglobal.panes()[0].splitHorizontally()
-    hcglobal.panes()[1].splitVertically()
-    # Make pane tabs
-    hcglobal.panes()[1].createTab(hou.paneTabType.PythonShell)
-    hcglobal.panes()[1].tabs()[0].setIsCurrentTab()
-    # Set types
-    hcglobal.panes()[0].tabs()[0].setType(hou.paneTabType.SceneViewer)
-    hcglobal.panes()[1].tabs()[0].setType(hou.paneTabType.Parm)
-    hcglobal.panes()[1].tabs()[1].setType(hou.paneTabType.DetailsView)
-    hcglobal.panes()[2].tabs()[0].setType(hou.paneTabType.NetworkEditor)
-    # Set ratios
-    hcglobal.panes()[0].setSplitFraction(0.66)
-    # Ok
-    hou.session.last_pane = self.pane()
-    hou.ui.addEventLoopCallback(self.triVCallback)
-
-def triVCallback(hcglobal):
-    panes = hcglobal.panes()
-    pane = hcglobal.pane()
-    if str(pane) != str(hou.session.last_pane):
-        hou.session.last_pane = pane
-        if str(pane) == str(panes[0]):
-            pane.setSplitFraction(0.7)
-        elif str(pane) == str(panes[1]):
-            panes[0].setSplitFraction(0.4)
-            pane.setSplitFraction(0.33)
-        elif str(pane) == str(panes[2]):
-            panes[0].setSplitFraction(0.4)
-            pane.setSplitFraction(0.66)
-    return True
diff --git a/python3.11libs/hclib/utils/hclistener.py b/python3.11libs/hclib/utils/hclistener.py
deleted file mode 100644
index e9ee27e..0000000
--- a/python3.11libs/hclib/utils/hclistener.py
+++ /dev/null
@@ -1,107 +0,0 @@
-import hou
-# from importlib import reload
-from ..core.hcglobal import HCGlobal
-from ..core.hcpane import HCPane
-from ..core.hctab import HCTab
-# from .core.hcviewport import HCViewport
-
-
-class HCListener():
-    def __init__(self):
-        self.report_tab = 1
-        hou.session.tab = None
-        hou.session.pane = None
-        hou.session.hc_global = None
-        hou.session.hc_pane = None
-        hou.session.hc_tab = None
-        hou.session.hc_sceneviewer = None
-        hou.session.hc_networkeditor = None
-        hou.session.project_path = hou.hipFile.path()
-        hou.session.network_path = None
-        hou.session.tab_type = None
-        self.update_objects()
-        return
-
-    def start(self):
-        hou.ui.addEventLoopCallback(self.listener)
-
-    def stop(self):
-        hou.ui.removeEventLoopCallback(self.listener)
-
-    def update_objects(self):
-        hou.session.tab = hou.ui.paneTabUnderCursor()
-        hou.session.pane = hou.ui.paneUnderCursor()
-
-        hou.session.hc_global = HCGlobal()
-        hou.session.hc_pane = HCPane(hou.ui.paneUnderCursor())
-        hou.session.hc_tab = HCTab(hou.session.tab)
-
-        if hou.session.hc_tab != None:
-
-            if hou.session.hc_tab.hasNetworkControls():
-                hou.session.network_path = hou.session.hc_tab.path()
-            hou.session.tab_type = hou.session.hc_tab.type()
-
-            if hou.session.tab.type() == hou.paneTabType.SceneViewer:
-                hou.session.sceneviewer = HCSceneViewer(hou.session.tab)
-            else: hou.session.sceneviewer = None
-
-            if hou.session.tab.type() == hou.paneTabType.NetworkEditor:
-                hou.session.networkeditor = HctlNetworkEditor(hou.session.tab)
-            else: hou.session.networkeditor = None
-
-        # Labels
-        # self.project_path_label.setText("Project path: " + self.projectPath())
-        # if hou.session.tab.hasNetworkControls():
-            # self.network_path_label.setText("Network Path: " + self.networkPath())
-        # else: self.network_path_label.setText("No Network Path")
-        # self.tab_type_label.setText("Tab type: " + str(hou.session.hc_tab.type()))
-
-    def listener(self):
-        tab = hou.ui.paneTabUnderCursor()
-        if tab == None:
-            hou.session.tab = None
-        elif tab != hou.session.tab:
-            print(tab)
-            self.update_objects()
-
-    def lists(self):
-        # Arrays for navigating pane tabs
-        self.tab_types = (
-            hou.paneTabType.ApexEditor,
-            hou.paneTabType.CompositorViewer,
-            hou.paneTabType.DetailsView,
-            hou.paneTabType.NetworkEditor,
-            hou.paneTabType.Parm,
-            hou.paneTabType.PythonPanel,
-            hou.paneTabType.PythonShell,
-            hou.paneTabType.SceneViewer,
-            hou.paneTabType.Textport
-        )
-        self.tab_type_names = (
-            "ApexEditor",
-            "CompositorViewer",
-            "DetailsView",
-            "NetworkEditor",
-            "Parm",
-            "PythonPanel",
-            "PythonShell",
-            "SceneViewer",
-            "Textport"
-        )
-        self.tab_names = [tab.name() for tab in hou.session.hc_global.tabs()]
-
-        # Populate pane tab labels array
-        self.tab_labels = []
-        for tab in self.hc_global.tabs():
-            index = self.tab_types.index(tab.type())
-            label = self.tab_type_names[index]
-            self.tab_labels.append(label)
-
-    def networkPath(self):
-        return str(hou.session.tab.pwd())
-
-    def projectPath(self):
-        return hou.hipFile.name()
-        # ct = self.project_path.count("/")
-        # self.project_path = self.project_path.split("/", ct - 2)[-1]
diff --git a/python3.11libs/hclib/utils/hcmenuutils.py b/python3.11libs/hclib/utils/hcmenuutils.py
deleted file mode 100644
index a8f7701..0000000
--- a/python3.11libs/hclib/utils/hcmenuutils.py
+++ /dev/null
@@ -1,28 +0,0 @@
-import hou
-
-
-def vector3Test(kwargs):
-    parms = kwargs['parms']
-    print(parms[0])
-    if len(parms) == 3 \
-    and parms[0].parmTemplate().type() == hou.parmTemplateType.Float \
-    and parms[1].parmTemplate().type() == hou.parmTemplateType.Float \
-    and parms[2].parmTemplate().type() == hou.parmTemplateType.Float:
-        return True
-    else:
-        return False
-
-def setVector3(kwargs, x, y, z):
-    parms = kwargs['parms']
-    name0 = parms[0].name()
-    name1 = parms[1].name()
-    name2 = parms[2].name()
-    node = parms[0].node()
-    node.setParmExpressions({name0: x, name1: y, name2: z})
-
-def vector3XMaster(kwargs):
-    name0 = parms[0].name()
-    name1 = parms[1].name()
-    name2 = parms[2].name()
-    node = parms[0].node()
-    node.setParmExpressions({name1: 'ch("'+name0+'")', name2: 'ch("'+name0+'")'})
diff --git a/python3.11libs/hclib/utils/hcprinter.py b/python3.11libs/hclib/utils/hcprinter.py
deleted file mode 100644
index 2a30605..0000000
--- a/python3.11libs/hclib/utils/hcprinter.py
+++ /dev/null
@@ -1,24 +0,0 @@
-import hou
-
-
-class Printer():
-    def __init__(self):
-        self.message = ""
-    __init__.interactive = False
-
-    def layout(self):
-        message = "Layout:"
-        desktop = hou.ui.curDesktop()
-        panes = desktop.panes()
-        ct = 0
-        for pane in panes:
-            message += " Pane" + str(ct) + " -"
-            if pane.isSplit():
-                message += " split"
-            else:
-                message += " whole"
-                message += "    "
-            ct += 1
-        message = message[0:-1]
-        hou.ui.setStatusMessage(message)
-    layout.interactive = True
diff --git a/python3.11libs/hclib/utils/hcradialutils.py b/python3.11libs/hclib/utils/hcradialutils.py
deleted file mode 100644
index dc84ef0..0000000
--- a/python3.11libs/hclib/utils/hcradialutils.py
+++ /dev/null
@@ -1,183 +0,0 @@
-import hou
-from hclib import HCGlobal, HCPane, HCSceneViewer, HCTab
-
-"""
-Notes: tab object is retrieved by calling kwargs["pane"]
-"""
-
-def createItem(label="label", pos=0, submenu=False, script='script'):
-    item = hou.ui.createRadialItem(submenu=submenu)
-    item.setLabel(label)
-    item.setScript(script)
-    hou.ui.injectRadialItem(pos, item)
-
-"""
-Viewer menu
-"""
-
-def viewerRadialMain(**kwargs):
-    menu = hou.ui.createRadialMenu('hcviewerradial', "HC Viewer Radial")
-    createItem(
-        pos=0,
-        label="UI",
-        submenu=True, script='from hclib import hcradialutils; hcradialutils.viewerRadialUI()'
-    )
-    createItem(
-        pos=7,
-        label="Operation bar",
-        script='from hclib import HCSceneViewer; HCSceneViewer(kwargs["pane"]).toggleOperationBar()'
-    )
-    createItem(
-        pos=6,
-        label="Display bar",
-        script='from hclib import HCSceneViewer; HCSceneViewer(kwargs["pane"]).toggleDisplayOptionsToolbar()'
-    )
-    createItem(
-        pos=5,
-        label="Selection bar",
-        script='from hclib import HCSceneViewer; HCSceneViewer(kwargs["pane"]).toggleSelectionBar()'
-    )
-    createItem(
-        pos=4,
-        label="Keycam",
-        script='from hclib import HCSceneViewer; HCSceneViewer(kwargs["pane"]).keycam()'
-    )
-    return menu
-
-def viewerRadialLayout(**kwargs):
-    menu = hou.ui.createRadialMenu('hcviewerradial', "HC Viewer Radial")
-    createItem(
-        pos=0,
-        label="DoubleSide",
-        script='from hclib import HCSceneViewer; HCSceneViewer(kwargs["pane"]).setLayout("DoubleSide")'
-    )
-    createItem(
-        pos=1,
-        label="DoubleStack",
-        script='from hclib import HCSceneViewer; HCSceneViewer(kwargs["pane"]).setLayout("DoubleStack")'
-    )
-    createItem(
-        pos=2,
-        label="Quad",
-        script='from hclib import HCSceneViewer; HCSceneViewer(kwargs["pane"]).setLayout("Quad")'
-    )
-    createItem(
-        pos=3,
-        label="QuadBottomSplit",
-        script='from hclib import HCSceneViewer; HCSceneViewer(kwargs["pane"]).setLayout("QuadBottomSplit")'
-    )
-    createItem(
-        pos=4,
-        label="QuadLeftSplit",
-        script='from hclib import HCSceneViewer; HCSceneViewer(kwargs["pane"]).setLayout("QuadLeftSplit")'
-    )
-    createItem(
-        pos=5,
-        label="Single",
-        script='from hclib import HCSceneViewer; HCSceneViewer(kwargs["pane"]).setLayout("Single")'
-    )
-    createItem(
-        pos=6,
-        label="TripleBottomSplit",
-        script='from hclib import HCSceneViewer; HCSceneViewer(kwargs["pane"]).setLayout("TripleBottomSplit")'
-    )
-    createItem(
-        pos=7,
-        label="TripleLeftSplit",
-        script='from hclib import HCSceneViewer; HCSceneViewer(kwargs["pane"]).setLayout("TripleLeftSplit")'
-    )
-    return menu
-
-def viewerRadialUI(**kwargs):
-    menu = hou.ui.createRadialMenu('hcviewerradial', "HC Viewer Radial")
-    createItem(
-        pos=0,
-        label="Tabs",
-        script='from hclib import HCTab; HCTab(kwargs["pane"]).hcPane().toggleTabs()'
-    )
-    createItem(
-        pos=7,
-        label="Path",
-        script='from hclib import HCTab; HCTab(kwargs["pane"]).toggleNetworkControls()'
-    )
-    createItem(
-        pos=6,
-        label="Maximize",
-        script='from hclib import HCTab; HCTab(kwargs["pane"]).hcPane().toggleMaximize()'
-    )
-    createItem(
-        pos=5,
-        label="Stowbars",
-        script='from hclib import HCGlobal; HCGlobal().toggleStowbars()'
-    )
-    createItem(
-        pos=4,
-        label="Global tabs",
-        script='from hclib import HCGlobal; HCGlobal().toggleTabs()'
-    )
-    createItem(
-        pos=3,
-        label="Global paths",
-        script='from hclib import HCGlobal; HCGlobal().toggleNetworkControls()'
-    )
-    createItem(
-        pos=2,
-        label="Layout",
-        submenu=True, script='from hclib import hcradialutils; hcradialutils.viewerRadialLayout()'
-    )
-    return menu
-
-
-def editorRadialMain(**kwargs):
-    menu = hou.ui.createRadialMenu('hceditorradial', "HC Editor Radial")
-    createItem(
-        pos=0,
-        submenu=True,
-        label="UI",
-        script='from hclib import hcradialutils; hcradialutils.editorRadialUI()'
-    )
-    createItem(
-        pos=7,
-        label="Menu",
-        script='from hclib import HCNetworkEditor; HCNetworkEditor(kwargs["pane"]).toggleMenu()'
-    )
-    createItem(
-        pos=6,
-        label="Frame all",
-        script='from hclib import HCNetworkEditor; HCNetworkEditor(kwargs["pane"]).frameAll()'
-    )
-    return menu
-
-def editorRadialUI(**kwargs):
-    menu = hou.ui.createRadialMenu('hceditorradial', "HC Editor Radial")
-    createItem(
-        pos=0,
-        label="Tabs",
-        script='from hclib import HCTab; HCTab(kwargs["pane"]).hcPane().toggleTabs()'
-    )
-    createItem(
-        pos=7,
-        label="Path",
-        script='from hclib import HCTab; HCTab(kwargs["pane"]).toggleNetworkControls()'
-    )
-    createItem(
-        pos=6,
-        label="Global tabs",
-        script='from hclib import HCGlobal; HCGlobal().toggleTabs()'
-    )
-    createItem(
-        pos=5,
-        label="Global paths",
-        script='from hclib import HCGlobal; HCGlobal().toggleNetworkControls()'
-    )
-    createItem(
-        pos=4,
-        label="Stowbars",
-        script='from hclib import HCGlobal; HCGlobal().toggleStowbars()'
-    )
-    createItem(
-        pos=3,
-        label="Maximize",
-        script='from hclib import HCTab; HCTab(kwargs["pane"]).hcPane().toggleMaximize()'
-    )
-    return menu
diff --git a/python3.11libs/hclib/utils/hcutils.py b/python3.11libs/hclib/utils/hcutils.py
deleted file mode 100644
index e69de29..0000000
diff --git a/scripts/beforescenesave.py b/scripts/beforescenesave.py
deleted file mode 100644
index 5b9bf20..0000000
--- a/scripts/beforescenesave.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# import os.path
-
-# print("--BEGIN beforescenesave.py--")
-# #####################################
-
-
-# this_path = hou.hipFile.path()
-
-# path = "~/src/hou-ctl/recent_paths"
-# path = os.path.expanduser(path)
-# file = open(path, "r")
-# path_arr = file.read().split("\n")
-
-# if this_path in path_arr:
-#     path_arr.remove(this_path)
-# path_arr.insert(0, this_path)
-
-# file = open(path, "w")
-# file.write("\n".join(path_arr))
-
-
-# ###################################
-# print("--END beforescenesave.py--")
diff --git a/scripts/diffuse.py b/scripts/diffuse.py
deleted file mode 100755
index 2997acc..0000000
--- a/scripts/diffuse.py
+++ /dev/null
@@ -1,38 +0,0 @@
-import hou
-
-def gainlosslink(kwargs):
-
-    node = kwargs["node"]
-
-    gain = node.parm("gain").eval()
-
-    loss = node.parm("loss")
-
-    loss.set(gain)
-
-def avg(node):
-    
-    valnode = hou.node('./valnode')
-    geo = valnode.geometry()
-    avg = geo.attribValue('avg')
-    
-    thisnode = hou.pwd()
-    thisnode.parm('diffusegoal').set(avg)
-    
-def min(node):
-    
-    valnode = hou.node('./valnode')
-    geo = valnode.geometry()
-    min = geo.attribValue('min')
-    
-    thisnode = hou.pwd()
-    thisnode.parm('diffusegoal').set(min)
-    
-def max(node):
-    
-    valnode = hou.node('./valnode')
-    geo = valnode.geometry()
-    max = geo.attribValue('max')
-    
-    thisnode = hou.pwd()
-    thisnode.parm('diffusegoal').set(max)
\ No newline at end of file
diff --git a/scripts/generate_menu.py b/scripts/generate_menu.py
deleted file mode 100755
index 794a75e..0000000
--- a/scripts/generate_menu.py
+++ /dev/null
@@ -1,18 +0,0 @@
-node = kwargs['node']
-geometry = node.geometry()
-pts = geometry.pointAttribs()
-dets = geometry.globalAttribs()
-menu = []
-menu.append('pt_attrs')
-menu.append('Point Attributes:')
-for pt in pts:
-	menu.append('pt-' + pt.name())
-	menu.append(pt.name())
-menu.append('_separator_')
-menu.append('_separator_')
-menu.append('det_attrs')
-menu.append('Detail Attributes:')
-for det in dets:
-	menu.append('det-' + det.name())
-	menu.append(det.name())
-return(menu)
\ No newline at end of file
diff --git a/scripts/morpho_combine_module.py b/scripts/morpho_combine_module.py
deleted file mode 100755
index 6985d8a..0000000
--- a/scripts/morpho_combine_module.py
+++ /dev/null
@@ -1,12 +0,0 @@
-def update_description(kwargs):
-	node = kwargs['node']
-	n_inputs = len(node.inputs())
-	desc = ''
-	for n in range(n_inputs):
-		attr_parm = node.parm('attrs' + str(n))
-		if n != 0:
-			desc += '\n'
-		attr_str = attr_parm.evalAsString()
-		desc += str(n) + ': ' + attr_str
-	desc_parm = node.parm('desc')
-	desc_parm.set(desc)
\ No newline at end of file
diff --git a/scripts/morpho_combine_oninputchanged.py b/scripts/morpho_combine_oninputchanged.py
deleted file mode 100755
index 83c7d48..0000000
--- a/scripts/morpho_combine_oninputchanged.py
+++ /dev/null
@@ -1,39 +0,0 @@
-node = kwargs['node']
-
-inputs = node.inputs()
-n_inputs = len(inputs)
-
-group = hou.ParmTemplateGroup(())
-group.append(node.parm('iterations').parmTemplate())
-group.append(node.parm('desc').parmTemplate())
-
-for i in range(n_inputs):
-	string_template = hou.StringParmTemplate(
-		name='attrs' + str(i),
-		label='Input ' + str(i) + ' Attributes',
-		num_components=1,
-		default_value=(''),
-		item_generator_script="kwargs['node'].generateInputAttribMenu(" + str(i) + ", hou.attribType.Point)",
-		menu_type=hou.menuType.StringToggle,
-		script_callback='hou.phm().update_description(kwargs)',
-		script_callback_language=hou.scriptLanguage.Python)
-	group.append(string_template)
-
-node.setParmTemplateGroup(group)
-
-iterations_parm = node.parm('iterations')
-iterations_parm.set(n_inputs)
-
-#############
-
-node = kwargs['node']
-n_inputs = len(node.inputs())
-desc = ''
-for n in range(n_inputs):
-	attr_parm = node.parm('attrs' + str(n))
-	if n != 0:
-		desc += '\n'
-	attr_str = attr_parm.evalAsString()
-	desc += str(n) + ': ' + attr_str
-desc_parm = node.parm('desc')
-desc_parm.set(desc)
\ No newline at end of file
diff --git a/scripts/morpho_composite_module.py b/scripts/morpho_composite_module.py
deleted file mode 100755
index 33dfa72..0000000
--- a/scripts/morpho_composite_module.py
+++ /dev/null
@@ -1,70 +0,0 @@
-def update_description(kwargs):
-	node = kwargs['node']
-	n_ops_parm = node.parm('n_ops')
-	n_ops = n_ops_parm.evalAsInt()
-	desc = ''
-	for n_op in range(n_ops):
-		attr = node.parm('attr' + str(n_op)).evalAsString()
-		op = node.parm('op' + str(n_op)).evalAsString()
-		if op == 'set':
-			desc = attr + ' '
-
-		if op == 'add':
-			desc += '+ ' + attr + ' '
-
-		if op == 'sub':
-			desc += '- ' + attr + ' '
-
-		if op == 'multi':
-			desc += '* ' + attr + ' '
-
-		if op == 'raise':
-			desc += '^ ' + attr + ' '
-
-		if op == 'min':
-			desc = 'min(' + attr + ') '
-
-		if op == 'max':
-			desc = 'max(' + attr + ') '
-			
-		if op == 'avg':
-			desc = 'avg(' + attr + ') '
-
-	result = node.parm('result').evalAsString()
-	desc += '= ' + result
-	desc_parm = node.parm('desc')
-	desc_parm.set(desc)
-
-def op_menu(kwargs):
-	menu = []
-
-	node = kwargs['node']
-	mp_index = kwargs['script_multiparm_index']
-
-	new_type_parm = node.parm("type" + str(mp_index))
-	new_type = new_type_parm.evalAsString()
-
-	op_parm = node.parm("op" + str(mp_index))
-	op = op_parm.evalAsString()
-
-	current_type = "x"
-	if mp_index > 0:
-		current_type_parm = node.parm("type" + str(mp_index - 1))
-		current_type = current_type_parm.evalAsString()
-
-	if mp_index == 0:
-		menu = ["set", "Set"]
-
-	if new_type == "float" and current_type == "float":
-		menu = ["set", "Set", "add", "Add", "sub", "Subtract", "multi", "Multiply", "raise", "Raise", "min", "Min", "max", "Max", "avg", "Average"]
-
-	if new_type == "float" and current_type == "vec":
-		menu = ["set", "Set", "multi", "Multiply", "raise", "Raise"]
-
-	if new_type == "vec" and current_type == "float":
-		menu = ["set", "Set", "multi", "Multiply"]
-
-	if new_type == "vec" and current_type == "vec":
-		menu = ["set", "Set", "add", "Add", "sub", "Subtract", "multi", "Multiply", "min", "Min", "max", "Max", "avg", "Average"]
-
-	return menu
\ No newline at end of file
diff --git a/scripts/morpho_develop_module.py b/scripts/morpho_develop_module.py
deleted file mode 100755
index 290cca4..0000000
--- a/scripts/morpho_develop_module.py
+++ /dev/null
@@ -1,7 +0,0 @@
-def desc(kwargs):
-	node = kwargs['node']
-	dir_attr = node.parm('dir_attr').evalAsString()
-	multi__attr = node.parm('multi_attr').evalAsString()
-	desc_parm = node.parm('desc')
-	desc = '@P += ' + dir_attr + ' * ' + multi__attr
-	desc_parm.set(desc)
\ No newline at end of file
diff --git a/scripts/morpho_panel_module.py b/scripts/morpho_panel_module.py
deleted file mode 100755
index 772c0c5..0000000
--- a/scripts/morpho_panel_module.py
+++ /dev/null
@@ -1,528 +0,0 @@
-import hou
-import importlib
-import ramp_color_presets
-import ramp_color_schemes
-
-def add_vis_callback(kwargs):
-	node = kwargs['node']
-	group = node.parmTemplateGroup()
-
-	vis_index = 0
-	for parm in group.entries():
-		if parm.type() == hou.parmTemplateType.Folder:
-			vis_index += 1
-
-	enable_template = hou.ToggleParmTemplate(
-		name='enable_' + str(vis_index),
-		label="Enable",
-		default_value=True,
-		script_callback='hou.phm().enable_callback(kwargs)',
-		script_callback_language=hou.scriptLanguage.Python,
-		join_with_next=True)
-
-	update_folder_name_template = hou.ButtonParmTemplate(
-		name='update_folder_name_' + str(vis_index),
-		label="Update Folder Name",
-		script_callback='hou.phm().update_folder_name_callback(kwargs)',
-		script_callback_language=hou.scriptLanguage.Python)
-
-	attr_template = hou.StringParmTemplate(
-		name='attr_' + str(vis_index),
-		label="Attribute",
-		num_components=1,
-		menu_items=('mag', 'mag2', 'mag3', 'dir', 'dir2', 'dir3'),
-		menu_labels=("mag", "mag2", "mag3", "dir", "dir2", "dir3"),
-		menu_type=hou.menuType.StringReplace,
-		script_callback='hou.phm().attr_callback(kwargs)',
-		script_callback_language=hou.scriptLanguage.Python)
-
-	type_template = hou.MenuParmTemplate(
-		name='type_' + str(vis_index),
-		label="Type",
-		menu_items=('color', 'marker'),
-		menu_labels=("Color", "Marker"),
-		script_callback='hou.phm().type_callback(kwargs)',
-		script_callback_language=hou.scriptLanguage.Python)
-
-	coloring_template = hou.MenuParmTemplate(
-		name='coloring_' + str(vis_index),
-		label="Coloring",
-		menu_items=('fixed', 'vec_val', 'vec_dir', 'attr'),
-		menu_labels=("Fixed Color", "Vector Values", "Vector Directions", "Attribute"),
-		script_callback='hou.phm().coloring_callback(kwargs)',
-		script_callback_language=hou.scriptLanguage.Python)
-	coloring_template.setConditional(
-		hou.parmCondType.HideWhen,
-		'{ type_' + str(vis_index) + ' != marker }')
-
-	coloring_attr_template = hou.StringParmTemplate(
-		name='coloring_attr_' + str(vis_index),
-		label="Coloring Attribute",
-		num_components=1,
-		menu_items=('mag', 'mag2', 'mag3', 'dir', 'dir2', 'dir3'),
-		menu_labels=("mag", "mag2", "mag3", "dir", "dir2", "dir3"),
-		menu_type=hou.menuType.StringReplace,
-		script_callback='hou.phm().coloring_attr_callback(kwargs)',
-		script_callback_language=hou.scriptLanguage.Python)
-	coloring_attr_template.setConditional(
-		hou.parmCondType.HideWhen,
-		'{ type_' + str(vis_index) + ' != marker } { coloring_' + str(vis_index) + ' != attr }')
-
-	sep1_template = hou.SeparatorParmTemplate(
-		name='sep1_' + str(vis_index))
-
-	preset_template = hou.MenuParmTemplate(
-		name='preset_' + str(vis_index),
-		label="Preset",
-		menu_items=(),
-		menu_labels=(),
-		item_generator_script='hou.phm().generate_preset_menu()',
-		script_callback='hou.phm().preset_callback(kwargs)',
-		script_callback_language=hou.scriptLanguage.Python,
-		join_with_next=True)
-	preset_template.setConditional(
-		hou.parmCondType.HideWhen,
-		'{ type_' + str(vis_index) + ' == marker coloring_' + str(vis_index) + ' == fixed }')
-
-	del_preset_template = hou.ButtonParmTemplate(
-		name='del_preset_' + str(vis_index),
-		label="Delete",
-		script_callback='hou.phm().del_preset_callback(kwargs)',
-		script_callback_language=hou.scriptLanguage.Python)
-	del_preset_template.setConditional(
-		hou.parmCondType.HideWhen,
-		'{ type_' + str(vis_index) + ' == marker coloring_' + str(vis_index) + ' == fixed }')
-
-	interpol_template = hou.MenuParmTemplate(
-		name='interpol_' + str(vis_index),
-		label="Interpolation",
-		menu_items=('Constant', 'Linear', 'CatmullRom', 'MonotoneCubic', 'Bezier', 'BSpline', 'Hermite'),
-		menu_labels=("Constant", "Linear", "Catmull-Rom", "Monotone-Cubic", "Bezier", "B-Spline", "Hermite"),
-		default_value=3,
-		script_callback='hou.phm().interpol_callback(kwargs)',
-		script_callback_language=hou.scriptLanguage.Python)
-	interpol_template.setConditional(
-		hou.parmCondType.HideWhen,
-		'{ type_' + str(vis_index) + ' == marker coloring_' + str(vis_index) + ' == fixed }')
-	
-	ramp_template = hou.RampParmTemplate(
-		name='ramp_' + str(vis_index),
-		label=" ",
-		ramp_parm_type=hou.rampParmType.Color,
-		show_controls=False,
-		script_callback='hou.phm().ramp_callback(kwargs)',
-		script_callback_language=hou.scriptLanguage.Python)
-	ramp_template.setConditional(
-		hou.parmCondType.HideWhen,
-		'{ type_' + str(vis_index) + ' == marker coloring_' + str(vis_index) + ' == fixed }')
-	
-	color_template = hou.FloatParmTemplate(
-		name='color_' + str(vis_index),
-		label="Color",
-		num_components=3,
-		naming_scheme=hou.parmNamingScheme.RGBA,
-		look=hou.parmLook.ColorSquare,
-		script_callback='hou.phm().color_callback(kwargs)',
-		script_callback_language=hou.scriptLanguage.Python)
-	color_template.setConditional(
-		hou.parmCondType.HideWhen,
-		'{ type_' + str(vis_index) + ' != marker } { coloring_' + str(vis_index) + ' != fixed }')
-	
-	length_template = hou.FloatParmTemplate(
-		name='length_' + str(vis_index),
-		label="Length",
-		num_components=1,
-		max=1.0,
-		script_callback='hou.phm().length_callback(kwargs)',
-		script_callback_language=hou.scriptLanguage.Python)
-	length_template.setConditional(
-		hou.parmCondType.HideWhen,
-		'{ type_' + str(vis_index) + ' != marker }')
-	
-	sep2_template = hou.SeparatorParmTemplate(
-		name='sep2_' + str(vis_index))
-	
-	del_vis_template = hou.ButtonParmTemplate(
-		name='del_vis_' + str(vis_index),
-		label="Delete Visualizer",
-		script_callback='hou.phm().del_vis_callback(kwargs)',
-		script_callback_language=hou.scriptLanguage.Python,
-		join_with_next=True)
-	
-	folder_template = hou.FolderParmTemplate(
-		name='folder_' + str(vis_index),
-		label="Vis " + str(vis_index),
-		parm_templates=([
-			enable_template,
-			update_folder_name_template,
-			attr_template,
-			type_template,
-			coloring_template,
-			coloring_attr_template,
-			sep1_template,
-			preset_template,
-			del_preset_template,
-			interpol_template,
-			ramp_template,
-			color_template,
-			length_template,
-			sep2_template,
-			del_vis_template]),
-		folder_type=hou.folderType.Tabs)
-
-	group.append(folder_template)
-	node.setParmTemplateGroup(group)
-
-	vis = hou.viewportVisualizers.createVisualizer(
-		hou.viewportVisualizers.type('vis_color'),
-		hou.viewportVisualizerCategory.Node,
-		hou.node('./vis'))
-	update(kwargs)
-
-def enable_callback(kwargs):
-	vis_index = kwargs['parm_name'].removeprefix('enable_')
-	vis = get_vis(vis_index)
-	val = kwargs['parm'].evalAsInt()
-	if val == 1:
-		vis.setIsActive(True)
-	if val == 0:
-		vis.setIsActive(False)
-
-def attr_callback(kwargs):
-	vis_index = kwargs['parm_name'].removeprefix('attr_')
-	vis = get_vis(vis_index)
-	val = kwargs['parm'].evalAsString()
-	vis.setParm('attrib', val)
-
-def type_callback(kwargs):
-	vis_index = kwargs['parm_name'].removeprefix('type_')
-	vis = get_vis(vis_index)
-	val = kwargs['parm'].evalAsInt()
-	if val == 0:
-		vis.setType(hou.viewportVisualizers.types()[1])
-		vis.setParm('colortype', 1)
-		vis.setParm('rangespec', 1)
-		vis.setParm('clamptype', 1)
-	if val == 1:
-		vis.setType(hou.viewportVisualizers.types()[0])
-		vis.setParm('style', 4)
-		kwargs['node'].parm('coloring_' + str(vis_index)).pressButton()
-
-def coloring_callback(kwargs):
-	if kwargs['parm'].isHidden() == False:
-		vis_index = kwargs['parm_name'].removeprefix('coloring_')
-		vis = get_vis(vis_index)
-		val = kwargs['parm'].evalAsInt()
-		vis.setParm('vectorcoloring', val)
-		if val == 0:
-			kwargs['node'].parm('color_' + str(vis_index) + 'r').pressButton()
-		if val != 0:
-			vis.setParm('ramptype', 6)
-			vis.setParm('rangespec', 0)
-		if val == 3:
-			kwargs['node'].parm('coloring_attr_' + str(vis_index)).pressButton()
-
-def preset_callback(kwargs):
-	if kwargs['parm'].isHidden() == False:
-		vis_index = kwargs['parm_name'].removeprefix('preset_')
-		val = kwargs['parm'].evalAsString()
-		ramp_parm = kwargs['node'].parm('ramp_' + str(vis_index))
-		
-		if val == 'new':
-			new_preset(parm, ramp_parm)
-			kwargs['parm'].set(0)
-		if val == '_separator_':
-			return
-		if val != 'new' and val != '_separator_':
-			vis = get_vis(vis_index)
-			ramp_val = getattr(ramp_color_schemes, val)
-			ramp_parm.set(ramp_val)
-			vis.setParm('colorramp', ramp_val)
-
-def del_preset_callback(kwargs):
-	node = kwargs['node']
-	parm = kwargs['parm']
-
-	vis_index = kwargs['parm_name'].removeprefix('del_preset_')
-	preset_parm = kwargs['node'].parm('preset_' + str(vis_index))
-	preset_val = preset_parm.evalAsString()
-
-	menu = ramp_color_presets.menu
-	menu.remove(preset_val)
-	menu.remove(preset_val)
-
-	presets_file = open('C:/Users/lucas/OneDrive/Git/morphogen/scripts/ramp_color_presets.py', 'w')
-	presets_file.write('menu=' + str(menu))
-	presets_file.close()
-	preset_parm.set(0)
-
-	scheme = getattr(ramp_color_schemes, preset_val)
-	scheme = new_scheme(preset_val, scheme)
-
-	path = 'C:/Users/lucas/OneDrive/Git/morphogen/scripts/ramp_color_schemes.py'
-
-	schemes_file = open(path, 'r').read()
-	ramp_color_schemes = schemes_file.replace(scheme, '')
-	schemes_file.close()
-
-	schemes_file = open(path, 'w')
-	schemes_file.write(ramp_color_schemes)
-	schemes_file.close()
-
-	importlib.reload(ramp_color_presets)
-	importlib.reload(ramp_color_schemes)
-
-def interpol_callback(kwargs):
-	if kwargs['parm'].isHidden() == False:
-		vis_index = kwargs['parm_name'].removeprefix('interpol_')
-		vis = get_vis(vis_index)
-		val = kwargs['parm'].evalAsString()
-
-		ramp_parm = kwargs['node'].parm('ramp_' + str(vis_index))
-		ramp_val = ramp_parm.evalAsRamp()
-		
-		basis = ramp_val.basis()
-		keys = ramp_val.keys()
-		values = ramp_val.values()
-		
-		new_basis = []
-		for x in basis:
-				new_basis.append(eval('hou.rampBasis.' + val))
-
-		new_ramp = hou.Ramp(new_basis, keys, values)
-		ramp_parm.set(new_ramp)
-		
-		vis.setParm('colorramp', new_ramp)
-
-def ramp_callback(kwargs):
-	if kwargs['parm'].isHidden() == False:
-		vis_index = kwargs['parm_name'].removeprefix('ramp_')
-		vis = get_vis(vis_index)
-		val = kwargs['parm'].evalAsRamp()
-
-		vis.setParm('colorramp', val)
-
-def color_callback(kwargs):
-	vis_index = kwargs['parm_name'].removeprefix('color_')
-	vis_index = str(vis_index).removesuffix('r')
-	vis = get_vis(vis_index)
-
-	if kwargs['node'].parm('color_' + vis_index + 'r').isHidden() == False:
-		colorr = kwargs['node'].parm('color_' + vis_index + 'r').eval()
-		colorg = kwargs['node'].parm('color_' + vis_index + 'g').eval()
-		colorb = kwargs['node'].parm('color_' + vis_index + 'b').eval()
-
-		vis.setParm('markercolorr', colorr)
-		vis.setParm('markercolorg', colorg)
-		vis.setParm('markercolorb', colorb)
-
-def coloring_attr_callback(kwargs):
-	if kwargs['parm'].isHidden() == False:
-		vis_index = kwargs['parm_name'].removeprefix('coloring_attr_')
-		vis = get_vis(vis_index)
-		val = kwargs['node'].parm('coloring_attr_' + str(vis_index)).evalAsString()
-
-		vis.setParm('colorattrib', val)
-
-def length_callback(kwargs):
-	if kwargs['parm'].isHidden() == False:
-		vis_index = kwargs['parm_name'].removeprefix('length_')
-		vis = get_vis(vis_index)
-		val = kwargs['parm'].evalAsFloat()
-		vis.setParm('lengthscale', val)
-
-def del_vis_callback(kwargs):
-	vis_index = kwargs['parm_name'].removeprefix('del_vis_')
-	vis = get_vis(vis_index)
-	vis.destroy()
-
-	group = kwargs['node'].parmTemplateGroup()
-	entries = list(group.entries())
-	entry_index = -1
-	folder_name = 'folder_0'
-	if vis_index != '0':
-		folder_name = 'folder_0_' + str(vis_index)
-	for entry in entries:
-		entry_index += 1
-		if entry.name() == folder_name:
-			entries.pop(entry_index)
-
-	vis_index = -1
-	for entry in entries:
-		if entry.type() == hou.parmTemplateType.Folder:
-			vis_index += 1
-			if vis_index == 0:
-				entry.setName('folder_0')
-			else:
-				entry.setName('folder_0_' + str(vis_index))
-			parm_templates = entry.parmTemplates()
-			index = -1
-			for parm_template in parm_templates:
-				index += 1
-				if parm_template.label() == 'Enable':
-					new_name = 'enable_' + str(vis_index)
-					parm_template.setName(new_name)
-
-				if parm_template.label() == 'Update Folder Name':
-					parm_template.setName('update_folder_name_' + str(vis_index))
-					
-				if parm_template.label() == 'Attribute':
-					parm_template.setName('attr_' + str(vis_index))
-				
-				if parm_template.label() == 'Type':
-					parm_template.setName('type_' + str(vis_index))
-				
-				if parm_template.label() == 'Coloring':
-					parm_template.setName('coloring_' + str(vis_index))
-					parm_template.setConditional(
-						hou.parmCondType.HideWhen,
-						'{ type_' + str(vis_index) + ' != marker }')
-				
-				if parm_template.label() == 'Coloring Attribute':
-					parm_template.setName('coloring_attr_' + str(vis_index))
-					parm_template.setConditional(
-						hou.parmCondType.HideWhen,
-						'{ type_' + str(vis_index) + ' != marker } { coloring_' + str(vis_index) + ' != attr }')
-				
-				if parm_template.name().find('sep1') >= 0:
-					parm_template.setName('sep1_' + str(vis_index))
-				
-				if parm_template.label() == 'Preset':
-					parm_template.setName('preset_' + str(vis_index))
-					parm_template.setConditional(
-						hou.parmCondType.HideWhen,
-						'{ type_' + str('vis_index') + ' == marker coloring_' + str(vis_index) + ' == fixed }')
-				
-				if parm_template.label() == 'Delete':
-					parm_template.setName('del_preset_' + str(vis_index))
-					parm_template.setConditional(
-						hou.parmCondType.HideWhen,
-						'{ type_' + str('vis_index') + ' == marker coloring_' + str(vis_index) + ' == fixed }')
-				
-				if parm_template.label() == 'Interpolation':
-					parm_template.setName('interpol_' + str(vis_index))
-					parm_template.setConditional(
-						hou.parmCondType.HideWhen,
-						'{ type_' + str(vis_index) + ' == marker coloring_' + str(vis_index) + ' == fixed }')
-				
-				if parm_template.type() == hou.parmTemplateType.Ramp:
-					parm_template.setName('ramp_' + str(vis_index))
-					parm_template.setConditional(
-						hou.parmCondType.HideWhen,
-						'{ type_' + str(vis_index) + ' == marker coloring_' + str(vis_index) + ' == fixed }')
-
-				if parm_template.label() == 'Color':
-					parm_template.setName('color_' + str(vis_index))
-					parm_template.setConditional(
-						hou.parmCondType.HideWhen,
-						'{ type_' + str(vis_index) + ' != marker } { coloring_' + str(vis_index) + ' != fixed }')
-				
-				if parm_template.label() == 'Length':
-					parm_template.setName('length_' + str(vis_index))
-					parm_template.setConditional(
-						hou.parmCondType.HideWhen,
-						'{ type_' + str(vis_index) + ' != marker }')
-				
-				if parm_template.name().find('sep2') >= 0:
-					parm_template.setName('sep2_' + str(vis_index))
-
-				if parm_template.label() == 'Delete Visualizer':
-					parm_template.setName('del_vis_' + str(vis_index))
-
-			entry.setParmTemplates(parm_templates)
-
-	# print(entries)
-
-	kwargs['node'].setParmTemplateGroup(hou.ParmTemplateGroup(entries))
-	
-	update(kwargs)
-
-def update(kwargs):	
-	visualizers = hou.viewportVisualizers.visualizers(hou.viewportVisualizerCategory.Node, hou.node('./vis'))
-	vis_index = 0
-	for visualizer in visualizers:
-		vis_index = str(vis_index)
-		kwargs['node'].parm('enable_' + vis_index).pressButton()
-		kwargs['node'].parm('type_' + vis_index).pressButton()
-		kwargs['node'].parm('attr_' + vis_index).pressButton()
-		kwargs['node'].parm('preset_' + vis_index).pressButton()
-		kwargs['node'].parm('coloring_' + vis_index).pressButton()
-		kwargs['node'].parm('coloring_attr_' + vis_index).pressButton()
-		kwargs['node'].parm('ramp_' + vis_index).pressButton()
-		kwargs['node'].parm('color_' + vis_index + 'r').pressButton()
-		kwargs['node'].parm('length_' + vis_index).pressButton()
-		vis_index = int(vis_index)
-		vis_index += 1
-
-def update_folder_name_callback(kwargs):
-	node = kwargs['node']
-	parm = kwargs['parm']
-	vis_index = kwargs['parm_name'].removeprefix('update_folder_name_')
-	attr_parm = node.parm('attr_' + str(vis_index))
-	attr_val = attr_parm.evalAsString()
-
-	group = node.parmTemplateGroup()
-	
-	entries = group.entries()
-	
-	folder_template = entries[int(vis_index) + 2]
-	new_folder_template = folder_template.clone()
-
-	if attr_val == "":
-		new_folder_template.setLabel("Vis " + vis_index)
-
-	else:
-		new_folder_template.setLabel(attr_val)
-
-	group.replace(folder_template, new_folder_template)
-
-	node.setParmTemplateGroup(group)
-
-def get_vis(vis_index):
-	vistup = hou.viewportVisualizers.visualizers(
-		hou.viewportVisualizerCategory.Node,
-		hou.node('./vis'))
-	vis = vistup[int(vis_index)]
-	return(vis)
-
-def generate_preset_menu():
-	importlib.reload(ramp_color_presets)
-	menu = ramp_color_presets.menu
-	return(menu)
-
-def new_preset(preset_parm, ramp_parm):
-	new_name = hou.ui.readInput("New Preset", buttons = ("Add", "Cancel"))
-	if new_name[0] == 0:
-		menu = ramp_color_presets.menu
-		menu.insert(0, new_name[1])
-		menu.insert(0, new_name[1])
-
-		ramp_val = ramp_parm.evalAsRamp()
-		new_scheme = new_scheme(new_name[1], ramp_val)
-		
-		menu_file = open('C:/Users/lucas/OneDrive/Git/morphogen/scripts/ramp_color_presets.py', 'w')
-		menu_file.write('menu=' + str(menu))
-		menu_file.close()
-
-		scheme_file = open('C:/Users/lucas/OneDrive/Git/morphogen/scripts/ramp_color_schemes.py', 'a')
-		scheme_file.write(new_scheme)
-		scheme_file.close()
-
-		importlib.reload(ramp_color_presets)
-		importlib.reload(ramp_color_schemes)
-		preset_parm.set(0)
-
-def new_scheme(preset_val, ramp_val):
-	basis = ramp_val.basis()
-	basis = tuple('hou.' + str(x) for x in basis)
-	basis = str(basis).replace("'", "")
-
-	keys = ramp_val.keys()
-	keys = tuple(round(x, 4) for x in keys)
-
-	values = ramp_val.values()
-	values = tuple(tuple(round(x2, 4) for x2 in x) for x in values)
-
-	scheme = '\n' + preset_val + '=' + 'hou.Ramp(' + str(basis) + ',' + str(keys) + ',' + str(values) + ')\n'
-
-	return(scheme)
\ No newline at end of file
diff --git a/scripts/morpho_ramp_module.py b/scripts/morpho_ramp_module.py
deleted file mode 100755
index 627524c..0000000
--- a/scripts/morpho_ramp_module.py
+++ /dev/null
@@ -1,113 +0,0 @@
-import hou
-import importlib
-import ramp_float_presets
-import ramp_color_presets
-import ramp_float_schemes
-import ramp_color_schemes
-
-def preset_float_callback(kwargs):
-	importlib.reload(ramp_float_schemes)
-	node = kwargs['node']
-	preset_parm = kwargs['parm']
-	preset_val = preset_parm.evalAsString()
-	ramp_parm = node.parm('ramp_float')
-
-	importlib.reload(ramp_float_presets)
-	if preset_val == 'new':
-		new_name = hou.ui.readInput("New Preset", buttons=("Add", "Cancel"))
-
-		if new_name[0] == 0:
-			presets = ramp_float_presets.presets
-			presets.insert(0, new_name[1])
-			presets.insert(0, new_name[1])
-			presets_file = open('C:/Users/lucas/OneDrive/Git/morphogen/scripts/ramp_float_presets.py', 'w')
-			presets_file.write('presets=' + str(presets))
-			presets_file.close()
-
-			ramp_basis = ramp_parm.eval().basis()
-			ramp_keys = ramp_parm.eval().keys()
-			ramp_values = ramp_parm.eval().values()
-			new_scheme = (ramp_basis, ramp_keys, ramp_values)
-			schemes_file = open('C:/Users/lucas/OneDrive/Git/morphogen/scripts/ramp_float_schemes.py', 'a')
-			schemes_file.write('\n' + new_name[1] + '=Ramp' + str(new_scheme))
-			schemes_file.close()
-
-			importlib.reload(ramp_float_presets)
-			importlib.reload(ramp_float_schemes)
-			preset_parm.set(0)
-
-	else:
-		new_ramp_val = getattr(ramp_float_schemes, preset_val)
-		ramp_parm.set(new_ramp_val)
-
-def del_preset_float_callback(kwargs):
-	node = kwargs['node']
-	parm = kwargs['parm']
-
-	preset_parm = node.parm('preset_float')
-	preset_val = preset_parm.evalAsString()
-	presets = ramp_float_presets.presets
-	presets.remove(preset_val)
-	presets.remove(preset_val)
-	presets_file = open('C:/Users/lucas/OneDrive/Git/morphogen/scripts/ramp_float_presets.py', 'w')
-	presets_file.write('presets=' + str(presets))
-	presets_file.close()
-	preset_parm.set(0)
-
-	scheme = getattr(ramp_float_schemes, preset_val)
-	basis = scheme.basis()
-	keys = scheme.keys()
-	values = scheme.values()
-	scheme = preset_val + '=Ramp' + str((basis, keys, values))
-	# print(scheme)
-
-	schemes_file_path = 'C:/Users/lucas/OneDrive/Git/morphogen/scripts/ramp_float_schemes.py'
-
-	schemes_file = open(schemes_file_path, 'r')
-	schemes_str = schemes_file.read()
-	schemes_file.close()
-	schemes = schemes_str.replace(scheme, '')
-
-	schemes_file = open(schemes_file_path, 'w')
-	schemes_file.write(schemes)
-	schemes_file.close()
-
-	importlib.reload(ramp_float_presets)
-	importlib.reload(ramp_float_schemes)
-
-def interpolation_float_callback(kwargs):
-	node = kwargs['node']
-	interpolation_parm = kwargs['parm']
-	interpolation_val = interpolation_parm.evalAsString()
-	ramp_parm = node.parm('ramp_float')
-	ramp_basis = ramp_parm.eval().basis()
-	new_basis = []
-	for basis in ramp_basis:
-		new_basis.append(eval('hou.rampBasis.' + interpolation_val))
-	ramp_keys = ramp_parm.eval().keys()
-	ramp_values = ramp_parm.eval().values()
-	new_ramp_val = hou.Ramp(new_basis, ramp_keys, ramp_values)
-	ramp_parm.set(hou.Ramp(new_basis, ramp_keys, ramp_values))
-
-def attr_menu_callback(kwargs):
-	node = kwargs['node']
-	parm = kwargs['parm']
-	val_str = parm.evalAsString()
-	val_int = parm.evalAsInt()
-	attr_parm = node.parm('attr')
-	attr_parm.set(val_str)
-
-	index = node.parm('index').evalAsInt()
-	data_parm = node.parm('data')
-	if val_int < index:
-		data_parm.set(0)
-	else:
-		data_parm.set(1)
-
-def attr_callback(kwargs):
-	node = kwargs['node']
-	parm = kwargs['parm']
-	
-	parm_int = parm.evalAsInt()
-	print(parm_int)
-	index = node.parm('index').evalAsInt()
\ No newline at end of file
diff --git a/scripts/source_created.py b/scripts/source_created.py
deleted file mode 100755
index 086499d..0000000
--- a/scripts/source_created.py
+++ /dev/null
@@ -1,8 +0,0 @@
-import hou
-
-network = hou.node(".")
-node = kwargs['node']
-
-solver = network.createNode("morphosolver")
-
-solver.setInput(0, node, 0)
\ No newline at end of file
diff --git a/scripts/source_module.py b/scripts/source_module.py
deleted file mode 100755
index cfff4dc..0000000
--- a/scripts/source_module.py
+++ /dev/null
@@ -1,564 +0,0 @@
-import hou
-import importlib
-import stain_menu
-import stain_schemes
-
-def addvis(kwargs):
-	node = kwargs['node']
-	group = node.parmTemplateGroup()
-	top_folder = group.findFolder("Visualizers")
-
-	vis_id = 0
-	bottom_folders = top_folder.parmTemplates()
-	for bottom_folder in bottom_folders:
-		vis_id += 1
-
-	vis_id = str(vis_id)
-
-	enable_template = hou.ToggleParmTemplate(
-		'enable_' + vis_id,
-		label = "Enable Visualizer",
-		default_value = True,
-		script_callback = 'hou.phm().enable(kwargs)',
-		script_callback_language = hou.scriptLanguage.Python)
-
-	attr_template = hou.StringParmTemplate(
-		name = 'attr_' + vis_id,
-		label = "Attribute",
-		num_components = 1,
-		menu_items = ('mag', 'mag2', 'mag3', 'dir', 'dir2', 'dir3'),
-		menu_labels = ("mag", "mag2", "mag3", "dir", "dir2", "dir3"),
-		menu_type = hou.menuType.StringReplace,
-		script_callback = 'hou.phm().attr(kwargs)',
-		script_callback_language = hou.scriptLanguage.Python)
-
-	type_template = hou.MenuParmTemplate(
-		name = 'type_' + vis_id,
-		label = "Type",
-		menu_items = ('color', 'marker'),
-		menu_labels = ("Color", "Marker"),
-		script_callback = 'hou.phm().type(kwargs)',
-		script_callback_language = hou.scriptLanguage.Python)
-
-	coloring_template = hou.MenuParmTemplate(
-		name = 'coloring_' + vis_id,
-		label = "Coloring",
-		menu_items = ('fixed', 'val', 'dir', 'other'),
-		menu_labels = ("Fixed Color", "Vector Values", "Vector Directions", "Other Attribute"),
-		script_callback = 'hou.phm().coloring(kwargs)',
-		script_callback_language = hou.scriptLanguage.Python)
-
-	coloring_template.setConditional(
-		hou.parmCondType.HideWhen,
-		'{ type_' + vis_id + ' != marker }')
-
-	otherattr_template = hou.StringParmTemplate(
-		name = 'otherattr_' + vis_id,
-		label = "Other Attribute",
-		num_components = 1,
-		menu_items = ('mag', 'mag2', 'mag3', 'dir', 'dir2', 'dir3'),
-		menu_labels = ("mag", "mag2", "mag3", "dir", "dir2", "dir3"),
-		menu_type = hou.menuType.StringReplace,
-		script_callback = 'hou.phm().otherattr(kwargs)',
-		script_callback_language = hou.scriptLanguage.Python)
-
-	otherattr_template.setConditional(
-		hou.parmCondType.HideWhen,
-		'{ type_' + vis_id + ' != marker } { coloring_' + vis_id + ' != other }')
-
-	sep1_template = hou.SeparatorParmTemplate(
-		name = 'sep1_' + vis_id)
-
-	preset_template = hou.MenuParmTemplate(
-		name = 'preset_' + vis_id,
-		label = "Preset",
-		menu_items = (),
-		menu_labels = (),
-		item_generator_script = 'hou.phm().presetmenu()',
-		script_callback = 'hou.phm().preset(kwargs)',
-		script_callback_language = hou.scriptLanguage.Python,
-		join_with_next = True)
-
-	preset_template.setConditional(
-		hou.parmCondType.HideWhen,
-		'{ type_' + vis_id + ' == marker coloring_' + vis_id + ' == fixed }')
-
-	delpreset_template = hou.ButtonParmTemplate(
-		name = 'delpreset_' + vis_id,
-		label = "Delete Preset",
-		script_callback = 'hou.phm().delpreset(kwargs)',
-		script_callback_language = hou.scriptLanguage.Python)
-
-	delpreset_template.setConditional(
-		hou.parmCondType.HideWhen,
-		'{ type_' + vis_id + ' == marker coloring_' + vis_id + ' == fixed }')
-
-	interpol_template = hou.MenuParmTemplate(
-		name = 'interpol_' + vis_id,
-		label = "Interpolation",
-		menu_items = ('Constant', 'Linear', 'CatmullRom', 'MonotoneCubic', 'Bezier', 'BSpline', 'Hermite'),
-		menu_labels = ("Constant", "Linear", "Catmull-Rom", "Monotone-Cubic", "Bezier", "B-Spline", "Hermite"),
-		default_value = 3,
-		script_callback = 'hou.phm().interpol(kwargs)',
-		script_callback_language = hou.scriptLanguage.Python)
-
-	interpol_template.setConditional(
-		hou.parmCondType.HideWhen,
-		'{ type_' + vis_id + ' == marker coloring_' + vis_id + ' == fixed }')
-
-	ramp_template = hou.RampParmTemplate(
-		name = 'ramp_' + vis_id,
-		label = "Color Ramp",
-		ramp_parm_type = hou.rampParmType.Color,
-		show_controls = False,
-		script_callback = 'hou.phm().ramp(kwargs)',
-		script_callback_language = hou.scriptLanguage.Python)
-
-	ramp_template.setConditional(
-		hou.parmCondType.HideWhen,
-		'{ type_' + vis_id + ' == marker coloring_' + vis_id + ' == fixed }')
-
-	color_template = hou.FloatParmTemplate(
-		name = 'color_' + vis_id,
-		label = "Color",
-		num_components = 3,
-		naming_scheme = hou.parmNamingScheme.RGBA,
-		look = hou.parmLook.ColorSquare,
-		script_callback = 'hou.phm().color(kwargs)',
-		script_callback_language = hou.scriptLanguage.Python)
-
-	color_template.setConditional(
-		hou.parmCondType.HideWhen,
-		'{ type_' + vis_id + ' != marker } { coloring_' + vis_id + ' != fixed }')
-
-	length_template = hou.FloatParmTemplate(
-		name = 'length_' + vis_id,
-		label = "Length Scale",
-		num_components = 1,
-		max = 1.0,
-		script_callback = 'hou.phm().length(kwargs)',
-		script_callback_language = hou.scriptLanguage.Python)
-
-	length_template.setConditional(
-		hou.parmCondType.HideWhen,
-		'{ type_' + vis_id + ' != marker }')
-
-	sep2_template = hou.SeparatorParmTemplate(
-		name = 'sep2_' + vis_id)
-
-	delvis_template = hou.ButtonParmTemplate(
-		name = 'delvis_' + vis_id,
-		label = "Delete Visualizer",
-		script_callback = 'hou.phm().delvis(kwargs)',
-		script_callback_language = hou.scriptLanguage.Python,
-		join_with_next = True)
-
-	foldername_template = hou.ButtonParmTemplate(
-		name = 'foldername_' + vis_id,
-		label = "Update Folder Name",
-		script_callback = 'hou.phm().foldername(kwargs)',
-		script_callback_language = hou.scriptLanguage.Python)
-
-	folder_template = hou.FolderParmTemplate(
-		name = 'folder_' + vis_id,
-		label = "Vis " + vis_id,
-		parm_templates = ([
-			enable_template,
-			attr_template,
-			type_template,
-			coloring_template,
-			otherattr_template,
-			sep1_template,
-			preset_template,
-			delpreset_template,
-			interpol_template,
-			ramp_template,
-			color_template,
-			length_template,
-			sep2_template,
-			delvis_template,
-			foldername_template]),
-		folder_type = hou.folderType.Tabs)
-
-	group.appendToFolder(top_folder, folder_template)
-	node.setParmTemplateGroup(group)
-
-	##
-
-	vis = hou.viewportVisualizers.createVisualizer(
-		hou.viewportVisualizers.type('vis_color'),
-		hou.viewportVisualizerCategory.Node,
-		hou.node('./vis'))
-
-	update(kwargs)
-
-def enable(kwargs):
-	parm = kwargs['parm']
-	vis_id = parm.containingFolderIndices()[1]
-	vis = getvis(vis_id)
-	val = parm.evalAsInt()
-	if val == 1:
-		vis.setIsActive(True)
-	if val == 0:
-		vis.setIsActive(False)
-
-def attr(kwargs):
-	node = kwargs['node']
-	parm = kwargs['parm']
-	vis_id = parm.containingFolderIndices()[1]
-	val = parm.evalAsString()
-	vis = getvis(vis_id)
-	vis.setParm('attrib', val)
-
-def type(kwargs):
-	node = kwargs['node']
-	parm = kwargs['parm']
-	val = parm.evalAsInt()
-	vis_id = parm.containingFolderIndices()[1]
-
-	vistypes = hou.viewportVisualizers.types()
-	vis = getvis(vis_id)
-	if val == 0:
-		vis.setType(vistypes[1])
-		vis.setParm('colortype', 1)
-		vis.setParm('rangespec', 1)
-		vis.setParm('clamptype', 1)
-	if val == 1:
-		vis.setType(vistypes[0])
-		vis.setParm('style', 4)
-		node.parm('coloring_' + str(vis_id)).pressButton()
-
-def coloring(kwargs):
-	node = kwargs['node']
-	parm = kwargs['parm']
-
-	if parm.isHidden() == False:
-		vis_id = parm.containingFolderIndices()[1]
-		val = parm.evalAsInt()
-		vis = getvis(vis_id)
-		vis.setParm('vectorcoloring', val)
-		if val == 0:
-			node.parm('color_' + str(vis_id) + 'r').pressButton()
-		if val != 0:
-			vis.setParm('ramptype', 6)
-			vis.setParm('rangespec', 0)
-		if val == 3:
-			node.parm('otherattr_' + str(vis_id)).pressButton()
-
-def preset(kwargs):
-	node = kwargs['node']
-	parm = kwargs['parm']
-
-	if parm.isHidden() == False:
-		val = parm.evalAsString()
-		vis_id = parm.containingFolderIndices()[1]
-		ramp_parm = node.parm('ramp_' + str(vis_id))
-		
-		if val == 'New...':
-			newpreset(parm, ramp_parm)
-			parm.set(0)
-		if val == '_separator_':
-			return
-		if val != 'New...' and val != '_separator_':
-			vis = getvis(vis_id)
-			ramp_val = getattr(stain_schemes, val)
-			ramp_parm.set(ramp_val)
-			vis.setParm('colorramp', ramp_val)
-
-def delpreset(kwargs):
-	node = kwargs['node']
-	parm = kwargs['parm']
-
-	vis_id = parm.containingFolderIndices()[1]
-	preset_parm = node.parm('preset_' + str(vis_id))
-	preset_val = preset_parm.evalAsString()
-
-	menu = stain_menu.menu
-	menu.remove(preset_val)
-	menu.remove(preset_val)
-
-	file = open('C:/Users/lucas/OneDrive/Git/morphogen/scripts/stain_menu.py', 'w')
-	file.write('menu=' + str(menu))
-	file.close()
-	preset_parm.set(0)
-
-	current_scheme = getattr(stain_schemes, preset_val)
-	current_scheme = create_scheme(preset_val, current_scheme)
-
-	path = 'C:/Users/lucas/OneDrive/Git/morphogen/scripts/stain_schemes.py'
-
-	file = open(path, 'r').read()
-	stain_schemes = file.replace(current_scheme, '')
-	file.close()
-
-	file = open(path, 'w')
-	file.write(stain_schemes)
-	write.close()
-
-	importlib.reload(stain_menu)
-	importlib.reload(stain_schemes)
-
-def interpol(kwargs):
-	node = kwargs['node']
-	parm = kwargs['parm']
-
-	if parm.isHidden() == False:
-		vis_id = parm.containingFolderIndices()[1]
-		val = parm.evalAsString()
-
-		ramp_parm = node.parm('ramp_' + str(vis_id))
-		ramp_val = ramp_parm.evalAsRamp()
-		
-		basis = ramp_val.basis()
-		keys = ramp_val.keys()
-		values = ramp_val.values()
-		
-		new_basis = []
-		for x in basis:
-				new_basis.append(eval('hou.rampBasis.' + val))
-
-		new_ramp = hou.Ramp(new_basis, keys, values)
-		ramp_parm.set(new_ramp)
-		
-		vis = getvis(vis_id)
-		vis.setParm('colorramp', new_ramp)
-
-def ramp(kwargs):
-	node = kwargs['node']
-	parm = kwargs['parm']
-
-	if parm.isHidden() == False:
-		val = parm.evalAsRamp()
-		vis_id = parm.containingFolderIndices()[1]
-
-		vis = getvis(vis_id)
-		vis.setParm('colorramp', val)
-
-def color(kwargs):
-	node = kwargs['node']
-	parm = kwargs['parm']
-
-	if parm.isHidden() == False:
-		vis_id = parm.containingFolderIndices()[1]
-		vis = getvis(vis_id)
-		vis_id = str(vis_id)
-		
-		colorr = node.parm('color_' + vis_id + 'r').eval()
-		colorg = node.parm('color_' + vis_id + 'g').eval()
-		colorb = node.parm('color_' + vis_id + 'b').eval()
-
-		vis.setParm('markercolorr', colorr)
-		vis.setParm('markercolorg', colorg)
-		vis.setParm('markercolorb', colorb)
-
-def otherattr(kwargs):
-	node = kwargs['node']
-	parm = kwargs['parm']
-
-	if parm.isHidden() == False:
-		vis_id = parm.containingFolderIndices()[1]
-		vis = getvis(vis_id)
-		val = node.parm('otherattr_' + str(vis_id)).evalAsString()
-		vis.setParm('colorattrib', val)
-
-def length(kwargs):
-	node = kwargs['node']
-	parm = kwargs['parm']
-
-	if parm.isHidden() == False:
-		vis_id = parm.containingFolderIndices()[1]
-		val = parm.evalAsFloat()
-		vis = getvis(vis_id)
-		vis.setParm('lengthscale', val)
-
-def delvis(kwargs):
-	node = kwargs['node']
-	parm = kwargs['parm']
-	vis_id = parm.containingFolderIndices()[1]
-	vis = getvis(vis_id)
-	vis.destroy()
-
-	group = node.parmTemplateGroup()
-	top_folder = group.findFolder("Visualizers")
-	bottom_folders = list(top_folder.parmTemplates())
-	bottom_folders.pop(vis_id)
-	top_folder.setParmTemplates(bottom_folders)
-	group.replace((4,), top_folder)
-	node.setParmTemplateGroup(group)
-
-	vis_id = 0
-	for bottom_folder in bottom_folders:
-		rename(kwargs, vis_id, 'enable')
-		rename(kwargs, vis_id, 'attr')
-		rename(kwargs, vis_id, 'type')
-		rename(kwargs, vis_id, 'coloring')
-		rename(kwargs, vis_id, 'otherattr')
-		rename(kwargs, vis_id, 'sep1')
-		rename(kwargs, vis_id, 'preset')
-		rename(kwargs, vis_id, 'delpreset')
-		rename(kwargs, vis_id, 'interpol')
-		rename(kwargs, vis_id, 'ramp')
-		rename(kwargs, vis_id, 'color')
-		rename(kwargs, vis_id, 'length')
-		rename(kwargs, vis_id, 'sep2')
-		rename(kwargs, vis_id, 'delvis')
-		rename(kwargs, vis_id, 'foldername')
-		vis_id += 1
-
-	update(kwargs)
-
-def rename(kwargs, vis_id, parmname):
-	node = kwargs['node']
-	vis_id = int(vis_id)
-
-	group = node.parmTemplateGroup()
-	top_folder = group.findFolder("Visualizers")
-	bottom_folders = top_folder.parmTemplates()
-	bottom_folder = bottom_folders[vis_id] 
-	bottom_contents = bottom_folder.parmTemplates()
-
-	for template in bottom_contents:
-		split = template.name().split('_')[0]
-		vis_id = str(vis_id)
-
-		if split == parmname:
-			template.setName(parmname + '_' + vis_id)
-
-			if parmname == 'coloring':
-				template.setConditional(
-				hou.parmCondType.HideWhen,
-				'{ type_' + vis_id + ' != marker }')
-
-			if parmname == 'otherattr':
-				template.setConditional(
-				hou.parmCondType.HideWhen,
-				'{ type_' + vis_id + ' != marker } { coloring_' + vis_id + ' != other }')
-
-			if parmname == 'preset':
-				template.setConditional(
-				hou.parmCondType.HideWhen,
-				'{ type_' + vis_id + ' == marker coloring_' + vis_id + ' == fixed }')
-
-			if parmname == 'delpreset':
-				template.setConditional(
-				hou.parmCondType.HideWhen,
-				'{ type_' + vis_id + ' == marker coloring_' + vis_id + ' == fixed }')
-
-			if parmname == 'interpol':
-				template.setConditional(
-				hou.parmCondType.HideWhen,
-				'{ type_' + vis_id + ' == marker coloring_' + vis_id + ' == fixed }')
-
-			if parmname == 'ramp':
-				template.setConditional(
-				hou.parmCondType.HideWhen,
-				'{ type_' + vis_id + ' == marker coloring_' + vis_id + ' == fixed }')
-
-			if parmname == 'color':
-				template.setConditional(
-				hou.parmCondType.HideWhen,
-				'{ type_' + vis_id + ' != marker } { coloring_' + vis_id + ' != fixed }')
-
-			if parmname == 'length':
-				template.setConditional(
-				hou.parmCondType.HideWhen,
-				'{ type_' + vis_id + ' != marker }')
-
-	bottom_folder.setParmTemplates(bottom_contents)
-	bottom_folders = list(bottom_folders)
-	bottom_folders[int(vis_id)] = bottom_folder
-	top_folder.setParmTemplates(bottom_folders)
-	group.replace((4,), top_folder)
-	node.setParmTemplateGroup(group)
-
-def update(kwargs):
-	node = kwargs['node']
-	group = node.parmTemplateGroup()
-	top_folder = group.findFolder("Visualizers")
-	bottom_folders = list(top_folder.parmTemplates())
-	
-	vis_id = 0
-	for bottom_folder in bottom_folders:
-		vis_id = str(vis_id)
-		node.parm('enable_' + vis_id).pressButton()
-		node.parm('type_' + vis_id).pressButton()
-		node.parm('attr_' + vis_id).pressButton()
-		node.parm('preset_' + vis_id).pressButton()
-		node.parm('coloring_' + vis_id).pressButton()
-		node.parm('otherattr_' + vis_id).pressButton()
-		node.parm('ramp_' + vis_id).pressButton()
-		node.parm('color_' + vis_id + 'r').pressButton()
-		node.parm('length_' + vis_id).pressButton()
-		vis_id = int(vis_id)
-		vis_id += 1
-
-def foldername(kwargs):
-	node = kwargs['node']
-	parm = kwargs['parm']
-	vis_id = parm.containingFolderIndices()[1]
-
-	attr_parm = node.parm('attr_' + str(vis_id))
-	attr_val = attr_parm.evalAsString()
-	group = node.parmTemplateGroup()
-	top_folder = group.findFolder("Visualizers")
-	bottom_folders = top_folder.parmTemplates()
-	bottom_folders = list(bottom_folders)
-	bottom_folder = bottom_folders[vis_id]
-	if attr_val == '':
-		bottom_folder.setLabel('vis' + str(vis_id))
-	if attr_val != '':
-		bottom_folder.setLabel(attr_val)
-	bottom_folders[vis_id] = bottom_folder
-	top_folder.setParmTemplates(bottom_folders)
-	group.replace((4,), top_folder)
-	node.setParmTemplateGroup(group)
-
-def getvis(vis_id):
-	vistup = hou.viewportVisualizers.visualizers(
-		hou.viewportVisualizerCategory.Node,
-		hou.node('./vis'))
-	vis = vistup[int(vis_id)]
-	return(vis)
-
-def presetmenu():
-	importlib.reload(stain_menu)
-	menu = stain_menu.menu
-	return(menu)
-
-def newpreset(preset_parm, ramp_parm):
-	new_name = hou.ui.readInput("New Preset", buttons = ("Add", "Cancel"))
-
-	if new_name[0] == 0:
-		menu = stain_menu.menu
-		menu.insert(0, new_name[1])
-		menu.insert(0, new_name[1])
-
-		ramp_val = ramp_parm.evalAsRamp()
-		new_scheme = create_scheme(new_name[1], ramp_val)
-		
-		menu_file = open('C:/Users/lucas/OneDrive/Git/morphogen/scripts/stain_menu.py', 'w')
-		menu_file.write('menu=' + str(menu))
-		menu_file.close()
-
-		scheme_file = open('C:/Users/lucas/OneDrive/Git/morphogen/scripts/stain_schemes.py', 'a')
-		scheme_file.write(new_scheme)
-		scheme_file.close()
-
-		importlib.reload(stain_menu)
-		importlib.reload(stain_schemes)
-		preset_parm.set(0)
-
-def newscheme(preset_val, ramp_val):
-	basis = ramp_val.basis()
-	basis = tuple('hou.' + str(x) for x in basis)
-	basis = str(basis).replace("'", "")
-
-	keys = ramp_val.keys()
-	keys = tuple(round(x, 4) for x in keys)
-
-	values = ramp_val.values()
-	values = tuple(tuple(round(x2, 4) for x2 in x) for x in values)
-
-	scheme = '\n' + preset_val + '=' + 'hou.Ramp(' + str(basis) + ',' + str(keys) + ',' + str(values) + ')\n'
-
-	return(scheme)
\ No newline at end of file
diff --git a/viewer_states/keycam_lop.py b/viewer_states/keycam_lop.py
deleted file mode 100644
index fa44327..0000000
--- a/viewer_states/keycam_lop.py
+++ /dev/null
@@ -1,4 +0,0 @@
-
-        if not hou.node("/stage/keycam"):
-            stage_cam = hou.node("/stage").createNode("camera")
-            stage_cam.setName("keycam")
diff --git a/viewer_states/keycam_settings b/viewer_states/keycam_settings
deleted file mode 100644
index 5bb88b1..0000000
--- a/viewer_states/keycam_settings
+++ /dev/null
@@ -1,20 +0,0 @@
-guides
-   axis_size: 1
-    axis_cam: 1
-    axis_pvt: 1
-    bbox: 0
-    cam_geo: 1
-    perim: 0
-    pvt_2d: 0
-    pvt_3d: 0
-    ray: 1
-    tie_axis_to_radius: 0
-startup
-    center_on_geo: 1
-    lock_cam: 1
-    cam_reset: 1
-units
-    r: 7.5
-    t: 1
-    ow: 1
-    dist: 1