Filtering out Nuke’s distributed plugins is pretty simple:

import os

nukeDir = os.path.dirname(nuke.env['ExecutablePath'])
externalPlugins = [p for p in nuke.plugins() if not p.startswith(nukeDir)]
# Trim paths and/or filter extensions as needed


To find all of the external gizmos being used in your script is also simple 
(given `nukeDir` from above):

# This is basic. In reality, you want to recurse into Groups
externalGizmos = [n for n in nuke.allNodes() if isinstance(n, nuke.Gizmo) and 
not n.filename().startswith(nukeDir)]


Finding external plugins that are actively being used in your script (as 
opposed to just loaded by Nuke) is trickier, especially if you need to account 
for custom Reader/Writer classes, but you can get close pretty easily (again, 
given `nukeDir`):

# Non-gizmo plugins only
externalPlugins = [p for p in nuke.plugins(0, '*.ofx', '*.%s' % 
nuke.PLUGIN_EXT) if not p.startswith(nukeDir)]


It’s obviously easy to combine this with the gizmo query to get a more complete 
cross-section. To filter it even further, you could try to take the results of 
this call and intersect the plugin class basenames with the classes of all 
nodes in your script (using special cases for OFX plugins), and then add some 
more specialized crawling to track down any nodes that might be actively using 
Reader/Writer plugins.

Hope this helps.


-Nathan



From: Erwan Leroy 
Sent: Thursday, February 27, 2014 11:38 AM
To: Nuke Python discussion 
Subject: Re: [Nuke-python] Finding plugins

Here is a fragment of a code I used a while ago. It was only checking gizmos, 
and was reading the info inside gizmo files that you may not need, but it might 
give you an idea to adapt to your problem: 

import re
def gizmoCheck():
    gizmos = nuke.plugins(0, '*.gizmo')

    for gizmoPath in gizmos:
gizmoLoaded = False
        gizmoFile = open(gizmoPath, 'r')
        gizmoTxt = ''.join(gizmoFile)
        gizmoFile.close()
        gizmoName = re.split('[\\\/]', gizmoPath)[-1]
gizmoName = re.sub('\.gizmo', '', gizmoName)
print 'Checking '+gizmoName
for node in nuke.allNodes():
if node.Class() == gizmoName:
gizmoLoaded = True
.....

There might be a much better way to do this, I'm still just messing with code 
until I get my stuff to work.



On Thu, Feb 27, 2014 at 11:21 AM, Den Serras <[email protected]> wrote:

  Anyone have a good trick for getting a list of all non-Nuke standard plugins 
used in a comp? Having trouble getting nuke.plugins to work without weird 
errors. 

  Thanks!
  Den

  _______________________________________________
  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
_______________________________________________
Nuke-python mailing list
[email protected], http://forums.thefoundry.co.uk/
http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python

Reply via email to