Go to: Synopsis. Return value. Flags. Python examples.


duplicate( [objects...] , [inputConnections=boolean], [instanceLeaf=boolean], [name=string], [parentOnly=boolean], [renameChildren=boolean], [returnRootsOnly=boolean], [smartTransform=boolean], [upstreamNodes=boolean])

Note: Strings representing object names and arguments must be separated by commas. This is not depicted in the synopsis.

duplicate is undoable, NOT queryable, and NOT editable.

This command duplicates the given objects. If no objects are given, then the selected list is duplicated.

The smart transform feature allows duplicate to transform newly duplicated objects based on previous transformations between duplications.

Example: Duplicate an object and move it to a new location. Duplicate it again with the smart duplicate flag. It should have moved once again the distance you had previously moved it.

Note: changing the selected list between smart duplications will cause the transform information to be deleted

The upstream Nodes option forces duplication of all upstream nodes leading upto the selected objects.. Upstream nodes are defined as all nodes feeding into selected nodes. During traversal of Dependency graph, if another dagObject is encountered, then that node and all it's parent transforms are also duplicated.

The inputConnections option forces the duplication of input connections to the nodes that are to be duplicated. This is very useful especially in cases where two nodes that are connected to each other are specified as nodes to be duplicated. In that situation, the connection between the nodes is also duplicated.

See also: instance

Return value

string[]: names of the objects created


inputConnections, instanceLeaf, name, parentOnly, renameChildren, returnRootsOnly, smartTransform, upstreamNodes
Long name (short name) Argument types Properties
name(n) string create
name to give duplicated object(s)
smartTransform(st) boolean create
remembers last transformation and applies it to duplicated object(s)
upstreamNodes(un) boolean create
the upstream nodes leading upto the selected nodes (along with their connections) are also duplicated.
inputConnections(ic) boolean create
Input connections to the node to be duplicated, are also duplicated. This would result in a fan-out scenario as the nodes at the input side are not duplicated (unlike the -un option).
returnRootsOnly(rr) boolean create
return only the root nodes of the new hierarchy. When used with upstreamNodes flag, the upstream nodes will be omitted in the result. This flag controls only what is returned in the output string[], and it does NOT change the behaviour of the duplicate command.
renameChildren(rc) boolean create
rename the child nodes of the hierarchy, to make them unique.
instanceLeaf(ilf) boolean create
instead of duplicating leaf DAG nodes, instance them.
parentOnly(po) boolean create
Duplicate only the specified DAG node and not any of its children.

Flag can appear in Create mode of command Flag can appear in Edit mode of command
Flag can appear in Query mode of command Flag can have multiple arguments, passed either as a tuple or a list.

Python examples

import maya.cmds as cmds

# Create a hierarchy of two spheres;
cmds.sphere( n='sphere1' )
cmds.move( 3, 0, 0 )
cmds.sphere( n='sphere2' )
cmds.move( -3, 0, 0 )
cmds.group( 'sphere1', 'sphere2', n='group1' )
cmds.circle( n='circle1' )

# Create a duplicate of the group
cmds.duplicate( 'group1' )
# Result: group2 sphere1 sphere2 #

cmds.duplicate( 'group1', rr=True )
# Result: group2 #

# Create a row of 4 circles equally spaced using
# the -smartTransform flag.
cmds.duplicate( 'circle1' )
cmds.move( 3, 0, 0 )
cmds.duplicate( st=True )
cmds.duplicate( st=True )

# Duplicate a sphere along with its input connections.
# If animCurves were feeding into original transforms of the
# sphere, they will feed into the duplicated ones also.
# If the sphere has history (in this case it does),
# then the history is connected to the duplicate. Note that
# changing the radius for the makeNurbSphere for the sphere1
# affects the duplicated sphere.
cmds.duplicate( 'group1|sphere1', ic=True )
cmds.move( 0, 0, 0 )
cmds.setAttr( 'makeNurbSphere1.radius', 2 )

# Duplicate selected objects along with their upstream nodes
# and connections. This will duplicate the history.
cmds.select( 'group1|sphere2' )
cmds.duplicate( un=True )