Type a surface. twirl returns five PNGs: albedo, normal, roughness, metallic, and height. They tile. Drop them into Blender, Unreal, Unity, or Godot.
Five generations a day on the free plan. Public materials download with a commercial license. Standard is $16/mo, Pro is $25/mo. The model is Patina AI; you can run something like it yourself. twirl hosts the prompt, the maps, a public library, and plugins later.
The five maps
A PBR material is the maps your renderer uses so the surface holds up under any light.
| Map | Use it as |
|---|---|
| Albedo | Base color. Lighting baked out. sRGB. |
| Normal | Detail without extra geo. OpenGL in Blender; Unreal wants DirectX (green flipped). |
| Roughness | Black glossy, white matte. Unity usually wants this inverted as smoothness. |
| Metallic | 0 for wood/plastic/stone, 1 for metal. |
| Height | Displacement or bump. Not a color input. |
One credit is one generation at 1×. 2× costs two credits, 4× costs four.
Poly Haven first, if they have it
If the brick you need is already on Poly Haven or ambientCG, grab that. 8K, CC0, no account. twirl is for the surface that is not in those catalogs: oxidized copper, wet cobble, a subway tile nobody scanned.
Into Blender
Open the Shader Editor, select the Principled BSDF, and hit Ctrl+Shift+T (Node Wrangler). Point it at the folder. If the files are named Albedo, Normal, Roughness, and Metallic, it wires itself. Set albedo to sRGB and everything else to Non-Color. Height does not auto-wire; send it through a Displacement node with the material set to Displacement and Bump, and keep the scale small. If the lighting looks inside-out, invert green on the normal. That is DirectX vs OpenGL.
Generate at 1× until the prompt is right, then upscale.
Unreal wants ORM (occlusion / roughness / metallic in RGB) and DirectX normals. Unity URP/HDRP wants a Mask Map and smoothness, not roughness. Invert roughness for now; packers are coming.
Generate one. Five a day, no card.
