Last active
December 16, 2015 18:20
-
-
Save draconiansolo/5476864 to your computer and use it in GitHub Desktop.
Nuke Python for artists tutorials Callback Knobs with opinionated comments and notes in spanglish.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
######################################################### | |
########### CALLBACK KNOBS PART A ################### | |
###### checking script name for version | |
#should be on onSaveScript callback | |
import re | |
def checkScriptName(name): | |
print name | |
if not re.search( r'_[vV]\d+', name ): #esto es un regular expresion | |
raise Exception, 'No version found in script name.\nplease use proper name convention.' | |
else: | |
print 'all good' | |
#nuke.root()['onScriptSave'].setValue("checkScriptName(nuke.root()['name'].value())")#tiene que haber una manera mas decente de hacer esto. | |
#-------------------- | |
def nameCheck(): | |
checkScriptName(nuke.root()['name'].value()) | |
nuke.addOnScriptSave(nameCheck) #por alguna razon, no sirvio cuando lo trate de hacer directamente como checkScriptName,(rootname), algo de inmutabilidad, I guess. | |
#---------------------------------------------------------- | |
##############funcion para hacer que cree automaticamente los directorios en los que esta guardando el script | |
#############esto es del OhulIO.py ######################## | |
####mal##### | |
import os #os module, file manipulation and stuff | |
import nuke #main nuke module | |
import nukescripts #no entiendo bien para que hay que llamar esto. | |
def createOutDir(file): #funcion para crear directorios para los renders automaticamente | |
myFile=os.path.dirname(file) #variable para guardar el path | |
myDir=nuke.callbacks.filenameFilter(myFile) | |
print myDir | |
if not os.path.isdir(file): #si el path no existe | |
if nuke.ask('Create directory?\n%s'%myDir): #preguntar si uno lo quiere crear | |
return os.makedirs(myDir) #lo crea | |
else: raise Exception,"can't render into a nonexistent directory" #o hace una excepcion | |
#createOutDir(nuke.thisNode()['file'].value()) #esto es lo que va en el callback de before render | |
#OhulIO.createOutDir(nuke.thisNode()['file'].value()) #asi iria si estuviera en el archivo OhulIO.py y estuviera importado en menu.py | |
#createOutDir(nuke.thisNode()['file'].value()) | |
nuke.knobDefault("Write.beforeRender", | |
"createOutDir(nuke.thisNode()['file'].value())") # con esto hago que siempre que se cree un write node, tenga este callback ja! | |
#(esto) tambien lo podria hacer con el root. | |
#todo este pedazo, no sirve porque por alguna razon isdir siempre retorna false... #hay algo raro que pasa cuando uno pone los callbacks con parametros y es que parece que evalua los parametros solo cuando se pone el callback y no los actualiza | |
#####/mal####### | |
#---------------------------------------------------------- | |
#mejor el del ejemplo del python nuke sdk | |
#####ejemplo##### | |
def createWriteDir(): | |
import nuke, os, errno | |
file=nuke.filename(nuke.thisNode()) | |
dir=os.path.dirname(file) | |
osdir=nuke.callbacks.filenameFilter(dir) | |
try: | |
os.makedirs(osdir) | |
except OSError, e: | |
if e.errno != errno.EEXIST: | |
raise | |
nuke.addBeforeRender(createWriteDir) | |
#######/ejemplo | |
#------------------------------------------------------------- | |
##### mas chevere algo que tenga lo mejor de los dos ##### | |
def createWriteDir(): | |
import nuke, os, errno | |
file=nuke.filename(nuke.thisNode()) | |
dir=os.path.dirname(file) | |
osdir=nuke.callbacks.filenameFilter(dir) | |
if not os.path.isdir(osdir): #si el path no existe | |
if nuke.ask('Create directory?\n%s'%osdir): #preguntar si uno lo quiere crear | |
try: | |
os.makedirs(osdir) | |
except OSError, e: | |
if e.errno != errno.EEXIST: | |
raise | |
else: raise Exception,"can't render into nonexistent directory" #o hace una excepcion | |
nuke.addBeforeRender(createWriteDir) | |
#print nuke.filename(nuke.thisNode(),nuke.REPLACE) | |
nuke.knobDefault("Write.beforeFrameRender", | |
"print nuke.filename(nuke.thisNode(),nuke.REPLACE)") # callback para que imprima en la consola el nombre de cada cuadro que vaya haciendo. nuke.filename es para retornar el nombre del cuadro con el que esta trabajando ene este momento, nuke.REPLACE es para que aplique las variables al formato del string, reemplazando #### por el numero del cuadro y asi. | |
#os.system( 'say the render is done, dude. get back to your desk!' ) | |
nuke.knobDefault("Write.afterRender", | |
"os.system( 'say the render is done. yay!' )") #comando para llamar utilidades del sistema, en este caso, para que hable el computador y diga eso. | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment