Im not sure if it is my thread from back in november you are refering to,
but I did find a good solution for us back then.
I create the Nuke scripts, then select the media in the timeline view and
hit a custom menu button connected to this funciton (note that our scripts
automatically create a tag called "script" on the media):
#Use this script to add a auto floder creation option.
#All you need is the \AutoWriteFolder.py file in your .nuke folder
def folderfix():
import hiero
HasExecuted = False
print "Fixing Path AutoCreation"
for item in
hiero.ui.TimelineEditor.selection(hiero.ui.getTimelineEditor(hiero.ui.activeSequence())):
for items in item.tags():
Tags = items.metadata()
if Tags.hasKey("script"):
print Tags.value("script")
subprocess.Popen([nuke.EXE_PATH,'-t',os.path.dirname(os.path.realpath(__file__))+'\AutoWriteFolder.py',
Tags.value("script")])
HasExecuted = True
if not HasExecuted:
nuke.message("ERROR - Did not patch any files! \nMake sure that you
select item(s) in the timline with a NukeScript tag.")
The key part here is "subprocess.Popen" that will make the script run in
its own nuke thread
The AutoWriteFolder.py looks like this:
import nuke
import os
import sys
def RecursiveFindNodes(nodeClass, startNode):
if startNode.Class() == nodeClass:
yield startNode
elif isinstance(startNode, nuke.Group):
for child in startNode.nodes():
for foundNode in RecursiveFindNodes(nodeClass, child):
yield foundNode
if len ( sys.argv ) != 2:
print 'Usage: NUKE autoWriteFolder.py <nuke_script>' + str(len ( sys.argv
))
sys.exit(-1)
inScript = sys.argv[1]
nuke.scriptOpen( inScript )
allWriteNodes = [w for w in RecursiveFindNodes('Write', nuke.root())]
for write in allWriteNodes:
write['beforeRender'].setValue( """if not
os.path.exists(os.path.dirname(nuke.thisNode().knob("file").value())):
os.makedirs(os.path.dirname(nuke.thisNode().knob("file").value()))""" )
nuke.scriptSave( inScript )
On Wed, May 6, 2015 at 12:23 PM, Fabian Fischer <[email protected]>
wrote:
> Hi,
> has anyone come up with a solution for this yet? There is a thread in the
> nuke-user list back from november, but no real solution was found.
> For nuke and nuke x, I'm calling this function (it is within my own
> module):
>
> def createWriteDir():
> import os
> file = nuke.filename(nuke.thisNode())
> dir = os.path.dirname( file )
> osdir = nuke.callbacks.filenameFilter( dir )
> if os.path.exists(osdir) == False:
> if nuke.ask(osdir+"\nOutput dir does not exist. Create?"):
> os.makedirs( osdir )
>
> I'm calling it from init.py:
>
> nuke.addBeforeRender(fustoms.createWriteDir)
>
> This seems not to work for Nuke Studio when rendering from the timeline -
> which is really annoying...
>
> Any help highly appreciated! Thank you,
>
> Fabian
> _______________________________________________
> Nuke-python mailing list
> [email protected], http://forums.thefoundry.co.uk/
> http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python
>
_______________________________________________
Nuke-python mailing list
[email protected], http://forums.thefoundry.co.uk/
http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python