サポートチケットを作成する
フォローする

Q100158:Nukeスクリプトの複数の増分自動保存を保持する

概要

この記事では、Nukeの自動保存機能をカスタマイズして、ローリングおよび増分自動保存システムを実装する方法について説明します。

詳しくは

デフォルトでは、Nukeは現在作業中のファイルに対して自動保存を1回だけ保持します。ファイルは<scriptname> .nk.autosaveと呼ばれ、あなたのNuke環境設定で設定された頻度で更新/上書きされます。

あなたはあなた自身の自動保存python関数を設定することによってNukeの自動保存動作をカスタマイズすることができます。以下の例( Nuke Python開発者ガイドから )は、進行中の作業のスクリプトの複数の増分バックアップを保存するためのローリング自動保存を設定します。

次のようにしてこれを設定できます。

  1. 添付の「ダウンロードautosave.py 」ファイルを、あなたの$ HOMEエリアに.nukeディレクトリに置きます
  2. $ HOME / .nukeディレクトリの "init.py"ファイルに次の行を追加します(まだ.nukeディレクトリにinit.pyファイルがない場合は、作成する必要があります)。

    import autosave

次回Nukeを起動したときには、次のような複数の増分自動保存ファイルが作成されます。

<スクリプト名> .nk.autosave

<スクリプト名> .nk.autosave1

<スクリプト名> .nk.autosave2

<スクリプト名> .nk.autosave3

まで

<スクリプト名> .nk.autosave9

クラッシュやスクリプトの破損など、Nukeに関する問題が発生した場合は、問題が発生する前に各自動保存をロードして(File> Openを使用)スクリプトを見つけることができます。

参考文献
Nukeユーザーガイドには、 カスタムのPythonスクリプトやその他のカスタマイズを読み込む方法に関するより多くの情報があります
onAutoSaveのようなpythonコールバックの使い方については、Nuke 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.
5人中5人がこの記事が役に立ったと言っています

コメント