def _makeFile(versionName, subdir): '''sets out values @versionName: name of the version, format differs between delivery and non-delivery, ie. show_shot_type_pass_v### @subdir: sub-directory under version directory ''' # Version directory versionDir = joinPath(TYPE_CONFIG[just_verType]['DIR'], versionName) out_file = joinPath( versionDir, subdir, '{versionName}.{frame}.{ext}'.format(versionName=versionName,frame=PADDING_FRAME,ext=TYPE_CONFIG[just_verType]['EXT']) ) # Output file scriptcopy out_scriptcopy = joinPath(versionDir,'%s.scriptcopy.nk' % versionName) return out_file, out_scriptcopy
def getLightingPath(): '''get lighting render dir from kupipeline''' import mod_StudioLoad SHOW = mod_StudioLoad.LoadSlate()['SHOW'] SHOT = mod_StudioLoad.LoadSlate()['SHOT'] path = joinPath('K:/PROJECTS/Personal/', SHOW, SHOT, 'assets', 'lighting') return path
def render_node(node): '''launch render''' out_path = node['file'].value() out_scriptcopy = node['tx_scriptcopy'].value() startFrame = int(nuke.Root()['first_frame'].value()) endFrame = int(nuke.Root()['last_frame'].value()) def _soloWrite(sel_node, all_enabled_write, mode='solo'): if mode == 'solo': for s in all_enabled_write: if s != sel_node.name(): print('node disabled---' + s) nuke.toNode(s)['disable'].setValue(True) elif mode == 'reverse': for s in all_enabled_write: nuke.toNode(s)['disable'].setValue(False) print('node enabled---' + s) askMessage = "Render Node: %s\nFile: %s\nFramerage: %s-%s\n" % ( node.name(), os.path.basename( node['file'].value()), startFrame, endFrame) c = nuke.ask(askMessage) if c: if not os.path.exists(os.path.dirname(out_path)): p = os.path.dirname(out_path) os.makedirs(p) print("out path created --- %s" % p) if not os.path.exists(os.path.dirname(out_scriptcopy)): s = os.path.dirname(out_scriptcopy) os.makedirs(s) print("out scriptcopy created --- %s" % s) all_enabled_write = [ n.name() for n in nuke.allNodes('Write') if n['disable'].value() == False ] _soloWrite(node, all_enabled_write, mode='solo') nuke.scriptSave() thisScript_path = nuke.scriptName() shutil.copy2(thisScript_path, out_scriptcopy) # nuke.render(node, startFrame, endFrame) exe = joinPath(nuke.EXE_PATH).replace('/', '\\') cmd_str = """start cmd /k "{exe}" -t -m 22 -xi {script} {start}-{end}""".format( exe=exe, node=node.name(), script=thisScript_path, start=startFrame, end=endFrame) subprocess.Popen(cmd_str, shell=True) _soloWrite(node, all_enabled_write, mode='reverse') else: print("user cancelled")
def getAOVs(dir_renderVersion): '''get renderLayer, then passes @path: Render root path (ie. '/TIO_orbit_1k_v001'), str return: {<renderLayer>: [<renderPasses>]} ''' ls_aov = {} # {RenderLayer: [RenderPasses, RenderPasses]} for l in nuke.getFileNameList(dir_renderVersion): thisLayer = [ p for p in nuke.getFileNameList(joinPath(dir_renderVersion, l)) ] ls_aov[l] = thisLayer return ls_aov
def get_nuke_knobs(self): '''get the selected node and its knobs return: (tuple), (obj) node object, (list of str) knob names ''' _n = nuke.selectedNode() _nodename = _n.name() _knobs = KNOBS_NK[_n.Class()] self.group_knobs.setTitle(_nodename) self.node_icon.setPixmap( QtGui.QPixmap(joinPath(DIR_ICON, '%s.png' % _n.Class()))) return _n, _knobs
def onTakeoff(self): debug_path = self.path.text() debug_file = self.file.currentText() debug_func = self.func.text() if debug_path and debug_file: pyString = open(joinPath(debug_path, debug_file), 'r').read() callFunc = '\n' + debug_func pyString += callFunc compiled = compile(pyString, '<string>', 'exec') exec(compiled, globals()) self.save_log() else: nuke.message("Fail to load file")
def get_lsFunc(self): '''get functions defined in the file return: list of functions, (list) ''' debug_path = self.path.text() debug_file = self.file.currentText() f = joinPath(debug_path, debug_file) ls_func = [] try: with open(f, 'r') as pyString: for l in pyString: if l.strip().endswith('():') and re.search('def\s', l): l=l.strip('def ') l=l.replace(':\n', '') ls_func.append(l) except: pass return ls_func
def createRead(path): '''create read from path @path: full path for AOV, (str) return: aov read node, (obj) ''' exrs = nuke.getFileNameList(path)[0] # ['albedo.####.exr 1-96'] frames, range = exrs.split(' ') first, last = range.split('-') first = int(first) last = int(last) aov = nuke.nodes.Read(file=joinPath(path, frames), name=os.path.basename(path), first=first, last=last, label=os.path.basename(path)) isData = True if aov.name() in DATA_AOV else False aov['raw'].setValue(isData) return aov
version 0.0 - nukescript panel for testing modules version 1.0 - save a log with recent test and auto load on start ''' return ver #------------------------------------------------------------------------------ #-Global Variables #------------------------------------------------------------------------------ USER_NUKE = joinPath(os.getenv('HOME'), '.nuke/') LOG_FILE = joinPath(USER_NUKE, 'TestFlight_log.json') #------------------------------------------------------------------------------ #-Supporting Functions #------------------------------------------------------------------------------ def findDraftDir(): '''finds the mod_Draft dir as for default path''' slate = mod_StudioLoad.LoadSlate() path_draft = os.path.join(os.getenv('KU_PKG_PATH'), '_pkg_KuFunc/').replace('\\', '/') return path_draft
def SequenceLoader(self): '''main function construct the image group''' dir_renderVersion = joinPath(self.lgtPath.text(), self.renderVersion_mu.currentText()) if dir_renderVersion == None: nuke.message("Import Canceled") else: name_renderVersion = os.path.basename( dir_renderVersion.rstrip('/')) # TIO_orbit_1k_v001 ver_renderVersion = int(name_renderVersion.split('_v')[1]) RGBA = 'beauty' # Building Image Group ls_aov = getAOVs(dir_renderVersion) for p in ls_aov[ls_aov.keys()[0]]: nuke.Layer(p, [ '%s.red' % p, '%s.green' % p, '%s.blue' % p, '%s.alpha' % p ]) # nodeLabel = '%s\nv%s' % (name_renderVersion.split('_v')[0], name_renderVersion.split('_v')[1]) nodeLabel = "nuke.thisNode().name()+'\\n'+nuke.thisNode()['tx_version'].value()+'\\n\\n'+nuke.thisNode()['tx_layer'].value()+'\\n'+'v'+nuke.thisNode()['int_thisVersion'].value()" for l in ls_aov.keys(): imgGroup = nuke.nodes.Group(autolabel=nodeLabel, postage_stamp=1) imgGroup.setName('kpRead1') t_tab = nuke.Tab_Knob('tb_user', 'kpRead') k_pipeline = nuke.Text_Knob('kupipeline', 'kpRead', 'kpRead') # Ku Pipeline Identifier k_renderVersion = nuke.Text_Knob( 'tx_version', '<b>render: </b>', name_renderVersion.split('_v')[0]) mod = os.path.basename(__file__).split('.py')[0] k_verUp = nuke.PyScript_Knob( 'btn_verUp', '<b>▲</b>', '%s.versionUp(nuke.thisNode())' % mod) k_verDown = nuke.PyScript_Knob( 'btn_verDown', '<b>▼</b>', '%s.versionDown(nuke.thisNode())' % mod) k_verLatest = nuke.PyScript_Knob( 'btn_verLatest', '<b>★</b>', '%s.versionLatest(nuke.thisNode())' % mod) k_thisVersion = nuke.Text_Knob('int_thisVersion', '<b>version: </b>') k_thisVersion.setValue('%03d' % ver_renderVersion) k_renderLayer = nuke.Text_Knob('tx_layer', '<b>layer: </b>', l) k_div = nuke.Text_Knob('', "<b>Switch Version:</b>") k_path = nuke.Text_Knob('tx_dir', '<b>path: </b>', dir_renderVersion) # k_aov = nuke.Text_Knob('tx_aov', '<b>aovs: </b>', '\n'.join(ls_aov[l])) # k_thisVersion.setEnabled(False) k_thisVersion.setFlag(nuke.STARTLINE) k_path.setVisible(False) k_verUp.setFlag(nuke.STARTLINE) k_verUp.setTooltip("Version Up") k_verDown.clearFlag(nuke.STARTLINE) k_verDown.setTooltip("Version Down") k_verLatest.clearFlag(nuke.STARTLINE) k_verLatest.setTooltip("Latest Version") k_pipeline.setVisible(False) for k in [ t_tab, k_pipeline, k_path, k_renderVersion, k_thisVersion, k_renderLayer, k_div, k_verUp, k_verDown, k_verLatest ]: imgGroup.addKnob(k) with imgGroup: aov_beauty = None aov_rest = [] for p in ls_aov[l]: path = joinPath(dir_renderVersion, l, p) createRead(path) aov_beauty = nuke.toNode(RGBA) aov_rest = [ n for n in nuke.allNodes('Read') if n != aov_beauty ] shuffling(aov_beauty, aov_rest) self.close()
'Log2Lin': ['operation'], 'Merge2': ['operation'], 'ChannelMerge': ['operation'], 'Mirror2': ['flip', 'flop'], 'Shuffle': ['channels'], 'FrameHold': ['first_frame'], 'Dissolve': ['which'], 'Switch': ['which'], 'Transform': ['translate', 'rotate', 'scale', 'invert_matrix'] } USER_LABEL = { 'EXPTool': [('red', 'stops')], } DIR_ICON = joinPath(os.path.dirname(nuke.EXE_PATH), 'plugins', 'icons') WIDGET_HEIGHT = 20 #------------------------------------------------------------------------------ #-Core Module UI #------------------------------------------------------------------------------ class Core_HoverValue(QtWidgets.QDialog): def __init__(self): super(Core_HoverValue, self).__init__() # Widgets self.node_icon = QtWidgets.QLabel() self.title = QtWidgets.QLabel('<b>HoverValue</b>')