Welcome to nukecontexts’ documentation!¶
Contents:
Installation¶
To install nukecontexts
, type:
$ pip install nukecontexts
Open Nuke’s init.py
file and add:
nuke.pluginAddPath('/path/to/your/local/python/site-packages')
Getting Started¶
nukecontexts
is a library of composable context managers for Nuke to
manage the state of complex compositing scripts in code.
The most common use case for nukecontexts
is automated rendering of
multiple states of a compositing script. For example two different output
formats, jpg and png.
import nuke
import contextlib
from nukecontexts import ctx
render_node = nuke.toNode('Write1')
with ctx.set_attr(render_node, 'file_type', 'jpeg'):
nuke.execute(render_node.name(), 1, 1, 1)
with ctx.set_attr(render_node, 'file_type', 'png'):
nuke.execute(render_node.name(), 1, 1, 1)
The power of nukecontexts
comes with composable contexts, using
contextlib.nested()
. Arbitrarily complex, varying states of the
compositing script can be defined and used to automatically generate
different results.
merge_node = nuke.toNode('Merge1')
grade_node = nuke.toNode('Grade1')
switch_node = nuke.toNode('Switch1')
ctx1 = ctx.enable([merge_node, grade_node])
ctx2 = ctx.set_attr(grade_node, 'white', 2.0)
ctx3 = ctx.set_attr(switch_node, 'which', 0)
ctx4 = ctx.disable(merge_node)
with contextlib.nested(ctx1, ctx2, ctx3):
"""Render with the merge_node and grade_node enabled, the
grade_node's white attribute set to 2.0 and the switch_node's switch
position set to 0."""
nuke.execute(render_node.name(), 1, 1, 1)
with contextlib.nested(ctx3, ctx4):
"""Render with the switch_node's switch position set to 0 and the
merge node disabled; the grade_node's gain value remains at the
original value."""
nuke.execute(render_node.name(), 1, 1, 1)
Advanced Use¶
Logging¶
nukecontexts
creates it’s own logger on import that is used by all context
managers to indicate when contexts are entered and exited. The standard logger
logs to stdout
.
Should your pipeline have more advanced logging needs, simply pass your custom
logger to each context manager, using the log
keyword argument.
API Documentation¶
-
nukecontexts.ctx.
disabled
(*args, **kwds)[source]¶ Given a list of nodes (
Node
), disable on entry and restore to original value on exit.Parameters: - nodes (list) – Nodes
- log (logging.Logger) – Logger
-
nukecontexts.ctx.
enabled
(*args, **kwds)[source]¶ Given a list of nodes (
Node
), enable on entry and restore to original value on exit.Parameters: - nodes (list) – Nodes
- log (logging.Logger) – Logger
-
nukecontexts.ctx.
inventory
(*args, **kwds)[source]¶ Given a variable name, create a node inventory on entry and a separate node inventory on exit and save any new nodes into the newly created variable.
Beware that the new variable is created in
__builtins__
and is therefore accessible even after the context manager has exited.Use with namespace in mind!
Parameters: var (str) – Variable name
-
nukecontexts.ctx.
multiple_contexts
(*args, **kwds)[source]¶ Given a list of contextmanagers, sequentially enter all contextmanagers, raise
Exception
in case errors occur in contexts.Deprecated. Use
contextlib.nested(*contexts)()
.Parameters: contexts (list) – List of contextmanagers
-
nukecontexts.ctx.
set_attr
(*args, **kwds)[source]¶ Given a list of nodes (
Node
), set a givenattr
tovalue
on entry and restore to original value on exit.Parameters:
-
class
nukecontexts.ctx.
Progress
(iterable, name='nukecontexts', output=<open file '<stdout>', mode 'w'>)[source]¶ Convenience wrapper class around
tqdm.tqdm()
for easy progress barsUsage:
>>> with Progress(iterable) as progress: >>> for item in progress: >>> #do something
-
__init__
(iterable, name='nukecontexts', output=<open file '<stdout>', mode 'w'>)[source]¶ Parameters: - interable (iter) – Iterable to generate progress bar for
- name (str) – Progress bar label (default: ‘nukecontexts’)
- output (io.TextIOWrapper or io.StringIO) – Output stream (default:
sys.stdout
)
-