ControlNet Preprocess NormalBae
Available with Zero Data RetentionControlNet Preprocess NormalBae predicts a surface normal map from an input image for ControlNet conditioning. It is well suited to workflows that need stronger preservation of 3D form, object volume, and orientation cues beyond what a flat edge map or line map can provide.

API Reference
INTEGRATE
Complete technical specification for integration
RequestResponse
Examples4
CODE
Ready-to-use code snippets for common workflows
surface-normal-estimation
Marionette Photograph Restoration Normal Map$0.0006~4s
import { createClient } from '@runware/sdk'
const client = await createClient({ apiKey: process.env.RUNWARE_API_KEY })
await client.connect()
const [result] = await client.run({
model: 'runware:controlnet-preprocess@normalbae',
inputs: {
image: 'https://assets.runware.ai/assets/inputs/a4186a18-094c-4bc9-9292-f4e51f0ae5c3.jpg'
}
})import asyncio
import os
from runware import Runware
async def main():
async with Runware(api_key=os.environ["RUNWARE_API_KEY"]) as client:
results = await client.run({
"model": "runware:controlnet-preprocess@normalbae",
"inputs": {
"image": "https://assets.runware.ai/assets/inputs/a4186a18-094c-4bc9-9292-f4e51f0ae5c3.jpg"
}
})
asyncio.run(main())curl https://api.runware.ai/v1 \
-H "Authorization: Bearer $RUNWARE_API_KEY" \
-H "Content-Type: application/json" \
-d '[
{
"taskType": "controlNetPreprocess",
"taskUUID": "9612eb71-7210-4051-a4bc-c5184bb87ae7",
"model": "runware:controlnet-preprocess@normalbae",
"inputs": {
"image": "https://assets.runware.ai/assets/inputs/a4186a18-094c-4bc9-9292-f4e51f0ae5c3.jpg"
}
}
]'runware run runware:controlnet-preprocess@normalbae \
inputs.image=https://assets.runware.ai/assets/inputs/a4186a18-094c-4bc9-9292-f4e51f0ae5c3.jpg{
"taskType": "controlNetPreprocess",
"taskUUID": "9612eb71-7210-4051-a4bc-c5184bb87ae7",
"model": "runware:controlnet-preprocess@normalbae",
"inputs": {
"image": "https://assets.runware.ai/assets/inputs/a4186a18-094c-4bc9-9292-f4e51f0ae5c3.jpg"
}
}Response
{
"taskType": "imageControlNetPreProcess",
"taskUUID": "9612eb71-7210-4051-a4bc-c5184bb87ae7",
"guideImageURL": "https://im.runware.ai/image/os/a02d21/ws/3/ii/e5a9a0ba-0a05-4175-8815-fc523f9d5d4d.jpg",
"cost": 0.0006,
"guideImageUUID": "e5a9a0ba-0a05-4175-8815-fc523f9d5d4d",
"inputImageUUID": "25b680f4-811d-4929-a04d-2b89706e01a8"
}surface-normal-estimation
Pipe Organ Panorama Normal Guide$0.0013~5s
import { createClient } from '@runware/sdk'
const client = await createClient({ apiKey: process.env.RUNWARE_API_KEY })
await client.connect()
const [result] = await client.run({
model: 'runware:controlnet-preprocess@normalbae',
inputs: {
image: 'https://assets.runware.ai/assets/inputs/3930e218-6dec-41af-a888-c88ffd741591.jpg'
}
})import asyncio
import os
from runware import Runware
async def main():
async with Runware(api_key=os.environ["RUNWARE_API_KEY"]) as client:
results = await client.run({
"model": "runware:controlnet-preprocess@normalbae",
"inputs": {
"image": "https://assets.runware.ai/assets/inputs/3930e218-6dec-41af-a888-c88ffd741591.jpg"
}
})
asyncio.run(main())curl https://api.runware.ai/v1 \
-H "Authorization: Bearer $RUNWARE_API_KEY" \
-H "Content-Type: application/json" \
-d '[
{
"taskType": "controlNetPreprocess",
"taskUUID": "cd465cac-3cd1-4f3d-9082-6e9f8431989d",
"model": "runware:controlnet-preprocess@normalbae",
"inputs": {
"image": "https://assets.runware.ai/assets/inputs/3930e218-6dec-41af-a888-c88ffd741591.jpg"
}
}
]'runware run runware:controlnet-preprocess@normalbae \
inputs.image=https://assets.runware.ai/assets/inputs/3930e218-6dec-41af-a888-c88ffd741591.jpg{
"taskType": "controlNetPreprocess",
"taskUUID": "cd465cac-3cd1-4f3d-9082-6e9f8431989d",
"model": "runware:controlnet-preprocess@normalbae",
"inputs": {
"image": "https://assets.runware.ai/assets/inputs/3930e218-6dec-41af-a888-c88ffd741591.jpg"
}
}Response
{
"taskType": "imageControlNetPreProcess",
"taskUUID": "cd465cac-3cd1-4f3d-9082-6e9f8431989d",
"guideImageURL": "https://im.runware.ai/image/os/a07dlim3/ws/3/ii/4aa773c1-8a0e-4db1-b3fd-69153b248b59.jpg",
"cost": 0.0013,
"guideImageUUID": "4aa773c1-8a0e-4db1-b3fd-69153b248b59",
"inputImageUUID": "56f906c6-eaec-4081-a46e-d15d33a68372"
}surface-normal-estimation
Underwater ROV Compositing Normal Pass$0.0013~6s
import { createClient } from '@runware/sdk'
const client = await createClient({ apiKey: process.env.RUNWARE_API_KEY })
await client.connect()
const [result] = await client.run({
model: 'runware:controlnet-preprocess@normalbae',
inputs: {
image: 'https://assets.runware.ai/assets/inputs/7fc1818f-e33e-4e7d-96e6-491cea764259.jpg'
}
})import asyncio
import os
from runware import Runware
async def main():
async with Runware(api_key=os.environ["RUNWARE_API_KEY"]) as client:
results = await client.run({
"model": "runware:controlnet-preprocess@normalbae",
"inputs": {
"image": "https://assets.runware.ai/assets/inputs/7fc1818f-e33e-4e7d-96e6-491cea764259.jpg"
}
})
asyncio.run(main())curl https://api.runware.ai/v1 \
-H "Authorization: Bearer $RUNWARE_API_KEY" \
-H "Content-Type: application/json" \
-d '[
{
"taskType": "controlNetPreprocess",
"taskUUID": "449cfb99-e759-40c3-a72d-49f774b75716",
"model": "runware:controlnet-preprocess@normalbae",
"inputs": {
"image": "https://assets.runware.ai/assets/inputs/7fc1818f-e33e-4e7d-96e6-491cea764259.jpg"
}
}
]'runware run runware:controlnet-preprocess@normalbae \
inputs.image=https://assets.runware.ai/assets/inputs/7fc1818f-e33e-4e7d-96e6-491cea764259.jpg{
"taskType": "controlNetPreprocess",
"taskUUID": "449cfb99-e759-40c3-a72d-49f774b75716",
"model": "runware:controlnet-preprocess@normalbae",
"inputs": {
"image": "https://assets.runware.ai/assets/inputs/7fc1818f-e33e-4e7d-96e6-491cea764259.jpg"
}
}Response
{
"taskType": "imageControlNetPreProcess",
"taskUUID": "449cfb99-e759-40c3-a72d-49f774b75716",
"guideImageURL": "https://im.runware.ai/image/os/a08dlim3/ws/3/ii/75fdeb61-8f34-48fd-95cb-b0b82d15528d.jpg",
"cost": 0.0013,
"guideImageUUID": "75fdeb61-8f34-48fd-95cb-b0b82d15528d",
"inputImageUUID": "13f979c9-7907-41ff-ae3e-c6a5394f105f"
}surface-normal-estimation
Aviation Archive Restoration Normal Pass$0.0013~7s
import { createClient } from '@runware/sdk'
const client = await createClient({ apiKey: process.env.RUNWARE_API_KEY })
await client.connect()
const [result] = await client.run({
model: 'runware:controlnet-preprocess@normalbae',
inputs: {
image: 'https://assets.runware.ai/assets/inputs/224ccdee-5dd2-4362-9bdc-08d850f70102.jpg'
}
})import asyncio
import os
from runware import Runware
async def main():
async with Runware(api_key=os.environ["RUNWARE_API_KEY"]) as client:
results = await client.run({
"model": "runware:controlnet-preprocess@normalbae",
"inputs": {
"image": "https://assets.runware.ai/assets/inputs/224ccdee-5dd2-4362-9bdc-08d850f70102.jpg"
}
})
asyncio.run(main())curl https://api.runware.ai/v1 \
-H "Authorization: Bearer $RUNWARE_API_KEY" \
-H "Content-Type: application/json" \
-d '[
{
"taskType": "controlNetPreprocess",
"taskUUID": "beb0726c-d33a-40d9-8dcd-f8bdb62d9d68",
"model": "runware:controlnet-preprocess@normalbae",
"inputs": {
"image": "https://assets.runware.ai/assets/inputs/224ccdee-5dd2-4362-9bdc-08d850f70102.jpg"
}
}
]'runware run runware:controlnet-preprocess@normalbae \
inputs.image=https://assets.runware.ai/assets/inputs/224ccdee-5dd2-4362-9bdc-08d850f70102.jpg{
"taskType": "controlNetPreprocess",
"taskUUID": "beb0726c-d33a-40d9-8dcd-f8bdb62d9d68",
"model": "runware:controlnet-preprocess@normalbae",
"inputs": {
"image": "https://assets.runware.ai/assets/inputs/224ccdee-5dd2-4362-9bdc-08d850f70102.jpg"
}
}Response
{
"taskType": "imageControlNetPreProcess",
"taskUUID": "beb0726c-d33a-40d9-8dcd-f8bdb62d9d68",
"guideImageURL": "https://im.runware.ai/image/os/a09dlim3/ws/3/ii/7084affa-cffa-49b2-aaee-1d8027e38741.jpg",
"cost": 0.0013,
"guideImageUUID": "7084affa-cffa-49b2-aaee-1d8027e38741",
"inputImageUUID": "5e35cf6b-e22c-40c1-971a-c1dffa671fc5"
}