Skip to content

Instantly share code, notes, and snippets.

@b1ca
Last active June 5, 2018 20:05
Show Gist options
  • Save b1ca/7991bc10e7f6e78d15be to your computer and use it in GitHub Desktop.
Save b1ca/7991bc10e7f6e78d15be to your computer and use it in GitHub Desktop.
v2
import os
import nuke
FILE_TYPES = ['exr', 'png', 'tiff', 'dpx' 'mov', 'mp4', 'jpg']
def get_path():
return nuke.getClipname('Choose Folder', multiple=False)
def get_sequences(dir):
seqs_list = []
paths = set()
for root, _, filenames in os.walk(dir):
root = root.replace('\\', '/')
for filename in filenames:
try:
file_type = ''.join(['.', filename.split('.')[-1]])
if file_type.replace('.', '') in FILE_TYPES:
separator = get_separator(filename)
ds = []
current_frame = filename.split('.')[-2].split(separator)[-1]
sharps = '#'*len(current_frame)
path = '/'.join([root, filename.replace(current_frame+file_type, sharps+file_type)])
paths.add(path)
ds.append(path)
ds.append(current_frame)
seqs_list.append(ds)
except ValueError:
continue
return get_unique(seqs_list, list(paths))
def get_separator(filename):
_ = '.'.join(filename.split('.')[:-1])
if _.split('_')[-1].isdigit():
return '_'
elif _.split('.')[-1].isdigit():
return '.'
else:
return ''
def get_unique(seqs_list, paths):
Q = paths
R = ['']*len(Q)
for seq in seqs_list:
for i, q in enumerate(Q):
if seq[0] == q:
R[i] += seq[1] + ','
R = [r[:-1] for r in R]
Z = zip(Q, R)
Z = [[z[0], map(int,z[1].split(','))] for z in Z]
N = []
for z in Z:
t = z[-1][:]
for k in z[-1]:
if k+1 not in z[-1] and k-1 not in z[-1]:
N.append([z[0], k, k])
t.remove(k)
while t:
t_min = t[0]
while t[0]+1 in t:
t.remove(t[0])
t_max = t[0]
t.remove(t[0])
N.append([z[0], t_min, t_max])
N = sorted([list(x) for x in set(tuple(x) for x in N)])
return N
def create_read_nodes(seqs):
for seq in seqs:
read_node = nuke.createNode('Read')
if seq[1] == seq[2]:
num_of_sharps = seq[0].count('#')
num_of_zeros = num_of_sharps - len(str(seq[1]))
seq[0] = seq[0].replace('#'*num_of_sharps, '0'*num_of_zeros+str(seq[1])).replace('//', '/')
seq[1] = seq[2] = 1
read_node.knob('file').setValue(seq[0])
read_node.knob('first').setValue(seq[1])
read_node.knob('last').setValue(seq[2])
def recursive_load():
dname = get_path()
if dname:
seqs = get_sequences(dname)
create_read_nodes(seqs)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment