टेक्सचर रिप्लेसर API दस्तावेज़ीकरण#
बेस URL:
https://api.ideal.house
संस्करण: v1
अपडेट किया गया: 2026-03-25
📖 अवलोकन#
टेक्सचर रिप्लेसर API आपको एक शैली का उपयोग करके छवि में चयनित क्षेत्र के टेक्सचर या सामग्री को बदलने की अनुमति देता है रेफरेंस छवि का उपयोग करके बदलने की अनुमति देता है। आप एक स्रोत छवि, एक स्टाइल रेफरेंस छवि जो लक्ष्य टेक्सचर/मटेरियल को परिभाषित करती है, और एक मास्क छवि जो नई टेक्सचर लागू करने के लिए क्षेत्र निर्दिष्ट करती है, प्रदान करते हैं। AI नई टेक्सचर को मूल दृश्य में बेहतर ढंग से मिलाता है। वर्कफ्लो असिंक्रोनस है और इसमें दो चरण शामिल हैं:
- टास्क बनाएं — अपनी स्रोत छवि, स्टाइल छवि, मास्क, और पैरामीटर सबमिट करें, फिर एक
taskIdप्राप्त करें। - परिणामों के लिए पोल करें —
taskIdका उपयोग करके टास्क स्थिति का पूछताछ करें और परिणामी छवि प्राप्त करें।
🔐 प्रमाणीकरण#
सभी API अनुरोधों का प्रमाणीकरण API कुंजी से किया जाना चाहिए।
अनुरोध हेडर में अपना API की शामिल करें:
| हेडर | मान |
|---|---|
APIKEY | your_api_key_here |
⚠️ अपनी API कुंजी सुरक्षित रखें। इसे क्लाइंट-साइड कोड या सार्वजनिक रिपॉज़िटरी में उजागर न करें।
💰 क्रेडिट विलोपन#
[!WARNING] 🪙 3 क्रेडिट टास्क के सफलतापूर्वक बनाने पर कटौती किए जाते हैं। यदि टास्क अंततः विफल होता है, तो कटौती किए गए क्रेडिट आपके खाते में स्वतः रिफंड किए जाएंगे।
अपर्याप्त क्रेडिट त्रुटि कोड9051लौटाएंगे। 📄 क्रेडिट विलोपन संदर्भ देखें।
| ऑपरेशन | कटौती किए गए क्रेडिट |
|---|---|
| टेक्सचर रिप्लेसर कार्य | 3 क्रेडिट्स |
🖼️ मास्क छवि प्रारूप#
मास्क छवि वह क्षेत्र परिभाषित करती है जहां टेक्सचर रिप्लेसमेंट लागू किया जाएगा।
मास्क नियम:
| रंग | अर्थ |
|---|---|
| ⬛ काला | नई टेक्सचर लागू करने का क्षेत्र (बदलने का क्षेत्र) |
| ⬜ सफेद | संरक्षित क्षेत्र (बैकग्राउंड को अपरिवर्तित रखना) |
⚠️ मास्क छवि को स्रोत छवि (
imageUrl) के एक ही आयाम से मेल खाना चाहिए।
मास्क उदाहरण:
मास्क में काला क्षेत्र यह परिभाषित करता है कि नई टेक्सचर कहाँ लागू होगी; सफेद क्षेत्र वह बैकग्राउंड है जिसे संरक्षित किया जाना है।
📌 API एंडपॉइंट#
1. टेक्सचर रिप्लेसर कार्य बनाएं#
एक नया AI टेक्सचर रिप्लेसमेंट टास्क बनाता है और पोलिंग के लिए एक अद्वितीय taskId लौटाता है।
एंडपॉइंट
POST /api/v1/textureReplacer/generate
अनुरोध हेडर
| हेडर | आवश्यक | विवरण |
|---|---|---|
APIKEY | ✅ हाँ | आपका API प्रमाणीकरण की |
Content-Type | ✅ हाँ | application/json |
अनुरोध बॉडी
| फ़ील्ड | प्रकार | आवश्यक | विवरण |
|---|---|---|---|
imageUrl | string | ✅ हाँ | स्रोत छवि का URL (टेक्सचर लागू करने के लिए कमरा/दृश्य) |
styleImageUrl | string | ✅ हाँ | लक्ष्य टेक्सचर या मटेरियल को परिभाषित करने वाली स्टाइल रेफरेंस छवि का URL |
maskUrl | string | ⚠️ या तो maskUrl या maskBase64 | मास्क छवि का URL। काले क्षेत्रों को नई टेक्सचर मिलेगी; सफेद क्षेत्रों को संरक्षित किया जाएगा |
maskBase64 | string | ⚠️ या तो maskUrl या maskBase64 | Base64-एनकोडेड मास्क छवि (PNG प्रारूप की सिफारिश की जाती है)। तब उपयोग किया जाता है जब आप होस्टेड URL प्रदान नहीं कर सकते |
prompt | string | ❌ वैकल्पिक | टेक्सचर जनरेशन को और मार्गदर्शन करने के लिए अतिरिक्त टेक्स्ट प्रॉम्प्ट |
⚠️
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
# 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)
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)
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)
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();
📤 प्रतिक्रिया#
सफलता प्रतिक्रिया
{
"code": 0,
"message": "success",
"data": 1234567890123456789
}
| फ़ील्ड | प्रकार | विवरण |
|---|---|---|
code | integer | 0 सफलता दर्शाता है |
message | string | प्रतिक्रिया संदेश |
data | long | परिणामों के लिए पोलिंग का अद्वितीय टास्क आईडी |
2. टास्क परिणाम प्राप्त करें#
पहले से बनाए गए टेक्सचर रिप्लेसर टास्क की वर्तमान स्थिति और आउटपुट प्राप्त करता है।
एंडपॉइंट
GET /api/v1/textureReplacer/result
अनुरोध हेडर
| हेडर | आवश्यक | विवरण |
|---|---|---|
APIKEY | ✅ हाँ | आपका API प्रमाणीकरण की |
क्वेरी पैरामीटर
| पैरामीटर | प्रकार | आवश्यक | विवरण |
|---|---|---|---|
taskId | long | ✅ हाँ | टास्क बनाए एंडपॉइंट से लौटाया गया टास्क आईडी |
📥 अनुरोध उदाहरण#
cURL
curl -X GET "https://api.ideal.house/api/v1/textureReplacer/result?taskId=1234567890123456789" \
-H "APIKEY: your_api_key_here"
Java (OkHttp)
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)
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)
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);
📤 प्रतिक्रिया#
सफलता प्रतिक्रिया (टास्क पूर्ण)
{
"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
}
}
}
प्रतिक्रिया (टास्क प्रोसेसिंग / कतार में)
{
"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
}
}
प्रतिक्रिया (टास्क विफल)
{
"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
}
}
प्रतिक्रिया फ़ील्ड
| फ़ील्ड | प्रकार | विवरण |
|---|---|---|
id | long | टास्क अद्वितीय पहचानकर्ता |
status | string | वर्तमान कार्य स्थिति (देखें कार्य स्थिति) |
waitNumber | integer | कतार में आगे टास्कों की संख्या (0 का अर्थ है वर्तमान में प्रोसेसिंग) |
percentage | integer | टास्क पूर्णता प्रतिशत (0–100) |
input | object | टास्क के मूल इनपुट पैरामीटर |
input.imageUrl | string | स्रोत छवि का URL |
input.styleImageUrl | string | स्टाइल रेफरेंस छवि का URL |
input.maskUrl | string | मास्क छवि का URL (यदि maskUrl के माध्यम से प्रदान किया गया हो) |
input.prompt | string | अतिरिक्त टेक्स्ट प्रॉम्प्ट (यदि प्रदान किया गया हो) |
output | object | जनरेशन रिजल्ट (केवल तब उपलब्ध जब status Success हो) |
output.resultUrl | string | टेक्सचर-रिप्लेस्ड परिणामी छवि का URL |
output.width | integer | पिक्सल में आउटपुट चौड़ाई |
output.height | integer | पिक्सल में आउटपुट ऊंचाई |
📊 टास्क स्थिति#
| स्थिति | विवरण |
|---|---|
Unprocessed | टास्क बनाया गया है लेकिन अभी शुरू नहीं हुआ है |
Processing | टास्क वर्तमान में प्रोसेस किया जा रहा है |
Success | टास्क सफलतापूर्वक पूर्ण हुआ — आउटपुट उपलब्ध है |
Failed | टास्क किसी त्रुटि के कारण विफल हुआ |
हर 3-5 सेकंड में पोल करें। API टास्क सीमा देखें।
❌ त्रुटि प्रतिक्रियाएं#
सभी त्रुटि प्रतिक्रियाएं समान JSON संरचना साझा करती हैं:
{
"code": 5002,
"message": "Invalid API Key",
"data": null
}
त्रुटि कोड संदर्भ#
| कोड | नाम | विवरण | सुझाया गया कार्रवाई |
|---|---|---|---|
1001 | FAILED | रिक्वेस्ट विफल (जनरिक एरर) | विशिष्ट एरर विवरण के लिए message फ़ील्ड की जांच करें |
1003 | INTERNAL_ERROR | आंतरिक सर्वर एरर | एक छोटे विलंब के बाद पुनः प्रयास करें; यदि यह जारी रहे तो सपोर्ट से संपर्क करें |
1011 | PARAM_ERROR | रिक्वेस्ट पैरामीटर एरर — e.g., imageUrl, styleImageUrl, या मास्क अनुपस्थित | सुनिश्चित करें कि सभी आवश्यक फ़ील्ड प्रदान की गई हों |
5002 | API_KEY_INVALID | API Key गलत या अनुपस्थित | सुनिश्चित करवें कि APIKEY हेडर मौजूद हई आ मान सही हई |
9010 | SCAN_TEXT_ERROR | टेक्स्ट प्रॉम्प्ट ने कंटेंट रिव्यू में विफलता दर्शाई | संवेदनशील या प्रतिबंधित कंटेंट हटाने के लिए प्रॉम्प्ट को संशोधित करें |
9038 | PROHIBITED_CONTENT | जनरेटेड आउटपुट छवि में प्रतिबंधित कंटेंट शामिल है | प्रॉम्प्ट/स्टाइल/इनपुट को समायोजित करें और पुनः प्रयास करें |
9051 | COINS_NOT_ENOUGH | अपर्याप्त सिक्के / क्रेडिट | अपने खाते के क्रेडिट टॉप-अप करें और पुनः प्रयास करें |
📄 सामान्य API त्रुटि कोडों की पूरी सूחה के लिए, त्रुटि कोड संदर्भ देखें।
