Plugins

Connect Kiosk to Blender, Cinema 4D, Maya, and Houdini.

How Plugins Work

Kiosk plugins create a direct bridge between your asset library and your 3D software. The communication happens through a watch folder on your local machine — no internet, no cloud, no ports to configure.

To start a live session:

  1. Install the plugin via App Menu → Plugin Manager.
  2. Open the Kiosk panel inside your DCC app.
  3. Click Launch Kiosk in the panel — this establishes the connection.
  4. A green dot appears in Kiosk’s top-right corner when a session is active.

From this point, clicking any asset in the DCC panel exports it straight to your scene.

Plugin manager

Integration

Blender

  1. Open Kiosk → App Menu → Plugin Manager
  2. Select Blender and click Install
  3. Browse to your Blender installation directory
  4. Kiosk copies the addon files automatically

Setup: In Blender, go to Edit → Preferences → Add-ons and enable Kiosk for Blender. The Kiosk panel appears in the N-panel (press N).


Maya

  1. Open Kiosk → App Menu → Plugin Manager
  2. Select Maya and click Install
  3. Browse to your Maya installation directory
  4. Kiosk copies the plugin files to your Maya scripts directory

Setup: Run the setup script. This adds a Kiosk shelf in Maya — click the shelf button to launch Kiosk from within Maya.


Houdini

  1. Open Kiosk → App Menu → Plugin Manager
  2. Select Houdini and click Install
  3. Browse to your Houdini user preferences directory (e.g., C:\Users\<user>\Documents\houdiniXX.X\)
  4. Restart Houdini

Setup: A Kiosk shelf is added to Houdini after install. You can also launch Kiosk via the Tab menu in any network editor.

Supported renderers: Redshift, Arnold, Karma, RenderMan


Cinema 4D

  1. Open Kiosk → App Menu → Plugin Manager
  2. Select Cinema 4D and click Install
  3. Browse to your Cinema 4D installation directory
  4. Kiosk copies the plugin files (.pyp format) to your C4D plugins folder

Setup: Restart Cinema 4D. The Kiosk panel is available via Plugins → Kiosk Library.

Supported renderers: Octane, Redshift


Custom Commands

Explained

When you export an asset, Kiosk runs a command stack — an ordered list of functions that execute inside your DCC app. Each function receives a tile_info dictionary with everything Kiosk knows about the selected file.

How to create your own commands:

  1. Open App Menu → Plugin Manager.
  2. Select a DCC and click Edit Commands for a category.
  3. Click the New Script button — Kiosk creates a new Python script pre-filled with example code.
  4. Adjust the script to your needs. It will appear in the commands list for that DCC immediately.
Edit commands panel

A comment on the line directly above the function definition is shown as its tooltip in the Kiosk UI.

The tile_info dictionary contains:

KeyValue
file_pathFull path to the asset file
file_nameFilename with extension
source_nameName of the source this file belongs to
category_nameName of the category (e.g., assets, textures)
tagsList of subfolder names
render_engineRenderer selected in Plugin Manager (e.g., Arnold, Redshift)

To see every available key for a specific file, right-click it and choose Development → Debug File Info.

Built-in commands (always available, start with kiosk_):

CommandDescription
kiosk_import_assetImport the file into the scene
kiosk_create_materialCreate a renderer-specific material from detected PBR textures
kiosk_import_hdriLoad an HDRI environment
kiosk_create_area_lightAdd an area light
kiosk_reveal_in_explorerOpen the file location in Explorer

Examples

Basic custom command — print file info (any DCC):

# Print asset info to the console
def kiosk_print_info(tile_info):
    file_path = tile_info.get('file_path')
    source = tile_info.get('source_name')
    print(f"Exporting: {file_path} from source '{source}'")
    return tile_info

Blender — import FBX and center at origin:

# Import FBX and move to world origin
def kiosk_import_fbx_centered(tile_info):
    import bpy
    bpy.ops.import_scene.fbx(filepath=tile_info.get('file_path'))
    bpy.context.active_object.location = (0, 0, 0)
    return tile_info

Blender — create image texture material:

# Create a Principled BSDF material with this texture
def kiosk_create_texture_material(tile_info):
    import bpy
    path = tile_info.get('file_path')
    name = tile_info.get('file_name')
    mat = bpy.data.materials.new(name=name)
    mat.use_nodes = True
    bsdf = mat.node_tree.nodes["Principled BSDF"]
    tex = mat.node_tree.nodes.new("ShaderNodeTexImage")
    tex.image = bpy.data.images.load(path)
    mat.node_tree.links.new(tex.outputs["Color"], bsdf.inputs["Base Color"])
    return tile_info

Cinema 4D — merge scene file:

# Merge the selected scene into the current document
def kiosk_merge_scene(tile_info):
    import c4d
    c4d.documents.MergeDocument(
        doc,
        tile_info.get('file_path'),
        c4d.SCENEFILTER_OBJECTS | c4d.SCENEFILTER_MATERIALS
    )
    c4d.EventAdd()
    return tile_info

Maya — import as reference:

# Import file as a Maya reference
def kiosk_import_reference(tile_info):
    import maya.cmds as cmds
    path = tile_info.get('file_path')
    name = tile_info.get('file_name').split('.')[0]
    cmds.file(path, reference=True, namespace=name)
    return tile_info

Houdini — load geometry into a new node:

# Create a Geo node and load the file into a File SOP
def kiosk_load_geometry(tile_info):
    import hou
    name = tile_info.get('file_name').split('.')[0]
    geo_node = hou.node("/obj").createNode("geo", name)
    file_sop = geo_node.createNode("file")
    file_sop.parm("file").set(tile_info.get('file_path'))
    file_sop.setDisplayFlag(True)
    return tile_info

Using the render engine from tile_info:

# Create a material based on the renderer selected in Kiosk
def kiosk_smart_material(tile_info):
    import maya.cmds as cmds
    engine = tile_info.get('render_engine', 'Arnold')
    name = tile_info.get('file_name').split('.')[0]
    if engine == 'Arnold':
        cmds.shadingNode('aiStandardSurface', asShader=True, name=f'{name}_mtl')
    elif engine == 'VRay':
        cmds.shadingNode('VRayMtl', asShader=True, name=f'{name}_mtl')
    return tile_info