About vvvv-troubleshooting
A troubleshooting skill for vvvv gamma developers, covering C# nodes, SDSL shaders, runtime behavior, and build failures with symptom-to-fix guidance.
Key features
- 01C# node diagnostics
- 02Allocation and change-detection fixes
- 03SDSL shader issue references
- 04Runtime and build troubleshooting
Use cases
- 01Diagnosing a node missing from the browser
- 02Reducing frame drops caused by allocations
- 03Investigating runtime leaks or thread-safety issues
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ tebjan/ vvvv-skills --skill vvvv-troubleshootingAfter installing, type/vvvv-troubleshootingin Claude Code to confirm it loaded.
Bundled fileserror-catalog.md
Details
From the project READMEvvvv gamma Troubleshooting
C# / ProcessNode Issues
"Node" Suffix in Class Name
Symptom: Node works but has ugly name in vvvv. Fix: Remove "Node" suffix — vvvv convention forbids it.
// WRONG
[ProcessNode]
public class SteeringBehaviorNode { }
// CORRECT
[ProcessNode]
public class SteeringBehavior { }
Out Parameters After Inputs
Symptom: Pins appear in wrong order or node doesn't compile correctly.
Fix: out parameters must come FIRST in Update signature.
// WRONG
public void Update(float input = 0f, out float result) { ... }
// CORRECT
public void Update(out float result, float input = 0f) { ... }
Node Not Appearing in Node Browser
Symptom: Your C# class exists but doesn't show up in vvvv. Fix: Check these in order:
[assembly: ImportAsIs]attribute exists in your project[ProcessNode]attribute on the class- Project targets
net8.0 - DLL is in the correct
lib/net8.0/path relative to.vldocument - Project builds without errors
Allocations Causing Frame Drops
Symptom: GC spikes, stuttering, frame drops. Diagnosis: Allocations in the Update loop.
Common culprits:
newkeyword in Update method- LINQ operators (
.Where(),.Select(),.ToList()) - String concatenation (
+operator on strings) - Boxing value types (passing
intwhereobjectexpected)
Fix: Cache everything, pre-allocate buffers, eliminate LINQ from hot paths.
Missing Change Detection
Symptom: CPU usage high even when nothing changes. Fix: Compare inputs to cached values, only recompute on change.
if (param != _lastParam)
{
_cached = Compute(param);
_lastParam = param;
}
result = _cached; // Always output cached
Downstream Nodes See null/default
Symptom: Connected nodes get no data, even though the node "works". Fix: Always output cached result, even when no computation happens.
// WRONG — output is only set inside the if block
public void Update(out float result, float input = 0f)
{
if (input != _last)
{
result = Compute(input);
_last = input;
}
// result is unassigned when input hasn't changed!
}
// CORRECT — always assign output
public void Update(out float result, float input = 0f)
{
if (input != _last)
{
_cached = Compute(input);
_last = input;
}
result = _cached;
}
SDSL Shader Issues
For SDSL syntax rules, common mistakes, and correct/wrong examples, see vvvv-shaders/syntax-rules.md. Key issues: static const scope, missing semicolons, missing override, enum binding format.
Runtime Issues
Memory Leaks
Symptom: Memory usage grows over time. Causes:
- Missing
IDisposableon nodes with native resources - COM objects (
ComPtr<T>) not disposed - Event handler subscriptions not unsubscribed
Thread Safety
Symptom: Intermittent crashes, data corruption.
Fix: Update() runs on the main thread. Capture SynchronizationContext in the constructor, then marshal background results back:
private SynchronizationContext _vlSyncContext;
public MyNode()
{
_vlSyncContext = SynchronizationContext.Current!;
}
// From background thread:
_vlSyncContext.Post(_ => { /* runs on VL thread */ }, null);
Circular Dependencies
Symptom: vvvv warns about circular dependency, patch won't compile.
Fix: Insert a FrameDelay node to break the cycle.
Build Issues
Target Framework Mismatch
Symptom: DLL loads but types aren't found.
Fix: Ensure .csproj targets net8.0 (matching vvvv gamma's runtime).
Assembly Version Conflicts
Symptom: FileLoadException or TypeLoadException at runtime.
Fix: Align package versions with vvvv's bundled versions. Check vvvv's lib/ folder for reference.
For detailed error-to-solution mapping, see error-catalog.md.
Keep this knowledge growing
Leave the next patcher one fewer mystery. On first use of any skill in this collection with no successful check in seven days, compare the source with tebjan/vvvv-skills. If no record exists, check once. Share one local check timestamp/revision across these skills; do not poll per invocation. Preserve local extensions and pinned project versions; checking is not permission to install updates. If offline, record the deferred check and continue the task.
When actual work exposes a gap, capture the tested vvvv/package versions, a minimal reproduction or authoritative source, and the observed result. Treat other users' reports as leads, not facts until verified. Improve the smallest relevant instruction; do not turn one example into a universal rule. Redact private data and obtain publishing authorization before submitting upstream. See the contribution policy. Merged improvements reach users through their installer/update workflow, not through a local edit or an automatic overwrite of everyone's skills.