सारांश
यह आलेख बताता है कि आप रोलिंग और वृद्धिशील ऑटोसेव सिस्टम को लागू करने के लिए Nuke की ऑटोसेव कार्यक्षमता को कैसे अनुकूलित कर सकते हैं।
अधिक जानकारी
डिफ़ॉल्ट रूप से, Nuke उस वर्तमान फ़ाइल के लिए केवल एक ऑटोसेव रखेगा जिस पर आप काम कर रहे हैं। फ़ाइल को <scriptname>.nk.autosave कहा जाएगा और आपकी Nuke Preferences में सेट की गई आवृत्ति पर अपडेट/ओवरराइट किया जाएगा।
आप अपने स्वयं के ऑटोसेव पायथन फ़ंक्शन सेट करके Nuke के ऑटोसेव व्यवहार को अनुकूलित कर सकते हैं। नीचे दिया गया उदाहरण ( Nuke पायथन डेवलपर गाइड से ) आपके काम की प्रगति स्क्रिप्ट के कई वृद्धिशील बैकअप को संग्रहीत करने के लिए एक रोलिंग ऑटोसेव स्थापित करेगा।
आप निम्न कार्य करके इसे सेट कर सकते हैं.
- संलग्न autosave.py फ़ाइल डाउनलोड करें और इसे सक्रिय उपयोगकर्ता की .nuke निर्देशिका में रखें: Q100048: Nuke निर्देशिका स्थान
- अपनी $HOME/.nuke निर्देशिका में init.py फ़ाइल में निम्न पंक्ति जोड़ें :
import autosave
ध्यान दें: यदि आपकी .nuke निर्देशिका में पहले से कोई init.py फ़ाइल नहीं है तो आपको एक बनाने की आवश्यकता होगी।
अगली बार जब आप Nuke लॉन्च करेंगे तो यह कई वृद्धिशील ऑटोसेव फ़ाइलें बनाएगा, जैसे:
<स्क्रिप्टनाम>.nk.autosave
<स्क्रिप्टनाम>.nk.autosave1
<स्क्रिप्टनाम>.nk.autosave2
<स्क्रिप्टनाम>.nk.autosave3
तक
<स्क्रिप्टनाम>.nk.autosave9
यदि आपको 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 )
हम चाहते हैं कि खेद व्यक्त करते हैं
कृपया हमें बताएँ कि