live
MODEL IDrunware:controlnet-preprocess@normalbae

ControlNet Preprocess NormalBae

Available with Zero Data Retention

ControlNet 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.

ControlNet Preprocess NormalBae

surface-normal-estimation

Marionette Photograph Restoration Normal Map$0.0006~4s
Marionette Photograph Restoration Normal Map
Try in Playground
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
Pipe Organ Panorama Normal Guide
Try in Playground
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
Underwater ROV Compositing Normal Pass
Try in Playground
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
Aviation Archive Restoration Normal Pass
Try in Playground
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"
}