इमेज और वीडियो क्विकस्टार्ट
इमेज और वीडियो क्विकस्टार्ट
टेक्स्ट प्रॉम्प्ट और रेफरेंस मीडिया से इमेज और वीडियो जनरेट करना सीखें।
इमेज और वीडियो API एसिंक्रोनस है। आप जनरेशन सबमिट करते हैं और उसके पूरा होने पर साइन किए गए URL से नतीजा डाउनलोड करते हैं। इमेज और वीडियो के लिए अलग एंडपॉइंट हैं, लेकिन दोनों के लिए रिक्वेस्ट और रिस्पॉन्स का ढाँचा एक जैसा है।
नतीजा पाने के दो तरीके हैं। वेबहुक डिलीवरी सुझाया गया तरीका है और नीचे दिए गए उदाहरणों में इसी का इस्तेमाल किया गया है: जनरेशन के टर्मिनल स्टेटस पर पहुँचते ही ElevenLabs आपके एंडपॉइंट को कॉल करता है, इसलिए इंतज़ार में कुछ खर्च नहीं होता। जब कॉलबैक पाने के लिए आपके पास कोई एंडपॉइंट न हो, तो पोलिंग वैकल्पिक तरीका है और हर उदाहरण बताता है कि इस पर कैसे जाएँ।
इमेज और वीडियो API के लिए Pro प्लान या उससे ऊपर का प्लान चाहिए। इस टियर से नीचे के वर्कस्पेस से की गई कॉल
402 paid_plan_required एरर के साथ अस्वीकार हो जाती हैं। आपकी API कुंजी में वर्कस्पेस के लिए इमेज और वीडियो या
Flows अनुमति भी होनी चाहिए।
इमेज जनरेट करें
API कुंजी बनाएँ
डैशबोर्ड में यहां API key बनाएं, जिसका इस्तेमाल आप API एक्सेस करने के लिए सुरक्षित रूप से करेंगे।
key को मैनेज्ड सीक्रेट के रूप में स्टोर करें और अपनी पसंद के अनुसार इसे SDKs को .env फ़ाइल के ज़रिए एनवायरनमेंट वेरिएबल के रूप में या सीधे अपने ऐप के कॉन्फ़िगरेशन में पास करें।
SDK इंस्टॉल करें
SDK
CLI
हम अपने API key को environment variable से लोड करने के लिए dotenv library का भी इस्तेमाल करेंगे।
जनरेशन सबमिट करें
हर मॉडल की अपनी रिक्वेस्ट क्लास होती है और उसमें मौजूद फ़ील्ड उसी मॉडल के स्वीकार किए गए पैरामीटर होते हैं, इसलिए मॉडल बदलने पर उपलब्ध फ़ील्ड बदल सकते हैं। अनजान फ़ील्ड को नज़रअंदाज़ करने के बजाय अस्वीकार कर दिया जाता है।
webhook, तैयार नतीजे को आपके वर्कस्पेस के वेबहुक पर भेजने का अनुरोध करता है, इसलिए जनरेशन क्यू में लगते ही
कॉल वापस आ जाती है। इसके लिए जनरेशन इवेंट की सदस्यता वाला वेबहुक चाहिए; इसे सेट अप करने के लिए इमेज और वीडियो
वेबहुक देखें, या फ़ील्ड हटाकर पोल करें।
SDK
CLI
रिस्पॉन्स में जनरेशन ID के अलावा कुछ नहीं होता। नई बनाई गई जनरेशन का स्टेटस हमेशा
pending होता है:
नतीजा पाएँ
क्योंकि रिक्वेस्ट में webhook चुना गया था, जनरेशन के completed या failed होने पर ElevenLabs आपके
एंडपॉइंट पर flows_generation इवेंट पोस्ट करता है। इवेंट का data, GET एंडपॉइंट के रिस्पॉन्स के जैसा ही होता है,
और इमेज और वीडियो वेबहुक उसे पाने वाले हैंडलर के बारे में
बताता है।
कॉलबैक पाने के लिए कोई एंडपॉइंट न हो तो ऊपर दी गई रिक्वेस्ट से webhook हटा दें और उसकी जगह पोल करें।
जनरेशन को तब तक फ़ेच करें जब तक उसका स्टेटस completed या failed न हो जाए। इमेज के लिए रिक्वेस्ट के बीच
कम से कम दो सेकंड रखें — हर मोडेलिटी के लिए इस्तेमाल होने वाले अंतराल जानने हेतु पोलिंग दिशानिर्देश देखें।
दोनों ही तरीकों में, पूरी हो चुकी जनरेशन में ये फ़ील्ड होते हैं:
वीडियो जनरेट करें
वीडियो जनरेशन में flows.video इस्तेमाल होता है और यह उसी सबमिट-और-कलेक्ट पैटर्न का पालन करता है। वीडियो में
कई मिनट लग सकते हैं, इसलिए यह उदाहरण नतीजे का इंतज़ार करने के बजाय webhook के साथ वेबहुक डिलीवरी चुनता है।
जनरेशन क्यू में लगते ही कॉल वापस आ जाती है और तैयार नतीजा जनरेशन इवेंट की सदस्यता वाले आपके वर्कस्पेस के हर
वेबहुक पर भेज दिया जाता है। वीडियो आउटपुट MP4 होता है, इसलिए पूरे हुए पेलोड में
content_mime_type का मान video/mp4 होता है। वेबहुक कॉन्फ़िगर करने और इसे पाने वाला हैंडलर लिखने के लिए
इमेज और वीडियो वेबहुक देखें।
webhook के लिए जनरेशन इवेंट की सदस्यता वाला कम से कम एक वर्कस्पेस वेबहुक चाहिए। ऐसा न होने पर,
नतीजे के लिए कोई जगह न होने वाली जनरेशन शुरू करने के बजाय क्रिएट कॉल अस्वीकार हो जाती है।
flows.video.get के साथ पोलिंग पर जाने के लिए फ़ील्ड हटा दें और हर 10 सेकंड में एक बार से ज़्यादा पोल न करें।
नतीजे पाना
वेबहुक और पोलिंग एक ही payload लौटाते हैं, इसलिए चुनाव इस बात का है कि आप उसके लिए कैसे इंतज़ार करते हैं, न कि आपको क्या मिलता है।
जहाँ भी संभव हो, वेबहुक का इस्तेमाल करें। जब callback पाने के लिए आपके पास कोई जगह न हो, तब पोलिंग चुनें और ऐसा करने पर नीचे दिए गए intervals का पालन करें।
वेबहुक टारगेट चुनना
webhook दो forms स्वीकार करता है। WebhookTarget_All generation
events को subscribed हर वेबहुक तक पहुँचता है, और यह सही डिफ़ॉल्ट है क्योंकि वेबहुक rotate या replace होने पर भी काम करता है।
WebhookTarget_Ids डिलीवरी को खास वेबहुक तक सीमित करता है, जब एक workspace कई
consumers को भेजता हो और किसी job को उनमें से सिर्फ़ एक तक पहुँचना हो:
हर ID पहले से generation events को subscribed होनी चाहिए; unsubscribed वेबहुक का नाम देने पर उसे चुपचाप अनदेखा करने के बजाय request reject हो जाती है। डिलीवर किया गया payload GET endpoint के लौटाए गए payload जैसा ही होता है, इसलिए एक के लिए लिखा handler दूसरे के लिए भी काम करता है। वेबहुक गाइड में वेबहुक configure करना, signature verify करना और event handle करना बताया गया है।
पोलिंग दिशानिर्देश
किसी generation का runtime model, resolution और वीडियो के लिए duration पर निर्भर करता है, इसलिए fixed loop के बजाय अपने अनुरोध के अनुसार interval पर poll करें:
- इमेज: हर 2 सेकंड में एक बार से ज़्यादा poll न करें। ज़्यादातर कुछ सेकंड में पूरे हो जाते हैं।
- वीडियो: हर 10 सेकंड में एक बार से ज़्यादा poll न करें। सेकंड नहीं, मिनटों की अपेक्षा रखें और
interval को
duration_secsऔरresolutionके हिसाब से बढ़ाएं।
दोनों पर दो नियम लागू होते हैं। generation में ज़्यादा समय लगने पर back off करें — interval को दोगुना करके करीब एक मिनट तक ले जाने से धीमा generation सैकड़ों requests में नहीं बदलेगा। और loop की एक सीमा रखें, ताकि अटका हुआ generation अनंत loop के बजाय आपके अपने code में timeout के रूप में खत्म हो।
इससे तेज़ पोलिंग से आपको कुछ नहीं मिलता: सिर्फ़ दो बार पूछने से generation का status जल्दी नहीं बदलता। लगातार बहुत तेज़ पोलिंग पर 429 responses मिल सकते हैं, जिन्हें आपको exponential backoff के साथ handle करना चाहिए।
Generation लाइफ़साइकल
एक generation चार statuses से गुजरता है। दो terminal statuses में अलग-अलग fields होते हैं, इसलिए
बाकी response पढ़ने से पहले status के आधार पर branch करें।
content_url एक signed URL है, जो response लौटने के करीब एक घंटे बाद expire हो जाता है। signed URL को store करने के बजाय
नए URL के लिए generation को फिर से fetch करें।
Failures हैंडल करना
एक failed generation, पढ़ने योग्य error_message के साथ failure_reason category रिपोर्ट करता है:
Failed generations के लिए शुल्क नहीं लिया जाता। जिन parameter समस्याओं का पहले ही पता लगाया जा सकता है — जैसे unsupported field, model की allowed range से बाहर का value या reference inputs का अमान्य combination — उन्हें generation शुरू होने से पहले create request ही reject कर देती है।
कीमत
Generations के लिए credits में शुल्क लिया जाता है। लागत model, आपके चुने हुए parameters जैसे resolution और duration, और दिए गए inputs पर निर्भर करती है। API के ज़रिए generation की लागत उतनी ही होती है जितनी ElevenLabs ऐप में होती है, जहाँ submit करने से पहले लागत दिखाई जाती है। किसी खास model और setting combination की लागत कैसे दिखाई जाती है, इसके लिए playground में Image & Video देखें।
अपनी generations की सूची देखें
हर endpoint उससे बनाई गई generations की सूची देता है, सबसे नई पहले। नतीजे आपके workspace और इस API तक सीमित होते हैं, इसलिए ElevenLabs ऐप में बनाई गई generations दिखाई नहीं देतीं।
page_size 1 से 100 तक स्वीकार करता है और डिफ़ॉल्ट रूप से 30 होता है। सिर्फ़ किसी एक
lifecycle state की generations लौटाने के लिए status और सिर्फ़ एक model की generations लौटाने के लिए model_id दें। next_cursor को
opaque मानें: उसका सटीक value वापस दें और has_more के false होने पर रुक जाएं।
उपलब्ध मॉडल
API, ElevenLabs ऐप में उपलब्ध models के एक subset को उपलब्ध कराता है। हर model सिर्फ़ उसके लिए सूचीबद्ध parameters स्वीकार करता है — किसी दूसरे model द्वारा supported field भेजने पर validation error मिलता है।
ByteDance models डिफ़ॉल्ट रूप से disabled होते हैं और उपयोग से पहले स्पष्ट approval की ज़रूरत होती है। access
मिलने तक, इनमें से किसी एक का नाम देने वाली request model_access_denied error के साथ reject हो जाती है। Enterprise
customers access का अनुरोध करने के लिए support से संपर्क कर सकते हैं।
इमेज मॉडल
GPT Image 2.5 models quality के लिए low, medium, high, xhigh और max values स्वीकार करते हैं, और
diff़ॉल्ट रूप से high होता है। GPT Image 2 की अधिकतम value high है और डिफ़ॉल्ट रूप से medium होता है।
वीडियो मॉडल
model capabilities, availability और pricing के लिए Image & Video overview देखें।