Fabian:
I think that you could somehow force Nuke Studio to do so, but we also need
it for the artists as they don't want to do foldercreation them selves. I
know they are working on a solution to this problem, we just don't know
when its ready.

Erwan:
The code can be condensed yes, but it is written for our demands (like the
tag check)
The reason why it uses a subprocess is that Nuke Studio doesnt seem to be
able to execude code inside a external nuke project file. Using the
subprocess i can launch a window-less version of Nuke and execute any code
in there within a millisecond. If you had to do that with a windowed nuke
it would take ages.


On Wed, May 6, 2015 at 1:33 PM, Erwan Leroy <er...@erwanleroy.com> wrote:

> Quickly reading through the code, I have a feeling this could be condensed
> a lot. The OS module can create folders, I don't see the point of going
> through a subprocess. Also this whole script tag thing could just be
> skipped.
> Then I haven't used python for nuke studio yet so I might be entirely
> wrong.
> On 6 May 2015 19:24, <i...@visualplastic.net> wrote:
>
>>  Hi Mads,
>>
>> thank you for sharing your code! this looks good :)
>> But still I'm wondering that this can't be as simple as it is with
>> standard nuke. I hoped to get away with something that works for all nuke
>> flavours. Something like telling the "backgound-render-nuke-instance" to
>> execute 'nuke.addBeforeRender(fustoms.createWriteDir)' when it starts the
>> thread?
>>
>> cheers,
>> Fabian
>>
>> Am 06.05.2015 um 12:40 schrieb Mads Lund:
>>
>> 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 <i...@visualplastic.net>
>> 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
>>> Nuke-python@support.thefoundry.co.uk, http://forums.thefoundry.co.uk/
>>> http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python
>>>
>>
>>
>>
>> _______________________________________________
>> Nuke-python mailing listnuke-pyt...@support.thefoundry.co.uk, 
>> http://forums.thefoundry.co.uk/http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python
>>
>>
>>
>> --
>> Fabian Fischer
>>
>> Compositing  & VFX | f...@visualplastic.net | +49  170  15 20 750
>>
>>
>> _______________________________________________
>> Nuke-python mailing list
>> Nuke-python@support.thefoundry.co.uk, http://forums.thefoundry.co.uk/
>> http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python
>>
>>
> _______________________________________________
> Nuke-python mailing list
> Nuke-python@support.thefoundry.co.uk, http://forums.thefoundry.co.uk/
> http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python
>
>
_______________________________________________
Nuke-python mailing list
Nuke-python@support.thefoundry.co.uk, http://forums.thefoundry.co.uk/
http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python

Reply via email to