def __init__ (self) : self.rvc = rvNetwork.RvCommunicator("Nuke"); self.port = 45128 self.initialized = False self.running = False self.selectedNode = None self.commands = self.LockedFifo() self.crashFlag = self.LockedFlag() self.sessionDir = "" self.syncSelection = False self.syncFrameChange = False self.syncReadChanges = False self.rvExecPath = "" self.updateFromPrefs() self.portFile = self.sessionDir + "/rv" + str(os.getpid()) self.zoomTargetNode = None log ("adding callbacks") # nuke.addUpdateUI (self.updateUI) nuke.addKnobChanged (self.knobChanged) nuke.addOnCreate (self.onCreate) nuke.addOnDestroy (self.onDestroy) nuke.addOnScriptClose (self.onScriptClose) nuke.addOnScriptLoad (self.onScriptLoad)
def __init__(self): self.rvc = rvNetwork.RvCommunicator("Nuke") self.port = 45128 self.initialized = False self.running = False self.selectedNode = None self.commands = self.LockedFifo() self.crashFlag = self.LockedFlag() self.sessionDir = "" self.syncSelection = False self.syncFrameChange = False self.syncReadChanges = False self.rvExecPath = "" self.updateFromPrefs() self.portFile = self.sessionDir + "/rv" + str(os.getpid()) self.zoomTargetNode = None log("adding callbacks") # nuke.addUpdateUI (self.updateUI) nuke.addKnobChanged(self.knobChanged) nuke.addOnCreate(self.onCreate) nuke.addOnDestroy(self.onDestroy) nuke.addOnScriptClose(self.onScriptClose) nuke.addOnScriptLoad(self.onScriptLoad)
def addProfileOutput(filename): print "TIMING ENABLED: profile will be saved to " + filename import nukescripts nukeProfiler = nukescripts.NukeProfiler() nukeProfiler.setPathToFile(filename) nuke.addBeforeRender(nukeProfiler.resetTimersAndStartProfile) nuke.addAfterFrameRender(nukeProfiler.addFrameProfileAndResetTimers) nuke.addOnScriptClose(nukeProfiler.endProfile)
def addCallbackOnScriptClose(self, func, nodeClass=None, group=None): """Executed when Nuke is exited or the script is closed.""" self._addNukeCallbackGroup(group) self.windowInstance()['callback'][group]['onScriptClose'][func].add(nodeClass) if not self.__windowHidden: if nodeClass is None: nuke.addOnScriptClose(func) else: nuke.addOnScriptClose(func, nodeClass=nodeClass)
def setup(): nuke.addBeforeRender(CALLBACKS_BEFORE_RENDER.execute) nuke.addOnScriptLoad(CALLBACKS_ON_SCRIPT_LOAD.execute) nuke.addOnScriptSave(CALLBACKS_ON_SCRIPT_SAVE.execute) nuke.addOnScriptClose(CALLBACKS_ON_SCRIPT_CLOSE.execute) nuke.addOnCreate(CALLBACKS_ON_CREATE.execute) nuke.addUpdateUI(CALLBACKS_UPDATE_UI.execute) if nuke.GUI: import nukescripts nukescripts.addDropDataCallback(CALLBACKS_ON_DROP_DATA.execute)
def after_frame(self, context=None): if context['frameProgress'] == context['numFrames']: self.pids_done[context['id']] = True def render_next(self): if not self.nodes: return node = self.nodes[0] del self.nodes[0] # it's taken, so remove it f = int(node['first'].value()) l = int(node['last'].value()) ranges = nuke.FrameRanges() ranges.add(nuke.FrameRange('%d-%d' % (f,l))) pid = nuke.executeBackgroundNuke(self.path, [node], ranges, ['main'], {}) self.pids[pid] = node.name() self.pids_done[pid] = False self.pids_time[pid] = time.time() print 'Started rendering: %s, pid: %d' % (node.name(), pid) def start_render(self): print '\n' # get and sort selected write nodes self.nodes = nuke.selectedNodes('Write') self.nodes.sort(key=lambda x: x['render_order'].value()) # disable proxy self.proxy = nuke.root()['proxy'].value() nuke.root()['proxy'].setValue(False) nuke.addAfterBackgroundRender(self.after_render) nuke.addAfterBackgroundFrameRender(self.after_frame) nuke.addOnScriptClose(self.remove_callbacks) # start x number of background processes for i in range(min(self.concurrent_jobs, len(self.nodes))): self.render_next()
nuke.randomWord = lambda: wordList[randint(0,len(wordList)-1)].title() # ------------------------------------------------- # def saveRandomName(): """ Automatically saves comps on launch with a random name to NUKE_TEMP_DIR. To remove a comp from cache, delete all nodes, save, and quit. """ if nuke.root().name() == "Root": path = os.environ["NUKE_TEMP_DIR"]\ + "/" + nuke.randomWord()\ + "-" + nuke.randomWord()\ + "_" + datetime.now().strftime("%d-%B-%Y")\ + "_v1.nk" print "Default saved: " + path nuke.scriptSaveAs(path) nuke.removeOnUserCreate(saveRandomName) nuke.addOnUserCreate(saveRandomName) def deleteEmptyScript(): """ Removes any *saved* script if the script is empty.""" allNodes = nuke.allNodes() dirPath,script = os.path.split(nuke.root().name()) if len([n for n in allNodes if n.Class() != "Viewer"]) == 0 and script != "Root": os.chdir(dirPath) [os.remove(f) for f in os.listdir(dirPath) if re.search(script.split(".")[0],f)] nuke.addOnScriptClose(deleteEmptyScript)
def _cbk(name): nuke.tprint(name + " " + nuke.thisNode().name() + "." + nuke.thisKnob().name()) nuke.addOnUserCreate(_cb, ("onUserCreate")) nuke.addOnCreate(_cb, ("onCreate")) nuke.addOnScriptLoad(_cb, ("onScriptLoad")) nuke.addOnScriptSave(_cb, ("onScriptSave")) nuke.addOnScriptClose(_cb, ("onScriptClose")) nuke.addOnDestroy(_cb, ("onDestroy")) nuke.addKnobChanged(_cbk, ("knobChanged")) nuke.addUpdateUI(_cb, ("updateUI")) nuke.addAutolabel(_cb, ("autolabel")) nuke.addBeforeRender(_cb, ("beforeRender")) nuke.addBeforeFrameRender(_cb, ("beforeFrameRender")) nuke.addAfterFrameRender(_cb, ("afterFrameRender"))
import SocketServer import nuke from nukescripts import utils import nuke_listener try: listener = nuke_listener.NukeListener() listener.start() def killListener(): listener.stop() nuke.addOnScriptClose(killListener) except SocketServer.socket.error as e: print e print "Using existing HTTP listener"
# coding=utf-8 import nuke from menu_creator import RootMenu, save_record toolkit_menu = RootMenu('Toolkit', nuke.menu('Nuke')) toolkit_menu.initialize() nuke.addOnScriptClose(save_record, args=(toolkit_menu, ))
for (i,node) in enumerate(readingNodes): if 'checksums' not in node.knobs().keys(): tKnob = nuke.Text_Knob('checksums','checksums') tKnob.setVisible(False) node.addKnob(tKnob) (dirPath, basename, filename) = nuke.actualFilename(node) filepath = os.path.join(dirPath, filename) if os.path.exists(filepath): crc = hashlib.sha1(open(filepath).read(10485760)).hexdigest() node['checksums'].setValue(crc) task.setProgress(int(i*1./len(readingNodes)*100)) if threaded: threading.Thread( None, run ).start() else: run() nuke.addOnScriptLoad(checksumOfReadNode) nuke.addOnScriptClose(checksumOfReadNode, args=(), kwargs={'threaded':False}, nodeClass='Root') # ------------- Reconnect functions ---------------- # # Callback functions used to reconnect all missing reads on # scripLoad with the help of OS-dependent indexing services. # def reconnectMissing(indexCmd): # On Windows, use Everything (http://www.voidtools.com/). # Assumes "es.exe" command line program is in PATH. Note that # "es.exe" doesn't work with networked drives. # On OS X, use Spotlight. errors = [n for n in nuke._allNodes() if n.hasError() and nuke.filename(n) is not None] if errors: task = nuke.ProgressTask("Missing files!") task.setMessage("Reconnecting %i nodes" % len(errors))