Automatically place a full-frame 3D Card at the correct depth in any Deep comp. Pick a pixel, click generate.
Deep Space Card
First submitted: 22 February 2026
Author: Marty Blumen
Website: https://www.martyblumen.com/
Compatible Nuke versions: 13.0 or later
Compatibility: Windows
Deep Card Placer
Deep Card Placer is a lightweight controller node that lets you instantly place a correctly-sized and correctly-positioned Card in 3D space using data from a Deep render — no manual guesswork required.
What it does
Pick any pixel over a rendered Deep image and hit the button. The tool samples the Z depth at that point, unprojects it into world space using your camera's frustum, and generates a Card node that:
Is translated exactly to the sampled world-space position
Is scaled to fill the full camera gate at that depth (correct frustum coverage using haperture, vaperture, and focal length)
Has its rotation expression-linked to the camera, so it always faces the lens
The result is a Card that is perfectly registered to your deep scene at the correct depth — ready to receive atmospherics, smoke, roto plates, lens effects, or any other 2.5D element.

How to use
Select your Camera node and your Deep Read (or DeepMerge) before running the setup script, or assign them manually using the Update Cam and Update Deep buttons
Move the Target Pixel crosshair over the area of interest in your deep render
Click Generate Full-Frame 3D Card
The Card will appear in your node graph, selected and ready to connect.
Technical notes
Depth values are sampled from the deep.front channel via a temporary DeepToImage node, which is created and deleted automatically. The unprojection uses proper Z-plane math — z_depth is treated as a perpendicular camera-space distance, not a ray length, ensuring accurate placement across the full frame including at the edges of the frustum.
Requirements
Nuke 13 or later (tested up to 16)
A Camera node (Camera2 / Camera3 / Camera4 supported)
A Deep node with valid
deep.frontdata
Installation
If you already have a ~/.nuke/menu.py, add the following lines to it or create a new menu.py file:
import os
import nuke
_NK_FILE = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'DeepCardPlacer.nk')
def create_deep_card_placer():
if not os.path.exists(_NK_FILE):
nuke.message("DeepCardTool Error:\nCould not find DeepCardPlacer.nk\n\nExpected:\n{}".format(_NK_FILE))
return
for n in nuke.selectedNodes():
n['selected'].setValue(False)
nuke.nodePaste(_NK_FILE)
pasted = nuke.selectedNodes()
if pasted:
node = pasted[0]
nuke.zoom(1, [node.xpos(), node.ypos()])
node.showControlPanel()
nuke.menu('Nuke').addMenu('Marten Tools').addCommand('Deep Card Placer', create_deep_card_placer)
MIT License
Copyright (c) 2026 Marten Blumen
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
Comments