**[`bpy.props.StringProperty`][1]`.subtype`** > **FILE_PATH** > > Use for storing file paths. Adds a button to the UI property markup, that when used sets the string > to the file path chosen. Option to make it a relative path. > > **DIR_PATH** > > Use for storing directory paths. Adds a button to the UI property markup, that when used sets the string > to the directory path chosen. > > **FILE_NAME** > > AFAICT is for, as the name suggests storing a filename. Filenames cannot > contain certain characters. It doesn't appear to in anyway auto-parse. > The Paint Palettes addon uses the subtype for preset file names. The > following method is used to parse out illegal / invalid chars. > > def as_filename(name): # could reuse for other presets > for char in " !@#$%^&*(){}:\";'[]<>,.\\/?": > name = name.replace(char, '_') > return name.lower().strip() > > **BYTE_STRING** > > Stores the string as a utf-8 encoded byte string. Equivalent of > `"string".encode()`. > > **PASSWORD** > > Displays asterisks (*) when input is typed in the UI. Stores the string as entered. > > **NONE** > > Default. None of the above. **Run a script and see.** Like any code we can run and see, the worst thing that can happen is your computer explodes, starts a fire an burns down your city. Here is a test script to set a string property of each subtype to the window manager, and display them in a panel (using the simple panel template code) as well as write their value to system console on change. import bpy from bpy.props import StringProperty subtypes = ['FILE_PATH', 'DIR_PATH', 'FILE_NAME', 'BYTE_STRING', 'PASSWORD', 'NONE'] def print_value(subtype): def print_value(self, context): print(subtype, getattr(self, subtype)) return print_value for st in subtypes: setattr(bpy.types.WindowManager, st, StringProperty(subtype=st, update=print_value(st))) class HelloWorldPanel(bpy.types.Panel): """Creates a Panel in the Object properties window""" bl_label = "Hello World Panel" bl_idname = "OBJECT_PT_hello" bl_space_type = 'PROPERTIES' bl_region_type = 'WINDOW' bl_context = "object" def draw(self, context): wm = context.window_manager layout = self.layout for st in subtypes: layout.prop(wm, st) def register(): bpy.utils.register_class(HelloWorldPanel) def unregister(): bpy.utils.unregister_class(HelloWorldPanel) if __name__ == "__main__": register() Here is the result. [![enter image description here][2]][2] and the result of setting all to "xxxxxx" in the panel written to system console. FILE_PATH xxxxxx DIR_PATH xxxxxx FILE_NAME xxxxxx BYTE_STRING b'xxxxxx' PASSWORD xxxxxx NONE xxxxxx [1]: https://docs.blender.org/api/blender_python_api_current/bpy.props.html#bpy.props.StringProperty [2]: https://i.sstatic.net/Z4PKC.png