Ideal House
सामग्री पर जाएं

टेक्सचर रिप्लेसर API दस्तावेज़ीकरण#

बेस URL: https://api.ideal.house
संस्करण: v1
अपडेट किया गया: 2026-03-25


📖 अवलोकन#

टेक्सचर रिप्लेसर API आपको एक शैली का उपयोग करके छवि में चयनित क्षेत्र के टेक्सचर या सामग्री को बदलने की अनुमति देता है रेफरेंस छवि का उपयोग करके बदलने की अनुमति देता है। आप एक स्रोत छवि, एक स्टाइल रेफरेंस छवि जो लक्ष्य टेक्सचर/मटेरियल को परिभाषित करती है, और एक मास्क छवि जो नई टेक्सचर लागू करने के लिए क्षेत्र निर्दिष्ट करती है, प्रदान करते हैं। AI नई टेक्सचर को मूल दृश्य में बेहतर ढंग से मिलाता है। वर्कफ्लो असिंक्रोनस है और इसमें दो चरण शामिल हैं:

  1. टास्क बनाएं — अपनी स्रोत छवि, स्टाइल छवि, मास्क, और पैरामीटर सबमिट करें, फिर एक taskId प्राप्त करें।
  2. परिणामों के लिए पोल करेंtaskId का उपयोग करके टास्क स्थिति का पूछताछ करें और परिणामी छवि प्राप्त करें।

🔐 प्रमाणीकरण#

सभी API अनुरोधों का प्रमाणीकरण API कुंजी से किया जाना चाहिए।

अनुरोध हेडर में अपना API की शामिल करें:

हेडरमान
APIKEYyour_api_key_here

⚠️ अपनी API कुंजी सुरक्षित रखें। इसे क्लाइंट-साइड कोड या सार्वजनिक रिपॉज़िटरी में उजागर न करें।


💰 क्रेडिट विलोपन#

[!WARNING] 🪙 3 क्रेडिट टास्क के सफलतापूर्वक बनाने पर कटौती किए जाते हैं। यदि टास्क अंततः विफल होता है, तो कटौती किए गए क्रेडिट आपके खाते में स्वतः रिफंड किए जाएंगे।
अपर्याप्त क्रेडिट त्रुटि कोड 9051 लौटाएंगे। 📄 क्रेडिट विलोपन संदर्भ देखें।

ऑपरेशनकटौती किए गए क्रेडिट
टेक्सचर रिप्लेसर कार्य3 क्रेडिट्स

🖼️ मास्क छवि प्रारूप#

मास्क छवि वह क्षेत्र परिभाषित करती है जहां टेक्सचर रिप्लेसमेंट लागू किया जाएगा।

मास्क नियम:

रंगअर्थ
कालानई टेक्सचर लागू करने का क्षेत्र (बदलने का क्षेत्र)
सफेदसंरक्षित क्षेत्र (बैकग्राउंड को अपरिवर्तित रखना)

⚠️ मास्क छवि को स्रोत छवि (imageUrl) के एक ही आयाम से मेल खाना चाहिए।

मास्क उदाहरण:

मास्क उदाहरण

मास्क में काला क्षेत्र यह परिभाषित करता है कि नई टेक्सचर कहाँ लागू होगी; सफेद क्षेत्र वह बैकग्राउंड है जिसे संरक्षित किया जाना है।


📌 API एंडपॉइंट#


1. टेक्सचर रिप्लेसर कार्य बनाएं#

एक नया AI टेक्सचर रिप्लेसमेंट टास्क बनाता है और पोलिंग के लिए एक अद्वितीय taskId लौटाता है।

एंडपॉइंट

सादा पाठ
POST /api/v1/textureReplacer/generate

अनुरोध हेडर

हेडरआवश्यकविवरण
APIKEY✅ हाँआपका API प्रमाणीकरण की
Content-Type✅ हाँapplication/json

अनुरोध बॉडी

फ़ील्डप्रकारआवश्यकविवरण
imageUrlstring✅ हाँस्रोत छवि का URL (टेक्सचर लागू करने के लिए कमरा/दृश्य)
styleImageUrlstring✅ हाँलक्ष्य टेक्सचर या मटेरियल को परिभाषित करने वाली स्टाइल रेफरेंस छवि का URL
maskUrlstring⚠️ या तो maskUrl या maskBase64मास्क छवि का URL। काले क्षेत्रों को नई टेक्सचर मिलेगी; सफेद क्षेत्रों को संरक्षित किया जाएगा
maskBase64string⚠️ या तो maskUrl या maskBase64Base64-एनकोडेड मास्क छवि (PNG प्रारूप की सिफारिश की जाती है)। तब उपयोग किया जाता है जब आप होस्टेड URL प्रदान नहीं कर सकते
promptstring❌ वैकल्पिकटेक्सचर जनरेशन को और मार्गदर्शन करने के लिए अतिरिक्त टेक्स्ट प्रॉम्प्ट

⚠️ maskUrl या maskBase64 में से कम से कम एक प्रदान किया जाना चाहिए। यदि दोनों दिए गए हैं, तो maskUrl प्राथमिकता प्राप्त करता है।

🖼️ छवि आवश्यकताएं: स्रोत, स्टाइल, और मास्क छवियों को JPG/JPEG, PNG, या WebP का उपयोग करना होगा। प्रत्येक छवि का आकार 20 MB से बड़ा नहीं होना चाहिए, और आयाम 128 × 128 px से लेकर 6,000 × 6,000 px (समावेशी) तक होना चाहिए। अधिकतम पिक्सल आयाम से अधिक छवियों को प्रोसेसिंग से पहले स्वतः अनुपात में छोटा कर दिया जाता है ताकि वे 6,000 × 6,000 px के भीतर फिट हों। छवि URLs को API सर्वर द्वारा सीधे एक्सेस किया जा सकना चाहिए। Base64 मास्क को समान डिकोडेड-छवि सीमाओं का पालन करना होगा और इसमें data-URL प्रीफिक्स शामिल नहीं होना चाहिए।


📥 अनुरोध उदाहरण#

cURL
bash
# Using maskUrl
curl -X POST "https://api.ideal.house/api/v1/textureReplacer/generate" \
  -H "APIKEY: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "imageUrl": "https://example.com/room.jpg",
    "styleImageUrl": "https://example.com/marble-texture.jpg",
    "maskUrl": "https://example.com/mask.png"
  }'

# Using maskBase64 with optional prompt
curl -X POST "https://api.ideal.house/api/v1/textureReplacer/generate" \
  -H "APIKEY: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "imageUrl": "https://example.com/room.jpg",
    "styleImageUrl": "https://example.com/wood-texture.jpg",
    "maskBase64": "iVBORw0KGgoAAAANSUhEUgAA...",
    "prompt": "natural oak wood grain texture"
  }'
Java (OkHttp)
java
import okhttp3.*;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Base64;

public class TextureReplacerApiExample {

    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();

        // Option 1: Use maskUrl
        String requestBody = """
                {
                    "imageUrl": "https://example.com/room.jpg",
                    "styleImageUrl": "https://example.com/marble-texture.jpg",
                    "maskUrl": "https://example.com/mask.png"
                }
                """;

        // Option 2: Use maskBase64 (encode local mask file)
        // byte[] maskBytes = Files.readAllBytes(Path.of("/path/to/mask.png"));
        // String maskBase64 = Base64.getEncoder().encodeToString(maskBytes);
        // String requestBody = """
        //     {
        //         "imageUrl": "https://example.com/room.jpg",
        //         "styleImageUrl": "https://example.com/marble-texture.jpg",
        //         "maskBase64": "%s",
        //         "prompt": "natural oak wood grain texture"
        //     }
        //     """.formatted(maskBase64);

        Request request = new Request.Builder()
                .url(BASE_URL + "/api/v1/textureReplacer/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
import base64

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

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

# Option 1: Use maskUrl
payload = {
    "imageUrl": "https://example.com/room.jpg",
    "styleImageUrl": "https://example.com/marble-texture.jpg",
    "maskUrl": "https://example.com/mask.png"
}

# Option 2: Use maskBase64 with optional prompt
# with open("/path/to/mask.png", "rb") as f:
#     mask_base64 = base64.b64encode(f.read()).decode("utf-8")
# payload = {
#     "imageUrl": "https://example.com/room.jpg",
#     "styleImageUrl": "https://example.com/wood-texture.jpg",
#     "maskBase64": mask_base64,
#     "prompt": "natural oak wood grain texture"
# }

response = requests.post(
    f"{BASE_URL}/api/v1/textureReplacer/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 fs = require('fs');

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

async function createTextureReplacerTask() {
  try {
    // Option 1: Use maskUrl
    const payload = {
      imageUrl: 'https://example.com/room.jpg',
      styleImageUrl: 'https://example.com/marble-texture.jpg',
      maskUrl: 'https://example.com/mask.png'
    };

    // Option 2: Use maskBase64 with optional prompt
    // const maskBuffer = fs.readFileSync('/path/to/mask.png');
    // const maskBase64 = maskBuffer.toString('base64');
    // const payload = {
    //   imageUrl: 'https://example.com/room.jpg',
    //   styleImageUrl: 'https://example.com/wood-texture.jpg',
    //   maskBase64: maskBase64,
    //   prompt: 'natural oak wood grain texture'
    // };

    const response = await axios.post(
      `${BASE_URL}/api/v1/textureReplacer/generate`,
      payload,
      {
        headers: {
          'APIKEY': API_KEY,
          'Content-Type': 'application/json'
        }
      }
    );

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

createTextureReplacerTask();

📤 प्रतिक्रिया#

सफलता प्रतिक्रिया

json
{
  "code": 0,
  "message": "success",
  "data": 1234567890123456789
}
फ़ील्डप्रकारविवरण
codeinteger0 सफलता दर्शाता है
messagestringप्रतिक्रिया संदेश
datalongपरिणामों के लिए पोलिंग का अद्वितीय टास्क आईडी

2. टास्क परिणाम प्राप्त करें#

पहले से बनाए गए टेक्सचर रिप्लेसर टास्क की वर्तमान स्थिति और आउटपुट प्राप्त करता है।

एंडपॉइंट

सादा पाठ
GET /api/v1/textureReplacer/result

अनुरोध हेडर

हेडरआवश्यकविवरण
APIKEY✅ हाँआपका API प्रमाणीकरण की

क्वेरी पैरामीटर

पैरामीटरप्रकारआवश्यकविवरण
taskIdlong✅ हाँटास्क बनाए एंडपॉइंट से लौटाया गया टास्क आईडी

📥 अनुरोध उदाहरण#

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

import java.io.IOException;

public class TextureReplacerResultExample {

    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/textureReplacer/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

# Poll until task is complete
while True:
    response = requests.get(
        f"{BASE_URL}/api/v1/textureReplacer/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)  # Poll every 3 seconds

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/textureReplacer/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;
    }

    // Wait 3 seconds before next poll
    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/room.jpg",
      "styleImageUrl": "https://example.com/marble-texture.jpg",
      "maskUrl": "https://example.com/mask.png",
      "prompt": "natural marble texture with grey veining"
    },
    "output": {
      "resultUrl": "https://cdn.ideal.house/output/texture_replacer_result.jpg",
      "width": 1024,
      "height": 1024
    }
  }
}

प्रतिक्रिया (टास्क प्रोसेसिंग / कतार में)

json
{
  "code": 0,
  "message": "success",
  "data": {
    "id": 1234567890123456789,
    "status": "Processing",
    "waitNumber": 1,
    "percentage": 50,
    "input": {
      "imageUrl": "https://example.com/room.jpg",
      "styleImageUrl": "https://example.com/marble-texture.jpg",
      "maskUrl": "https://example.com/mask.png"
    },
    "output": null
  }
}

प्रतिक्रिया (टास्क विफल)

json
{
  "code": 0,
  "message": "success",
  "data": {
    "id": 1234567890123456789,
    "status": "Failed",
    "waitNumber": 0,
    "percentage": 0,
    "input": {
      "imageUrl": "https://example.com/room.jpg",
      "styleImageUrl": "https://example.com/marble-texture.jpg",
      "maskUrl": "https://example.com/mask.png"
    },
    "output": null
  }
}

प्रतिक्रिया फ़ील्ड

फ़ील्डप्रकारविवरण
idlongटास्क अद्वितीय पहचानकर्ता
statusstringवर्तमान कार्य स्थिति (देखें कार्य स्थिति)
waitNumberintegerकतार में आगे टास्कों की संख्या (0 का अर्थ है वर्तमान में प्रोसेसिंग)
percentageintegerटास्क पूर्णता प्रतिशत (0–100)
inputobjectटास्क के मूल इनपुट पैरामीटर
input.imageUrlstringस्रोत छवि का URL
input.styleImageUrlstringस्टाइल रेफरेंस छवि का URL
input.maskUrlstringमास्क छवि का URL (यदि maskUrl के माध्यम से प्रदान किया गया हो)
input.promptstringअतिरिक्त टेक्स्ट प्रॉम्प्ट (यदि प्रदान किया गया हो)
outputobjectजनरेशन रिजल्ट (केवल तब उपलब्ध जब status Success हो)
output.resultUrlstringटेक्सचर-रिप्लेस्ड परिणामी छवि का URL
output.widthintegerपिक्सल में आउटपुट चौड़ाई
output.heightintegerपिक्सल में आउटपुट ऊंचाई

📊 टास्क स्थिति#

स्थितिविवरण
Unprocessedटास्क बनाया गया है लेकिन अभी शुरू नहीं हुआ है
Processingटास्क वर्तमान में प्रोसेस किया जा रहा है
Successटास्क सफलतापूर्वक पूर्ण हुआ — आउटपुट उपलब्ध है
Failedटास्क किसी त्रुटि के कारण विफल हुआ

हर 3-5 सेकंड में पोल करें। API टास्क सीमा देखें।


❌ त्रुटि प्रतिक्रियाएं#

सभी त्रुटि प्रतिक्रियाएं समान JSON संरचना साझा करती हैं:

json
{
  "code": 5002,
  "message": "Invalid API Key",
  "data": null
}

त्रुटि कोड संदर्भ#

कोडनामविवरणसुझाया गया कार्रवाई
1001FAILEDरिक्वेस्ट विफल (जनरिक एरर)विशिष्ट एरर विवरण के लिए message फ़ील्ड की जांच करें
1003INTERNAL_ERRORआंतरिक सर्वर एररएक छोटे विलंब के बाद पुनः प्रयास करें; यदि यह जारी रहे तो सपोर्ट से संपर्क करें
1011PARAM_ERRORरिक्वेस्ट पैरामीटर एरर — e.g., imageUrl, styleImageUrl, या मास्क अनुपस्थितसुनिश्चित करें कि सभी आवश्यक फ़ील्ड प्रदान की गई हों
5002API_KEY_INVALIDAPI Key गलत या अनुपस्थितसुनिश्चित करवें कि APIKEY हेडर मौजूद हई आ मान सही हई
9010SCAN_TEXT_ERRORटेक्स्ट प्रॉम्प्ट ने कंटेंट रिव्यू में विफलता दर्शाईसंवेदनशील या प्रतिबंधित कंटेंट हटाने के लिए प्रॉम्प्ट को संशोधित करें
9038PROHIBITED_CONTENTजनरेटेड आउटपुट छवि में प्रतिबंधित कंटेंट शामिल हैप्रॉम्प्ट/स्टाइल/इनपुट को समायोजित करें और पुनः प्रयास करें
9051COINS_NOT_ENOUGHअपर्याप्त सिक्के / क्रेडिटअपने खाते के क्रेडिट टॉप-अप करें और पुनः प्रयास करें

📄 सामान्य API त्रुटि कोडों की पूरी सूחה के लिए, त्रुटि कोड संदर्भ देखें।