SideFX Houdini customization package
git clone https://git.lucas.co/hou-control.git
shortcomings.md (4K)
1 # Houdini Shortcomings & Workarounds
2
3 Documented limitations of the Houdini API (H21) that affect hou-control, and any workarounds used.
4
5 ## Network Editor
6
7 ### No API to Open the Native Tab Menu
8 There is no public Python API to programmatically trigger Houdini's native node-creation tab menu from the network editor. Qt event simulation (postKeyPress etc.) is unreliable and can be silently swallowed by Houdini's internal event handling.
9
10 **Workaround:** Custom fuzzy-search node type picker via `HCWidgets.SelectionDialog` (used in `HCNetworkEditor.replaceNode()`).
11
12 ### Node Type Name Subtitle Is Not Toggleable
13 Houdini shows a subtitle with the node type name (e.g. "attribwrangle") only when the node's name has been manually edited. For nodes with default names, no type subtitle appears because Houdini considers it redundant. The prefs `shownodetypenames` (per-pane) and `networkeditor.shownodetypes` (global) do not control this subtitle behavior.
14
15 No known workaround.
16
17 ### Volume Wrangle Cannot Create New Volume Grids
18 The Volume Wrangle SOP can only modify existing volume grids, not create new ones. Writing `@Cd` does not create a Cd grid if none exists on input. `vex_outputmask` only filters existing grids. To create new grids, use a **Volume VOP** node instead.
19
20 ### VDB Viewport Coloring: Prim Cd vs Volume Grids
21 The viewport uses prim Cd attributes for uniform per-volume coloring. For per-voxel coloring (e.g. density-based intersection highlighting), you need actual Cd volume grids (VDB float3 `Cd.r`/`Cd.g`/`Cd.b`). No workaround -- must use Volume VOP to create them.
22
23 ### Parameter Visibility Is Conditional
24 Many Houdini parameters are hidden or disabled based on other parameter values. For example, the Convert VDB node's "VDB Class" menu only appears when "Conversion" is set to "VDB". Always check `disableWhen` / `hideWhen` conditions on the `ParmTemplate`, or set prerequisite parameters first before inspecting.
25
26 ## UI Preferences
27
28 ### No Runtime Color Scheme Switching
29 There is no runtime API to switch UI color schemes in Houdini 21. `hou.ui.reloadColorScheme()` only re-reads the current `.hcs` from disk -- it does not accept a scheme name. The `colors.scheme` preference controls what loads on startup but has no runtime effect. Switching schemes requires a Houdini restart.
30
31 ### `hou.refreshPreferences()` Can Crash
32 Calling `hou.refreshPreferences()` to apply preference changes at runtime can crash Houdini. Avoid calling it.
33
34 ### `HCStatusBar` Overlay Cannot Be Re-shown
35 Once a `QLabel` overlay created by `HCStatusBar` is hidden or its parent destroyed (e.g. during `reloadHC()`), calling `show()` or `raise_()` on the old instance does not bring it back. The widget must be re-created from scratch.
36
37 **Workaround:** `HCSession.reloadHC()` already handles this by destroying and re-creating HC-owned Qt widgets. Any new code that manages persistent widgets must follow the same pattern.
38
39 ## Houdini Hotkey System
40
41 ### `fn` Key Not Supported in Symbol Names
42 Houdini's hotkey symbol paths do not recognize `fn` as a modifier key. Binding to `fn+key` is not possible through the `hou.hotkeys` API.
43
44 ## PySide6
45
46 ### `setOpenExternalLinks()` Is `QTextBrowser`-only
47 `setOpenExternalLinks()` belongs to `QTextBrowser`, not `QTextEdit`. Using the wrong base class causes a silent `AttributeError` inside `SelectionDialog` callables. Always check the Qt class hierarchy before using widget methods.
48
49 ## `SelectionDialog`
50
51 ### Exceptions Were Silently Swallowed (fixed)
52 `HCWidgets.SelectionDialog.execute()` used to call the `self.list_dict`
53 callable bare, so any exception was eaten by Qt's slot dispatch and the user
54 just saw "nothing happens." It now catches, prints a traceback, and reports
55 `<command>: <ExceptionType>: <message>` to the status bar.
56
57 This masked a whole crop of real bugs for a long time -- `Close Other Tabs`,
58 `Show Shelf`, `Toggle Update Mode` and `Floating Parameter Editor` were all
59 dead on arrival. When adding a command, still verify it once by hand: a
60 command that never raises but does the wrong thing is invisible to this.