123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- #------------------------------------------------------
- # Stamps by Adrian Pueyo and Alexey Kuchinski
- # Smart node connection system for Nuke
- # adrianpueyo.com, 2018-2019
- config_version= "v1.0"
- date = "Sep 16 2019"
- #-----------------------------------------------------
- import nuke
- import os
- import re
- # ----------------------------------------------
- # INSTRUCTIONS:
- # Modify this file as needed. Do not rename it.
- # Place it in your python path (i.e. next to stamps.py, or in your /.nuke folder).
- # ----------------------------------------------
-
- # ----------------------------------------------
- # 1. MAIN DEFAULTS
- # ----------------------------------------------
-
- STAMPS_SHORTCUT = "F8"
-
- ANCHOR_STYLE = {
- "tile_color": 4294967041,
- "note_font_size": 20,
- }
-
- STAMP_STYLE = {
- "tile_color": 16777217,
- "note_font_size": 20,
- }
-
- # Override tile_color for specific node classes, to be fancy.
- AnchorClassColors = {"Camera":int('%02x%02x%02x%02x' % (255,255,255,1),16),}
- WiredClassColors = {"Camera":int('%02x%02x%02x%02x' % (51,0,0,1),16),}
-
-
- # ----------------------------------------------
- # 2. CUSTOM FUNCTIONS
- # ----------------------------------------------
-
- def defaultTitle(node):
- '''
- defaultTitle(node) -> (str)title
- Returns a custom default Stamp title for a given node.
- Customize this function to return any string you want.
- If you return None, it will calculate the default title.
- '''
-
- name = node.name()
-
- # ALL THIS IS SAMPLE CODE, FEEL FREE TO REMOVE OR MODIFY IT
- # Example 1: Make "cam" the default Stamp title for the first Camera
- if "Camera" in node.Class() and not any([(i.knob("title") and i["title"].value() == "cam") for i in nuke.allNodes("NoOp")]):
- title = "cam"
- return title
-
- # Example 2: If the node has a file knob, take the part of the filename that goes before the frame numbers
- if node.knob("file"): # If node has knob "file"
- filepath = node.knob("file").value()
- if filepath: # If the value of the knob "file" is not empty
- # keller adjustment
- # todo: KEnv usage
- filename = filepath.split("/")[-1] # 1. Take the file name only
- filename = filename.split(".")[1] # 2. Take the second part of our filename
- filename = str(re.split("_v[0-9]*", filename)[0]) #remove the version string
- filename = filename.replace("_light","") #remove the "_light" part of the name
-
- title = filename
- return title
- '''
-
- # ORIGINAL PREFERENCE BELOW __________________
- # Example 2: If the node has a file knob, take the part of the filename that goes before the frame numbers
- if node.knob("file"): # If node has knob "file"
- filepath = node.knob("file").value()
- if filepath: # If the value of the knob "file" is not empty
- filename = filepath.split("/")[-1] # 1. Take the file name only
- title = filename.split(".")[0] # 2. Take the part of the filename before any dots
- title = str(re.split("_v[0-9]*_",title)[-1]) # 3. Take the part that goes after the version
- title = title.replace("_render","") # 4. If the title includes "_render", remove it
- return title
- '''
-
-
- # If we don't return a string, stamps.py will calculate the default title by itself.
- return
-
- def defaultTags(node):
- '''
- defaultTags(node) -> (list of str)tags
- Returns a custom default list of Stamp tags for a given node.
- Customize this function to return any string you want.
- If you return None, it will calculate the default tags.
- '''
-
- # 1. We start off with an empty list
- tags = []
-
- # 2. Now we can add any custom default tags (strings) to the list, by making any calculations on the node.
-
- # Here's an example:
- node_class = node.Class()
- if node_class == "Write":
- tags.append("File Out")
-
- # Now, the list of tags for whenever we create a Stamp on a Write node, will contain "File Out" by default.
-
- # However, the default default tags (default written twice on purpose) will also be preserved, and the list we return will be appended on top of them.
- # So for a Write node, it would look: "2D, File Out, "
-
- # If we only want our own tags, the constant KEEP_ORIGINAL_TAGS should be set to False, below, in the ADVANCED section.
-
- return tags
-
- # ----------------------------------------------
- # 3. ADVANCED. DO NOT CHANGE UNLESS NEEDED.
- # ----------------------------------------------
-
- # Keller: The value below is True in the default config
- KEEP_ORIGINAL_TAGS = False # True: Keep the default tags for the nodes, plus your custom-defined ones. False: Only keep the custom ones you can define below
- DeepExceptionClasses = ["DeepToImage","DeepHoldout","DeepHoldout2"] # Nodes with "Deep" in their class that don't classify as Deep.
- NodeExceptionClasses = ["Viewer"] # Nodes that won't accept stamps
- ParticleExceptionClasses = ["ParticleToImage"] # Nodes with "Particle" in class and an input called "particles" that don't classify as particles.
-
- # The next two constants define the node classes that will be ignored when looking for the title or tags of a node.
- # This means, it will look for the node's first input instead, recursively, until it finds a node that doesn't belong to these classes.
- TitleIgnoreClasses = ["NoOp", "Dot", "Reformat", "DeepReformat", "Crop"]
- TagsIgnoreClasses = ["NoOp", "Dot", "Reformat", "DeepReformat", "Crop"]
-
- AnchorClassesAlt = {"2D":"NoOp", "Deep":"DeepExpression", "3D":"EditGeo", "Particle":"ParticleExpression"}
- AnchorClassesAlt = {"2D":"NoOp"}
- StampClassesAlt = {"2D":"NoOp", "Deep":"DeepExpression", "3D":"LookupGeo", "Camera":"DummyCam", "Axis":"Axis","Particle":"ParticleExpression"}
-
- # Use the dictionary above to define the base node classes you want for each type.
- # For any type you don't define, it will use a NoOp. Available types: 2D, 3D, Deep, Particle, Camera, Axis
- # You shouldn't modify this except if you don't want to use DeepExpression nodes for deep stamps...
- # ...or you have special plugins installed, like DeepNoOp and GeoNoOp
- # StampClassesAlt = {"2D":"NoOp", "Deep":"DeepNoOp", "3D":"GeoNoOp"}
|