v2.0.2 — Documentation

Lazybridge Documentation

Everything you need to install, configure, and get the most out of Lazybridge — your standalone asset bridge for 3D software. Covers the importer, all exporters, the plugin system, the REST API, and configuration.

Introduction

Lazybridge is a standalone, free asset bridge for 3D artists. It runs as a local web application (port 8000) and connects your asset library directly to the major 3D applications and DCC tools.


The key design goals are:

  • One-click send — select an asset, click a send button, it appears in your scene immediately.
  • Render-engine aware — materials are auto-wired for Octane, Redshift, Corona, Arnold, Cycles and more.
  • Extensible — a plugin system lets you pull assets from any online library (PolyHaven, AmbientCG, …).
  • Local-first — everything runs on your machine; no cloud dependency for core features.

Current version: 2.0.2   License: CC0 / Free   Platform: Windows

Lazybridge integrates with the Lazytextures platform, giving you access to a curated library of free, CC0-licensed PBR materials, textures, HDRIs, 3D models, and IES lights.

Installation & Setup

1

Download the latest release from the official Lazybridge page.

2

Extract the ZIP archive to any folder (e.g. C:\Tools\Lazybridge).

3

Run Lazybridge.exe. This starts the local server and opens the UI in your default browser automatically.

4

On first launch, open Settings and set your Download Folder and Library Folder paths.

5

Install the companion plugin(s) for your 3D application (see the Exporter section).

Lazybridge's server listens on http://localhost:8000. Make sure no other application uses this port, and that your firewall doesn't block local connections.

User Interface Overview

Top Navigation

Switch between asset categories: Materials, Textures, Models, HDRIs, IES Lights, and Others. A real-time search bar filters across all sources.

Source Selector

Toggle between the Lazytextures library and any enabled Plugins (e.g. PolyHaven, AmbientCG). Multiple sources can be active simultaneously.

Asset Grid

Visual thumbnail grid with lazy-loaded previews. Click any card to see the full detail view with download options, resolution picker, and metadata.

Send / Export Buttons

Per-application send buttons appear in the detail view. One click sends the asset to the active scene in Cinema 4D, Blender, Houdini, Maya, Unreal, or Unity.

Library Tab

Browse all locally downloaded assets. Shows download date, source, type, and resolution. Supports re-sending to any connected application.

Settings Page

Configure paths, render engines per application, UI theme, download concurrency, and toggle individual plugins on or off.

Importer Overview

What the Importer does

The Lazybridge importer ingests assets from your local file system into the library. It can handle individual files or entire folder trees, auto-detecting asset type, collecting metadata, generating previews, and optionally packing texture sets.


Key Features

  • Drag & Drop — drag files or folders directly onto the Import page.
  • Batch import — processes 500+ assets in a single run.
  • Auto-detection — each file is classified as a texture, model, HDRI, or material pack based on filename patterns and extension.
  • Quixel / Fab JSON — reads AssetInfo.json or Fab metadata files to populate name, tags, category, and LOD info automatically.
  • Normal-map conversion — optionally flips the green channel (DirectX → OpenGL) during import.
  • ARM texture packing — combines separate AO, Roughness, and Metalness maps into a single packed ARM texture to optimise memory usage.
  • Duplicate detection — skips assets that are already present in the library.
When importing a Quixel/Fab asset folder, place the unzipped folder on the Import page. Lazybridge reads the AssetInfo.json and maps all texture slots automatically.

Supported File Formats

CategoryExtensionsNotes
Textures & Images.png .jpg .jpeg .tif .tiff .exr .hdr .tga .bmp .dds .webpAll PBR map types: BaseColor, Normal, Roughness, Metallic, AO, Displacement/Height, Opacity, Emissive, Specular, Gloss, Cavity, Translucency, Fuzz, Sheen, Coating. Packed Fab/Megascans JPEGs are extracted to grayscale PNG automatically.
3D Models.fbx .obj .gltf .glb .abc .dae .stl .ply .blend .max .ma .mb .3dsLODs detected automatically from filename suffixes (e.g. _LOD0)
HDRIs.hdr .hdri .exrEquirectangular panoramas; EXR preferred for high-dynamic-range fidelity
IES Lights.iesPhotometric light profiles for physically accurate spot/area lights. Imported as external resource and sent directly to lights in C4D, Blender, Houdini, Maya, Unreal, Unity.
VDB Volumes.vdbSingle-frame or animated VDB sequences. Sent as Volume Objects (Redshift RSVolume, Corona Volume, C4D Volume Loader, Blender Volume, Houdini Volume SOP, Maya FluidShape)
Light Gobos.png .jpg .exrTexture images tagged as “light” type in the asset metadata. Projected onto area/spot lights via gobo slot.

Exporter Overview

The exporters send assets from the Lazybridge library directly into a live 3D application session. All exporters communicate over localhost — Lazybridge sends a JSON payload (HTTP POST) or TCP socket command to a companion script/plugin running inside the target application. The render engine is read from config.ini and controls which node graph is built.


ApplicationPortProtocolRender EnginesAsset Types
Cinema 4D8080Script via exeOctane, Redshift, CoronaMaterials, Models, HDRIs, IES Lights, Light Gobos, VDBs
Blender8082HTTPCycles, EEVEEMaterials, Models, HDRIs, IES Lights, VDBs
Houdini8085TCP SocketKarma, Mantra, RedshiftMaterials, Models, HDRIs, IES Lights, Light Gobos
Maya8101HTTPArnoldMaterials, Models, HDRIs, IES Lights, Light Gobos, VDBs
Unreal Engine 58084HTTPLumen / Path TracingMaterials, Models, HDRIs, IES Lights
Unity8083HTTPURP, HDRP, Built-inMaterials, Models, HDRIs, IES Lights, Light Gobos, VDBs
Substance Painter9876TCP SocketMaterials, Textures
The companion plugin must be installed and running in the target application before clicking Send in Lazybridge. Each application has its own installation guide below.

Cinema 4D Exporter

Supported Render Engines

Octane Redshift Corona


Installation

1

In Lazybridge Settings, set the C4D Executable path (e.g. C:\Program Files\Maxon Cinema 4D 2026\Cinema 4D.exe) and the C4D Script Path:
%APPDATA%\Maxon\Maxon Cinema 4D 2026_xxxxx\library\scripts\

2

Lazybridge automatically copies LazyToC4D.py to the scripts folder on first use (unless Skip Script Copy is enabled). Alternatively copy it manually from Exporter/C4D/LazyToC4D.py.

3

In Cinema 4D open Script → Script Manager, select LazyToC4D.py and click Execute. This starts the listener on port 8080. After that, Lazybridge launches C4D automatically when you click Send.

4

In Lazybridge Settings, set C4D Render Engine to match your active renderer (Octane / Redshift / Corona).


How it works

When you click Send to C4D, Lazybridge launches Cinema 4D (if not already running) and passes the asset data via the script manager. The LazyToC4D.py script creates the appropriate material node graph for the active render engine, connects all texture slots, and places models or lights into the scene.


Texture Slot Mapping

PBR MapOctaneRedshiftCorona
Base Color / AlbedoAlbedo (Universal)Diffuse ColorDiffuse Color
RoughnessRoughnessRefl RoughnessReflection Glossiness
MetalnessMetallicMetalnessMetalness
NormalNormalBump Map (normal mode)Bump Map (normal mode)
DisplacementDisplacement (OctaneDisplacement)DisplacementDisplacement
Opacity / AlphaOpacityOpacityOpacity
EmissionEmission (Blackbody)EmissionEmission
CoatingCoating (Universal)CoatingCoating
SheenSheen (Universal)SheenSheen
TransmissionTransmissionRefraction WeightRefraction

Additional Asset Types (C4D)

  • Models — imported via C4D's native FBX/OBJ importer and placed in the active scene.
  • HDRIs — applied as Octane HDRI Environment tag, Redshift Dome Light, or Corona Sky/Environment depending on the active renderer.
  • IES Lights — creates a C4D Area Light with the .ies file loaded as the photometric profile (TEX_IES slot).
  • Light Gobos — texture images tagged as light type are loaded into the gobo slot of a C4D Area Light.
  • VDB Volumes — creates a C4D Volume Object (Ovolumeobject), Redshift RSVolume, or Corona Volume object depending on the active renderer and loads the .vdb sequence.
  • C4D Scripts (.c4dscript) — assets that contain .c4dscript files in their Infos.json are copied to the C4D scripts folder and run directly (used for Octane AutoMat presets etc.).

Blender Exporter

Supported Render Engines

Cycles EEVEE


Installation

1

In Blender open Edit → Preferences → Add-ons → Install from Disk and select Exporter/Blender/LazyToBlender_Addon.py.

2

Enable the add-on. It starts an HTTP listener on port 8082 automatically whenever Blender is open.


How it works

Lazybridge POSTs to http://localhost:8082/receive. The add-on handles each asset type natively:

  • Materials — creates a Principled BSDF material and connects all detected PBR texture maps (Color, Roughness, Metallic, Normal, Displacement, Emission, Alpha).
  • Models — imported via Blender's built-in FBX/OBJ/GLTF importers and placed at the 3D cursor.
  • HDRIs — sets the World shader to an Environment Texture node and loads the .hdr / .exr file.
  • IES Lights — creates a Blender Point Light, sets the light type to IES mode, and loads the .ies photometric profile file.
  • VDB Volumes — imports .vdb files as Blender Volume Objects. VDB sequences (multiple numbered files) are loaded as an animated sequence.

Houdini Exporter

Supported Render Engines

Karma (KarmaXPU) Mantra Redshift


Installation

1

Run the install script inside Houdini's Python shell:
exec(open('Exporter/Houdini/install_plugin.py').read())
Or manually copy HoudiniServer.py and LazyToHoudini.py to your Houdini scripts directory.

2

Start the listener by running 456.py via File → Run Script. The TCP listener starts on port 8085. To auto-start on every scene load, place 456.py in your $HOUDINI_USER_PREF_DIR/scripts/ as 456.py (Houdini executes this automatically after loading a scene).

3

In Lazybridge Settings set Houdini Render Engine to Karma, Mantra, or Redshift.


How it works

Lazybridge sends a JSON command over a TCP socket to port 8085. LazyToHoudini.py inside Houdini receives it and builds the appropriate network:

  • Materials — creates a Material Builder VOP network with Karma Principled Shader, Mantra Principled Shader, or Redshift Standard Material and connects all PBR texture maps.
  • HDRIs — adds a Houdini Environment Light and loads the HDRI file.
  • Models — imports geometry via File SOP into the current scene.
  • IES Lights — creates a Houdini light and assigns the .ies file to the photometric profile parameter.
  • Light Gobos — textures tagged as light (gobo) type are sent as area lights with the image file loaded into the gobo/projection slot.

See Exporter/Houdini/INSTALLATION_DE.md for a step-by-step installation guide in German.

Maya Exporter

Supported Render Engines

Arnold


Installation

1

Copy Exporter/Maya/LazyToMaya_plugin.py to your Maya plug-ins folder:
%MAYA_APP_DIR%\[version]\plug-ins\

2

Load the plugin in Maya via Windows → Settings/Preferences → Plug-in Manager. It starts an HTTP listener on port 8101.


How it works

Lazybridge POSTs to http://localhost:8101/import. The plugin routes the request by asset type:

  • Materials — creates an aiStandardSurface shader and connects all detected PBR maps (BaseColor, Normal, Roughness, Metallic, Displacement, Opacity, Emission, Coating, Sheen, Transmission).
  • Models — imported via Maya's FBX importer and placed in the scene.
  • HDRIs — added to the scene as an aiSkyDomeLight.
  • IES Lights — creates an aiPhotometricLight and assigns the .ies file.
  • Light Gobos — texture assets marked as gobo type are loaded into an area light's gobo slot (aiAreaLight).
  • VDB Volumes — imports the VDB sequence as an aiVolume node.

Unreal Engine 5 Exporter

Render Pipelines

Lumen Path Tracing Nanite


Installation

1

Copy the entire Exporter/Unreal/LazyBridge/ folder into your project's Plugins/ directory.

2

Enable the LazyBridge plugin in Unreal (Edit → Plugins) and restart the editor.

3

The Python script Plugins/Content/Python/LazyToUnreal.py starts the HTTP listener on port 8084 via Unreal's Python scripting system (init_unreal.py).


How it works

Assets are imported into /Game/LazyBridge/ using Unreal's built-in import pipeline:

  • Materials — creates M_<AssetName> with all texture parameters wired (BaseColor, Normal, ORM packed, Roughness, Metallic, Displacement/Height, Opacity, Emissive).
  • Models — imported as Static Mesh assets and placed in the current level at the world origin.
  • HDRIs — assigned to a Sky Light actor as a cubemap.
  • IES Lights — imported as IES Texture assets and assigned to a Point Light or Spot Light actor with the IES profile applied.

Unreal Engine's Python scripting must be enabled under Edit → Plugins → Python Editor Script Plugin for the LazyBridge listener to start.

Unity Exporter

Render Pipelines

URP HDRP Built-in


Installation

1

Copy Exporter/Unity/LazyToUnity.cs to your Unity project's Assets/Editor/ folder.

2

Unity will compile the script automatically. The editor window and HTTP listener start on port 8083.


How it works

Lazybridge POSTs to http://localhost:8083/receive. The Unity editor script imports assets into Assets/LazyBridge/ and routes by type:

  • Materials & Textures — creates a material using the active render pipeline's shader (URP Lit, HDRP Lit, or Standard) and wires all PBR texture slots.
  • Models — imported as prefabs via Unity's FBX importer.
  • HDRIs — imported as Cubemap texture assets.
  • IES Lights — creates an IES Light Cookies asset and attaches it to a Spot or Point Light.
  • Light Gobos — texture images tagged as gobo are set as the cookie texture on a Spot Light.
  • VDB Volumes — imported as VDB assets and used with Unity's Visual Effect Graph volume node (HDRP).

Substance Painter Exporter

Installation

1

Copy Exporter/Substance/LazyToSubstancePainter.py to your Substance Painter plugins directory:
%LOCALAPPDATA%\Adobe\Adobe Substance 3D Painter\plugins\

2

In Substance Painter enable the plugin under Python → LazyToSubstancePainter. This starts the listener on port 9876.


How it works

Lazybridge communicates with Substance Painter via a TCP socket on port 9876 (not HTTP). Each message is length-prefixed using Python's struct module for reliable framing. The plugin imports material textures into the current project's shelf and creates a base fill layer per texture set with all PBR slots populated.

Only Materials & Textures are supported — Substance Painter is a texture-authoring tool and does not handle HDRIs, models, IES lights, or VDB volumes.

Plugin System Overview

Plugins extend Lazybridge with additional online asset sources. Each plugin is a self-contained Python package in the Plugins/ directory and appears as a selectable source in the asset browser alongside the built-in Lazytextures library.


Plugin Directory Structure

Plugins/
└── myplugin/
    ├── plugin.py           ← main Python class (required)
    ├── plugin_info.json    ← metadata (id, name, version, …)
    ├── filter_config.json  ← filter UI definition
    ├── user_settings.json  ← per-user settings schema
    └── downloaded_registry.json  ← cached download records
Enable or disable individual plugins at any time from the Settings page or via the REST API without restarting Lazybridge.

Plugin Python API

Every plugin must implement a class that inherits from PluginBase. The three required methods are:


from plugin_base import PluginBase

class MyPlugin(PluginBase):

    def fetch_assets(
        self,
        asset_type: str,        # "materials" | "textures" | "hdris" | "models" | "others"
        page: int,              # 0-based page index
        page_size: int,         # number of items per page
        query: str = "",        # free-text search query
        category: str = "",     # category slug (plugin-specific)
        filters: dict = None    # key/value pairs from filter_config.json
    ) -> dict:
        """
        Returns:
        {
            "assets": [
                {
                    "id":        str,   # unique asset ID
                    "name":      str,   # display name
                    "type":      str,   # asset type
                    "preview":   str,   # URL or local path of thumbnail
                    "tags":      list,  # optional list of tag strings
                    "metadata":  dict   # arbitrary extra data
                },
                ...
            ],
            "total":        int,   # total number of matching assets
            "has_more":     bool   # whether more pages exist
        }
        """
        ...

    def download_asset(
        self,
        asset_id: str,
        asset_name: str,
        asset_type: str,
        resolution: str,              # e.g. "2K", "4K", "8K"
        progress_callback=None        # callable(percent: float) or None
    ) -> tuple[bool, str]:
        """
        Download the asset to the local library.

        Returns:
            (True,  path_to_asset_folder)  on success
            (False, error_message)         on failure
        """
        ...

    def get_categories(
        self,
        asset_type: str
    ) -> list:
        """
        Returns a list of category dicts:
        [
            {"id": "wood", "name": "Wood"},
            {"id": "metal", "name": "Metal"},
            ...
        ]
        An empty list is valid if the plugin has no categories.
        """
        ...

plugin_info.json

{
    "id":          "myplugin",
    "name":        "My Plugin",
    "version":     "1.0.0",
    "description": "Short description shown in the UI.",
    "author":      "Your Name",
    "website":     "https://example.com",
    "supported_types": ["materials", "textures", "hdris", "models"]
}

filter_config.json

Defines the filter controls shown in the sidebar for this plugin. Each entry becomes a dropdown or checkbox group.

{
    "materials": [
        {
            "id":      "sort",
            "label":   "Sort By",
            "type":    "select",
            "options": [
                {"value": "latest",     "label": "Latest"},
                {"value": "popular",    "label": "Most Popular"},
                {"value": "downloads",  "label": "Most Downloaded"}
            ],
            "default": "latest"
        }
    ]
}

user_settings.json

Stores persistent per-user settings for the plugin (e.g. API keys, preferred resolution). Schema follows the same pattern as filter_config.json.

REST API Reference

Lazybridge exposes a local REST API on http://localhost:8000. This is the same API the browser UI uses internally, so you can drive Lazybridge from any tool, script, or pipeline that can make HTTP requests.


Fetch Assets from a Plugin

GET /api/plugins/assets
    ?type=materials
    &page=0
    &page_size=40
    &query=wood
    &category=
    &plugin_id=polyhaven

Response 200:
{
    "assets":   [ { "id": "...", "name": "...", "preview": "...", ... }, … ],
    "total":    1250,
    "has_more": true
}

Cross-Plugin Search

GET /api/plugins/search
    ?q=concrete
    &types=materials,textures
    &page=0
    &page_size=20

Response 200:
{
    "results": [
        { "plugin_id": "polyhaven", "assets": [ … ] },
        { "plugin_id": "ambientcg", "assets": [ … ] }
    ]
}

Get Categories

GET /api/plugins/categories/{asset_type}?plugin_id=polyhaven

Response 200:
[ { "id": "wood", "name": "Wood" }, … ]

Get Filter Config

GET /api/plugins/filter-config/{plugin_id}

Response 200:
{ "materials": [ { "id": "sort", "label": "Sort By", … } ] }

Download an Asset

POST /api/plugins/download
Content-Type: application/json

{
    "plugin_id":  "ambientcg",
    "asset_id":   "Concrete041",
    "asset_name": "Concrete041",
    "asset_type": "materials",
    "resolution": "4K"
}

Response 200:
{ "success": true, "path": "C:/Library/Materials/Concrete041" }

Response 500:
{ "success": false, "error": "Network timeout" }

Toggle Plugin On / Off

POST /api/plugins/toggle
Content-Type: application/json

{ "plugin_id": "ambientcg", "enabled": true }

Response 200:
{ "success": true }

Reload All Plugins

POST /api/plugins/reload

Response 200:
{ "success": true, "plugins": [ "polyhaven", "ambientcg" ] }

User Settings (Read / Write)

GET  /api/plugins/user-settings/{plugin_id}
POST /api/plugins/user-settings/{plugin_id}
     Body: { "preferred_resolution": "4K", ... }

List Downloaded Assets

GET /api/downloaded-assets

Response 200:
[
    {
        "id":         "Concrete041",
        "name":       "Concrete041",
        "type":       "materials",
        "source":     "ambientcg",
        "resolution": "4K",
        "path":       "C:/Library/Materials/Concrete041",
        "date":       "2025-03-14T10:23:00"
    },
    …
]

Get Local Asset Preview

GET /api/local-preview?type=materials&name=Concrete041

Response: image/jpeg  (returns the thumbnail directly)

Configuration & Settings

All persistent settings live in config.ini in the Lazybridge folder. The Settings UI writes to this file; you can also edit it with any text editor while Lazybridge is not running.


SectionKeyDescriptionDefault
[Paths]download_folderWhere downloaded assets are saved(user home)
library_folderRoot of the local asset library(user home)
temp_folderTemporary download cache%TEMP%\Lazybridge
[Cinema4D]render_engineActive render engine: octane, redshift, corona, arnoldredshift
portC4D listener port8080
scaleScale multiplier for imported models1.0
auto_connectConnect to C4D on startuptrue
[Blender]portBlender addon listener port8082
[Houdini]portHoudini server port8085
[Maya]portMaya plugin port8101
[Unreal]portUnreal Engine listener port8084
[Unity]portUnity editor listener port8083
[Substance]portSubstance Painter listener port9876
[UI]themeUI colour theme: dark or lightdark
background_blurEnable blurred background imagetrue
grid_sizeThumbnail grid columnsauto
[Downloads]max_concurrentParallel download threads3
auto_import_after_downloadImport to library after download finishestrue
[Textures]normal_flip_greenConvert DX normals to OGL on importfalse

Updating Lazybridge

1

Lazybridge checks for updates automatically at startup. A notification bar appears when a new version is available.

2

Click Update Now, or download the latest release manually from the Lazybridge page.

3

For a manual update: close Lazybridge, extract the new archive over the existing folder, then relaunch Lazybridge.exe. Your config.ini and local library are preserved.

After a major update, re-run the companion plugin installation in your 3D application to pick up any protocol changes.

Frequently Asked Questions

Which 3D applications are supported?

+

Cinema 4D (Octane, Redshift, Corona, Arnold), Blender (Cycles, EEVEE), Houdini (Redshift), Maya (Arnold), Unreal Engine 5, Unity (URP/HDRP/Built-in), and Substance Painter.

The "Send" button doesn't work — what should I check?

+

Make sure:

  • The companion plugin / script is running inside the target application.
  • The port in config.ini matches the port the plugin listens on.
  • Your firewall is not blocking localhost connections.
  • The correct render engine is selected in Lazybridge Settings.

How do I add assets from PolyHaven or AmbientCG?

+

Enable the respective plugin in Settings → Plugins. Then switch to that source in the top source selector. Use the search, filter, and resolution picker to download assets directly into your local library.

Can I use my own assets / Quixel Megascans?

+

Yes. Go to the Import page, drag your asset folder (or individual files) onto the drop zone. For Quixel/Fab assets, drop the unzipped folder — Lazybridge reads AssetInfo.json automatically and maps all texture slots.

Is Lazybridge free?

+

Yes, Lazybridge is completely free. Assets from Lazytextures are CC0 (public domain). Third-party plugin sources like PolyHaven are also CC0; AmbientCG assets are CC0 as well.

How do I create my own plugin?

+

Create a new folder under Plugins/, add plugin.py (extending PluginBase), plugin_info.json, and optionally filter_config.json. Implement fetch_assets(), download_asset(), and get_categories(). Restart Lazybridge or call POST /api/plugins/reload. See the Plugin Python API section for the full interface.

Where can I get help?

+

Contact Lorenz@lazytextures.com or visit lazytextures.net for support and updates.