概括
本文介绍了如何自定义Nuke的自动保存功能以实现滚动和增量自动保存系统。
更多信息
默认情况下, Nuke只会为您正在处理的当前文件保留一次自动保存。该文件将被称为<scriptname>.nk.autosave并将按照您在Nuke首选项中设置的频率进行更新/覆盖。
您可以通过设置自己的自动保存 Python 函数来自定义Nuke的自动保存行为。下面的示例( 来自Nuke Python 开发人员指南)将设置滚动自动保存来存储正在进行的脚本的多个增量备份。
您可以通过执行以下操作来进行设置。
- 下载附加的autosave.py文件并将其放入活动用户的.nuke目录中: Q100048: Nuke目录位置
- 将以下行添加到 $HOME/.nuke 目录中的init.py文件中:
import autosave
注意:如果您的.nuke目录中还没有init.py文件,那么您需要创建一个。
下次启动Nuke时,它将创建多个增量自动保存文件,如下所示:
<脚本名称>.nk.自动保存
<脚本名称>.nk.autosave1
<脚本名称>.nk.autosave2
<脚本名称>.nk.autosave3
取决于
<脚本名称>.nk.autosave9
如果您在使用Nuke时遇到任何问题,例如脚本崩溃或损坏,则可以加载每个自动保存(使用“文件”>“打开” )以查找问题发生之前的脚本。
延伸阅读
Nuke用户指南提供了有关如何加载自定义 Python 脚本和其他自定义的更多信息。
Nuke Python 开发人员指南提供了有关如何使用 onAutoSave 等 Python 回调的更多信息。
示例代码
这是下面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 )
我们很遗憾听到
请告诉我们