Dynamo Pack & Go?

Any good way to find out what packages are associated with a Dynamo graph? I’d like to let others use what I composed, but with only the minimum of referenced packages.

This has been a major request for a long time with little progress so far:

There was a great discussion on some ways to address this here:

using springsUI and some set logic, you could do the following for the active graph:


Of course, an ultimate feature would be to have a graph compile into an Add-In wrapped up similar to Dynamo Player. (Would that it could be hosted in the Autodesk Store, too.)


Issue I see with automated package downloads is that different versions of packages have different node names and functions - by opening a dyn which triggered a download of an older package you would create an issue with two versions of the package on the same system, which can break things.

My recommended work around is to document all custom nodes in the graph, by adding a note indicating which package and version each custom node is from. This way those who are managing package and graph libraries get to make a decision as needed to add content into the system.

Would be even better if the computer did this for us by keeping those data in each node for us to see.

The system isn’t designed to store the data that way - they have to be able to pull from the version of the package which is available - be it an older or newer version of the node/package.

@truevis, @jacob.small, @Konrad_K_Sobon

Put a reference in the namespace, solving another problem at the same time, if possible

This thread might be of interest as it discuss and automate the capture of dynamo nodes, and packages used in a .dyn file.

Yours is more succinct. Here is my version:

Then paste into a Note eg: “This DYN uses packages: {archilab,Clockwork}”

I published it: image

I recently made minor adjustments to @Dimitar_Venkov python with #comments and going step by step to help explain what the code is doing. this is great thank you :slight_smile:


# 'builtin is a list of nodes that are built into dynamo'
# 'so we dont need to include them as custom packages'
builtin = 	{'Revit','Display','Geometry','BuiltIn',

# 'we dont want to know every single node in the graph'
# 'just the packages, so we can use the split function'
# 'to look.for.stops.like.this and return just the first'
# 'value in the above example this would return look'
NodesSet = set(i.split('.',1)[0] for i in IN[0])

# 'subtract the builtin nodes'
nodes = NodesSet - builtin

# 'in order to sort the set of nodes alphabetically'
# 'they need to be made into a list'
# 'first we create an empty list called packages
packages = []

# 'for each node in the set nodes
# 'the node is appended to the end of the list packages'
for node in nodes :

# 'the packages are sorted as if all the items strings'
# 'were lowercase, even though they are not'
SortedPackages = sorted(packages, key=str.lower)

# 'the SortedPackages are outputed'
OUT = SortedPackages