Repository files navigation

DeepThinner v2.0

Deep Sample Optimisation for Nuke 16

Created by Marten Blumen


Overview

DeepThinner reduces deep sample counts per pixel through seven independent, artist-controllable passes. It dramatically improves downstream compositing speed, memory usage, and deep EXR write times with minimal to zero visual impact.


Installation

Pre-built Plugin (Recommended)

  1. Download the correct plugin for your platform:

    • Windows:DeepThinner.dll
  2. Copy the plugin file to one of the following locations:

    • Your personal Nuke directory: ~/.nuke/ (Linux/macOS) or %USERPROFILE%\.nuke\ (Windows)
    • A shared plugin directory on your NUKE_PATH
    • Your studio's custom plugin directory
  3. Copy menu.py to the same location as the plugin (or merge its contents into your existing menu.py).

  4. Restart Nuke. DeepThinner will appear under Deep > DeepThinner in the node toolbar.

Building from Source

Requirements

  • Nuke 16 with NDK headers installed
  • CMake 3.15 or later
  • C++17 compiler:
    • Windows: Visual Studio 2022 (MSVC 19.x)
    • Linux: GCC 9+ or Clang 10+
    • macOS: Xcode 12+ / Apple Clang 12+

Windows

cd C:\path\to\DeepThinner
mkdir build &&cd build
cmake -DNUKE_INSTALL_PATH="C:\Program Files\Nuke16.0v8" ..
cmake --build . --config Release
copy Release\DeepThinner.dll %USERPROFILE%\.nuke\

Linux

cd /path/to/DeepThinner
mkdir build &&cd build
cmake -DNUKE_INSTALL_PATH="/usr/local/Nuke16.0v8" ..
make -j$(nproc)
cp DeepThinner.so ~/.nuke/

macOS

cd /path/to/DeepThinner
mkdir build &&cd build
cmake -DNUKE_INSTALL_PATH="/Applications/Nuke16.0v8/Nuke16.0v8.app/Contents/MacOS" ..
make -j$(sysctl -n hw.ncpu)
cp DeepThinner.dylib ~/.nuke/

File Structure

DeepThinner/
├── DeepThinner.cpp — Plugin source code
├── CMakeLists.txt — CMake build configuration
├── menu.py — Nuke menu registration
└── README.md — This file

Quick Start

  1. Create a DeepThinner node from Deep > DeepThinner (or press Tab and type "DeepThinner").
  2. Connect it to your deep stream.
  3. The default settings (Occlusion Cutoff + Contribution Cull + Smart Merge) are a good starting point.
  4. Render, then open the Statistics group in the properties to see your reduction results.
  5. Click Update Statistics to refresh the numbers at any time.

Passes

#PassDefaultWhat It Does
1Depth RangeOffClips samples outside a near/far Z range
2Alpha CullOnRemoves samples with alpha at or below a threshold
3Occlusion CutoffOnDrops everything behind the point where coverage reaches a cutoff
4Contribution CullOnRemoves samples whose visible contribution is negligible
5Volumetric CollapseOffCollapses runs of low-alpha volume samples into fewer samples
6Smart MergeOnMerges Z-close and colour-similar consecutive samples
7Max SamplesOffHard per-pixel sample cap; drops deepest first

Suggested Settings

Light Touch (safe for final comp)

  • Occlusion Cutoff: 0.9999
  • Contribution Cull: 0.0005
  • Smart Merge Z tolerance: 0.005, color tolerance: 0.005

Moderate (good balance)

  • Occlusion Cutoff: 0.999
  • Contribution Cull: 0.001
  • Smart Merge Z tolerance: 0.01, color tolerance: 0.01

Aggressive (previews, layout, WIP)

  • Occlusion Cutoff: 0.99
  • Contribution Cull: 0.01
  • Volumetric Collapse: On, group size 8
  • Smart Merge Z tolerance: 0.05, color tolerance: 0.05
  • Max Samples: 64

Troubleshooting

ProblemSolution
No reduction showingEnsure at least one pass is enabled. Check that input has deep data.
Banding in volumesReduce Volumetric Collapse group size or raise volume alpha max.
Edge fringing on transparent objLower Smart Merge color tolerance or disable merge for that section.
Statistics say "No samples"Make sure you've rendered (not just validated). Click Update Statistics.
Build error: NOMINMAXEnsure you're using the provided CMakeLists.txt with Windows defines.
Build error: DeepOnlyOp.hUse DeepThinner v2.0 source — v1 targeted an older Nuke API.
Plugin doesn't appear in menuCheck that menu.py is in your ~/.nuke/ or NUKE_PATH directory.

Compatibility

  • Nuke 16.0v1+ (built against the Nuke 16 NDK)
  • Tested on Windows 11,
  • Passes through all channels unchanged — safe for any deep pipeline

Version History

v2.0

  • Seven independent thinning passes (added Depth Range, Occlusion Cutoff, Contribution Cull, Volumetric Collapse)
  • Colour-aware smart merge
  • In-panel statistics with Update button
  • Artist Guide and Technical Notes in the UI
  • Thread-local scratch buffers for zero-allocation processing
  • Nuke 16 API (DeepFilterOp)

v1.0

  • Initial release with Z-tolerance merge, alpha cull, and max samples

License

This plugin is provided as-is for use in production and personal projects. Created by Marten Blumen.

About

No description, website, or topics provided.

Resources

Contributing

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

DeepThinner v2.0

Deep Sample Optimisation for Nuke 16

Created by Marten Blumen


Overview

DeepThinner reduces deep sample counts per pixel through seven independent, artist-controllable passes. It dramatically improves downstream compositing speed, memory usage, and deep EXR write times with minimal to zero visual impact.


Installation

Pre-built Plugin (Recommended)

  1. Download the correct plugin for your platform:

    • Windows:DeepThinner.dll
  2. Copy the plugin file to one of the following locations:

    • Your personal Nuke directory: ~/.nuke/ (Linux/macOS) or %USERPROFILE%\.nuke\ (Windows)
    • A shared plugin directory on your NUKE_PATH
    • Your studio's custom plugin directory
  3. Copy menu.py to the same location as the plugin (or merge its contents into your existing menu.py).

  4. Restart Nuke. DeepThinner will appear under Deep > DeepThinner in the node toolbar.

Building from Source

Requirements

  • Nuke 16 with NDK headers installed
  • CMake 3.15 or later
  • C++17 compiler:
    • Windows: Visual Studio 2022 (MSVC 19.x)
    • Linux: GCC 9+ or Clang 10+
    • macOS: Xcode 12+ / Apple Clang 12+

Windows

cd C:\path\to\DeepThinner
mkdir build &&cd build
cmake -DNUKE_INSTALL_PATH="C:\Program Files\Nuke16.0v8" ..
cmake --build . --config Release
copy Release\DeepThinner.dll %USERPROFILE%\.nuke\

Linux

cd /path/to/DeepThinner
mkdir build &&cd build
cmake -DNUKE_INSTALL_PATH="/usr/local/Nuke16.0v8" ..
make -j$(nproc)
cp DeepThinner.so ~/.nuke/

macOS

cd /path/to/DeepThinner
mkdir build &&cd build
cmake -DNUKE_INSTALL_PATH="/Applications/Nuke16.0v8/Nuke16.0v8.app/Contents/MacOS" ..
make -j$(sysctl -n hw.ncpu)
cp DeepThinner.dylib ~/.nuke/

File Structure

DeepThinner/
├── DeepThinner.cpp — Plugin source code
├── CMakeLists.txt — CMake build configuration
├── menu.py — Nuke menu registration
└── README.md — This file

Quick Start

  1. Create a DeepThinner node from Deep > DeepThinner (or press Tab and type "DeepThinner").
  2. Connect it to your deep stream.
  3. The default settings (Occlusion Cutoff + Contribution Cull + Smart Merge) are a good starting point.
  4. Render, then open the Statistics group in the properties to see your reduction results.
  5. Click Update Statistics to refresh the numbers at any time.

Passes

#PassDefaultWhat It Does
1Depth RangeOffClips samples outside a near/far Z range
2Alpha CullOnRemoves samples with alpha at or below a threshold
3Occlusion CutoffOnDrops everything behind the point where coverage reaches a cutoff
4Contribution CullOnRemoves samples whose visible contribution is negligible
5Volumetric CollapseOffCollapses runs of low-alpha volume samples into fewer samples
6Smart MergeOnMerges Z-close and colour-similar consecutive samples
7Max SamplesOffHard per-pixel sample cap; drops deepest first

Suggested Settings

Light Touch (safe for final comp)

  • Occlusion Cutoff: 0.9999
  • Contribution Cull: 0.0005
  • Smart Merge Z tolerance: 0.005, color tolerance: 0.005

Moderate (good balance)

  • Occlusion Cutoff: 0.999
  • Contribution Cull: 0.001
  • Smart Merge Z tolerance: 0.01, color tolerance: 0.01

Aggressive (previews, layout, WIP)

  • Occlusion Cutoff: 0.99
  • Contribution Cull: 0.01
  • Volumetric Collapse: On, group size 8
  • Smart Merge Z tolerance: 0.05, color tolerance: 0.05
  • Max Samples: 64

Troubleshooting

ProblemSolution
No reduction showingEnsure at least one pass is enabled. Check that input has deep data.
Banding in volumesReduce Volumetric Collapse group size or raise volume alpha max.
Edge fringing on transparent objLower Smart Merge color tolerance or disable merge for that section.
Statistics say "No samples"Make sure you've rendered (not just validated). Click Update Statistics.
Build error: NOMINMAXEnsure you're using the provided CMakeLists.txt with Windows defines.
Build error: DeepOnlyOp.hUse DeepThinner v2.0 source — v1 targeted an older Nuke API.
Plugin doesn't appear in menuCheck that menu.py is in your ~/.nuke/ or NUKE_PATH directory.

Compatibility

  • Nuke 16.0v1+ (built against the Nuke 16 NDK)
  • Tested on Windows 11,
  • Passes through all channels unchanged — safe for any deep pipeline

Version History

v2.0

  • Seven independent thinning passes (added Depth Range, Occlusion Cutoff, Contribution Cull, Volumetric Collapse)
  • Colour-aware smart merge
  • In-panel statistics with Update button
  • Artist Guide and Technical Notes in the UI
  • Thread-local scratch buffers for zero-allocation processing
  • Nuke 16 API (DeepFilterOp)

v1.0

  • Initial release with Z-tolerance merge, alpha cull, and max samples

License

This plugin is provided as-is for use in production and personal projects. Created by Marten Blumen.

About

No description, website, or topics provided.

Resources

Contributing

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

DeepThinner v2.0

Deep Sample Optimisation for Nuke 16

Created by Marten Blumen


Overview

DeepThinner reduces deep sample counts per pixel through seven independent, artist-controllable passes. It dramatically improves downstream compositing speed, memory usage, and deep EXR write times with minimal to zero visual impact.


Installation

Pre-built Plugin (Recommended)

  1. Download the correct plugin for your platform:

    • Windows:DeepThinner.dll
  2. Copy the plugin file to one of the following locations:

    • Your personal Nuke directory: ~/.nuke/ (Linux/macOS) or %USERPROFILE%\.nuke\ (Windows)
    • A shared plugin directory on your NUKE_PATH
    • Your studio's custom plugin directory
  3. Copy menu.py to the same location as the plugin (or merge its contents into your existing menu.py).

  4. Restart Nuke. DeepThinner will appear under Deep > DeepThinner in the node toolbar.

Building from Source

Requirements

  • Nuke 16 with NDK headers installed
  • CMake 3.15 or later
  • C++17 compiler:
    • Windows: Visual Studio 2022 (MSVC 19.x)
    • Linux: GCC 9+ or Clang 10+
    • macOS: Xcode 12+ / Apple Clang 12+

Windows

cd C:\path\to\DeepThinner
mkdir build &&cd build
cmake -DNUKE_INSTALL_PATH="C:\Program Files\Nuke16.0v8" ..
cmake --build . --config Release
copy Release\DeepThinner.dll %USERPROFILE%\.nuke\

Linux

cd /path/to/DeepThinner
mkdir build &&cd build
cmake -DNUKE_INSTALL_PATH="/usr/local/Nuke16.0v8" ..
make -j$(nproc)
cp DeepThinner.so ~/.nuke/

macOS

cd /path/to/DeepThinner
mkdir build &&cd build
cmake -DNUKE_INSTALL_PATH="/Applications/Nuke16.0v8/Nuke16.0v8.app/Contents/MacOS" ..
make -j$(sysctl -n hw.ncpu)
cp DeepThinner.dylib ~/.nuke/

File Structure

DeepThinner/
├── DeepThinner.cpp — Plugin source code
├── CMakeLists.txt — CMake build configuration
├── menu.py — Nuke menu registration
└── README.md — This file

Quick Start

  1. Create a DeepThinner node from Deep > DeepThinner (or press Tab and type "DeepThinner").
  2. Connect it to your deep stream.
  3. The default settings (Occlusion Cutoff + Contribution Cull + Smart Merge) are a good starting point.
  4. Render, then open the Statistics group in the properties to see your reduction results.
  5. Click Update Statistics to refresh the numbers at any time.

Passes

#PassDefaultWhat It Does
1Depth RangeOffClips samples outside a near/far Z range
2Alpha CullOnRemoves samples with alpha at or below a threshold
3Occlusion CutoffOnDrops everything behind the point where coverage reaches a cutoff
4Contribution CullOnRemoves samples whose visible contribution is negligible
5Volumetric CollapseOffCollapses runs of low-alpha volume samples into fewer samples
6Smart MergeOnMerges Z-close and colour-similar consecutive samples
7Max SamplesOffHard per-pixel sample cap; drops deepest first

Suggested Settings

Light Touch (safe for final comp)

  • Occlusion Cutoff: 0.9999
  • Contribution Cull: 0.0005
  • Smart Merge Z tolerance: 0.005, color tolerance: 0.005

Moderate (good balance)

  • Occlusion Cutoff: 0.999
  • Contribution Cull: 0.001
  • Smart Merge Z tolerance: 0.01, color tolerance: 0.01

Aggressive (previews, layout, WIP)

  • Occlusion Cutoff: 0.99
  • Contribution Cull: 0.01
  • Volumetric Collapse: On, group size 8
  • Smart Merge Z tolerance: 0.05, color tolerance: 0.05
  • Max Samples: 64

Troubleshooting

ProblemSolution
No reduction showingEnsure at least one pass is enabled. Check that input has deep data.
Banding in volumesReduce Volumetric Collapse group size or raise volume alpha max.
Edge fringing on transparent objLower Smart Merge color tolerance or disable merge for that section.
Statistics say "No samples"Make sure you've rendered (not just validated). Click Update Statistics.
Build error: NOMINMAXEnsure you're using the provided CMakeLists.txt with Windows defines.
Build error: DeepOnlyOp.hUse DeepThinner v2.0 source — v1 targeted an older Nuke API.
Plugin doesn't appear in menuCheck that menu.py is in your ~/.nuke/ or NUKE_PATH directory.

Compatibility

  • Nuke 16.0v1+ (built against the Nuke 16 NDK)
  • Tested on Windows 11,
  • Passes through all channels unchanged — safe for any deep pipeline

Version History

v2.0

  • Seven independent thinning passes (added Depth Range, Occlusion Cutoff, Contribution Cull, Volumetric Collapse)
  • Colour-aware smart merge
  • In-panel statistics with Update button
  • Artist Guide and Technical Notes in the UI
  • Thread-local scratch buffers for zero-allocation processing
  • Nuke 16 API (DeepFilterOp)

v1.0

  • Initial release with Z-tolerance merge, alpha cull, and max samples

License

This plugin is provided as-is for use in production and personal projects. Created by Marten Blumen.

About

No description, website, or topics provided.

Resources

Contributing

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

DeepThinner v2.0

Deep Sample Optimisation for Nuke 16

Created by Marten Blumen


Overview

DeepThinner reduces deep sample counts per pixel through seven independent, artist-controllable passes. It dramatically improves downstream compositing speed, memory usage, and deep EXR write times with minimal to zero visual impact.


Installation

Pre-built Plugin (Recommended)

  1. Download the correct plugin for your platform:

    • Windows:DeepThinner.dll
  2. Copy the plugin file to one of the following locations:

    • Your personal Nuke directory: ~/.nuke/ (Linux/macOS) or %USERPROFILE%\.nuke\ (Windows)
    • A shared plugin directory on your NUKE_PATH
    • Your studio's custom plugin directory
  3. Copy menu.py to the same location as the plugin (or merge its contents into your existing menu.py).

  4. Restart Nuke. DeepThinner will appear under Deep > DeepThinner in the node toolbar.

Building from Source

Requirements

  • Nuke 16 with NDK headers installed
  • CMake 3.15 or later
  • C++17 compiler:
    • Windows: Visual Studio 2022 (MSVC 19.x)
    • Linux: GCC 9+ or Clang 10+
    • macOS: Xcode 12+ / Apple Clang 12+

Windows

cd C:\path\to\DeepThinner
mkdir build &&cd build
cmake -DNUKE_INSTALL_PATH="C:\Program Files\Nuke16.0v8" ..
cmake --build . --config Release
copy Release\DeepThinner.dll %USERPROFILE%\.nuke\

Linux

cd /path/to/DeepThinner
mkdir build &&cd build
cmake -DNUKE_INSTALL_PATH="/usr/local/Nuke16.0v8" ..
make -j$(nproc)
cp DeepThinner.so ~/.nuke/

macOS

cd /path/to/DeepThinner
mkdir build &&cd build
cmake -DNUKE_INSTALL_PATH="/Applications/Nuke16.0v8/Nuke16.0v8.app/Contents/MacOS" ..
make -j$(sysctl -n hw.ncpu)
cp DeepThinner.dylib ~/.nuke/

File Structure

DeepThinner/
├── DeepThinner.cpp — Plugin source code
├── CMakeLists.txt — CMake build configuration
├── menu.py — Nuke menu registration
└── README.md — This file

Quick Start

  1. Create a DeepThinner node from Deep > DeepThinner (or press Tab and type "DeepThinner").
  2. Connect it to your deep stream.
  3. The default settings (Occlusion Cutoff + Contribution Cull + Smart Merge) are a good starting point.
  4. Render, then open the Statistics group in the properties to see your reduction results.
  5. Click Update Statistics to refresh the numbers at any time.

Passes

#PassDefaultWhat It Does
1Depth RangeOffClips samples outside a near/far Z range
2Alpha CullOnRemoves samples with alpha at or below a threshold
3Occlusion CutoffOnDrops everything behind the point where coverage reaches a cutoff
4Contribution CullOnRemoves samples whose visible contribution is negligible
5Volumetric CollapseOffCollapses runs of low-alpha volume samples into fewer samples
6Smart MergeOnMerges Z-close and colour-similar consecutive samples
7Max SamplesOffHard per-pixel sample cap; drops deepest first

Suggested Settings

Light Touch (safe for final comp)

  • Occlusion Cutoff: 0.9999
  • Contribution Cull: 0.0005
  • Smart Merge Z tolerance: 0.005, color tolerance: 0.005

Moderate (good balance)

  • Occlusion Cutoff: 0.999
  • Contribution Cull: 0.001
  • Smart Merge Z tolerance: 0.01, color tolerance: 0.01

Aggressive (previews, layout, WIP)

  • Occlusion Cutoff: 0.99
  • Contribution Cull: 0.01
  • Volumetric Collapse: On, group size 8
  • Smart Merge Z tolerance: 0.05, color tolerance: 0.05
  • Max Samples: 64

Troubleshooting

ProblemSolution
No reduction showingEnsure at least one pass is enabled. Check that input has deep data.
Banding in volumesReduce Volumetric Collapse group size or raise volume alpha max.
Edge fringing on transparent objLower Smart Merge color tolerance or disable merge for that section.
Statistics say "No samples"Make sure you've rendered (not just validated). Click Update Statistics.
Build error: NOMINMAXEnsure you're using the provided CMakeLists.txt with Windows defines.
Build error: DeepOnlyOp.hUse DeepThinner v2.0 source — v1 targeted an older Nuke API.
Plugin doesn't appear in menuCheck that menu.py is in your ~/.nuke/ or NUKE_PATH directory.

Compatibility

  • Nuke 16.0v1+ (built against the Nuke 16 NDK)
  • Tested on Windows 11,
  • Passes through all channels unchanged — safe for any deep pipeline

Version History

v2.0

  • Seven independent thinning passes (added Depth Range, Occlusion Cutoff, Contribution Cull, Volumetric Collapse)
  • Colour-aware smart merge
  • In-panel statistics with Update button
  • Artist Guide and Technical Notes in the UI
  • Thread-local scratch buffers for zero-allocation processing
  • Nuke 16 API (DeepFilterOp)

v1.0

  • Initial release with Z-tolerance merge, alpha cull, and max samples

License

This plugin is provided as-is for use in production and personal projects. Created by Marten Blumen.

About

No description, website, or topics provided.

Resources

Contributing

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

DeepThinner v2.0

Deep Sample Optimisation for Nuke 16

Created by Marten Blumen


Overview

DeepThinner reduces deep sample counts per pixel through seven independent, artist-controllable passes. It dramatically improves downstream compositing speed, memory usage, and deep EXR write times with minimal to zero visual impact.


Installation

Pre-built Plugin (Recommended)

  1. Download the correct plugin for your platform:

    • Windows:DeepThinner.dll
  2. Copy the plugin file to one of the following locations:

    • Your personal Nuke directory: ~/.nuke/ (Linux/macOS) or %USERPROFILE%\.nuke\ (Windows)
    • A shared plugin directory on your NUKE_PATH
    • Your studio's custom plugin directory
  3. Copy menu.py to the same location as the plugin (or merge its contents into your existing menu.py).

  4. Restart Nuke. DeepThinner will appear under Deep > DeepThinner in the node toolbar.

Building from Source

Requirements

  • Nuke 16 with NDK headers installed
  • CMake 3.15 or later
  • C++17 compiler:
    • Windows: Visual Studio 2022 (MSVC 19.x)
    • Linux: GCC 9+ or Clang 10+
    • macOS: Xcode 12+ / Apple Clang 12+

Windows

cd C:\path\to\DeepThinner
mkdir build &&cd build
cmake -DNUKE_INSTALL_PATH="C:\Program Files\Nuke16.0v8" ..
cmake --build . --config Release
copy Release\DeepThinner.dll %USERPROFILE%\.nuke\

Linux

cd /path/to/DeepThinner
mkdir build &&cd build
cmake -DNUKE_INSTALL_PATH="/usr/local/Nuke16.0v8" ..
make -j$(nproc)
cp DeepThinner.so ~/.nuke/

macOS

cd /path/to/DeepThinner
mkdir build &&cd build
cmake -DNUKE_INSTALL_PATH="/Applications/Nuke16.0v8/Nuke16.0v8.app/Contents/MacOS" ..
make -j$(sysctl -n hw.ncpu)
cp DeepThinner.dylib ~/.nuke/

File Structure

DeepThinner/
├── DeepThinner.cpp — Plugin source code
├── CMakeLists.txt — CMake build configuration
├── menu.py — Nuke menu registration
└── README.md — This file

Quick Start

  1. Create a DeepThinner node from Deep > DeepThinner (or press Tab and type "DeepThinner").
  2. Connect it to your deep stream.
  3. The default settings (Occlusion Cutoff + Contribution Cull + Smart Merge) are a good starting point.
  4. Render, then open the Statistics group in the properties to see your reduction results.
  5. Click Update Statistics to refresh the numbers at any time.

Passes

#PassDefaultWhat It Does
1Depth RangeOffClips samples outside a near/far Z range
2Alpha CullOnRemoves samples with alpha at or below a threshold
3Occlusion CutoffOnDrops everything behind the point where coverage reaches a cutoff
4Contribution CullOnRemoves samples whose visible contribution is negligible
5Volumetric CollapseOffCollapses runs of low-alpha volume samples into fewer samples
6Smart MergeOnMerges Z-close and colour-similar consecutive samples
7Max SamplesOffHard per-pixel sample cap; drops deepest first

Suggested Settings

Light Touch (safe for final comp)

  • Occlusion Cutoff: 0.9999
  • Contribution Cull: 0.0005
  • Smart Merge Z tolerance: 0.005, color tolerance: 0.005

Moderate (good balance)

  • Occlusion Cutoff: 0.999
  • Contribution Cull: 0.001
  • Smart Merge Z tolerance: 0.01, color tolerance: 0.01

Aggressive (previews, layout, WIP)

  • Occlusion Cutoff: 0.99
  • Contribution Cull: 0.01
  • Volumetric Collapse: On, group size 8
  • Smart Merge Z tolerance: 0.05, color tolerance: 0.05
  • Max Samples: 64

Troubleshooting

ProblemSolution
No reduction showingEnsure at least one pass is enabled. Check that input has deep data.
Banding in volumesReduce Volumetric Collapse group size or raise volume alpha max.
Edge fringing on transparent objLower Smart Merge color tolerance or disable merge for that section.
Statistics say "No samples"Make sure you've rendered (not just validated). Click Update Statistics.
Build error: NOMINMAXEnsure you're using the provided CMakeLists.txt with Windows defines.
Build error: DeepOnlyOp.hUse DeepThinner v2.0 source — v1 targeted an older Nuke API.
Plugin doesn't appear in menuCheck that menu.py is in your ~/.nuke/ or NUKE_PATH directory.

Compatibility

  • Nuke 16.0v1+ (built against the Nuke 16 NDK)
  • Tested on Windows 11,
  • Passes through all channels unchanged — safe for any deep pipeline

Version History

v2.0

  • Seven independent thinning passes (added Depth Range, Occlusion Cutoff, Contribution Cull, Volumetric Collapse)
  • Colour-aware smart merge
  • In-panel statistics with Update button
  • Artist Guide and Technical Notes in the UI
  • Thread-local scratch buffers for zero-allocation processing
  • Nuke 16 API (DeepFilterOp)

v1.0

  • Initial release with Z-tolerance merge, alpha cull, and max samples

License

This plugin is provided as-is for use in production and personal projects. Created by Marten Blumen.

About

No description, website, or topics provided.

Resources

Contributing

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

DeepThinner v2.0

Deep Sample Optimisation for Nuke 16

Created by Marten Blumen


Overview

DeepThinner reduces deep sample counts per pixel through seven independent, artist-controllable passes. It dramatically improves downstream compositing speed, memory usage, and deep EXR write times with minimal to zero visual impact.


Installation

Pre-built Plugin (Recommended)

  1. Download the correct plugin for your platform:

    • Windows:DeepThinner.dll
  2. Copy the plugin file to one of the following locations:

    • Your personal Nuke directory: ~/.nuke/ (Linux/macOS) or %USERPROFILE%\.nuke\ (Windows)
    • A shared plugin directory on your NUKE_PATH
    • Your studio's custom plugin directory
  3. Copy menu.py to the same location as the plugin (or merge its contents into your existing menu.py).

  4. Restart Nuke. DeepThinner will appear under Deep > DeepThinner in the node toolbar.

Building from Source

Requirements

  • Nuke 16 with NDK headers installed
  • CMake 3.15 or later
  • C++17 compiler:
    • Windows: Visual Studio 2022 (MSVC 19.x)
    • Linux: GCC 9+ or Clang 10+
    • macOS: Xcode 12+ / Apple Clang 12+

Windows

cd C:\path\to\DeepThinner
mkdir build &&cd build
cmake -DNUKE_INSTALL_PATH="C:\Program Files\Nuke16.0v8" ..
cmake --build . --config Release
copy Release\DeepThinner.dll %USERPROFILE%\.nuke\

Linux

cd /path/to/DeepThinner
mkdir build &&cd build
cmake -DNUKE_INSTALL_PATH="/usr/local/Nuke16.0v8" ..
make -j$(nproc)
cp DeepThinner.so ~/.nuke/

macOS

cd /path/to/DeepThinner
mkdir build &&cd build
cmake -DNUKE_INSTALL_PATH="/Applications/Nuke16.0v8/Nuke16.0v8.app/Contents/MacOS" ..
make -j$(sysctl -n hw.ncpu)
cp DeepThinner.dylib ~/.nuke/

File Structure

DeepThinner/
├── DeepThinner.cpp — Plugin source code
├── CMakeLists.txt — CMake build configuration
├── menu.py — Nuke menu registration
└── README.md — This file

Quick Start

  1. Create a DeepThinner node from Deep > DeepThinner (or press Tab and type "DeepThinner").
  2. Connect it to your deep stream.
  3. The default settings (Occlusion Cutoff + Contribution Cull + Smart Merge) are a good starting point.
  4. Render, then open the Statistics group in the properties to see your reduction results.
  5. Click Update Statistics to refresh the numbers at any time.

Passes

#PassDefaultWhat It Does
1Depth RangeOffClips samples outside a near/far Z range
2Alpha CullOnRemoves samples with alpha at or below a threshold
3Occlusion CutoffOnDrops everything behind the point where coverage reaches a cutoff
4Contribution CullOnRemoves samples whose visible contribution is negligible
5Volumetric CollapseOffCollapses runs of low-alpha volume samples into fewer samples
6Smart MergeOnMerges Z-close and colour-similar consecutive samples
7Max SamplesOffHard per-pixel sample cap; drops deepest first

Suggested Settings

Light Touch (safe for final comp)

  • Occlusion Cutoff: 0.9999
  • Contribution Cull: 0.0005
  • Smart Merge Z tolerance: 0.005, color tolerance: 0.005

Moderate (good balance)

  • Occlusion Cutoff: 0.999
  • Contribution Cull: 0.001
  • Smart Merge Z tolerance: 0.01, color tolerance: 0.01

Aggressive (previews, layout, WIP)

  • Occlusion Cutoff: 0.99
  • Contribution Cull: 0.01
  • Volumetric Collapse: On, group size 8
  • Smart Merge Z tolerance: 0.05, color tolerance: 0.05
  • Max Samples: 64

Troubleshooting

ProblemSolution
No reduction showingEnsure at least one pass is enabled. Check that input has deep data.
Banding in volumesReduce Volumetric Collapse group size or raise volume alpha max.
Edge fringing on transparent objLower Smart Merge color tolerance or disable merge for that section.
Statistics say "No samples"Make sure you've rendered (not just validated). Click Update Statistics.
Build error: NOMINMAXEnsure you're using the provided CMakeLists.txt with Windows defines.
Build error: DeepOnlyOp.hUse DeepThinner v2.0 source — v1 targeted an older Nuke API.
Plugin doesn't appear in menuCheck that menu.py is in your ~/.nuke/ or NUKE_PATH directory.

Compatibility

  • Nuke 16.0v1+ (built against the Nuke 16 NDK)
  • Tested on Windows 11,
  • Passes through all channels unchanged — safe for any deep pipeline

Version History

v2.0

  • Seven independent thinning passes (added Depth Range, Occlusion Cutoff, Contribution Cull, Volumetric Collapse)
  • Colour-aware smart merge
  • In-panel statistics with Update button
  • Artist Guide and Technical Notes in the UI
  • Thread-local scratch buffers for zero-allocation processing
  • Nuke 16 API (DeepFilterOp)

v1.0

  • Initial release with Z-tolerance merge, alpha cull, and max samples

License

This plugin is provided as-is for use in production and personal projects. Created by Marten Blumen.

About

No description, website, or topics provided.

Resources

Contributing

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

DeepThinner v2.0

Deep Sample Optimisation for Nuke 16

Created by Marten Blumen


Overview

DeepThinner reduces deep sample counts per pixel through seven independent, artist-controllable passes. It dramatically improves downstream compositing speed, memory usage, and deep EXR write times with minimal to zero visual impact.


Installation

Pre-built Plugin (Recommended)

  1. Download the correct plugin for your platform:

    • Windows:DeepThinner.dll
  2. Copy the plugin file to one of the following locations:

    • Your personal Nuke directory: ~/.nuke/ (Linux/macOS) or %USERPROFILE%\.nuke\ (Windows)
    • A shared plugin directory on your NUKE_PATH
    • Your studio's custom plugin directory
  3. Copy menu.py to the same location as the plugin (or merge its contents into your existing menu.py).

  4. Restart Nuke. DeepThinner will appear under Deep > DeepThinner in the node toolbar.

Building from Source

Requirements

  • Nuke 16 with NDK headers installed
  • CMake 3.15 or later
  • C++17 compiler:
    • Windows: Visual Studio 2022 (MSVC 19.x)
    • Linux: GCC 9+ or Clang 10+
    • macOS: Xcode 12+ / Apple Clang 12+

Windows

cd C:\path\to\DeepThinner
mkdir build &&cd build
cmake -DNUKE_INSTALL_PATH="C:\Program Files\Nuke16.0v8" ..
cmake --build . --config Release
copy Release\DeepThinner.dll %USERPROFILE%\.nuke\

Linux

cd /path/to/DeepThinner
mkdir build &&cd build
cmake -DNUKE_INSTALL_PATH="/usr/local/Nuke16.0v8" ..
make -j$(nproc)
cp DeepThinner.so ~/.nuke/

macOS

cd /path/to/DeepThinner
mkdir build &&cd build
cmake -DNUKE_INSTALL_PATH="/Applications/Nuke16.0v8/Nuke16.0v8.app/Contents/MacOS" ..
make -j$(sysctl -n hw.ncpu)
cp DeepThinner.dylib ~/.nuke/

File Structure

DeepThinner/
├── DeepThinner.cpp — Plugin source code
├── CMakeLists.txt — CMake build configuration
├── menu.py — Nuke menu registration
└── README.md — This file

Quick Start

  1. Create a DeepThinner node from Deep > DeepThinner (or press Tab and type "DeepThinner").
  2. Connect it to your deep stream.
  3. The default settings (Occlusion Cutoff + Contribution Cull + Smart Merge) are a good starting point.
  4. Render, then open the Statistics group in the properties to see your reduction results.
  5. Click Update Statistics to refresh the numbers at any time.

Passes

#PassDefaultWhat It Does
1Depth RangeOffClips samples outside a near/far Z range
2Alpha CullOnRemoves samples with alpha at or below a threshold
3Occlusion CutoffOnDrops everything behind the point where coverage reaches a cutoff
4Contribution CullOnRemoves samples whose visible contribution is negligible
5Volumetric CollapseOffCollapses runs of low-alpha volume samples into fewer samples
6Smart MergeOnMerges Z-close and colour-similar consecutive samples
7Max SamplesOffHard per-pixel sample cap; drops deepest first

Suggested Settings

Light Touch (safe for final comp)

  • Occlusion Cutoff: 0.9999
  • Contribution Cull: 0.0005
  • Smart Merge Z tolerance: 0.005, color tolerance: 0.005

Moderate (good balance)

  • Occlusion Cutoff: 0.999
  • Contribution Cull: 0.001
  • Smart Merge Z tolerance: 0.01, color tolerance: 0.01

Aggressive (previews, layout, WIP)

  • Occlusion Cutoff: 0.99
  • Contribution Cull: 0.01
  • Volumetric Collapse: On, group size 8
  • Smart Merge Z tolerance: 0.05, color tolerance: 0.05
  • Max Samples: 64

Troubleshooting

ProblemSolution
No reduction showingEnsure at least one pass is enabled. Check that input has deep data.
Banding in volumesReduce Volumetric Collapse group size or raise volume alpha max.
Edge fringing on transparent objLower Smart Merge color tolerance or disable merge for that section.
Statistics say "No samples"Make sure you've rendered (not just validated). Click Update Statistics.
Build error: NOMINMAXEnsure you're using the provided CMakeLists.txt with Windows defines.
Build error: DeepOnlyOp.hUse DeepThinner v2.0 source — v1 targeted an older Nuke API.
Plugin doesn't appear in menuCheck that menu.py is in your ~/.nuke/ or NUKE_PATH directory.

Compatibility

  • Nuke 16.0v1+ (built against the Nuke 16 NDK)
  • Tested on Windows 11,
  • Passes through all channels unchanged — safe for any deep pipeline

Version History

v2.0

  • Seven independent thinning passes (added Depth Range, Occlusion Cutoff, Contribution Cull, Volumetric Collapse)
  • Colour-aware smart merge
  • In-panel statistics with Update button
  • Artist Guide and Technical Notes in the UI
  • Thread-local scratch buffers for zero-allocation processing
  • Nuke 16 API (DeepFilterOp)

v1.0

  • Initial release with Z-tolerance merge, alpha cull, and max samples

License

This plugin is provided as-is for use in production and personal projects. Created by Marten Blumen.

About

No description, website, or topics provided.

Resources

Contributing

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

DeepThinner v2.0

Deep Sample Optimisation for Nuke 16

Created by Marten Blumen


Overview

DeepThinner reduces deep sample counts per pixel through seven independent, artist-controllable passes. It dramatically improves downstream compositing speed, memory usage, and deep EXR write times with minimal to zero visual impact.


Installation

Pre-built Plugin (Recommended)

  1. Download the correct plugin for your platform:

    • Windows:DeepThinner.dll
  2. Copy the plugin file to one of the following locations:

    • Your personal Nuke directory: ~/.nuke/ (Linux/macOS) or %USERPROFILE%\.nuke\ (Windows)
    • A shared plugin directory on your NUKE_PATH
    • Your studio's custom plugin directory
  3. Copy menu.py to the same location as the plugin (or merge its contents into your existing menu.py).

  4. Restart Nuke. DeepThinner will appear under Deep > DeepThinner in the node toolbar.

Building from Source

Requirements

  • Nuke 16 with NDK headers installed
  • CMake 3.15 or later
  • C++17 compiler:
    • Windows: Visual Studio 2022 (MSVC 19.x)
    • Linux: GCC 9+ or Clang 10+
    • macOS: Xcode 12+ / Apple Clang 12+

Windows

cd C:\path\to\DeepThinner
mkdir build &&cd build
cmake -DNUKE_INSTALL_PATH="C:\Program Files\Nuke16.0v8" ..
cmake --build . --config Release
copy Release\DeepThinner.dll %USERPROFILE%\.nuke\

Linux

cd /path/to/DeepThinner
mkdir build &&cd build
cmake -DNUKE_INSTALL_PATH="/usr/local/Nuke16.0v8" ..
make -j$(nproc)
cp DeepThinner.so ~/.nuke/

macOS

cd /path/to/DeepThinner
mkdir build &&cd build
cmake -DNUKE_INSTALL_PATH="/Applications/Nuke16.0v8/Nuke16.0v8.app/Contents/MacOS" ..
make -j$(sysctl -n hw.ncpu)
cp DeepThinner.dylib ~/.nuke/

File Structure

DeepThinner/
├── DeepThinner.cpp — Plugin source code
├── CMakeLists.txt — CMake build configuration
├── menu.py — Nuke menu registration
└── README.md — This file

Quick Start

  1. Create a DeepThinner node from Deep > DeepThinner (or press Tab and type "DeepThinner").
  2. Connect it to your deep stream.
  3. The default settings (Occlusion Cutoff + Contribution Cull + Smart Merge) are a good starting point.
  4. Render, then open the Statistics group in the properties to see your reduction results.
  5. Click Update Statistics to refresh the numbers at any time.

Passes

#PassDefaultWhat It Does
1Depth RangeOffClips samples outside a near/far Z range
2Alpha CullOnRemoves samples with alpha at or below a threshold
3Occlusion CutoffOnDrops everything behind the point where coverage reaches a cutoff
4Contribution CullOnRemoves samples whose visible contribution is negligible
5Volumetric CollapseOffCollapses runs of low-alpha volume samples into fewer samples
6Smart MergeOnMerges Z-close and colour-similar consecutive samples
7Max SamplesOffHard per-pixel sample cap; drops deepest first

Suggested Settings

Light Touch (safe for final comp)

  • Occlusion Cutoff: 0.9999
  • Contribution Cull: 0.0005
  • Smart Merge Z tolerance: 0.005, color tolerance: 0.005

Moderate (good balance)

  • Occlusion Cutoff: 0.999
  • Contribution Cull: 0.001
  • Smart Merge Z tolerance: 0.01, color tolerance: 0.01

Aggressive (previews, layout, WIP)

  • Occlusion Cutoff: 0.99
  • Contribution Cull: 0.01
  • Volumetric Collapse: On, group size 8
  • Smart Merge Z tolerance: 0.05, color tolerance: 0.05
  • Max Samples: 64

Troubleshooting

ProblemSolution
No reduction showingEnsure at least one pass is enabled. Check that input has deep data.
Banding in volumesReduce Volumetric Collapse group size or raise volume alpha max.
Edge fringing on transparent objLower Smart Merge color tolerance or disable merge for that section.
Statistics say "No samples"Make sure you've rendered (not just validated). Click Update Statistics.
Build error: NOMINMAXEnsure you're using the provided CMakeLists.txt with Windows defines.
Build error: DeepOnlyOp.hUse DeepThinner v2.0 source — v1 targeted an older Nuke API.
Plugin doesn't appear in menuCheck that menu.py is in your ~/.nuke/ or NUKE_PATH directory.

Compatibility

  • Nuke 16.0v1+ (built against the Nuke 16 NDK)
  • Tested on Windows 11,
  • Passes through all channels unchanged — safe for any deep pipeline

Version History

v2.0

  • Seven independent thinning passes (added Depth Range, Occlusion Cutoff, Contribution Cull, Volumetric Collapse)
  • Colour-aware smart merge
  • In-panel statistics with Update button
  • Artist Guide and Technical Notes in the UI
  • Thread-local scratch buffers for zero-allocation processing
  • Nuke 16 API (DeepFilterOp)

v1.0

  • Initial release with Z-tolerance merge, alpha cull, and max samples

License

This plugin is provided as-is for use in production and personal projects. Created by Marten Blumen.

About

No description, website, or topics provided.

Resources

Contributing

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages