def CreateNukeWorkfile(nodes=None, nodes_effects=None, to_timeline=False, **kwargs): ''' Creating nuke workfile with particular version with given nodes Also it is creating timeline track items as precomps. Arguments: nodes(list of dict): each key in dict is knob order is important to_timeline(type): will build trackItem with metadata Returns: bool: True if done Raises: Exception: with traceback ''' import hiero.core from avalon.nuke import imprint from pype.nuke import (lib as nklib) # check if the file exists if does then Raise "File exists!" if os.path.exists(filepath): raise FileExistsError("File already exists: `{}`".format(filepath)) # if no representations matching then # Raise "no representations to be build" if len(representations) == 0: raise AttributeError("Missing list of `representations`") # check nodes input if len(nodes) == 0: log.warning("Missing list of `nodes`") # create temp nk file nuke_script = hiero.core.nuke.ScriptWriter() # create root node and save all metadata root_node = hiero.core.nuke.RootNode() anatomy = Anatomy(os.environ["AVALON_PROJECT"]) work_template = anatomy.templates["work"]["path"] root_path = anatomy.root_value_for_template(work_template) nuke_script.addNode(root_node) # here to call pype.nuke.lib.BuildWorkfile script_builder = nklib.BuildWorkfile(root_node=root_node, root_path=root_path, nodes=nuke_script.getNodes(), **kwargs)
def sync_avalon_data_to_workfile(): # import session to get project dir project_name = avalon.Session["AVALON_PROJECT"] anatomy = Anatomy(project_name) work_template = anatomy.templates["work"]["path"] work_root = anatomy.root_value_for_template(work_template) active_project_root = (os.path.join(work_root, project_name)).replace("\\", "/") # getting project project = hiero.core.projects()[-1] if "Tag Presets" in project.name(): return log.debug("Synchronizing Pype metadata to project: {}".format( project.name())) # set project root with backward compatibility try: project.setProjectDirectory(active_project_root) except Exception: # old way of seting it project.setProjectRoot(active_project_root) # get project data from avalon db project_data = pype.get_project()["data"] log.debug("project_data: {}".format(project_data)) # get format and fps property from avalon db on project width = project_data["resolutionWidth"] height = project_data["resolutionHeight"] pixel_aspect = project_data["pixelAspect"] fps = project_data['fps'] format_name = project_data['code'] # create new format in hiero project format = hiero.core.Format(width, height, pixel_aspect, format_name) project.setOutputFormat(format) # set fps to hiero project project.setFramerate(fps) # TODO: add auto colorspace set from project drop log.info("Project property has been synchronised with Avalon db")