bpy.utils submodule (bpy.utils.previews)

This module contains utility functions to handle custom previews.

It behaves as a high-level ‘cached’ previews manager.

This allows scripts to generate their own previews, and use them as icons in UI widgets (‘icon_value’ for UILayout functions).

Custom Icon Example

# This sample script demonstrates how to place a custom icon on a button or
# menu entry.
# IMPORTANT NOTE: if you run this sample, there will be no icon in the button
# You need to replace the image path with a real existing one.
# For distributable scripts, it is recommended to place the icons inside the
# addon folder and access it relative to the py script file for portability
# Other use cases for UI-previews:
# - provide a fixed list of previews to select from
# - provide a dynamic list of preview (eg. calculated from reading a directory)
# For the above use cases, see the template 'ui_previews_dynamic_enum.py"

import os
import bpy

class PreviewsExamplePanel(bpy.types.Panel):
    """Creates a Panel in the Object properties window"""
    bl_label = "Previews Example Panel"
    bl_idname = "OBJECT_PT_previews"
    bl_space_type = 'PROPERTIES'
    bl_region_type = 'WINDOW'
    bl_context = "object"

    def draw(self, context):
        layout = self.layout
        pcoll = preview_collections["main"]

        row = layout.row()
        my_icon = pcoll["my_icon"]
        row.operator("render.render", icon_value=my_icon.icon_id)

        # my_icon.icon_id can be used in any UI function that accepts
        # icon_value # try also setting text=""
        # to get an icon only operator button

# We can store multiple preview collections here,
# however in this example we only store "main"
preview_collections = {}

def register():

    # Note that preview collections returned by bpy.utils.previews
    # are regular py objects - you can use them to store custom data.
    import bpy.utils.previews
    pcoll = bpy.utils.previews.new()

    # path to the folder where the icon is
    # the path is calculated relative to this py file inside the addon folder
    my_icons_dir = os.path.join(os.path.dirname(__file__), "icons")

    # load a preview thumbnail of a file and store in the previews collection
    pcoll.load("my_icon", os.path.join(my_icons_dir, "icon-image.png"), 'IMAGE')

    preview_collections["main"] = pcoll


def unregister():

    for pcoll in preview_collections.values():


if __name__ == "__main__":
Returns:a new preview collection.
Return type:ImagePreviewCollection

Remove the specified previews collection.

Parameters:pcoll (ImagePreviewCollection) – Preview collection to close.
class bpy.utils.previews.ImagePreviewCollection

Dictionary-like class of previews.

This is a subclass of Python’s built-in dict type, used to store multiple image previews.



Clear all previews.


Close the collection and clear all previews.

load(name, filepath, filetype, force_reload=False)

Generate a new preview from given file path, or return existing one matching name.

  • name (string) – The name (unique id) identifying the preview.
  • filepath (string) – The file path to generate the preview from.
  • filetype (string) – The type of file, needed to generate the preview in [‘IMAGE’, ‘MOVIE’, ‘BLEND’, ‘FONT’].
  • force_reload (bool) – If True, force running thumbnail manager even if preview already exists in cache.

The Preview matching given name, or a new empty one.

Return type:



Generate a new empty preview, or return existing one matching name.

Parameters:name (string) – The name (unique id) identifying the preview.
Returns:The Preview matching given name, or a new empty one.
Return type:bpy.types.ImagePreview