Commandes de base (Nuke) : Différence entre versions

De FdWiki
Aller à : navigation, rechercher
m (add dependent)
m (add python button)
Ligne 85 : Ligne 85 :
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Certains parametres peuvent être "exécuté" (comme si on cliquait sur le bouton en fait):
+
Ajouter un paramètre a un node:
 +
<syntaxhighlight lang="python">
 +
myNode.addKnob(nuke.Text_Knob("divider")) # Juste une barre de separation
 +
myNode.addKnob(nuke.Color_Knob("color")) # Un knob de couleur
 +
myNode.addKnob(nuke.Double_Knob("value")) # Un knob de valeur a virgule flottante
 +
</syntaxhighlight>
 +
 
 +
Ajouter un bouton qui execute du Python:
 +
<syntaxhighlight lang="python">
 +
pyButton = nuke.PyScript_Knob("Do something")
 +
pyButton.setCommand("print 'Toto'")
 +
myNode.addKnob(pyButton)
 +
</syntaxhighlight>
 +
 
 +
D'autres type de knob sont disponible dans les sous-classe de [http://docs.thefoundry.co.uk/nuke/63/pythonreference/nuke.Knob-class.html la classe Knob].
 +
 
 +
Certains paramètres peuvent être "exécuté" (comme si on cliquait sur le bouton en fait):
 
<syntaxhighlight lang="python">
 
<syntaxhighlight lang="python">
 
for myNode in nuke.allNodes("Read") :
 
for myNode in nuke.allNodes("Read") :

Version du 14 septembre 2011 à 14:16

Principe

Cette page a pour but de donner des exemples simples des commandes python les plus utilisées dans Nuke

Préférences

Faire un echo des commandes Python lancé par Nuke (à la Maya)

Aller dans:

  • Edit/Preferences
  • Onglet Script Editor
  • Cocher echo python commands to output window

Les nodes

Voir [la doc de la classe Node] pour plus d'informations:

Créer un node

Deux méthodes pour faire la même chose:

nuke.createNode("Blur")
nuke.nodes.Blur()	# déprécié on dirait

Ne pas ouvrir le panel du node créé:

nuke.createNode("Blur", inpanel=False )

La selection

Eviter:

nuke.selectedNode()

Comportement complexe, préférer:

nuke.selectedNodes()

Qui revoit une bête liste dans l'ordre inversé de la sélection.

Savoir si un node est sélectionné:

myNode.isSelected()	# True/False

Ajouter/Enlever le node a la sélection:

myNode.setSelected(True)

Depuis le projet

Recupérer tout les nodes:

nuke.allNodes()	# list tout les nodes du projet en cours
nuke.allNodes("Blur")	# list tout les nodes du projet en cours de class Blur

Récupérer un node depuis sont nom:

nuke.toNode("Blur1")

Nom d'un node:

myNode.name()	# renvoit le nom du node "Blur1"
myNode.fullName()	# renvoi le nom complet du node

Positionnement dans le graph:

myNode.xpos()
myNode.ypos()
myNode.setXpos(30)
myNode.setYpos(30)

Paramètre des nodes

Lister les dict des attributs d'un node:

myNode.knobs()

Methode de base pour get/set:

myNode.knob("size").value()	# get value
myNode.knob("size").setValue(2)	# set value

Ajouter un paramètre a un node:

myNode.addKnob(nuke.Text_Knob("divider"))	# Juste une barre de separation
myNode.addKnob(nuke.Color_Knob("color"))	# Un knob de couleur
myNode.addKnob(nuke.Double_Knob("value"))	# Un knob de valeur a virgule flottante

Ajouter un bouton qui execute du Python:

pyButton = nuke.PyScript_Knob("Do something")
pyButton.setCommand("print 'Toto'")
myNode.addKnob(pyButton)

D'autres type de knob sont disponible dans les sous-classe de la classe Knob.

Certains paramètres peuvent être "exécuté" (comme si on cliquait sur le bouton en fait):

for myNode in nuke.allNodes("Read") :
	myNode.knob("reload").execute()

Connections des nodes

Toute les connections se font par les index des inputs/output:

myNode.minInputs()	# 3 pour un node de merge: A, B, et Mask
myNode.maxInputs()	# 101 pour un node de merge: A2, B2, etc...
myNode.maxOutputs()	# Pas le nombre de connections, en output, du node mais le nombre d’élément que sort le node (un seul la plupart du temps)
myNode.optionalInput()	# Index de l'input optionnel (souvent le mask). 2 pour le node de merge

La taille du tableau des inputs:

myNode.inputs()	# La taille du tableau des inputs

Si mask (index 2) est connecté, la taille est de 3 (0,1,2).

Si A est connecté, la taille est de... 2 (0,1). (Apparemment, A est la seconde entrée du tableau et B la première... Allez savoir pourquoi...)

Si B est connecté, la taille est de... 1 (Juste 0).

myNode.canSetInput(0, anotherNode)	# Vérifie que la connection de anotherNode sur myNode a l'index 0 est possible
myNode.setInput(0, anotherNode)	# Connecter un node a un autre sur l'index 0
myNode.setInput(0, None)	# Déconnecter un input
myNode.connectInput(0, anotherNode)	 # connect l'output de anotherNode a l'input 0 de myNode
myNode.channels()	# ['rgba.red', 'rgba.green', 'rgba.blue', 'rgba.alpha', 'depth.Z']

Lister les dépendances montantes et descendantes:

myNode.dependent()	# Renvoi la liste des nodes dépendant (enfant) de myNode
myNode.dependencies()	# Renvoi la liste des nodes dont dépend myMode (ces parents)

Interface

Menus

Customiser le menu:

menuBar = nuke.menu("Nuke")	# La barre de menu principale
myMenu = menuBar.addMenu("&myMenu")	# Ajoute un menu custom
myMenuCommand = myMenu.addCommand("Do Something", "doSomething()")	# Ajoute une commande

mySubMenu = myMenu.addMenu("mySubMenu")	# Ajoute un sous menu a notre menu custom
mySubMenu.addCommand("Do Something", "doSomething()")	# Ajoute une commande

editMenu = menuBar.findItem("&Edit")	# Cherche un menu existant
editMenu.addCommand("Do Something", "doSomething()")	# Et y ajoute une commande
nodeSubMenu = editMenu.findItem("Node")	# Cherche le sous menu "Node"
nodeSubMenu.addSeparator()	# Y ajoute un separator
nodeSubMenu.addCommand("Do Something", "doSomething()")	# Et une commande

Dialog

Une fileDialog, pour les clips. Un seul/plusieurs fichiers:

nuke.getClipname( "fileDialogName" )
# Result: '/path/to/my/file'
nuke.getClipname( "fileDialogName", multiple=True )
# Result: [/path/to/my/file1', '/path/to/my/file2', '/path/to/my/file3']

Une autre avec pattern et defaultPath:

nuke.getFilename("fileDialogName", pattern="*.png;*.jpeg", default="/path/to/a/file" )

Yes/No dialog

nuke.ask("Ça roule?")	# revoit True/False

Icones

Appliquer une icone à un node:

myNode.knob("icon").setValue("/path/to/an/icon.png")

Autres

Overrider la fonction de création d'un node:

def myCreateNode() :
	print "coucou"
nukescripts.create_read = myCreateNode

Divers

Faire un print dans le terminal qui a lancé Nuke:

nuke.tprint("Hello World!")

Afficher les plugin path:

nuke.pluginPath()

Lancer nuke en mode terminal (pas de GUI):

nuke -t

Savoir si le script s'execute en mode terminal ou en mode GUI:

nuke.GUI

Connaitre le nombre de CPU:

nuke.NUM_CPUS

Pour une liste complète:

help(nuke)