Q100158: आपकी Nuke स्क्रिप्ट के लिए एकाधिक ऑटोसेव उत्पन्न करना

अनुसरण करें

सारांश

यह आलेख बताता है कि आप रोलिंग और वृद्धिशील ऑटोसेव सिस्टम को लागू करने के लिए Nuke की ऑटोसेव कार्यक्षमता को कैसे अनुकूलित कर सकते हैं।

अधिक जानकारी

डिफ़ॉल्ट रूप से, Nuke उस वर्तमान फ़ाइल के लिए केवल एक ऑटोसेव रखेगा जिस पर आप काम कर रहे हैं। फ़ाइल को <scriptname>.nk.autosave कहा जाएगा और आपकी Nuke Preferences में सेट की गई आवृत्ति पर अपडेट/ओवरराइट किया जाएगा।

आप अपने स्वयं के ऑटोसेव पायथन फ़ंक्शन सेट करके Nuke के ऑटोसेव व्यवहार को अनुकूलित कर सकते हैं। नीचे दिया गया उदाहरण ( Nuke पायथन डेवलपर गाइड से ) आपके काम की प्रगति स्क्रिप्ट के कई वृद्धिशील बैकअप को संग्रहीत करने के लिए एक रोलिंग ऑटोसेव स्थापित करेगा।

आप निम्न कार्य करके इसे सेट कर सकते हैं.

  1. संलग्न autosave.py फ़ाइल डाउनलोड करें और इसे सक्रिय उपयोगकर्ता की .nuke निर्देशिका में रखें: Q100048: Nuke निर्देशिका स्थान

  2. अपनी $HOME/.nuke निर्देशिका में init.py फ़ाइल में निम्न पंक्ति जोड़ें : import autosave
    ध्यान दें: यदि आपकी .nuke निर्देशिका में पहले से कोई init.py फ़ाइल नहीं है तो आपको एक बनाने की आवश्यकता होगी।

अगली बार जब आप Nuke लॉन्च करेंगे तो यह कई वृद्धिशील ऑटोसेव फ़ाइलें बनाएगा, जैसे:

<स्क्रिप्टनाम>.nk.autosave

<स्क्रिप्टनाम>.nk.autosave1

<स्क्रिप्टनाम>.nk.autosave2

<स्क्रिप्टनाम>.nk.autosave3

तक

<स्क्रिप्टनाम>.nk.autosave9

यदि आपको Nuke के साथ कोई समस्या आती है, जैसे क्रैश या दूषित स्क्रिप्ट, तो आप समस्या उत्पन्न होने से पहले एक स्क्रिप्ट ढूंढने के लिए प्रत्येक ऑटोसेव ( फ़ाइल> ओपन का उपयोग करके) लोड कर सकते हैं।

अग्रिम पठन

Nuke उपयोगकर्ता गाइड में कस्टम पायथन स्क्रिप्ट और अन्य अनुकूलन को लोड करने के तरीके के बारे में अधिक जानकारी है।

उदाहरण कोड

यहां नीचे दी गई autosave.py फ़ाइल की सामग्री दी गई है।

import nuke
import glob
import time
import os

### Example that implements a rolling autosave using the autoSaveFilter callbacks
###
## autosaves roll from 0-9 eg myfile.autosave, myfile.autosave1, myfile.autosave2...
#
## To use just add 'import nuke scripts.autosave' in your init.py


def onAutoSave(filename):

  ## ignore untiled autosave
  if nuke .root().name() == 'Root':
    return filename

  fileNo = 0
  files = getAutoSaveFiles(filename)

  if len(files) > 0 :
    lastFile = files[-1]
    # get the last file number

    if len(lastFile) > 0:
      try:
        fileNo = int(lastFile[-1:])
      except:
        pass

      fileNo = fileNo + 1

  if ( fileNo > 9 ):
    fileNo = 0

  if ( fileNo != 0 ):
    filename = filename + str(fileNo)

  return filename


def onAutoSaveRestore(filename):

  files = getAutoSaveFiles(filename)

  if len(files) > 0:
    filename = files[-1]

  return filename

def onAutoSaveDelete(filename):

  ## only delete untiled autosave
  if nuke .root().name() == 'Root':
    return filename

  # return None here to not delete auto save file
  return None

  
def getAutoSaveFiles(filename):
  date_file_list = []
  files = glob.glob(filename + '[1-9]')
  files.extend( glob.glob(filename) )

  for file in files:
      # retrieves the stats for the current file as a tuple
      # (mode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime)
      # the tuple element mtime at index 8 is the last-modified-date
      stats = os.stat(file)
      # create tuple (year yyyy, month(1-12), day(1-31), hour(0-23), minute(0-59), second(0-59),
      # weekday(0-6, 0 is monday), Julian day(1-366), daylight flag(-1,0 or 1)) from seconds since epoch
      # note:  this tuple can be sorted properly by date and time
      lastmod_date = time.localtime(stats[8])
      #print image_file, lastmod_date   # test
      # create list of tuples ready for sorting by date
      date_file_tuple = lastmod_date, file
      date_file_list.append(date_file_tuple)
   
  date_file_list.sort()
  return [ filename for _, filename in date_file_list ]


nuke .addAutoSaveFilter( onAutoSave )
nuke .addAutoSaveRestoreFilter( onAutoSaveRestore )
nuke .addAutoSaveDeleteFilter( onAutoSaveDelete )

### As an example to remove the callbacks use this code
#nuke.removeAutoSaveFilter( onAutoSave )
#nuke.removeAutoSaveRestoreFilter( onAutoSaveRestore )
#nuke.removeAutoSaveDeleteFilter( onAutoSaveDelete )

हम चाहते हैं कि खेद व्यक्त करते हैं

कृपया हमें बताएँ कि