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