Ideal House
跳转到主要内容

Photo Enhancer API 文档#

© Ideal House AI — 版权所有。

基础 URL: https://api.ideal.house
版本: v1
更新日期: 2026-04-17


概述#

Photo Enhancer API 允许您通过选择 presetId、提供自定义 prompt 或两者结合,异步增强房地产照片。

当前请求模型:

  • presetId 为可选参数。
  • prompt 为可选参数。
  • presetIdprompt 不能同时为空。至少需要提供其中之一。
  • 使用 imageUrl 作为唯一的图片输入字段。
  • imageUrl 支持单图和多图格式。

工作流程:

  1. 调用生成端点并获取 taskId
  2. 使用该 taskId 轮询结果端点。
  3. 任务成功后,读取生成的图片 URL。

认证#

所有 API 请求必须在请求头中包含您的 API 密钥。

请求头是否必填说明
APIKEY您的 API 认证密钥
Content-TypePOST 请求的 application/json

积分#

每次成功创建任务扣除 10 积分。如果任务后续失败,积分将自动退还。

有关积分规则,请参阅 credits-deduction.md


端点#

1. 创建任务#

创建新的图片增强任务。

端点

http
POST /api/v1/photoEnhancer/generate

请求体

字段类型必填说明
presetIdstring可选的预设请求值。从预设参考中选择一个。
imageUrlstring | array<string>图片输入。支持单个 URL 字符串,或如 ["https://a.jpg", "https://b.jpg"] 的 URL 数组。
promptstring可选的自定义提示文本。
imageSizestring可选的输出尺寸。支持的值:5121K2K4K。对于 API 调用,如果省略,服务器默认为 4K

图片要求: 每张输入图片必须使用 JPG/JPEG、PNG 或 WebP 格式。每张图片大小不得超过 20 MB,尺寸为 128 × 128 px6,000 × 6,000 px(含边界)。超过最大像素尺寸的图片会自动按比例缩小以适合 6,000 × 6,000 px,然后再进行处理。图片 URLs 必须能被 API 服务器直接访问。

imageUrl 格式

单张图片:

json
{
  "imageUrl": "https://example.com/room.jpg"
}

多张图片:

json
{
  "imageUrl": [
    "https://example.com/room_1.jpg",
    "https://example.com/room_2.jpg"
  ]
}

行为说明

  • imageUrl 是该 API 的唯一请求图片字段。
  • presetId 可以省略。
  • prompt 可以省略。
  • presetIdprompt 不能同时为空。至少需要提供其中之一。
  • 如果 imageUrl 是普通 URL 字符串,则任务使用一张图片。
  • 如果 imageUrl 是数组,服务器会将其解析为内部图片列表。
  • hdr-merge-hdr-merge 是为多图设计的预设。
  • 多图通常仅在 hdr-merge-hdr-merge 下能产生最佳效果。
  • 其他 presetId 值并非为多图生成设计。如果使用它们提交多张图片,生成的结果可能不佳。建议使用单图输入。

请求示例#

cURL
bash
# Single image example
curl -X POST "https://api.ideal.house/api/v1/photoEnhancer/generate" \
  -H "APIKEY: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "imageUrl": "https://example.com/exterior.jpg",
    "presetId": "virtual-twilight-warm-sunset-twilight",
    "imageSize": "4K"
  }'

# HDR Merge example - multi-image input
curl -X POST "https://api.ideal.house/api/v1/photoEnhancer/generate" \
  -H "APIKEY: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "imageUrl": [
      "https://example.com/interior_under.jpg",
      "https://example.com/interior_mid.jpg",
      "https://example.com/interior_over.jpg"
    ],
    "presetId": "hdr-merge-hdr-merge",
    "imageSize": "4K"
  }'

# Prompt-only example
curl -X POST "https://api.ideal.house/api/v1/photoEnhancer/generate" \
  -H "APIKEY: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "imageUrl": "https://example.com/interior.jpg",
    "prompt": "Brighten the room, keep the lighting natural, and make the image listing-ready.",
    "imageSize": "4K"
  }'
Java (OkHttp)
java
import okhttp3.*;
import java.io.IOException;

public class PhotoEnhancerApiExample {

    private static final String BASE_URL = "https://api.ideal.house";
    private static final String API_KEY  = "your_api_key_here";

    public static void main(String[] args) throws IOException {
        OkHttpClient client = new OkHttpClient();

        // Single image example
        String requestBody = """
            {
                "imageUrl": "https://example.com/exterior.jpg",
                "presetId": "virtual-twilight-warm-sunset-twilight",
                "imageSize": "4K"
            }
            """;

        // HDR Merge example - multi-image input
        // String requestBody = """
        //     {
        //         "imageUrl": [
        //             "https://example.com/interior_under.jpg",
        //             "https://example.com/interior_mid.jpg",
        //             "https://example.com/interior_over.jpg"
        //         ],
        //         "presetId": "hdr-merge-hdr-merge",
        //         "imageSize": "4K"
        //     }
        //     """;

        // Prompt-only example
        // String requestBody = """
        //     {
        //         "imageUrl": "https://example.com/interior.jpg",
        //         "prompt": "Brighten the room, keep the lighting natural, and make the image listing-ready.",
        //         "imageSize": "4K"
        //     }
        //     """;

        Request request = new Request.Builder()
            .url(BASE_URL + "/api/v1/photoEnhancer/generate")
            .addHeader("APIKEY", API_KEY)
            .addHeader("Content-Type", "application/json")
            .post(RequestBody.create(requestBody, MediaType.parse("application/json")))
            .build();

        try (Response response = client.newCall(request).execute()) {
            System.out.println("Response: " + response.body().string());
        }
    }
}
Python (requests)
python
import requests
BASE_URL = "https://api.ideal.house"
API_KEY  = "your_api_key_here"

headers = {
    "APIKEY": API_KEY,
    "Content-Type": "application/json"
}

# Single image example
payload = {
    "imageUrl": "https://example.com/interior.jpg",
    "presetId": "image-optimization-full-correction-suite",
    "prompt": "Keep the result natural and listing-ready."
}

# HDR Merge example - multi-image input
# payload = {
#     "imageUrl": [
#         "https://example.com/interior_under.jpg",
#         "https://example.com/interior_mid.jpg",
#         "https://example.com/interior_over.jpg"
#     ],
#     "presetId": "hdr-merge-hdr-merge",
#     "imageSize": "4K"
# }

# Prompt-only example
# payload = {
#     "imageUrl": "https://example.com/interior.jpg",
#     "prompt": "Brighten the room, keep the lighting natural, and make the image listing-ready.",
#     "imageSize": "4K"
# }

response = requests.post(
    f"{BASE_URL}/api/v1/photoEnhancer/generate",
    headers=headers,
    json=payload
)

data = response.json()
task_id = data.get("data")
print(f"Task ID: {task_id}")
Node.js (axios)
javascript
const axios = require('axios');

const BASE_URL = 'https://api.ideal.house';
const API_KEY  = 'your_api_key_here';

async function createPhotoEnhancerTask() {
  try {
    const response = await axios.post(
      `${BASE_URL}/api/v1/photoEnhancer/generate`,
      {
        imageUrl: 'https://example.com/interior.jpg',
        presetId: 'image-quality-correction-ai-photo-sharpening',
        imageSize: '4K'

        // HDR Merge example - multi-image input:
        // imageUrl: [
        //   'https://example.com/interior_under.jpg',
        //   'https://example.com/interior_mid.jpg',
        //   'https://example.com/interior_over.jpg'
        // ],
        // presetId: 'hdr-merge-hdr-merge',
        // imageSize: '4K'

        // Prompt-only example:
        // imageUrl: 'https://example.com/interior.jpg',
        // prompt: 'Brighten the room, keep the lighting natural, and make the image listing-ready.',
        // imageSize: '4K'
      },
      {
        headers: {
          'APIKEY': API_KEY,
          'Content-Type': 'application/json'
        }
      }
    );

    console.log('Task ID:', response.data.data);
  } catch (error) {
    console.error('Error:', error.response?.data || error.message);
  }
}

createPhotoEnhancerTask();

成功响应

json
{
  "code": 0,
  "message": "success",
  "data": 1234567890123456789
}
字段类型说明
codeinteger0 表示成功
messagestring响应消息
datalong生成的任务 ID

2. 获取任务结果#

获取当前任务状态和输出。

端点

http
GET /api/v1/photoEnhancer/result

查询参数

参数类型必填说明
taskIdlong由生成端点返回的任务 ID

请求示例#

cURL
bash
curl -X GET "https://api.ideal.house/api/v1/photoEnhancer/result?taskId=1234567890123456789" \
  -H "APIKEY: your_api_key_here"
Java (OkHttp)
java
import okhttp3.*;
import java.io.IOException;

public class PhotoEnhancerResultExample {

    private static final String BASE_URL = "https://api.ideal.house";
    private static final String API_KEY  = "your_api_key_here";

    public static void main(String[] args) throws IOException {
        OkHttpClient client = new OkHttpClient();
        long taskId = 1234567890123456789L;

        Request request = new Request.Builder()
            .url(BASE_URL + "/api/v1/photoEnhancer/result?taskId=" + taskId)
            .addHeader("APIKEY", API_KEY)
            .get()
            .build();

        try (Response response = client.newCall(request).execute()) {
            System.out.println("Response: " + response.body().string());
        }
    }
}
Python (requests)
python
import requests
import time

BASE_URL = "https://api.ideal.house"
API_KEY  = "your_api_key_here"

headers = {
    "APIKEY": API_KEY
}

task_id = 1234567890123456789

while True:
    response = requests.get(
        f"{BASE_URL}/api/v1/photoEnhancer/result",
        headers=headers,
        params={"taskId": task_id}
    )

    data = response.json()
    result = data.get("data", {})
    status = result.get("status")

    print(f"Status: {status}, Progress: {result.get('percentage')}%, Queue: {result.get('waitNumber')}")

    if status in ("Success", "Failed"):
        break

    time.sleep(3)

if status == "Success":
    print("Result URL:", result["output"]["resultUrl"])
else:
    print("Task failed")
Node.js (axios)
javascript
const axios = require('axios');

const BASE_URL = 'https://api.ideal.house';
const API_KEY  = 'your_api_key_here';

async function pollResult(taskId) {
  const headers = { 'APIKEY': API_KEY };

  while (true) {
    const response = await axios.get(
      `${BASE_URL}/api/v1/photoEnhancer/result`,
      {
        headers,
        params: { taskId }
      }
    );

    const result = response.data.data;
    const { status, percentage, waitNumber } = result;

    console.log(`Status: ${status} | Progress: ${percentage}% | Queue: ${waitNumber}`);

    if (['Success', 'Failed'].includes(status)) {
      if (status === 'Success') {
        console.log('Result URL:', result.output.resultUrl);
        console.log('Size:', result.output.width, 'x', result.output.height);
      } else {
        console.log('Task failed');
      }
      break;
    }

    await new Promise(resolve => setTimeout(resolve, 3000));
  }
}

pollResult(1234567890123456789n);

响应示例

json
{
  "code": 0,
  "message": "success",
  "data": {
    "id": 1234567890123456789,
    "status": "Success",
    "waitNumber": 0,
    "percentage": 100,
    "input": {
      "imageUrl": [
        "https://example.com/interior_under.jpg",
        "https://example.com/interior_mid.jpg",
        "https://example.com/interior_over.jpg"
      ],
      "imageUrls": [
        "https://example.com/interior_under.jpg",
        "https://example.com/interior_mid.jpg",
        "https://example.com/interior_over.jpg"
      ],
      "prompt": "Keep the result natural and listing-ready.",
      "presetId": "hdr-merge-hdr-merge",
      "imageSize": "4K",
      "isApiCall": true,
      "modelType": "Pro",
      "model": "NanoBanana"
    },
    "output": {
      "resultUrl": "https://cdn.ideal.house/output/photo_enhancer_result.jpg",
      "width": 3840,
      "height": 2880
    }
  }
}

响应字段

字段类型说明
idlong任务唯一标识符
statusstring当前任务状态
waitNumberinteger队列中排在当前任务前面的任务数量
percentageinteger任务进度,从 0100
inputobject与任务一起存储的原始请求数据
input.imageUrlstring | array<string>客户端发送的原始请求值
input.imageUrlsarray<string>服务器标准化的内部图片列表
input.promptstring可选的自定义提示文本
input.presetIdstring | null可选的预设请求值
input.imageSizestring请求的图片尺寸。支持的值:5121K2K4K
outputobject | null任务成功时的输出对象
output.resultUrlstring最终图片 URL
output.widthinteger输出宽度(像素)
output.heightinteger输出高度(像素)

任务状态#

状态说明
Unprocessed任务已创建但尚未开始
Processing任务正在运行中
Success任务成功完成
Failed任务失败

3-5 秒 轮询一次。参见 API 任务限制


预设参考#

摘要:

  • 公共分类:11
  • 来自配置的公共预设:136
  • 额外 API 预设:1
  • 总计记录的请求值:137
  • 请求字段:presetId

额外 API 预设#

预设名称(英文)请求值(presetId备注
HDR Mergehdr-merge-hdr-merge推荐用于多图输入,如包围曝光合并

Image Optimization (image-optimization)#

预设名称(英文)请求值(presetId
Full Correction Suiteimage-optimization-full-correction-suite
Real Estate Photo Editingimage-optimization-real-estate-photo-editing
MLS Photo Enhancementimage-optimization-mls-photo-enhancement
Single Exposure Editingimage-optimization-single-exposure-editing
Social Media Photo Optimizationimage-optimization-social-media-photo-optimization
Glare and Reflection Reductionimage-optimization-glare-and-reflection-reduction
Exposure Balancingimage-optimization-exposure-balancing

Image Quality & Correction (image-quality-correction)#

预设名称(英文)请求值(presetId
360 VR Enhanced Tourimage-quality-correction-360-vr-enhanced-tour
AI Photo Sharpeningimage-quality-correction-ai-photo-sharpening
Real Estate Photo Editingimage-quality-correction-real-estate-photo-editing
Compression Artifact Fiximage-quality-correction-compression-artifact-fix
Lens Distortion Correctionimage-quality-correction-lens-distortion-correction
Image Upscalingimage-quality-correction-image-upscaling
Noise Reductionimage-quality-correction-noise-reduction
Perspective Correctionimage-quality-correction-perspective-correction
Auto Crop & Straightenimage-quality-correction-auto-crop-straighten
Chromatic Aberration Fiximage-quality-correction-chromatic-aberration-fix
Vignette Removalimage-quality-correction-vignette-removal
MLS Photo Resizeimage-quality-correction-mls-photo-resize

Exterior Enhancement (exterior-enhancement)#

预设名称(英文)请求值(presetId
Drone & Aerialexterior-enhancement-drone-aerial
Drivewayexterior-enhancement-driveway
Curb Appealexterior-enhancement-curb-appeal
Exterior Colorexterior-enhancement-exterior-color
Exterior Photoexterior-enhancement-exterior-photo
Lawn & Yardexterior-enhancement-lawn-yard
Poolexterior-enhancement-pool
Fence & Gateexterior-enhancement-fence-gate
Landscapingexterior-enhancement-landscaping
Roofexterior-enhancement-roof

Interior Enhancement (interior-enhancement)#

预设名称(英文)请求值(presetId
Window Pullinterior-enhancement-window-pull
Occupied to Vacantinterior-enhancement-occupied-to-vacant
Enhance Hardwood Floors Photointerior-enhancement-enhance-hardwood-floors-photo
Interior Photointerior-enhancement-interior-photo
Flash Ambient Blending Real Estateinterior-enhancement-flash-ambient-blending-real-estate
Ceiling Light & Hot Spot Fixinterior-enhancement-ceiling-light-hot-spot-fix

Lighting, Color & Exposure (lighting-color-exposure)#

预设名称(英文)请求值(presetId
Balance Highlight Shadow Real Estatelighting-color-exposure-balance-highlight-shadow-real-estate
Brighten Dark Interior Photolighting-color-exposure-brighten-dark-interior-photo
Brighten Dark Real Estate Photolighting-color-exposure-brighten-dark-real-estate-photo
Brightness Enhancerlighting-color-exposure-brightness-enhancer
Cozy Warm Interior Editinglighting-color-exposure-cozy-warm-interior-editing
Enhance Brightness Of Photolighting-color-exposure-enhance-brightness-of-photo
Enhance Natural Light Interiorlighting-color-exposure-enhance-natural-light-interior
Exposure Balancinglighting-color-exposure-exposure-balancing
Mixed Lighting Fixlighting-color-exposure-mixed-lighting-fix
Flat Photo Contrast Fixlighting-color-exposure-flat-photo-contrast-fix
Fluorescent Light Color Fixlighting-color-exposure-fluorescent-light-color-fix
How To Brighten Dark Photoslighting-color-exposure-how-to-brighten-dark-photos
Contrast Enhancementlighting-color-exposure-contrast-enhancement
Increase Brightness Listing Photolighting-color-exposure-increase-brightness-listing-photo
Interior Exposure Balancinglighting-color-exposure-interior-exposure-balancing
Lift Dark Shadows Real Estatelighting-color-exposure-lift-dark-shadows-real-estate
Overexposed Window Fixlighting-color-exposure-overexposed-window-fix
Color Correctionlighting-color-exposure-color-correction
Highlight Recoverylighting-color-exposure-highlight-recovery
Shadow Recoverylighting-color-exposure-shadow-recovery
Reduce Highlights In My Image To Balance Exposurelighting-color-exposure-reduce-highlights-in-my-image-to-balance-exposure
Color Cast Removallighting-color-exposure-color-cast-removal
Tungsten Daylight Mix Correctionlighting-color-exposure-tungsten-daylight-mix-correction
Warm Tone Enhancementlighting-color-exposure-warm-tone-enhancement
Cool Tone Enhancementlighting-color-exposure-cool-tone-enhancement
White Balance Fix Interior Photolighting-color-exposure-white-balance-fix-interior-photo
Turn On Lightslighting-color-exposure-turn-on-lights
Vibrance & Saturation Boostlighting-color-exposure-vibrance-saturation-boost
Natural Light Enhancementlighting-color-exposure-natural-light-enhancement

Sky Replacement (sky-replacement)#

预设名称(英文)请求值(presetId
Blue Sky / Clear Skysky-replacement-blue-sky-clear-sky
Sunrise Skysky-replacement-sunrise-sky
Cloudy Skysky-replacement-cloudy-sky
Partly Cloudysky-replacement-partly-cloudy
Dramatic Cloudssky-replacement-dramatic-clouds
Sunset Skysky-replacement-sunset-sky
Soft Sunsetsky-replacement-soft-sunset
Dramatic Sunsetsky-replacement-dramatic-sunset
Luxury Sunset Tonessky-replacement-luxury-sunset-tones
Fix Gray Sky Real Estatesky-replacement-fix-gray-sky-real-estate
Golden Hour Skysky-replacement-golden-hour-sky
Night Sky / Starry Skysky-replacement-night-sky-starry-sky
Sky Replacementsky-replacement-sky-replacement

Virtual Twilight (virtual-twilight)#

预设名称(英文)请求值(presetId
Bright Marketing Twilightvirtual-twilight-bright-marketing-twilight
Day To Dusk Photo Conversionvirtual-twilight-day-to-dusk-photo-conversion
Deep Blue Twilightvirtual-twilight-deep-blue-twilight
Light Subtle Twilightvirtual-twilight-light-subtle-twilight
Luxury Twilightvirtual-twilight-luxury-twilight
Midnight Blue Twilightvirtual-twilight-midnight-blue-twilight
Warm Sunset Twilightvirtual-twilight-warm-sunset-twilight

Weather & Seasonal Editing (weather-seasonal-editing)#

预设名称(英文)请求值(presetId
Golden Hourweather-seasonal-editing-golden-hour
Blue Hourweather-seasonal-editing-blue-hour
Haze & Fog Removalweather-seasonal-editing-haze-fog-removal
Harsh Sunlight & Shadow Fixweather-seasonal-editing-harsh-sunlight-shadow-fix
Overcast To Sunnyweather-seasonal-editing-overcast-to-sunny
Rain & Wet Weather Fixweather-seasonal-editing-rain-wet-weather-fix
Spring Enhancementweather-seasonal-editing-spring-enhancement
Summer Enhancementweather-seasonal-editing-summer-enhancement
Night to Dayweather-seasonal-editing-night-to-day
Fall Foliageweather-seasonal-editing-fall-foliage
Snow / Winter Conditionsweather-seasonal-editing-snow-winter-conditions
Full Season Change / Season Swapweather-seasonal-editing-full-season-change-season-swap
Snow Removalweather-seasonal-editing-snow-removal

Holiday Decorations (holiday-decorations)#

预设名称(英文)请求值(presetId
Christmas Exteriorholiday-decorations-christmas-exterior
Christmas Interiorholiday-decorations-christmas-interior
Easter Exteriorholiday-decorations-easter-exterior
Easter Interiorholiday-decorations-easter-interior
Halloween Exteriorholiday-decorations-halloween-exterior
Halloween Interiorholiday-decorations-halloween-interior
New Year Exteriorholiday-decorations-new-year-exterior
New Year Interiorholiday-decorations-new-year-interior
Thanksgiving Dining Roomholiday-decorations-thanksgiving-dining-room
Thanksgiving Exteriorholiday-decorations-thanksgiving-exterior
Thanksgiving Interiorholiday-decorations-thanksgiving-interior
Fourth of July / Independence Dayholiday-decorations-fourth-of-july-independence-day
Hanukkah Interiorholiday-decorations-hanukkah-interior
Spring / Ramadan Decorationsholiday-decorations-spring-ramadan-decorations
Valentine's Day Bedroomholiday-decorations-valentine-s-day-bedroom
Valentine's Day Exteriorholiday-decorations-valentine-s-day-exterior
Valentine's Day Interiorholiday-decorations-valentine-s-day-interior

Fire in Fireplace (fire-in-fireplace)#

预设名称(英文)请求值(presetId
Add Fire To Fireplacefire-in-fireplace-add-fire-to-fireplace
Bright Marketing Firefire-in-fireplace-bright-marketing-fire
Modern Clean Firefire-in-fireplace-modern-clean-fire
Subtle Natural Firefire-in-fireplace-subtle-natural-fire
Traditional Cozy Firefire-in-fireplace-traditional-cozy-fire
Vibrant Showcase Firefire-in-fireplace-vibrant-showcase-fire

Object & Element Specific (object-element-specific)#

预设名称(英文)请求值(presetId
Crack & Wall Repairobject-element-specific-crack-wall-repair
Floor Reflection Real Estateobject-element-specific-floor-reflection-real-estate
People & Pet Removalobject-element-specific-people-pet-removal
Trash Can Removalobject-element-specific-trash-can-removal
Remove Carsobject-element-specific-remove-cars
Clutter Removalobject-element-specific-clutter-removal
Date Stamp Removalobject-element-specific-date-stamp-removal
Sign Removalobject-element-specific-sign-removal
Glare Removalobject-element-specific-glare-removal
Mirror Reflection Fixobject-element-specific-mirror-reflection-fix
Remove Power Linesobject-element-specific-remove-power-lines
Stain Removalobject-element-specific-stain-removal
Watermark Removalobject-element-specific-watermark-removal
Window Reflection Removalobject-element-specific-window-reflection-removal
TV Screen Fixobject-element-specific-tv-screen-fix
Wire & Cable Removalobject-element-specific-wire-cable-removal

错误响应#

所有错误使用以下结构:

json
{
  "code": 5002,
  "message": "Invalid API Key",
  "data": null
}
代码名称说明
1001FAILED通用请求失败
1003INTERNAL_ERROR内部服务器错误
1011PARAM_ERROR缺少或无效的请求参数
5002API_KEY_INVALID无效或缺失的 API 密钥
9010SCAN_TEXT_ERROR提示文本审核失败
9038PROHIBITED_CONTENT生成的图片内容被拒绝
9051COINS_NOT_ENOUGH积分不足

如需完整的常见错误列表,请参阅 错误码参考