# Dynamo python change familysymbol(type) name

**URL:** <https://forum.dynamobim.com/t/dynamo-python-change-familysymbol-type-name/67472>\
**Category:** Revit\
**Tags:** python, dynamo\
**Created:** [August 24, 2021, 9:29am UTC](https://forum.dynamobim.com/t/dynamo-python-change-familysymbol-type-name/67472 "2021-08-24T09:29:09Z")\
**Posts on this page:** 12\
**Page:** 1

<div class="post-metadata">

**Author:** ![1234eddie](https://avatars.discourse-cdn.com/v4/letter/1/4da419/32.png) [@1234eddie](https://forum.dynamobim.com/u/1234eddie)\
**Post date:** [August 24, 2021, 9:29am UTC](https://forum.dynamobim.com/t/dynamo-python-change-familysymbol-type-name/67472/1 "2021-08-24T09:29:09Z")

</div>

Hi all,

I’m currently working on a script that changes the familysymbol name. but some way i can’t get this one to work.

Objective/workflow: in our company we are using a base parametric family(called: Betonplint - parametrisch), which is loaded in to a adaptive family, which is loaded in to a secondary adaptive main family. so we have a dynamo script that generates and saves these families with dimensions from an excel sheet. and later on this generated families will be loaded in to a project and with an other dynamo script we place these adaptive families in ‘the world’ with coordinates. when that model i generated we are using ‘Navisworks Manage’ to share our model with our client. but due the fact we are using 1 base family, all families wil return with there base name in Navisworks manage. See screenshot below:  
 ![Selection tree navisworks manage](https://us1.discourse-cdn.com/flex022/uploads/dynamobim/original/3X/5/2/52a7576d89253baad0f78b52c252d2ebb83b3004.png)

But see this picture how we want to present the navisworks tree:  
 ![Selection tree navisworks manage we want](https://us1.discourse-cdn.com/flex022/uploads/dynamobim/original/3X/7/1/7151e0b8a4e59db374cf0e0baa066901abe41440.png)

i achieved this by renaming the [family with this method](https://www.youtube.com/watch?v=u9CI5YxKm7w) and by [renaming it’s type with this method.](https://www.youtube.com/watch?v=E3A3aZn3Yfw)

But as we have already a python script that generates these families i wan’t to integrate this. Renaming the family works(green marked) but renaming it’s type(red marked) not. see the pictures below from the script/ input-output and the result in the projectbrowser in revit.

 ![Input output](https://us1.discourse-cdn.com/flex022/uploads/dynamobim/original/3X/6/d/6dbe7112b428dba6530eb8e6c63121a8d269b6b6.png)  
 ![Revit preview](https://us1.discourse-cdn.com/flex022/uploads/dynamobim/original/3X/4/8/48df47cfba921df4a604807fa8c5c4b7516ec1fe.png)

this is the python script i use for generating, renaming and saving the families.

```auto
import clr
clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import *

clr.AddReference("RevitServices")
import RevitServices
from Autodesk.Revit.DB import FilteredElementCollector, Family
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager

clr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.GeometryConversion)
clr.ImportExtensions(Revit.Elements)

doc = DocumentManager.Instance.CurrentDBDocument
name = IN[0]
compact = IN[1]
newcentral = IN[2]
isworkshared = IN[3]
elmts = IN[4]
parmNam = IN[5]
val = IN[6]
searcha = IN[7]
renamea = IN[8]

for i in range(len(name)):
	for j in range(len(val[i])):
		Revit.Elements.Element.SetParameterByName(elmts[0], parmNam[i][j], val[i][j])
	
	
	#TransactionManager.Instance.ForceCloseTransaction()
	search=searcha[i]
	rename=renamea[0][i]#[i]
	type_name = []
	collector = FilteredElementCollector(doc).OfClass(Family)
	TransactionManager.Instance.EnsureInTransaction(doc)
	for element in collector.ToElements():
	    for idx, searched in enumerate(search):
	        if searched == element.Name:
	            element.Name = rename[idx]
	            type_name.append(element.Name)
	TransactionManager.Instance.ForceCloseTransaction()
	
	searchb=searcha[i]
	renameb=renamea[0][i]#[i]
	type_namea = []
	type_namecheck = []
	familytypes = FilteredElementCollector(doc).OfClass(FamilySymbol).ToElements()
	
	TransactionManager.Instance.EnsureInTransaction(doc)
	for typ in familytypes:
		typename = typ.get_Parameter(BuiltInParameter.SYMBOL_NAME_PARAM).AsString()
		typename_object = typ.get_Parameter(BuiltInParameter.SYMBOL_NAME_PARAM)
		type_namea.append(typename)
		if searchb[0] == typename:
			type_namecheck.append("gevonden")
			#typeName = typename_object.LookupParameter(searchb[0]).Set(renameb[0])
			#typeName = typename.Name(BuiltInParameter.SYMBOL_NAME_PARAM).Set(renameb)
	TransactionManager.Instance.ForceCloseTransaction()
	
	if doc.IsFamilyDocument:
		name[i] += '.rfa'
	else:
		name[i] += '.rvt'
	opt = SaveAsOptions()
	opt.OverwriteExistingFile = True
	opt.Compact = compact
	if isworkshared and newcentral:
		wsopt = WorksharingSaveAsOptions()
		wsopt.ClearTransmitted = True
		wsopt.SaveAsCentral = True
		opt.SetWorksharingOptions(wsopt)
	try:
		doc.SaveAs(name[i], opt)
		OUT = 'ALLE ELEMENTEN ZIJN GEGENEREERD',type_name,searcha,search,renamea,rename,type_namea,familytypes,searchb,renameb,type_namecheck
	except:
		try:
			wsopt.ClearTransmitted = False
			opt.SetWorksharingOptions(wsopt)
			doc.SaveAs(name[i], opt)
			OUT = 'not done',type_name,searcha,search,renamea,rename,type_namea,familytypes,searchb,renameb,type_namecheck
		except:
			OUT = 'not done',type_name,searcha,search,renamea,rename,type_namea,familytypes,searchb,renameb,type_namecheck

```

The question:  
what line of code do i need after the “if searchb[0] == typename:” to set the name ?  
as you can see i tried two different options but both are giving error’s.

PS: i’m working with revit 2021.

Gr Edward

---

<div class="post-metadata">

**Author:** ![Daniel\_Woodcock1](https://avatars.discourse-cdn.com/v4/letter/d/58f4c7/32.png) [@Daniel\_Woodcock1](https://forum.dynamobim.com/u/Daniel_Woodcock1)\
**Post date:** [August 24, 2021, 9:46am UTC](https://forum.dynamobim.com/t/dynamo-python-change-familysymbol-type-name/67472/2 "2021-08-24T09:46:26Z")

</div>

To rename family types you should use the ALL\_MODEL\_TYPE\_NAME builtin parameter.

---

<div class="post-metadata">

**Author:** ![1234eddie](https://avatars.discourse-cdn.com/v4/letter/1/4da419/32.png) [@1234eddie](https://forum.dynamobim.com/u/1234eddie)\
**Post date:** [August 24, 2021, 10:03am UTC](https://forum.dynamobim.com/t/dynamo-python-change-familysymbol-type-name/67472/3 "2021-08-24T10:03:58Z")

</div>

@Daniel_Woodcock1 thanks for your reply.

See the script below where i used youre suggestion. but i’m now getting an error

 ![Error](https://us1.discourse-cdn.com/flex022/uploads/dynamobim/original/3X/0/8/081c7a9efd8e6c4b4bac3cd44670d236bb5a0440.png)

Script with mentioned “ALL\_MODEL\_TYPE\_NAME”

```auto
import clr
clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import *

clr.AddReference("RevitServices")
import RevitServices
from Autodesk.Revit.DB import FilteredElementCollector, Family
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager

clr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.GeometryConversion)
clr.ImportExtensions(Revit.Elements)

doc = DocumentManager.Instance.CurrentDBDocument
name = IN[0]
compact = IN[1]
newcentral = IN[2]
isworkshared = IN[3]
elmts = IN[4]
parmNam = IN[5]
val = IN[6]
searcha = IN[7]
renamea = IN[8]

for i in range(len(name)):
	for j in range(len(val[i])):
		Revit.Elements.Element.SetParameterByName(elmts[0], parmNam[i][j], val[i][j])
	
	
	#TransactionManager.Instance.ForceCloseTransaction()
	search=searcha[i]
	rename=renamea[0][i]#[i]
	type_name = []
	collector = FilteredElementCollector(doc).OfClass(Family)
	TransactionManager.Instance.EnsureInTransaction(doc)
	for element in collector.ToElements():
	    for idx, searched in enumerate(search):
	        if searched == element.Name:
	            element.Name = rename[idx]
	            type_name.append(element.Name)
	TransactionManager.Instance.ForceCloseTransaction()
	
	searchb=searcha[i]
	renameb=renamea[0][i]#[i]
	type_namea = []
	type_namecheck = []
	familytypes = FilteredElementCollector(doc).OfClass(FamilySymbol).ToElements()
	
	TransactionManager.Instance.EnsureInTransaction(doc)
	for typ in familytypes:
		typename = typ.get_Parameter(BuiltInParameter.SYMBOL_NAME_PARAM).AsString()
		typename_object = typ.get_Parameter(BuiltInParameter.SYMBOL_NAME_PARAM)
		type_namea.append(typename)
		if searchb[0] == typename:
			type_namecheck.append("gevonden")
			#typeName = typename_object.LookupParameter(searchb[0]).Set(renameb[0])
			typeName = typ.Name(BuiltInParameter.ALL_MODEL_TYPE_NAME_).Set(renameb)
			#typeName = typename.Name(BuiltInParameter.SYMBOL_NAME_PARAM).Set(renameb)
	TransactionManager.Instance.ForceCloseTransaction()
	
	if doc.IsFamilyDocument:
		name[i] += '.rfa'
	else:
		name[i] += '.rvt'
	opt = SaveAsOptions()
	opt.OverwriteExistingFile = True
	opt.Compact = compact
	if isworkshared and newcentral:
		wsopt = WorksharingSaveAsOptions()
		wsopt.ClearTransmitted = True
		wsopt.SaveAsCentral = True
		opt.SetWorksharingOptions(wsopt)
	try:
		doc.SaveAs(name[i], opt)
		OUT = 'ALLE ELEMENTEN ZIJN GEGENEREERD',type_name,searcha,search,renamea,rename,type_namea,familytypes,searchb,renameb,type_namecheck
	except:
		try:
			wsopt.ClearTransmitted = False
			opt.SetWorksharingOptions(wsopt)
			doc.SaveAs(name[i], opt)
			OUT = 'not done',type_name,searcha,search,renamea,rename,type_namea,familytypes,searchb,renameb,type_namecheck
		except:
			OUT = 'not done',type_name,searcha,search,renamea,rename,type_namea,familytypes,searchb,renameb,type_namecheck

```

thanks in advance

---

<div class="post-metadata">

**Author:** ![Daniel\_Woodcock1](https://avatars.discourse-cdn.com/v4/letter/d/58f4c7/32.png) [@Daniel\_Woodcock1](https://forum.dynamobim.com/u/Daniel_Woodcock1)\
**Post date:** [August 24, 2021, 10:28am UTC](https://forum.dynamobim.com/t/dynamo-python-change-familysymbol-type-name/67472/4 "2021-08-24T10:28:05Z")

</div>

> [@1234eddie](#):
>
> ```auto
> TransactionManager.Instance.EnsureInTransaction(doc)
> for typ in familytypes:
> typename = typ.get_Parameter(BuiltInParameter.SYMBOL_NAME_PARAM).AsString()
> typename_object = typ.get_Parameter(BuiltInParameter.SYMBOL_NAME_PARAM)
> type_namea.append(typename)
> if searchb[0] == typename:
> type_namecheck.append("gevonden")
> #typeName = typename_object.LookupParameter(searchb[0]).Set(renameb[0])
> typeName = typ.Name(BuiltInParameter.ALL_MODEL_TYPE_NAME_).Set(renameb)
> #typeName = typename.Name(BuiltInParameter.SYMBOL_NAME_PARAM).Set(renameb)
> TransactionManager.Instance.ForceCloseTransaction()
> 
> ```

Try this instead…

```auto
TransactionManager.Instance.EnsureInTransaction(doc)
for typ in familytypes:
	typename = typ.get_Parameter(BuiltInParameter.ALL_MODEL_TYPE_NAME)
	type_namea.append(typename.AsString())
	if searchb[0] == typename:
		type_namecheck.append("gevonden")
		typename.Set(renameb)
TransactionManager.Instance.ForceCloseTransaction()

```

---

<div class="post-metadata">

**Author:** ![1234eddie](https://avatars.discourse-cdn.com/v4/letter/1/4da419/32.png) [@1234eddie](https://forum.dynamobim.com/u/1234eddie)\
**Post date:** [August 24, 2021, 4:13pm UTC](https://forum.dynamobim.com/t/dynamo-python-change-familysymbol-type-name/67472/5 "2021-08-24T16:13:29Z")

</div>

@Daniel_Woodcock1  
i’m sorry, but i made a small mistake in my code so the if statement did not do anything at all.

i fixed my if statement. and tried 2 different ways of renaming the parameter.  
1- when using typename.Set (as suggested i get this error). Quite logic in my opinion

 ![error when using typename_set](https://us1.discourse-cdn.com/flex022/uploads/dynamobim/original/3X/b/b/bb1d738c7c54ac82ef937efc9965c54f3fa3e0ce.png)

2- when using typ.Name(BuiltInParameter.ALL\_MODEL\_TYPE\_NAME).Set(renameb[0])  
i get this error.

 ![Error when using typ_name](https://us1.discourse-cdn.com/flex022/uploads/dynamobim/original/3X/b/4/b4c35e6dda275f2c7e100ae996cf6ef448707fed.png)

This is the script with the both tested lines:

```auto
import clr
clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import *

clr.AddReference("RevitServices")
import RevitServices
from Autodesk.Revit.DB import FilteredElementCollector, Family
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager

clr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.GeometryConversion)
clr.ImportExtensions(Revit.Elements)

doc = DocumentManager.Instance.CurrentDBDocument
name = IN[0]
compact = IN[1]
newcentral = IN[2]
isworkshared = IN[3]
elmts = IN[4]
parmNam = IN[5]
val = IN[6]
searcha = IN[7]
renamea = IN[8]

for i in range(len(name)):
	for j in range(len(val[i])):
		Revit.Elements.Element.SetParameterByName(elmts[0], parmNam[i][j], val[i][j])
	
	
	#TransactionManager.Instance.ForceCloseTransaction()
	search=searcha[i]
	rename=renamea[0][i]#[i]
	type_name = []
	collector = FilteredElementCollector(doc).OfClass(Family)
	TransactionManager.Instance.EnsureInTransaction(doc)
	for element in collector.ToElements():
	    for idx, searched in enumerate(search):
	        if searched == element.Name:
	            element.Name = rename[idx]
	            type_name.append(element.Name)
	TransactionManager.Instance.ForceCloseTransaction()
	
	searchb=searcha[i]
	renameb=renamea[0][i]#[i]
	type_namea = []
	type_namecheck = []
	familytypes = FilteredElementCollector(doc).OfClass(FamilySymbol).ToElements()
	
	TransactionManager.Instance.EnsureInTransaction(doc)
	for typ in familytypes:
		
		typename = typ.get_Parameter(BuiltInParameter.SYMBOL_NAME_PARAM)
		typenamestr = str(typename)
		typnaam = typename.AsString()
		type_namea.append(typename.AsString())
		if searchb[0] == typnaam:
			type_namecheck.append("gevonden")
			#typename.Set(renameb[0])
			typ.Name(BuiltInParameter.ALL_MODEL_TYPE_NAME).Set(renameb[0])
	TransactionManager.Instance.ForceCloseTransaction()
	
	if doc.IsFamilyDocument:
		name[i] += '.rfa'
	else:
		name[i] += '.rvt'
	opt = SaveAsOptions()
	opt.OverwriteExistingFile = True
	opt.Compact = compact
	if isworkshared and newcentral:
		wsopt = WorksharingSaveAsOptions()
		wsopt.ClearTransmitted = True
		wsopt.SaveAsCentral = True
		opt.SetWorksharingOptions(wsopt)
	try:
		doc.SaveAs(name[i], opt)
		OUT = 'ALLE ELEMENTEN ZIJN GEGENEREERD',type_name,searcha,search,renamea,rename,type_namea,familytypes,searchb,renameb,type_namecheck,typenamestr,typ,typnaam
	except:
		try:
			wsopt.ClearTransmitted = False
			opt.SetWorksharingOptions(wsopt)
			doc.SaveAs(name[i], opt)
			OUT = 'not done',type_name,searcha,search,renamea,rename,type_namea,familytypes,searchb,renameb,type_namecheck,typenamestr,typ,typnaam
		except:
			OUT = 'not done',type_name,searcha,search,renamea,rename,type_namea,familytypes,searchb,renameb,type_namecheck,typenamestr,typ,typnaam

```

I hope someone can help me with this?

Thanks in advance

Gr Edward

---

<div class="post-metadata">

**Author:** ![Daniel\_Woodcock1](https://avatars.discourse-cdn.com/v4/letter/d/58f4c7/32.png) [@Daniel\_Woodcock1](https://forum.dynamobim.com/u/Daniel_Woodcock1)\
**Post date:** [August 24, 2021, 4:26pm UTC](https://forum.dynamobim.com/t/dynamo-python-change-familysymbol-type-name/67472/6 "2021-08-24T16:26:38Z")

</div>

You are still doing this wrong. Can you replace the part I quoted with the code I provided as your code is still pretty much as it was when you originally posted.

To break this down a little further…

For the first error, you are using the readonly BIP SYMBOL\_NAME\_PARAM and not the editable BIP. This needs to be ALL\_MODEL\_TYPE\_NAME if you wish to set it.

For the second error, you are doing typ.Name(Builtin… ). This simply is not a thing, FamilySymbol.Name is a readonly property and should always be without brackets and never assigned to. Instead, you need to get the parameter object (ALL\_MODEL\_TYPE\_NAME) first, you can get and set this. Again, see my last post, I am not setting the name property on the type, instead I am setting the parameter objects value on that type which in turn updates rhe readonly FamilySymbol.Name property.

I hope that makes sense.

---

<div class="post-metadata">

**Author:** ![1234eddie](https://avatars.discourse-cdn.com/v4/letter/1/4da419/32.png) [@1234eddie](https://forum.dynamobim.com/u/1234eddie)\
**Post date:** [August 25, 2021, 6:58am UTC](https://forum.dynamobim.com/t/dynamo-python-change-familysymbol-type-name/67472/7 "2021-08-25T06:58:41Z")

</div>

I partially getting what you mean.(already many thanks for your time)

So i tried to set it the way you described. then i still get this error:

 ![error read only](https://us1.discourse-cdn.com/flex022/uploads/dynamobim/original/3X/a/5/a51419b0575b46f7ab8d2fa35aec2b54c54d7996.png)

this is the script

```auto
import clr
clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import *

clr.AddReference("RevitServices")
import RevitServices
from Autodesk.Revit.DB import FilteredElementCollector, Family
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager

clr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.GeometryConversion)
clr.ImportExtensions(Revit.Elements)

doc = DocumentManager.Instance.CurrentDBDocument
name = IN[0]
compact = IN[1]
newcentral = IN[2]
isworkshared = IN[3]
elmts = IN[4]
parmNam = IN[5]
val = IN[6]
searcha = IN[7]
renamea = IN[8]

for i in range(len(name)):
	for j in range(len(val[i])):
		Revit.Elements.Element.SetParameterByName(elmts[0], parmNam[i][j], val[i][j])
	
	
	#TransactionManager.Instance.ForceCloseTransaction()
	search=searcha[i]
	rename=renamea[0][i]#[i]
	type_name = []
	collector = FilteredElementCollector(doc).OfClass(Family)
	TransactionManager.Instance.EnsureInTransaction(doc)
	for element in collector.ToElements():
	    for idx, searched in enumerate(search):
	        if searched == element.Name:
	            element.Name = rename[idx]
	            type_name.append(element.Name)
	TransactionManager.Instance.ForceCloseTransaction()
	
	searchb=searcha[i]
	renameb=renamea[0][i]#[i]
	type_namea = []
	type_namecheck = []
	familytypes = FilteredElementCollector(doc).OfClass(FamilySymbol).ToElements()
	
	TransactionManager.Instance.EnsureInTransaction(doc)
	for typ in familytypes:
		
		typename = typ.get_Parameter(BuiltInParameter.SYMBOL_NAME_PARAM)
		typenameget = typ.get_Parameter(BuiltInParameter.ALL_MODEL_TYPE_NAME)
		typenamestr = str(typename)
		typnaam = typename.AsString()
		type_namea.append(typename.AsString())
		if searchb[0] == typnaam:
			type_namecheck.append("gevonden")
			typenameget.Set(renameb[0])
			#typ.Name(BuiltInParameter.ALL_MODEL_TYPE_NAME).Set(renameb[0])
	TransactionManager.Instance.ForceCloseTransaction()
	
	if doc.IsFamilyDocument:
		name[i] += '.rfa'
	else:
		name[i] += '.rvt'
	opt = SaveAsOptions()
	opt.OverwriteExistingFile = True
	opt.Compact = compact
	if isworkshared and newcentral:
		wsopt = WorksharingSaveAsOptions()
		wsopt.ClearTransmitted = True
		wsopt.SaveAsCentral = True
		opt.SetWorksharingOptions(wsopt)
	try:
		doc.SaveAs(name[i], opt)
		OUT = 'ALLE ELEMENTEN ZIJN GEGENEREERD',type_name,searcha,search,renamea,rename,type_namea,familytypes,searchb,renameb,type_namecheck,typenamestr,typ,typnaam
	except:
		try:
			wsopt.ClearTransmitted = False
			opt.SetWorksharingOptions(wsopt)
			doc.SaveAs(name[i], opt)
			OUT = 'not done',type_name,searcha,search,renamea,rename,type_namea,familytypes,searchb,renameb,type_namecheck,typenamestr,typ,typnaam
		except:
			OUT = 'not done',type_name,searcha,search,renamea,rename,type_namea,familytypes,searchb,renameb,type_namecheck,typenamestr,typ,typnaam

```

---

<div class="post-metadata">

**Author:** ![Daniel\_Woodcock1](https://avatars.discourse-cdn.com/v4/letter/d/58f4c7/32.png) [@Daniel\_Woodcock1](https://forum.dynamobim.com/u/Daniel_Woodcock1)\
**Post date:** [August 25, 2021, 8:47am UTC](https://forum.dynamobim.com/t/dynamo-python-change-familysymbol-type-name/67472/8 "2021-08-25T08:47:59Z")

</div>

Hmm, seems to be that one or more of your family types cannot be renamed. You might want to add to your if condition a check if the family type can actually be renamed or parameter is readonly. Use one of the following…

typ.CanBeRenamed

Or…

typenameget.IsReadOnly

So your if statement would be along the lines of…

if seachb[0] == typnaam and typ.CanBeRenamed:

Or…

if seachb[0] == typnaam and not typenameget.IsReadOnly:

It is always good to add validation where you can to catch conditions like this. If I were you I would do some tests in another node isolating the type renaming so you can see better what is happening, or in the same node, if it is read only parameter or type cannot be renamed then add type to an array you can output in the graph so you can see on what elements this is happening to. This is the best and only way to debug in dynamo python.

---

<div class="post-metadata">

**Author:** ![c.poupin](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.dynamobim.com/c.poupin/32/89152_2.png) [@c.poupin](https://forum.dynamobim.com/u/c.poupin)\
**Post date:** [August 25, 2021, 12:30pm UTC](https://forum.dynamobim.com/t/dynamo-python-change-familysymbol-type-name/67472/9 "2021-08-25T12:30:14Z")

</div>

Hello  
you can try to use directly the [Name property (setter)](https://www.revitapidocs.com/2015/1198805b-fdbf-54bf-64d3-90dbd01b4c5f.htm)

 ![image](https://us1.discourse-cdn.com/flex022/uploads/dynamobim/original/3X/b/2/b272943906e3ecff164709b571f0dd86c41fd83e.png)

```auto
import clr
import sys
import System
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
import Autodesk.DesignScript.Geometry as DS

clr.AddReference('RevitAPI')
import Autodesk
from Autodesk.Revit.DB import *
import Autodesk.Revit.DB as DB

clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument

familytypes = FilteredElementCollector(doc).OfClass(FamilySymbol).ToElements()

TransactionManager.Instance.EnsureInTransaction(doc)
for typ in familytypes:
	currentName = Element.Name.GetValue(typ)
	typ.Name = "MyPrefix_" + currentName

TransactionManager.Instance.TransactionTaskDone()

OUT = familytypes

```

---

<div class="post-metadata">

**Author:** ![1234eddie](https://avatars.discourse-cdn.com/v4/letter/1/4da419/32.png) [@1234eddie](https://forum.dynamobim.com/u/1234eddie)\
**Post date:** [August 25, 2021, 3:40pm UTC](https://forum.dynamobim.com/t/dynamo-python-change-familysymbol-type-name/67472/10 "2021-08-25T15:40:05Z")

</div>

@c.poupin thanks for your reply. it works now.  
@Daniel_Woodcock1 also many thanks for your patience with me.

---

<div class="post-metadata">

**Author:** ![1234eddie](https://avatars.discourse-cdn.com/v4/letter/1/4da419/32.png) [@1234eddie](https://forum.dynamobim.com/u/1234eddie)\
**Post date:** [September 7, 2021, 9:12am UTC](https://forum.dynamobim.com/t/dynamo-python-change-familysymbol-type-name/67472/11 "2021-09-07T09:12:40Z")

</div>

Hi @c.poupin and @Daniel_Woodcock1

after some testing in real projects, the script needs some addition’s.  
The problem i have now is that in the top family still ‘type 1’ is. and i wand tot change is. but cant really figure out what i need to add to find this ‘type 1’.  
See the picture below, the type 1 is changed in all lower family’s but not in the top one.

 ![type to change](https://us1.discourse-cdn.com/flex022/uploads/dynamobim/original/3X/8/2/82522201678ab924a48d5e582bad81f9a99932b8.jpeg)

this is my script i use.

```auto
import clr
clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import *

clr.AddReference("RevitServices")
import RevitServices
from Autodesk.Revit.DB import FilteredElementCollector, Family
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager

clr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.GeometryConversion)
clr.ImportExtensions(Revit.Elements)

doc = DocumentManager.Instance.CurrentDBDocument
name = IN[0]
compact = IN[1]
newcentral = IN[2]
isworkshared = IN[3]
elmts = IN[4]
parmNam = IN[5]
val = IN[6]
searcha = IN[7]
renamea = IN[8]

for i in range(len(name)):
	for j in range(len(val[i])):
		Revit.Elements.Element.SetParameterByName(elmts[0], parmNam[i][j], val[i][j])
	
	
	#TransactionManager.Instance.ForceCloseTransaction()
	search=searcha[i]
	rename=renamea[0][i]#[i]
	type_name = []
	collector = FilteredElementCollector(doc).OfClass(Family)
	TransactionManager.Instance.EnsureInTransaction(doc)
	for element in collector.ToElements():
	    for idx, searched in enumerate(search):
	        if searched == element.Name:
	        	element.Name = rename[idx]
	        	type_name.append(element.Name)
	TransactionManager.Instance.ForceCloseTransaction()
	
	searchb=searcha[i]
	renameb=renamea[0][i]#[i]
	type_namea = []
	type_namecheck = []
	familytypes = FilteredElementCollector(doc).OfClass(FamilySymbol).ToElements()
	
	TransactionManager.Instance.EnsureInTransaction(doc)
	for typ in familytypes:
		currentName = Element.Name.GetValue(typ)
		
		typename = typ.get_Parameter(BuiltInParameter.SYMBOL_NAME_PARAM)
		typenameget = typ.get_Parameter(BuiltInParameter.ALL_MODEL_TYPE_NAME)
		typenamestr = str(typename)
		typnaam = typename.AsString()
		type_namea.append(typename.AsString())
		#if searchb[0] == typnaam:
		type_namecheck.append("gevonden")
			#typ.Name = "test_" +currentName
		typ.Name = renameb[0]
			#typenameget.Set(renameb[0])
			#typ.Name(BuiltInParameter.ALL_MODEL_TYPE_NAME).Set(renameb[0])
	TransactionManager.Instance.ForceCloseTransaction()
	
	if doc.IsFamilyDocument:
		name[i] += '.rfa'
	else:
		name[i] += '.rvt'
	opt = SaveAsOptions()
	opt.OverwriteExistingFile = True
	opt.Compact = compact
	if isworkshared and newcentral:
		wsopt = WorksharingSaveAsOptions()
		wsopt.ClearTransmitted = True
		wsopt.SaveAsCentral = True
		opt.SetWorksharingOptions(wsopt)
	try:
		doc.SaveAs(name[i], opt)
		OUT = 'ALLE ELEMENTEN ZIJN GEGENEREERD',type_name,searcha,search,renamea,rename,type_namea,familytypes,searchb,renameb,type_namecheck,typenamestr,typ,typnaam
	except:
		try:
			wsopt.ClearTransmitted = False
			opt.SetWorksharingOptions(wsopt)
			doc.SaveAs(name[i], opt)
			OUT = 'not done',type_name,searcha,search,renamea,rename,type_namea,familytypes,searchb,renameb,type_namecheck,typenamestr,typ,typnaam
		except:
			OUT = 'not done',type_name,searcha,search,renamea,rename,type_namea,familytypes,searchb,renameb,type_namecheck,typenamestr,typ,typnaam

```

hope someone of you know how to get this last parameter?

thanks in advance

---

<div class="post-metadata">

**Author:** ![c.poupin](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.dynamobim.com/c.poupin/32/89152_2.png) [@c.poupin](https://forum.dynamobim.com/u/c.poupin)\
**Post date:** [September 7, 2021, 8:04pm UTC](https://forum.dynamobim.com/t/dynamo-python-change-familysymbol-type-name/67472/12 "2021-09-07T20:04:52Z")

</div>

To rename types in the family editor, the method is as follows  
[https://www.revitapidocs.com/2021.1/ddd98706-5a07-feac-4b1f-49d52471a8c8.htm](https://www.revitapidocs.com/2021.1/ddd98706-5a07-feac-4b1f-49d52471a8c8.htm)  
_Note_  
_it might be better to do one script per environment (project and family editor)_
