Skip to main content
2 of 4
added 13 characters in body

The simple difference is:

  • custom properties have to be defined by script first, then they are available to all the instances of the type of object they were defined for. Plenty of data types available (arrays, bools, ..)

  • ID property can be assigned to single instance of object. There are less data types available.

Both will be saved with the file. Also both will show in the UI, the custom prop will show as "API Defined":

enter image description here

When you open such file and don't define the custom property, it will be converted into ID property:

enter image description here

When you run bpy.types.Scene.prop = bpy.props.IntProperty() it will turn back into custom property.

There is a bug now however. If you happen to define bpy.types.Scene.prop you are not able to create any ID properties for scenes - the default name for them is "prop". I will report this.

Last very important thing - as custom properties are heavily used to store values for rigs

  • Pose Libraries do not store custom prop data, but they will store ID properties values.