کسی تصویر کا بیک گراؤنڈ ہاتھ سے ہٹانے میں ہر تصویر پر چند منٹ لگتے ہیں۔ آپ کی ایپ میں اپ لوڈ ہونے والی ہر پروڈکٹ تصویر، پروفائل فوٹو یا تھمب نیل کے لیے یہی کرنا ہو تو بیک گراؤنڈ ریموو API چاہیے: ایک HTTP ریکویسٹ بھیجیں، اور تیار cut-out واپس پائیں۔
یہ گائیڈ بتاتی ہے کہ اسے درست طریقے سے کیسے انٹیگریٹ کریں۔ آپ کو چلنے والا cURL، Python اور JavaScript کوڈ ملے گا، جاننے کے قابل آؤٹ پٹ آپشنز، سست تصاویر اور بڑی تعداد کی جاب کو کیسے سنبھالیں، اور دو بار ادائیگی کیے بغیر retry کیسے کریں۔ مثالوں میں ہماری بہن پروڈکٹ removebackground.dev استعمال کی گئی ہے، لیکن یہی طریقے کسی بھی پرووائیڈر پر لاگو ہوتے ہیں۔
بیک گراؤنڈ ریموو API کیسے کام کرتی ہے
آپ ایک تصویر بھیجتے ہیں، پرووائیڈر ایک segmentation ماڈل چلاتا ہے جو subject کو بیک گراؤنڈ سے الگ کرتا ہے، اور آپ کو ایک نئی تصویر واپس ملتی ہے۔ نتیجے کا بنیادی حصہ alpha channel ہے: ہر پکسل کی ایک ویلیو جو بتاتی ہے کہ وہ پکسل کتنا subject کا حصہ ہے۔ مکمل طور پر opaque پکسل subject ہیں، مکمل طور پر شفاف پکسل بیک گراؤنڈ ہیں، اور درمیانی ویلیوز بال، فر اور شیشے جیسے نرم کناروں کو سنبھالتی ہیں۔
اس matte سے API کئی چیزیں لوٹا سکتی ہے:
- شفاف cut-out، عام طور پر بیک گراؤنڈ ہٹائی گئی PNG یا WebP
- ٹھوس رنگ پر subject، ان مارکیٹ پلیسز کے لیے JPG میں flatten کیا گیا جنہیں سفید بیک گراؤنڈ چاہیے
- خود mask، ایک grayscale تصویر جسے آپ اپنی compositing pipeline میں استعمال کر سکتے ہیں
- crop یا resize شدہ ورژن، subject کے مطابق trim کر کے مقررہ سائز میں فٹ کیا گیا
ریکویسٹ بھیجنا آسان حصہ ہے۔ پروڈکشن انٹیگریشن کو ان تصاویر سے بھی نمٹنا ہوتا ہے جن میں معمول سے زیادہ وقت لگتا ہے، بڑے بیچ، rate limits، retry، اور API key کو صارفین سے دور رکھنا۔
بیک گراؤنڈ ریموو API میں کیا دیکھیں
کوڈ لکھنے سے پہلے ان نکات کو اپنی تصاویر اور ٹریفک کے حساب سے جانچیں۔
| معیار | کیا جانچیں | کیوں اہم ہے |
|---|---|---|
| کناروں کا معیار | اپنی 20 سے 50 تصاویر پر بال، فر، شفاف اشیا اور بھرے ہوئے بیک گراؤنڈ | پرووائیڈرز کا فرق مشکل کیسز میں نظر آتا ہے |
| ان پٹ کے طریقے | فائل اپ لوڈ، پبلک URL، base64، raw bytes | طے کرتا ہے کہ آپ تصاویر پہلے ڈاؤن لوڈ کیے بغیر queue worker سے کال کر سکتے ہیں یا نہیں |
| آؤٹ پٹ آپشنز | format، بیک گراؤنڈ کا رنگ، crop، padding، درست سائز، mask آؤٹ پٹ | آپ کی طرف دوسرا امیج پروسیسنگ مرحلہ بچاتا ہے |
| سست تصاویر | جب کسی تصویر میں آپ کے HTTP timeout سے زیادہ وقت لگے تو کیا ہوتا ہے | جاب id کے بغیر retry پر آپ دو بار ادائیگی کر سکتے ہیں |
| بڑی تعداد | batch endpoint، بیچ سائز، جزوی ناکامیاں کیسے بتائی جاتی ہیں | طے کرتا ہے کہ آپ کیٹلاگ امپورٹ کیسے پروسیس کریں گے |
| بلنگ | ہر کامیابی پر چارج یا ہر ریکویسٹ پر، سبسکرپشن یا کریڈٹ، کیا کریڈٹ ختم ہوتے ہیں | بڑی مقدار میں ناکام تصاویر اور retry کا خرچ بڑھتا جاتا ہے |
| حدود | فائل سائز، ریزولوشن، rate limit، نتائج کتنی دیر محفوظ رہتے ہیں | آپ کی queue اور اسٹوریج کا ڈیزائن طے کرتا ہے |
| پرائیویسی | اپ لوڈز اور نتائج کتنی دیر رکھے جاتے ہیں، کیا تصاویر سے ماڈلز ٹرین ہوتے ہیں | اکثر صارفین کی لازمی شرط ہوتی ہے |
مرحلہ 1: API key بنائیں
removebackground.dev پر سائن اپ کریں اور اپنے اکاؤنٹ پیج پر key بنائیں۔ نئے اکاؤنٹس کو 50 مفت کریڈٹ ملتے ہیں، جو نیچے دی گئی مثالیں چلانے اور اپنی تصاویر پر ٹیسٹ کرنے کے لیے کافی ہیں۔
key کو اپنے سرور پر ایک environment variable میں رکھیں:
export REMOVEBG_API_KEY="your_api_key"
ہر کال key کو x-api-key header میں بھیجتی ہے، اور ہر کال اس اکاؤنٹ کے کریڈٹ خرچ کرتی ہے۔ ہر ایپ یا environment کے لیے الگ key بنائیں تاکہ ایک کو revoke کرنے سے باقی متاثر نہ ہوں۔
مرحلہ 2: cURL سے بیک گراؤنڈ ہٹائیں
real-time endpoint POST https://removebackground.dev/v1/remove ہے۔ سب سے تیز ٹیسٹ فائل اپ لوڈ ہے:
curl -X POST https://removebackground.dev/v1/remove \
-H "x-api-key: $REMOVEBG_API_KEY" \
-F 'image_file=@photo.jpg' \
-o photo-no-bg.png
زیادہ تر اکیلی تصاویر اسی رسپانس میں تیار ہو کر واپس آتی ہیں، عام طور پر چند سیکنڈ میں، مکمل ریزولوشن والی شفاف PNG کی شکل میں۔
endpoint تصویر کو چار طریقوں سے قبول کرتا ہے۔ ان میں سے ایک بھیجیں:
| ان پٹ | کیسے بھیجیں |
|---|---|
| image_file | Multipart form data۔ JPG، PNG یا WebP، 25 MB تک |
| image_url | ایک پبلک http(s) URL۔ API اسے ڈاؤن لوڈ کرتی ہے، 3 redirects تک فالو کرتی ہے، 15 سیکنڈ timeout کے ساتھ |
| image_file_b64 | JSON body میں base64، data:image prefix کے ساتھ یا بغیر، decode کے بعد 25 MB تک |
| Raw body | تصویر کے bytes، Content-Type image/jpeg، image/png، image/webp یا application/octet-stream کے ساتھ |
اگر ایک ریکویسٹ میں کئی طریقے ہوں تو پہلے image_file، پھر image_file_b64، پھر image_url، پھر raw body کو ترجیح ملتی ہے۔ آپشنز form fields، JSON keys یا query-string ویلیوز کے طور پر بھیجے جا سکتے ہیں۔
ایک بات کا خیال رکھیں: -o status جو بھی ہو، body محفوظ کر دیتا ہے۔ اگر key غلط ہے یا تصویر درست نہیں تو آپ کی "PNG" دراصل ایک JSON ایرر ہے۔ فائل پر بھروسا کرنے سے پہلے status code جانچیں۔
مرحلہ 3: Python میں 200، 202 اور ایررز سنبھالیں
بیک گراؤنڈ ریموو API یہ وعدہ نہیں کر سکتی کہ ہر تصویر ایک HTTP ریکویسٹ میں مکمل ہو جائے گی۔ جب queue غیر معمولی طور پر مصروف ہو اور کسی تصویر میں تقریباً 55 سیکنڈ سے زیادہ لگیں تو removebackground.dev تصویر کے بجائے ایک جاب id کے ساتھ 202 Accepted لوٹاتا ہے۔ جاب چلتی رہتی ہے، اور آپ id سے نتیجہ حاصل کرتے ہیں۔
| Status | Body | کیا کریں |
|---|---|---|
| 200 | تصویر (image/png، image/jpeg یا image/webp) | اسے محفوظ کریں۔ فائل ایکسٹینشن چننے کے لیے Content-Type استعمال کریں |
| 202 | id، status، status_url اور result_url والا JSON | چند سیکنڈ انتظار کریں، پھر نتیجہ GET کریں۔ تصویر دوبارہ نہ بھیجیں |
| 4xx یا 5xx | JSON: {"error": {"code", "message"}} | code پڑھیں۔ body کو تصویر کے طور پر محفوظ نہ کریں |
بنیادی اصول: 202 کے بعد تصویر کبھی دوبارہ نہ بھیجیں۔ اس سے دوسری جاب شروع ہوتی ہے اور دوسرا کریڈٹ لگ سکتا ہے۔ یہ رہا مکمل Python ورژن جو تصویر ایک بار بھیجتا ہے اور صرف محفوظ کالز کو retry کرتا ہے:
import os
import time
import uuid
import requests
API = "https://removebackground.dev"
KEY = os.environ["REMOVEBG_API_KEY"] # keep the key on your server
EXT = {"image/png": ".png", "image/jpeg": ".jpg", "image/webp": ".webp"}
def save(res, stem):
"""Save an image response with the right extension; raise on anything else."""
mime = res.headers.get("Content-Type", "").split(";")[0]
if res.status_code != 200 or mime not in EXT:
raise RuntimeError(f"HTTP {res.status_code}: {res.text[:500]}")
path = stem + EXT[mime]
with open(path, "wb") as f:
f.write(res.content)
return path
def remove_background(image_url, stem="result", max_wait=300):
s = requests.Session()
s.headers["x-api-key"] = KEY
# One key per image: a retry with the same key returns the same job, never a second charge.
idem = {"Idempotency-Key": str(uuid.uuid4())}
for attempt in range(3):
try:
res = s.post(f"{API}/v1/remove", data={"image_url": image_url},
headers=idem, timeout=(10, 120))
break
except requests.ConnectionError:
if attempt == 2:
raise
time.sleep(2)
if res.status_code != 202:
return save(res, stem) # 200 is the image; anything else raises
# 202: still processing. Wait for the same job.
job_id = res.json()["id"]
deadline = time.monotonic() + max_wait
while time.monotonic() < deadline:
time.sleep(2) # the API sends Retry-After: 2
res = s.get(f"{API}/v1/jobs/{job_id}/result", timeout=30)
if res.status_code == 409 and res.json()["error"]["code"] == "not_ready":
continue
return save(res, stem) # the image, or the job's own error
raise TimeoutError(f"Job {job_id} is still running. Check /v1/jobs/{job_id} later.")
print(remove_background("https://example.com/photo.jpg"))
اس کے لیے Python 3 اور requests (pip install requests) درکار ہیں۔ دو باتیں آسانی سے نظر انداز ہو جاتی ہیں۔ پہلی، اپنی اسکرپٹ روکنے سے جاب نہیں رکتی: وہ پھر بھی مکمل ہو کر چارج ہو سکتی ہے، اور نتیجہ آپ کے اکاؤنٹ کے Studio میں نظر آتا ہے۔ دوسری، جاب چلنے کے دوران GET /v1/jobs/:id/result 409 not_ready لوٹاتا ہے، اس لیے اسے ناکامی نہیں بلکہ "انتظار کریں" سمجھیں۔
JavaScript (Node.js) میں یہی فلو
Node.js 18 یا اس کے بعد کے ورژن میں یہی فلو، built-in fetch، FormData اور Blob کے ساتھ، لوکل فائل اپ لوڈ کرتے ہوئے:
import { readFile, writeFile } from "node:fs/promises"
import { randomUUID } from "node:crypto"
const API = "https://removebackground.dev"
const KEY = process.env.REMOVEBG_API_KEY // server side only
const EXT = { "image/png": ".png", "image/jpeg": ".jpg", "image/webp": ".webp" }
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms))
async function save(res, stem) {
const mime = (res.headers.get("content-type") || "").split(";")[0]
if (res.status !== 200 || !EXT[mime]) {
throw new Error("HTTP " + res.status + ": " + (await res.text()).slice(0, 500))
}
const path = stem + EXT[mime]
await writeFile(path, Buffer.from(await res.arrayBuffer()))
return path
}
export async function removeBackground(filePath, stem = "result", maxWaitMs = 300000) {
const form = new FormData()
form.append("image_file", new Blob([await readFile(filePath)]), "upload")
form.append("format", "png")
const res = await fetch(API + "/v1/remove", {
method: "POST",
// Reuse the same Idempotency-Key if you retry this POST.
headers: { "x-api-key": KEY, "Idempotency-Key": randomUUID() },
body: form,
})
if (res.status !== 202) return save(res, stem)
const { id } = await res.json()
const deadline = Date.now() + maxWaitMs
while (Date.now() < deadline) {
await sleep(2000)
const result = await fetch(API + "/v1/jobs/" + id + "/result", {
headers: { "x-api-key": KEY },
})
if (result.status === 409) {
const body = await result.json()
if (body.error && body.error.code === "not_ready") continue
throw new Error("Job " + id + ": " + body.error.code)
}
return save(result, stem)
}
throw new Error("Job " + id + " is still running. Check /v1/jobs/" + id + " later.")
}
console.log(await removeBackground("photo.jpg"))
API CORS ریکویسٹس قبول کرتی ہے، جو ٹولز اور ٹیسٹنگ کے لیے سہولت ہے۔ اس کا مطلب یہ نہیں کہ اپنی key والے ویب پیج سے اسے کال کرنا محفوظ ہے۔ اس پر مزید نیچے سیکیورٹی والے حصے میں۔
مرحلہ 4: آؤٹ پٹ کنٹرول کریں
زیادہ تر ایپس کو مکمل ریزولوشن کا خام cut-out نہیں چاہیے۔ انہیں سفید بیک گراؤنڈ پر مربع پروڈکٹ تصویر، ایک چھوٹا preview، یا mask چاہیے۔ API سے براہ راست حتمی فائل مانگنے سے دوسرا پروسیسنگ مرحلہ بچتا ہے۔ /v1/remove کے آپشنز یہ ہیں:
| پیرامیٹر | ویلیوز | کیا کرتا ہے |
|---|---|---|
| format | png, jpg, webp | آؤٹ پٹ format۔ ڈیفالٹ png۔ JPG میں شفافیت نہیں ہوتی اور یہ bg_color یا سفید پر flatten ہوتا ہے |
| bg_color | Hex (ffffff، #fff)، rgb(255, 255, 255) یا رنگ کا نام | بیک گراؤنڈ بھرتا ہے۔ ڈیفالٹ شفاف |
| size | preview, medium, hd, full | aspect ratio برقرار رکھتے ہوئے میگا پکسل کی حد، کبھی upscale نہیں: preview 0.25 MP تک، medium 1.5 MP، hd 4 MP، full اصل سائز ہے (25 MP تک) |
| crop | true، false یا 1:1، 4:5، 16:9 جیسا تناسب | subject تک trim کرتا ہے۔ تناسب دینے پر box کو subject کے گرد اس تناسب تک بڑھایا جاتا ہے |
| padding | پکسل، کسر یا فیصد | crop کرتے وقت subject کے گرد شامل کیا گیا مارجن، 500 px تک |
| channels | rgba, rgb, alpha | شفاف cut-out (ڈیفالٹ)، opaque تصویر، یا grayscale mask جس میں سفید subject ہے |
| width, height | 1 سے 6000 | پکسل میں درست آؤٹ پٹ سائز، crop کے بعد لاگو۔ کبھی stretch نہیں |
| fit | contain, cover, scale-down | width اور height دونوں سیٹ کرنے پر تصویر کیسے فٹ ہو |
| roi | x1 y1 x2 y2، px یا % میں | صرف اس علاقے کے اندر کا subject رکھا جاتا ہے |
ہر آپشن کا خرچ وہی 1 کریڈٹ ہے، اور نامعلوم پیرامیٹرز خاموشی سے نظر انداز کر دیے جاتے ہیں، اس لیے typo سے کوئی ایرر نہیں آئے گا۔ درمیان میں پروڈکٹ اور 10% padding والی مربع مارکیٹ پلیس تصویر ایسی دکھتی ہے:
curl -X POST https://removebackground.dev/v1/remove \
-H "x-api-key: $REMOVEBG_API_KEY" \
-F 'image_file=@product.jpg' \
-F 'crop=1:1' -F 'padding=10%' \
-F 'width=1000' -F 'height=1000' \
-F 'format=jpg' -F 'bg_color=white' \
-o product-square.jpg
کامیاب رسپانس کے ساتھ کچھ مفید headers بھی آتے ہیں۔ X-Credits-Remaining تصویر کے بعد آپ کا بیلنس دکھاتا ہے۔ X-Matte-Confidence (0 سے 1) بتاتا ہے کہ mask کتنا فیصلہ کن ہے، اور X-Matte-Ambiguous-Ratio بال، شیشے یا motion blur جیسے نرم پکسلز کا حصہ بتاتا ہے۔ ان دونوں کو لاگ کرنے سے آپ ہر تصویر جانچنے کے بجائے کم اعتماد والے cut-outs کو انسانی جائزے کے لیے نشان زد کر سکتے ہیں۔
مرحلہ 5: تصاویر بڑی تعداد میں پروسیس کریں
کیٹلاگ امپورٹ اور backfill کے لیے سینکڑوں اکیلی ریکویسٹس نہ بھیجیں۔ POST /v1/batch 100 تک پبلک تصویر URLs کو ایک جاب کے طور پر queue کرتا ہے، /v1/remove والے ہی آپشنز کے ساتھ، اور فوراً 202 لوٹاتا ہے:
import os
import time
import uuid
import requests
API = "https://removebackground.dev"
s = requests.Session()
s.headers["x-api-key"] = os.environ["REMOVEBG_API_KEY"]
urls = ["https://example.com/front.jpg", "https://example.com/back.jpg"]
job = s.post(f"{API}/v1/batch",
json={"image_urls": urls, "format": "png", "size": "hd"},
headers={"Idempotency-Key": str(uuid.uuid4())}, timeout=30)
job.raise_for_status()
job_id = job.json()["id"] # save it: it's how you resume after a restart
while True:
time.sleep(3)
status = s.get(f"{API}/v1/jobs/{job_id}", timeout=30).json()
if status["done"]:
break
print(status["status"], "credits charged:", status["credits_charged"])
for item in status["items"]:
if item["status"] != "succeeded":
print("failed:", item["input"], item.get("error"))
continue
img = s.get(item["result_url"], timeout=60)
with open(f"out-{item['position']}.{item['format']}", "wb") as f:
f.write(img.content)
ڈاکس کے چند اصول جن کے مطابق ڈیزائن کریں:
- جاب کا status آخر میں succeeded، partial (کچھ تصاویر ناکام ہوئیں) یا failed ہوتا ہے۔
itemsمیں ہر آئٹم کا اپنا status ہوتا ہے اور ناکامی پر ایک ایرر code۔ - جو اندراجات http(s) URLs نہیں ہیں اور دہرائے گئے URLs ہٹا دیے جاتے ہیں اور کبھی چارج نہیں ہوتے۔ جب ان میں سے کوئی بھی گنتی 0 سے اوپر ہو تو نتائج کو position کے بجائے
inputسے ملائیں۔ - ایک اکاؤنٹ میں بیک وقت زیادہ سے زیادہ 3 batch جابز کھلی رہ سکتی ہیں۔
doneکے true ہوتے ہی بیچ گنتی میں نہیں رہتا۔ - اگر بیچ کے دوران کریڈٹ ختم ہو جائیں تو مکمل ہونے والی تصاویر کی ادائیگی برقرار رہتی ہے اور باقی کو out_of_credits کے ساتھ skipped نشان زد کیا جاتا ہے، بغیر کسی چارج کے۔
- API میں cancel endpoint، webhooks یا ZIP ڈاؤن لوڈ نہیں ہے، اس لیے polling ہی طریقہ ہے۔ جاب پڑھنا مفت ہے اور اس پر rate limit نہیں۔
ایسی اسکرپٹ چاہیے جو جیسی ہے ویسی چلا سکیں؟ Python کے ساتھ بیچ گائیڈ فولڈر سے فولڈر تک کا مکمل ورک فلو سمجھاتی ہے۔
مرحلہ 6: محفوظ retry کریں اور بلنگ کو قابل پیش گوئی رکھیں
دوہرے چارج نیٹ ورک timeouts سے آتے ہیں۔ آپ کا کلائنٹ ہار مانتا ہے، retry کرتا ہے، اور اب ایک تصویر کے لیے دو جابز موجود ہیں۔ اس کا حل Idempotency-Key header ہے: 255 حروف تک کی کوئی بھی منفرد string، جیسے UUID، ہر تصویر یا بیچ کے لیے ایک۔ اگر آپ وہی ریکویسٹ اسی key کے ساتھ دوبارہ بھیجیں تو آپ کو پہلی ریکویسٹ سے بنی جاب ملتی ہے، Idempotent-Replayed: true header کے ساتھ، اور کوئی نیا چارج نہیں۔ کسی دوسری تصویر کے لیے key دوبارہ استعمال کرنے پر 409 idempotency_key_reused ملتا ہے۔
| رسپانس | کیا کریں |
|---|---|
| POST پر نیٹ ورک ایرر، timeout یا 500 | وہی ریکویسٹ اسی Idempotency-Key کے ساتھ دوبارہ بھیجیں |
| 429 rate_limited | Retry-After میں دیے گئے سیکنڈ انتظار کریں، پھر اسی key کے ساتھ دوبارہ بھیجیں |
| 429 too_many_batches | اپنے 3 کھلے بیچز میں سے کسی ایک کے مکمل ہونے تک انتظار کریں |
| 400، 413 یا 422 | ریکویسٹ یا تصویر درست کریں۔ بغیر تبدیلی دوبارہ بھیجنے پر وہی جواب ملے گا |
| 401 یا 402 | key درست کریں یا ٹاپ اپ کریں۔ loop نہ کریں |
| نتیجے پر 409 not_ready | 2 سیکنڈ انتظار کریں اور پھر پوچھیں۔ تصویر دوبارہ جمع نہ کریں |
| 410 result_unavailable | محفوظ نتیجہ حذف ہو چکا ہے۔ دوبارہ پروسیسنگ نئی جاب ہے اور 1 کریڈٹ لگتا ہے |
| POST پر 502 | وہ جاب ناکام ہوئی اور چارج نہیں ہوئی۔ ایک retry نئی جاب ہے |
بلنگ ایک سادہ اصول پر چلتی ہے: تصویر کامیاب ہونے پر 1 کریڈٹ، ناکام ہونے پر کچھ نہیں۔ پروسیسنگ سے پہلے مسترد کی گئی ریکویسٹس، ناقابل پڑھائی تصاویر اور پرووائیڈر کی اپنی retries کے بعد کی ناکامیاں مفت ہیں، اور محفوظ رہنے تک مکمل نتیجہ دوبارہ ڈاؤن لوڈ کرنا بھی مفت ہے۔
ڈیزائن کرتے وقت دھیان میں رکھنے والی حدود
| حد | ویلیو |
|---|---|
| تصویر فائل | 25 MB، JPG، PNG یا WebP، فائل کے bytes سے پہچانی جاتی ہے |
| ان پٹ ریزولوشن | 25 MP سے بڑی تصاویر پروسیسنگ سے پہلے 25 MP تک چھوٹی کی جاتی ہیں |
| آؤٹ پٹ سائز | width اور height دونوں 1 سے 6000 px |
| image_url ڈاؤن لوڈ | صرف http(s)، 15 سیکنڈ timeout، 3 redirects تک۔ پرائیویٹ اور loopback ایڈریس مسترد |
| POST /v1/remove میں انتظار | تقریباً 55 سیکنڈ، پھر جاب id کے ساتھ 202 |
| بیچ سائز | ہر ریکویسٹ میں 100 تصویر URLs |
| کھلے بیچز | ہر اکاؤنٹ میں 3 |
| ریکویسٹ ریٹ | تمام POST endpoints پر ہر اکاؤنٹ کے لیے فی منٹ 60 ریکویسٹس۔ بیچ کا سائز جو بھی ہو، اسے ایک بار گنا جاتا ہے |
| نتائج کا اسٹوریج | 48 گھنٹے، پھر حذف |
اگر آپ کو فی منٹ 60 سے زیادہ تصاویر چاہییں تو batch endpoint ہی جواب ہے: ایک ریکویسٹ میں 100 تصاویر تک آ جاتی ہیں۔ نتائج ڈاؤن لوڈ کرتے ہی اپنے bucket میں محفوظ کریں، کیونکہ 48 گھنٹے بعد نتائج کے لنکس 410 لوٹاتے ہیں۔ پرووائیڈر کے ڈاکس کے مطابق اپ لوڈ کی گئی تصاویر ماڈلز کی ٹریننگ میں استعمال نہیں ہوتیں۔
remove.bg API سے منتقلی
remove.bg کی الگ ویب سائٹ اور self-serve API یکم دسمبر 2026، 09:00 CET کو بند ہو رہی ہیں۔ اس کی API Leonardo.Ai پر منتقل ہو رہی ہے، جس کے لیے آپ کو اپنا انٹیگریشن بدلنا ہوگا۔ اگر آپ کچھ بھی دوبارہ نہیں لکھنا چاہتے تو removebackground.dev پر remove.bg-compatible endpoint موجود ہے، اور منتقلی صرف ایک لائن کی ہے:
| پہلے | بعد میں |
|---|---|
| https://api.remove.bg/v1.0/removebg | https://removebackground.dev/v1.0/removebg |
آپ وہی X-Api-Key header (removebackground.dev کی key کے ساتھ)، وہی پیرامیٹر نام، وہی response headers اور وہی ایرر format رکھتے ہیں:
curl -H "X-Api-Key: $REMOVEBG_API_KEY" \
-F 'image_file=@photo.jpg' -F 'size=auto' \
-F 'crop=true' -F 'crop_margin=10%' -F 'bg_color=ffffff' \
-o no-bg.jpg https://removebackground.dev/v1.0/removebg
سوئچ کرنے سے پہلے فرق جان لیں:
- کوئی 202 نہیں۔ compatible endpoint 110 سیکنڈ تک انتظار کرتا ہے، پھر 503 timeout لوٹاتا ہے۔ جاب چلتی رہتی ہے اور کامیاب ہونے پر چارج ہوتی ہے، اس لیے اس ریکویسٹ کو بغیر سوچے retry کرنے سے دوسری جاب شروع ہو جاتی ہے۔
- اس endpoint پر idempotency keys نہیں ہیں۔ اگر محفوظ retry چاہیے تو رفتہ رفتہ
/v1/removeپر منتقل ہوں۔ - کچھ آپشنز قبول ہوتے ہیں لیکن نظر انداز کیے جاتے ہیں: type اور type_level (subject خودکار طور پر پہچانا جاتا ہے)، semitransparency، اور shadow آپشنز (کوئی shadow شامل نہیں کیا جاتا)۔
- سائز کوئی بھی ہو، ہمیشہ 1 کریڈٹ، مکمل ریزولوشن سمیت۔
منتقلی گائیڈ میں cURL، Python، Node اور PHP کے لیے پہلے اور بعد کا کوڈ ہے، ساتھ ہی Zapier، Make اور n8n کے مراحل بھی۔
اپنی API key کلائنٹ سے دور رکھیں
یہی وہ غلطی ہے جس میں اصل پیسہ جاتا ہے۔ اگر آپ کی key کسی ویب پیج، موبائل ایپ، پبلک repository یا URL میں ہے تو کوئی بھی اسے پڑھ کر آپ کے کریڈٹ خرچ کر سکتا ہے۔
- اپنے صارفین کو بیک گراؤنڈ ہٹانے دینے کے لیے ان کی تصاویر اپنے بیک اینڈ سے بھیجیں اور API کو وہیں سے کال کریں۔
- اس بیک اینڈ میں اپنا سائن اِن اور ہر صارف کے لیے خرچ کی حدیں شامل کریں۔
- ہر ایپ یا environment کے لیے ایک key استعمال کریں۔
- اگر key لیک ہو جائے تو اسے اکاؤنٹ پیج پر revoke کریں۔ وہ فوراً کام کرنا بند کر دیتی ہے۔ پرووائیڈر ہر key کا صرف hash محفوظ کرتا ہے، اس لیے پرانی key واپس لانے کی کوشش کے بجائے نئی key بنائیں۔
مثال: YouTube تھمب نیلز کے لیے cut-outs
اگر آپ کریئیٹرز کے لیے ٹولز بناتے ہیں تو تھمب نیل ایک واضح استعمال ہے۔ تھمب نیل زیادہ تر چھوٹے سائز میں دیکھا جاتا ہے، اس لیے cut-out کو ہی اسے سنبھالنا ہوتا ہے: ایک چہرہ یا پروڈکٹ، بڑا، سادہ بیک گراؤنڈ پر واضح کنارے کے ساتھ۔ YouTube 16:9 پر 3840 x 2160 px اور کم از کم 640 px چوڑائی کی سفارش کرتا ہے، اور کمپیوٹر سے 50 MB تک JPG یا PNG قبول کرتا ہے، لیکن موبائل ایپ سے صرف 2 MB۔
API کی طرف صرف ایک کال ہے جو subject تک trim کی گئی شفاف PNG لوٹاتی ہے، جسے سیدھا 16:9 کینوس پر رکھا جا سکتا ہے:
curl -X POST https://removebackground.dev/v1/remove \
-H "x-api-key: $REMOVEBG_API_KEY" \
-F 'image_file=@me.jpg' \
-F 'crop=true' -F 'padding=5%' \
-o me-cutout.png
cut-out کے لیے ویڈیو فریم لینے کے بجائے ایک ساکن تصویر کھینچیں، کیونکہ فریمز میں اکثر motion blur ہوتا ہے، اور نیچے دائیں کونے کو خالی رکھیں کیونکہ YouTube وہاں ویڈیو کی لمبائی دکھاتا ہے۔ YouTube تھمب نیلز پیج ڈیزائن والا پہلو بتاتا ہے، اور ہماری پہلے 1,000 سبسکرائبرز حاصل کرنے والی گائیڈ بتاتی ہے کہ تھمب نیلز اتنے اہم کیوں ہیں۔
ChatGPT، Claude یا Cursor سے بیک گراؤنڈ ہٹانا
ہر کام کے لیے کوڈ ضروری نہیں۔ removebackground.dev https://removebackground.dev/mcp پر ایک MCP سرور بھی چلاتا ہے، تاکہ آپ ChatGPT، Claude، Cursor، VS Code یا n8n میں تصویر اپ لوڈ کر کے بیک گراؤنڈ ہٹانے کو کہہ سکیں۔ Claude Code میں یہ ایک کمانڈ ہے:
claude mcp add --transport http removebackground https://removebackground.dev/mcp
پھر سائن اِن کرنے کے لیے Claude Code میں /mcp ٹائپ کریں۔ سرور تین ٹولز فراہم کرتا ہے: remove_background، چند سیکنڈ سے زیادہ وقت لینے والے کاموں کے لیے get_job، اور check_credits۔ ہر تصویر پر 1 کریڈٹ لگتا ہے، API جتنا ہی۔
اس کی قیمت
removebackground.dev بغیر سبسکرپشن کے pay-as-you-go ہے۔ کریڈٹ کبھی ختم نہیں ہوتے، ناکام تصاویر مفت ہیں، اور نئے اکاؤنٹس کو 50 مفت کریڈٹ ملتے ہیں۔ API کے ذریعے 1 کریڈٹ مکمل ریزولوشن پر ایک کامیاب بیک گراؤنڈ ریموول ہے۔
| پیک | کریڈٹ | قیمت | فی تصویر |
|---|---|---|---|
| Starter | 4,000 | $17 | $0.0043 |
| Pro | 15,000 | $49 | $0.0033 |
| Scale | 40,000 | $99 | $0.0025 |
قیمتیں USD میں ہیں، اور غیر استعمال شدہ کریڈٹ 30 دن کے اندر ریفنڈ ہو سکتے ہیں۔ Scale سے اوپر والیوم قیمت درخواست پر دستیاب ہے۔ موجودہ تفصیلات کے لیے پرائسنگ پیج دیکھیں۔
خلاصہ
ایک مضبوط بیک گراؤنڈ ریموول انٹیگریشن چند عادتوں پر منحصر ہے: key اپنے سرور پر رکھیں، body محفوظ کرنے سے پہلے status جانچیں، 202 کے بعد دوبارہ بھیجنے کے بجائے جاب کا انتظار کریں، ہر POST کے ساتھ Idempotency-Key بھیجیں، اور بڑی تعداد کے کام کے لیے batch endpoint استعمال کریں۔
OpenAPI 3.1 spec سمیت مکمل حوالہ API ڈاکس میں ہے۔ اگر آپ تصاویر کے ساتھ ویڈیو پر بھی کام کرتے ہیں تو ہمارا YouTube ٹرانسکرپٹ APIs کا موازنہ اور اسپیچ ٹو ٹیکسٹ انٹیگریشن گائیڈ ٹیکسٹ کے لیے یہی پروڈکشن طریقے استعمال کرتے ہیں۔
اکثر پوچھے جانے والے سوالات
بیک گراؤنڈ ریموو API کیا ہے؟+
یہ ایک HTTP endpoint ہے جو ایک تصویر لیتا ہے اور وہی تصویر بیک گراؤنڈ ہٹا کر لوٹاتا ہے، عام طور پر شفاف بیک گراؤنڈ والی PNG کی شکل میں۔ آپ فائل، URL یا base64 بھیجتے ہیں، اور پرووائیڈر آپ کے لیے segmentation ماڈل چلاتا ہے۔
Python میں تصویر کا بیک گراؤنڈ کیسے ہٹائیں؟+
requests لائبریری سے تصویر کو API پر POST کریں، اپنی key کو header میں رکھیں، اور status 200 ہونے پر response body کو فائل میں محفوظ کریں۔ اگر سست تصاویر کے لیے API 202 لوٹا سکتی ہے تو تصویر دوبارہ بھیجنے کے بجائے جاب کے result URL کو poll کریں۔ اس گائیڈ کی Python مثال دونوں صورتوں کو سنبھالتی ہے۔
بیک گراؤنڈ ریموو API کی قیمت کتنی ہے؟+
یہ پرووائیڈر پر منحصر ہے۔ removebackground.dev ہر کامیاب تصویر کے لیے 1 کریڈٹ لیتا ہے، اور کریڈٹ پیک $17 میں 4,000 کریڈٹ ($0.0043 فی تصویر) سے لے کر $99 میں 40,000 کریڈٹ ($0.0025 فی تصویر) تک ہیں۔ کوئی سبسکرپشن نہیں، کریڈٹ کبھی ختم نہیں ہوتے، ناکام تصاویر مفت ہیں، اور نئے اکاؤنٹس کو 50 مفت کریڈٹ ملتے ہیں۔
کیا remove.bg API بند ہونے کے بعد میں اپنا remove.bg کوڈ استعمال کرتا رہ سکتا ہوں؟+
remove.bg کی self-serve API یکم دسمبر 2026، 09:00 CET کو بند ہو رہی ہے۔ removebackground.dev پر remove.bg-compatible endpoint موجود ہے، اس لیے آپ URL کو https://api.remove.bg/v1.0/removebg سے بدل کر https://removebackground.dev/v1.0/removebg کریں اور اسی X-Api-Key header میں removebackground.dev کی key استعمال کریں۔
کیا میں براؤزر سے براہ راست بیک گراؤنڈ ریموو API کال کر سکتا ہوں؟+
ایسا نہیں کرنا چاہیے۔ ویب پیج یا ایپ میں شامل API key کوئی بھی پڑھ سکتا ہے۔ تصاویر اپنے بیک اینڈ کے ذریعے بھیجیں، key وہیں رکھیں، اور اپنے صارفین کے لیے اپنا سائن اِن اور خرچ کی حدیں شامل کریں۔
سفید بیک گراؤنڈ کے بجائے شفاف PNG کیسے حاصل کریں؟+
PNG یا WebP آؤٹ پٹ مانگیں اور بیک گراؤنڈ کا رنگ سیٹ نہ کریں۔ JPG شفافیت محفوظ نہیں کر سکتا، اس لیے JPG نتیجہ ہمیشہ ایک ٹھوس رنگ پر flatten ہوتا ہے۔