Guest User

Untitled

a guest
May 24th, 2018
202
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.64 KB | None | 0 0
  1. #
  2. # Asset Manager for Nuke v1.0.0
  3. # Jorge Sanchez Salcedo (2018)
  4. #
  5. # www.jorgesanchez-da.com
  6. # jorgesanchez.da@gmail.com
  7. #
  8.  
  9. import os
  10. import re
  11. from glob import glob
  12. import nuke
  13. import nukescripts
  14.  
  15. ### DEFINE ROOT ###
  16. def rootDir():
  17. return 'D:\Projects'
  18.  
  19.  
  20. print ' '
  21. print ' > Root: ' + rootDir()
  22. print ' '
  23. print ' > Loading Asset Manager for Nuke v1.0.0'
  24. print ' > by Jorge Sanchez Salcedo (2018)'
  25. print ' > www.jorgesanchez-da.com'
  26. print ' > jorgesanchez.da@gmail.com'
  27. print ' '
  28.  
  29.  
  30. ### PROJECTS ###
  31. def getDirs():
  32. projectsDir = rootDir()
  33. projects = []
  34. sequences = {}
  35. shots = {}
  36.  
  37. for i in os.listdir(projectsDir):
  38. path = os.path.join(projectsDir, i)
  39. if os.path.isdir(path):
  40. projects.append(i)
  41.  
  42. for t in projects:
  43. sequences[t] = []
  44. sequencesDir = os.path.join(projectsDir, t, 'seqs')
  45.  
  46. for d in os.listdir(sequencesDir):
  47. path = os.path.join(sequencesDir, d)
  48.  
  49. if os.path.isdir(path):
  50. sequences[t].append(d)
  51. shots[d] = []
  52. shotsDir = os.path.join(sequencesDir, d, 'shots')
  53.  
  54. for i in os.listdir(shotsDir):
  55. path = os.path.join(shotsDir, i)
  56. if os.path.isdir(path):
  57. shots[d].append(i)
  58. return projects, sequences, shots
  59.  
  60.  
  61. def createProjectTab():
  62. projects, sequences, shots = getDirs()
  63. departament = ['comp', 'lighting', 'lookdev']
  64. n = nuke.thisNode()
  65. js_tab = nuke.Tab_Knob('JS','JS')
  66. js_prj = nuke.Enumeration_Knob('prj', 'Project', projects)
  67. js_seq = nuke.Enumeration_Knob('seq', 'Sequence', [])
  68. js_sht = nuke.Enumeration_Knob('sht', 'Shot', [])
  69. js_dpt = nuke.Enumeration_Knob('dpt', 'Departament', departament)
  70.  
  71. for k in (js_tab, js_prj, js_seq, js_sht, js_dpt):
  72. n.addKnob(k)
  73.  
  74. updateProjectTab()
  75.  
  76.  
  77. def updateProjectTab():
  78. projects, sequences, shots = getDirs()
  79. n = nuke.thisNode()
  80. k = nuke.thisKnob()
  81.  
  82. if not k or k.name() in ['prj', 'seq', 'showPanel']:
  83. n['seq'].setValues(sequences[n['prj'].value()])
  84. n['sht'].setValues(shots[n['seq'].value()])
  85. n['seq'].setValue(0)
  86. n['sht'].setValue(0)
  87. os.environ['PRJ'] = n['prj'].value()
  88. os.environ['SEQ'] = n['seq'].value()
  89. os.environ['SHT'] = n['sht'].value()
  90. os.environ['DPT'] = n['dpt'].value()
  91.  
  92.  
  93. ### DEFINE SHOT ###
  94. def getNkDir():
  95. nkDir = os.path.join(rootDir(), os.getenv('PRJ'), 'seqs', os.getenv('SEQ'), 'shots', os.getenv('SHT'), os.getenv('DPT'))
  96. if not os.path.isdir(nkDir):
  97. raise ValueError, 'NUKE directory does not exist'
  98. return nkDir
  99.  
  100.  
  101. ### GET NK FROM CURRENT SHOT ###
  102. def getNkFiles():
  103. nkFiles = glob(os.path.join(getNkDir(), '*.nknc'))
  104. return nkFiles
  105.  
  106.  
  107. ### UI ###
  108. class NkPanel(nukescripts.PythonPanel):
  109. def __init__(self, nkScripts):
  110. nukescripts.PythonPanel.__init__(self, 'Open Nuke Script')
  111. self.checkboxes = []
  112. self.nkScripts = nkScripts
  113. self.selectedScript = ''
  114.  
  115. ### INDEX ###
  116. for i, n in enumerate(self.nkScripts):
  117. nkDivider = nuke.Text_Knob('divider', '')
  118. nk = nuke.Boolean_Knob('nknc_%s' % i, os.path.basename(n))
  119. self.addKnob(nk)
  120. self.addKnob(nkDivider)
  121. nk.setFlag(nuke.STARTLINE)
  122. self.checkboxes.append(nk)
  123.  
  124. def knobChanged(self, knob):
  125. if knob in self.checkboxes:
  126. for cb in self.checkboxes:
  127. if knob == cb:
  128. index = int(knob.name().split('_')[-1])
  129. self.selectedScript = self.nkScripts[index]
  130. continue
  131. cb.setValue(False)
  132.  
  133.  
  134. ### EASY SAVE ###
  135. def easySave():
  136. nkDir = getNkDir()
  137. description = nuke.getInput('script description', 'bashComp').replace(' ', '')
  138. fileSaved = False
  139. version = 1
  140.  
  141. ### NAME CONVENTION ###
  142. while not fileSaved:
  143. nkName = '%s_%s_%s_%s_v%02d.nknc' % (os.getenv('PRJ'), os.getenv('SEQ'), os.getenv('SHT'), description, version)
  144.  
  145. ### JOIN DIRECTORY ###
  146. nkPath = os.path.join(nkDir, nkName)
  147.  
  148. ### VERSION ###
  149. if os.path.isfile(nkPath):
  150. version += 1
  151. continue
  152.  
  153. ### SAVE NK ###
  154. nuke.scriptSaveAs(nkPath)
  155. fileSaved = True
  156. return
  157.  
  158.  
  159. ### CHECK NK VERSION ###
  160. def checkScriptName():
  161. if not re.search(r'[vV]\d+', nuke.root().name()):
  162. raise NameError, 'Please, include a version number and save script again.'
  163.  
  164.  
  165. def createWriteDir():
  166. wrDir = os.path.dirname(nuke.filename(nuke.thisNode()))
  167. if not os.path.isdir(wrDir):
  168. os.makedirs(wrDir)
  169.  
  170.  
  171. def getVersions():
  172. dpt = ['comp', 'lighting', 'lookdev']
  173. dptDict = {}
  174.  
  175.  
  176. shotDir = os.path.join(rootDir(), os.getenv('PRJ'), 'seqs', os.getenv('SEQ'),'shots',os.getenv('SHT'))
  177. for t in dpt:
  178. dptDict[t] = []
  179. dptDir = os.path.join(shotDir, t, 'render')
  180. for d in os.listdir(dptDir):
  181. path = os.path.join(dptDir, d)
  182. if os.path.isdir(path):
  183. dptDict[t].append(d)
  184. return dptDict
  185.  
  186.  
  187. def createVersionKnob():
  188. node = nuke.thisNode()
  189. tabKnob = nuke.Tab_Knob('JS', 'JS')
  190. typeKnob = nuke.Enumeration_Knob('versionType', 'type', ['comp', 'lighting', 'lookdev'])
  191. versionKnob = nuke.Enumeration_Knob('_version', 'version',[])
  192.  
  193. for k in (tabKnob, typeKnob, versionKnob):
  194. node.addKnob(k)
  195. updateVersionKnob()
  196.  
  197.  
  198. def updateVersionKnob():
  199. node = nuke.thisNode()
  200. knob = nuke.thisKnob()
  201.  
  202. if not knob or knob.name() in ['versionType', 'showPanel']:
  203. versionDict = getVersions()
  204. node['_version'].setValues(versionDict[node['versionType'].value()])
  205. node['_version'].setValue(0)
Add Comment
Please, Sign In to add comment