지원 티켓 만들기
팔로우

Q100158 : Nuke 스크립트의 여러 자동 증분 자동 저장 유지하기

개요

이 기사에서는 Nuke의 자동 저장 기능을 사용자 정의하여 롤링 및 증분 자동 저장 시스템을 구현하는 방법에 대해 설명합니다.

추가 정보

기본적으로 Nuke는 작업중인 현재 파일에 대해 하나의 자동 저장 만 유지합니다. 파일 이름은 <scriptname> .nk.autosave이며 Nuke Preferences에서 설정된 빈도로 업데이트되거나 덮어 쓰기됩니다.

당신은 Nuke의 autosave python 함수를 설정하여 Nuke의 자동 저장 동작을 사용자 정의 할 수 있습니다. 아래의 예제 ( Nuke Python Developer 's Guide )는 진행중인 작업 스크립트의 여러 증분 백업을 저장하기 위해 롤링 자동 저장을 설정합니다.

다음을 수행하여이를 설정할 수 있습니다.

  1. 첨부 된 " autosave.py "파일을 다운로드하여 $ HOME 영역의 .nuke 디렉토리에 저장하십시오.
  2. $ HOME / .nuke 디렉토리의 "init.py"파일에 다음 행을 추가하십시오 (아직 .nuke 디렉토리에 init.py 파일이 없으면 디렉토리를 작성해야합니다)

    import autosave

다음에 누크를 시작하면 다음과 같이 여러 자동 증가 저장 파일을 만듭니다.

<scriptname> .nk.autosave

<scriptname> .nk.autosave1

<scriptname> .nk.autosave2

<scriptname> .nk.autosave3

까지

<scriptname> .nk.autosave9

크래킹이나 손상된 스크립트와 같은 Nuke에 문제가 발생하면 문제가 발생하기 전에 스크립트를 찾기 위해 각 자동 저장을로드 할 수 있습니다 (파일> 열기 사용).

더 읽기
Nuke User Guide에는 사용자 정의 Python 스크립트 및 기타 사용자 지정을로드하는 방법에 대한 자세한 정보가 있습니다.
Nuke Python Developer 's Guide에는 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 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명이 도움이 되었다고 했습니다.

댓글