-
-
Save shrimo/47b5074d8feaba21bf33 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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