Recipe: PBR textures from a photo
Goal: take one photo of a surface (brick, fabric, wood, metal) and generate a full PBR material set you can drop into a game engine or DCC tool.
Nodes you'll use: Image Input → the texture nodes (Albedo, Normal, Roughness, Ambient Occlusion, Cavity, Height).
In the Workflow Builder
- Add an Image Input node and point it at your surface photo.
- Add the texture nodes you want — each produces one map:
- Albedo — base color (lighting removed)
- Normal — surface direction detail
- Roughness — how matte/shiny
- Ambient Occlusion — contact shadows
- Cavity — fine crevice detail
- Height — displacement
- Connect Image Input → each texture node (fan the input out to all of them).
- Save, then Run.
Each node outputs its map as a new file; download them together (select all → Download, or zip with a Zip Folder node).
Several maps have a fast classical version and an ML version (e.g.
AlbedovsAlbedoML). The ML variants are higher quality on tricky materials and use a GPU worker; the classical ones are quick and CPU-friendly.
Over the API
BASE=https://dev-api.modtechlabs.com
# Get a Bearer token from your sk_ key (see /api-reference#authentication)
TOKEN=$(curl -s -X POST "$BASE/api-keys/token" -H "Content-Type: application/json" \
-d '{"api_key": "sk_your_key_here"}' | jq -r .access_token)
AUTH="Authorization: Bearer $TOKEN"
# Upload the surface photo
COG=$(curl -s -X POST "$BASE/cogs/upload-file" -H "$AUTH" \
-F "file=@./brick.jpg" | jq -r .id)
# Run your saved "PBR texture set" workflow version against it
curl -s -X POST "$BASE/workflows/workflow-versions/<your_version_id>/run" -H "$AUTH" \
-H "Content-Type: application/json" -d "{\"cog_ids\": [$COG]}"
Tips
- Shoot the surface flat and evenly lit — even lighting helps the albedo node separate color from shadow.
- Run a whole folder of surfaces at once with batch mode.
- Tune node values at runtime with
extra_variables— callGET /workflows/workflow-versions/{id}/variablesto see the exact keys your workflow accepts. See the API Reference.