一、认识Nuke插件体系
Nuke通过插件系统扩展功能,主要支持两种类型:
- Gizmos:可视化节点(扩展名
.gizmo),用于图像处理流程 - Python脚本:自动化工具(扩展名
.py),可添加菜单命令或界面面板
核心机制:Nuke启动时会扫描特定目录(默认~/.nuke),自动加载其中的插件。用户可通过自定义路径实现灵活配置。
尤其随着AI的普及,更方便编写自己的插件包了,如果你也喜欢开发插件,那就跟着我的文章看一看吧。
二、准备工作:定位核心目录
- Windows用户
C:\Users\[用户名]\.nuke - macOS/Linux用户
~/.nuke
首次启动Nuke后自动生成该目录,内含关键文件:
menu.py:自定义菜单配置文件init.py:初始化脚本(优先执行)
三、Gizmo插件安装全流程
1. 单个Gizmo快速安装
步骤说明:
- 将
.gizmo文件复制到.nuke根目录 - 编辑
menu.py,添加菜单项:
# 创建节点菜单分类
gizmo_menu = nuke.menu('Nodes').addMenu('MyGizmos')
# 添加具体Gizmo
gizmo_menu.addCommand('SuperBlur', 'nuke.createNode("SuperBlur")')
- 重启Nuke后,在节点面板的
MyGizmos分类中找到新插件
2. 批量安装与分类管理
使用子目录:
- 在
.nuke下新建Gizmos文件夹 - 按功能分类存储Gizmo(如
/Gizmos/Keyer/、/Gizmos/Transform/) - 在
menu.py中声明路径:
nuke.pluginAddPath('./Gizmos') # 自动识别子目录结构
动态加载技巧:
# 自动扫描所有.gizmo文件
import os
filename=os.path.dirname(__file__)
file_path=os.path.basename(filename)
for path, dirs, files in os.walk(filename):
for file1 in files:
if file1.endswith('.gizmo'):
file1name=file1.split(".")[0]
nodesMenu=nodeMenu.addMenu("{}/Gizmos".format(file_path),icon="Group.png")
nodesMenu.addCommand(file1name, "nuke.createNode('{}')".format(file1))
四、Python脚本深度配置
1. 基础脚本安装
单文件方式:
- 将
hello_world.py放入.nuke - 在
menu.py中绑定功能:
import hello_world
nuke.menu('Nuke').addCommand('Script/hello world', 'hello_world()')
2. 模块化开发规范
推荐项目结构:
.nuke/
├─ myPlugins/
├─ Script/ # 脚本模块
│ ├─ hello_world.py
├─ init.py # 添加 import hello_world
├─ menu.py # 主入口
├─ init.py # 添加 nuke.pluginAddPath("Script")
├─ init.py # 添加 nuke.pluginAddPath("myPlugins")
初始化配置:
# -*- coding:utf-8 -*-
#弹窗 hello world
import nuke
def firstScript():
nuke.message("我的第一个代码:\nhello world")
# 在menu.py中添加
# -*- coding:utf-8 -*-
import nuke
tools_menu = nuke.menu('Nuke').addMenu('MyTools')
tools_menu.addCommand('Script/hello world', 'hello_world.firstScript()')
nuke.pluginAddPath("Script")
五、高级部署方案
1. 多平台路径配置
Windows环境变量:
- 新建系统变量
NUKE_PATH,值为D:nuke_plugins - 在
init.py中添加:
import os
for path in os.environ['NUKE_PATH'].split(';'):
nuke.pluginAddPath(path)
Linux/macOS配置:
# 在~/.bashrc或~/.zshrc中
export NUKE_PATH="$HOME/custom_plugins:/mnt/server/plugins"
六.图标设置
- 可以自己设计图标
- 调用nuke本身的图标
- 以Grade为例

然后创建一个节点,我这里用BackdropNode。

<img src= "Grade.png">在label测试,可以正确显示图片的,就可以作为你的插件图标
七.示例文件
- 在menu.py 自己加载插件,设置图标快捷键
- 示例代码(清楚写了注释)
# -*- coding:utf-8 -*- """ """ import nuke import os nkType=[".nk",".gizmo"] filename=os.path.dirname(__file__)# 获取当前文件夹完整路径 forderName=os.path.basename(filename)#获取当前文件夹名称 PluginGroup = forderName #插件包的名称继承文件夹名称,也可自定义改成字符串例如:PluginGroup = "MyPlugins" # tools_menu = nuke.menu('Nuke')#在上面菜单栏添加 nodeMenu = nuke.menu("Nodes")#在节点工具栏添加 nodeMenu.addMenu(PluginGroup, icon = "CurveTool.png")#插件包图标也可自定义 ,放在icon文件夹中 # 自动扫描所有.gizmo文件 for path, dirs, files in os.walk(filename): for file1 in files: if os.path.splitext(file1)[-1] in nkType: file1name=os.path.splitext(file1)[0] #根据含有nk、gizmo的文件夹名作为分类 dirFolder = os.path.basename(path) nodes=nodeMenu.addMenu("{}/{}".format(PluginGroup,dirFolder),icon="Grade.png") #如果icons文件夹里有同名png文件,就当作图标,没有就不设置图标 if os.path.exists(filename+"/icons/"+file1name+".png"): gizmoIcon = file1name+".png" else: gizmoIcon = "" nodes.addCommand(file1name, "nuke.createNode('{}')".format(file1),icon=gizmoIcon) s = nodeMenu.addMenu("{}/Script".format(PluginGroup),icon="SmartVector.png") #这里可以定义快捷键和图标 例如:s.addCommand('hello world', 'hello_world.firstScript()',shortcut='F2',icon='Expression.png') s.addCommand('hello world', 'hello_world.firstScript()',shortcut='',icon='') -

示例插件包
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END











暂无评论内容