创建支持服务单
关注

Q100158:保持Nuke脚本的多个增量自动保存

摘要

本文介绍了如何自定义Nuke的自动保存功能以实现滚动和增量自动保存系统。

更多信息

默认情况下,Nuke只会为您正在处理的当前文件保留一个自动保存。该文件将被称为<scriptname> .nk.autosave,并将以您的Nuke首选项中设置的频率进行更新/覆盖。

您可以通过设置自己的自动保存python函数来自定义Nuke的自动保存行为。下面的示例( 来自Nuke Python开发人员指南 )将设置滚动自动保存,以存储您的工作进度脚本的多个增量备份。

您可以通过执行以下操作进行设置。

  1. 下载附件“ autosave.py ”文件,并将其放置在.nuke目录在$ HOME区
  2. 将以下行添加到$ HOME / .nuke目录中的“init.py”文件中(如果.nuke目录中还没有init.py文件,那么您需要创建一个)

    import autosave

下次启动Nuke时,它将创建多个增量自动保存文件,如下所示:

<脚本> .nk.autosave

<脚本> .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 nukescripts.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 )

这篇文章有帮助吗?
/

We're sorry to hear that!

Please tell us why.
4 人中有 4 人觉得有帮助

评论