Apply realistic PBR textures from PolyHaven to any Blender object. Supports metals, wood, concrete, fabric, and more. Trigger when asked to texture an object, apply a material from PolyHaven, make something look like metal/wood/marble, or change object surface.
Scanned 9/22/2026
npx -y skills add MAX-786/claude-3d-harness --skill polyhaven-texture-apply --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Polyhaven Texture Apply?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/max-786-polyhaven-texture-apply)More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.
---
name: polyhaven-texture-apply
description: Apply realistic PBR textures from PolyHaven to any Blender object. Supports metals, wood, concrete, fabric, and more. Trigger when asked to texture an object, apply a material from PolyHaven, make something look like metal/wood/marble, or change object surface.
---
# PolyHaven Texture Apply
Downloads a full PBR texture set (diffuse, roughness, normal, displacement) from PolyHaven and applies it to a specific object in the Blender scene.
> Adapted for claude-3d-harness. The original ran a bundled Node script that opened Blender's add-on socket itself and
> sent it Python built from command-line text. The same steps now go through the MCP server, where each one is visible
> and asks for permission. See `docs/security-review.md`.
## Parameters
| Parameter | Description | Default |
|-----------|-------------|---------|
| `object` | Blender object name to apply the texture to | **required** |
| `texture` | PolyHaven texture asset ID | **required** |
| `resolution` | Texture resolution: 1k, 2k, 4k | `2k` |
| `scale` | UV mapping scale | `1.0` |
## Flow
### Step 1: Find a texture (when the user named a look, not an ID)
`search_polyhaven_assets(asset_type="textures", categories=<keyword>)` lists IDs with their categories.
### Step 2: Download the PBR set
`download_polyhaven_asset(asset_id=<texture>, asset_type="textures", resolution=<resolution>, file_format="jpg")`
returns the name of the material it created and the maps it found.
### Step 3: Apply it
`set_texture(object_name=<object>, texture_id=<texture>)`
If that fails, assign the material by hand. This replaces the material in the object's first slot, which is what was
asked for; the material that was there stays in the file.
```python
import bpy
OBJECT = "<object name>"
MATERIAL = "<material name the download returned>"
SCALE = 1.0
obj = bpy.data.objects.get(OBJECT)
mat = bpy.data.materials.get(MATERIAL)
if obj and mat:
if obj.data.materials:
obj.data.materials[0] = mat
else:
obj.data.materials.append(mat)
# Adjust UV scale
for node in mat.node_tree.nodes:
if node.type == 'MAPPING':
node.inputs['Scale'].default_value = (SCALE, SCALE, SCALE)
print(f"Applied {mat.name} to {obj.name}")
else:
print(f"Error: obj={'found' if obj else 'missing'}, mat={'found' if mat else 'missing'}")
```
## Popular Textures
- `brushed_metal` — Brushed aluminum/steel
- `carbon_fiber` — Carbon fiber weave
- `marble_01` — White marble
- `wood_cabinet_worn_long` — Aged wood
- `concrete_wall_003` — Raw concrete
- `leather_red_02` — Red leather
- `fabric_pattern_07` — Woven fabric
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!