Genviso और BetterToken के साथ टेम्पलेट आधारित इमेज जनरेशन

विज़ुअल खोज को बैकएंड निष्पादन से अलग करके सफल प्रॉम्प्ट को वर्ज़न वाले प्रोडक्शन टेम्पलेट में बदलने की व्यावहारिक प्रक्रिया।

एक अच्छी इमेज मिल जाना अभी प्रोडक्शन प्रक्रिया नहीं है। एक इमेज के लिए प्रॉम्प्ट कई बार बदलना, परिणाम देखना और किसी एक को हाथ से चुनना संभव है। लेकिन सैकड़ों SKU के साथ यही तरीका महँगे प्रयोगों की लंबी श्रृंखला बन जाता है। रोशनी, कैमरा कोण या सामग्री बदलने पर हर बार नया अनुरोध जाता है, जबकि अच्छे परिणाम का कारण केवल लेखक की स्मृति में रह जाता है।

काम को दो चक्रों में बाँटें। पहले टीम विज़ुअल दिशा को परखती है और दोहराए जा सकने वाले नियम लिखती है। इसके बाद बैकएंड स्वीकृत टेम्पलेट में व्यावसायिक डेटा भरता है, अनुरोध भेजता है, परिणाम सहेजता है और त्रुटियाँ संभालता है। रचनात्मक खोज प्रोडक्शन कतार से बाहर रहती है और हर संरचना परिवर्तन के लिए सर्वर कोड बदलना नहीं पड़ता।

कोड में प्रॉम्प्ट सुधारना नियंत्रण से बाहर क्यों होता है

आपस में जुड़ी बहुत सारी चीज़ें

इमेज मॉडल विषय, वातावरण, रोशनी, कैमरा स्थिति, सामग्री, गहराई और रंगों पर एक साथ प्रतिक्रिया करता है। सीरम की बोतल की तस्वीर में भी ये विकल्प परिणाम बदलते हैं:

  • सामने का दृश्य या 45 डिग्री ऊपर से दृश्य;
  • तेज दिशात्मक रोशनी या नरम फैली हुई रोशनी;
  • स्पष्ट प्रतिबिंब वाला काँच या मैट सतह;
  • ट्रैवर्टीन, धातु या सादे कागज़ की पृष्ठभूमि;
  • 85 मिमी मैक्रो जैसा दृश्य या वाइड एंगल संरचना।

कई मान एक साथ बदलने पर पता नहीं चलता कि किस वाक्य ने सुधार किया। एक-एक मान बदलने पर अनुरोध तेजी से बढ़ते हैं। BetterToken का उपयोग करने वाला बैकएंड Image API से टेम्पलेट चला सकता है, लेकिन जाँच से पहले कतार शुरू करने पर केवल अप्रमाणित विज़ुअल अनुमान बड़े पैमाने पर दोहराया जाएगा।

हर काम की अपनी विज़ुअल भाषा होती है

उत्पाद कार्ड में साफ़ आकृति, नियंत्रित प्रतिबिंब और लेआउट के लिए खाली जगह चाहिए। 3D चित्रण में आकार और सामग्री की दूसरी शर्तें होती हैं। सोशल पोस्टर में पदानुक्रम, कंट्रास्ट और सुरक्षित क्षेत्र महत्वपूर्ण हैं। एक सार्वभौमिक प्रॉम्प्ट अक्सर परस्पर विरोधी विशेषणों से भर जाता है।

अलग टेम्पलेट परिवार रखना अधिक उपयोगी है:

skincare_product luxury_watch food_photography 3d_illustration social_poster

हर परिवार अपने आवश्यक फ़ील्ड और स्वीकृति मानदंड तय करता है। अनुप्रयोग श्रेणी के अनुसार टेम्पलेट चुनता है और विशेष उत्पाद या अभियान का डेटा भरता है।

खोज और प्रोडक्शन के नियम अलग हैं

खोज के समय कई रूप और व्यक्तिपरक तुलना स्वीकार की जा सकती है। प्रोडक्शन को स्थिर अनुबंध, टेम्पलेट वर्ज़न, सीमित पुनः प्रयास, कार्य पहचान और स्पष्ट स्वीकृति परिणाम चाहिए।

कोड में प्रॉम्प्ट बदलें → API अनुरोध भेजें → इमेज खोलें → कोड फिर बदलें → अगला अनुरोध भेजें

इस चक्र में ऐसा कोई बिंदु नहीं है जहाँ विज़ुअल निर्णय स्वीकृत माना जाए। इसलिए हर डिज़ाइन चर्चा बैकएंड और कार्य कतार को प्रभावित करती है।

विज़ुअल अनुमान से CMS फ़ाइल तक की संरचना

विज़ुअल खोज के दौरान टीम Genviso की विज़ुअल प्रॉम्प्ट गैलरी में विकल्पों की तुलना करती है, संरचना, रोशनी और शैली जाँचती है और सफल प्रॉम्प्ट की बनावट सहेजती है। सर्वर निष्पादन में अनुप्रयोग BetterToken की OpenAI-compatible Base URL और उपयोगकर्ता की अपनी API Key से डेटा भरता है, वर्तमान उपलब्ध मॉडल को बुलाता है और परिणाम दर्ज करता है। दोनों चरणों के बीच चुनी हुई इमेज या मौखिक निर्देश नहीं, बल्कि वर्ज़न वाला Prompt Template दिया जाता है।

कतार जोड़ने से पहले इस सीमा को जाँचने के लिए अपनी API Key बनाएँ, स्वीकृत टेम्पलेट के साथ एक नियंत्रण अनुरोध चलाएँ और उसके मॉडल, स्थिति तथा वास्तविक कटौती को तुरंत Dashboard में मिलाएँ। इससे विज़ुअल खोज को प्रोडक्शन अनुरोधों में बदले बिना सर्वर मार्ग की पुष्टि होती है।

विज़ुअल खोज ↓ Prompt Template की जाँच ↓ वेरिएबल और सीमाएँ तय ↓ PIM / CMS / SKU डेटा भरना ↓ बैकएंड से Image API अनुरोध ↓ फ़ाइल, स्थिति और मेटाडेटा सहेजना ↓ विज़ुअल स्वीकृति

हर बदलाव पर जाँचा जा सकने वाला परिणाम होना चाहिए:

चरणपरिणामअगले चरण की शर्त
विज़ुअल खोजस्वीकार और अस्वीकार रूपप्रभाव डालने वाले मान समझ में आते हैं
टेम्पलेट जाँचनाम वाले वेरिएबल का प्रॉम्प्टकई प्रतिनिधि उत्पादों पर काम करता है
एकीकरणरेंडर फ़ंक्शन और इनपुट स्कीमाAPI से पहले आवश्यक फ़ील्ड जाँचे जाते हैं
परीक्षणसहेजी फ़ाइल और अनुरोध रिकॉर्डफ़ाइल खुलती है और मॉडल/स्थिति सही हैं
प्रोडक्शनtemplate_id, वर्ज़न और job_id वाला कार्यपुनः प्रयास सीमित हैं और परिणाम SKU से जुड़ा है

चरण 1: विज़ुअल निर्णय को टेम्पलेट बनाना

कॉस्मेटिक स्टूडियो फ़ोटोग्राफ़ी के लिए प्रारंभिक संरचना ऐसी हो सकती है:

Commercial studio product photography of {subject}. Environment: {environment} Visual style: {visual_style} Lighting: {lighting} Composition: {composition} Color palette: {color_palette} Crisp reflections, premium material texture, high-end commercial editorial photography.

विवरण का क्रम और विज़ुअल आयाम स्थिर रहते हैं। subject, environment, visual_style, lighting, composition और color_palette के मान अलग-अलग बदलते हैं।

डेवलपर को टेम्पलेट देने से पहले चार बातें तय करें:

  1. आवश्यक फ़ील्ड। subject या composition न हो तो अनुरोध नहीं जाना चाहिए।
  2. मान्य मान। यदि केवल तीन कैमरा कोण स्वीकृत हैं तो CMS के स्वतंत्र पाठ के बजाय enum रखें।
  3. निषिद्ध संयोजन। शीशे वाली पृष्ठभूमि पर पारदर्शी पैकेज के लिए अलग टेम्पलेट चाहिए हो सकता है।
  4. स्वीकृति मानदंड। उत्पाद की आकृति साफ़ हो, लोगो विकृत न हो, वस्तु कटे नहीं और पृष्ठभूमि अंतिम लेआउट के योग्य हो।

प्रॉम्प्ट के साथ मशीन द्वारा पढ़ा जाने वाला अनुबंध रखें:

{ "template_id": "skincare_product_v3", "required_variables": [ "subject", "environment", "visual_style", "lighting", "composition", "color_palette" ], "output_size": "1024x1024" }

template_id का वर्ज़न पुनरुत्पादन के लिए है। डिज़ाइन में रोशनी या संरचना बदलने पर नए कार्य अगला वर्ज़न लेते हैं और पुराने परिणाम पुराने वर्ज़न से जुड़े रहते हैं।

चरण 2: टेम्पलेट को बैकएंड से जोड़ना

पहले परीक्षण के लिए आधिकारिक Python SDK openai, अपनी BetterToken API Key और वर्तमान Image API दस्तावेज़ से मिला Model ID चाहिए। कुंजी और मॉडल को वातावरण में रखें:

python -m pip install openai export BETTERTOKEN_API_KEY="your_api_key_here" export BETTERTOKEN_IMAGE_MODEL="current_image_model_id"

वास्तविक कुंजी को रिपॉज़िटरी, प्रॉम्प्ट, स्क्रीनशॉट या लॉग में न रखें। प्रोडक्शन में secret manager और अलग अनुप्रयोग या वातावरण के लिए अलग कुंजियाँ उपयोग करें।

यह उदाहरण टेम्पलेट रेंडर करता है, एक अनुरोध भेजता है और b64_json से PNG सहेजता है:

import base64 import os from pathlib import Path from typing import Mapping from openai import OpenAI client = OpenAI( base_url="https://www.bettertoken.ai/v1", api_key=os.environ["BETTERTOKEN_API_KEY"], ) def render_product_prompt(variables: Mapping[str, str]) -> str: return f""" Commercial studio product photography of {variables['subject']}. Environment: {variables['environment']} Visual style: {variables['visual_style']} Lighting: {variables['lighting']} Composition: {variables['composition']} Color palette: {variables['color_palette']} Crisp reflections, premium material texture, high-end commercial editorial photography. """.strip() product = { "subject": "frosted amber glass serum bottle with a minimalist gold dropper", "environment": "organic travertine pedestal surrounded by subtle water ripples", "visual_style": "high-end botanical skincare editorial", "lighting": "warm directional morning rim light with soft diffused fill", "composition": "centered 85mm macro product photography with shallow depth of field", "color_palette": "earthy amber, warm beige and subtle gold", } response = client.images.generate( model=os.environ["BETTERTOKEN_IMAGE_MODEL"], prompt=render_product_prompt(product), size="1024x1024", n=1, ) image_base64 = response.data[0].b64_json if not image_base64: raise RuntimeError("Image API response does not contain b64_json") output_path = Path("serum-product.png") output_path.write_bytes(base64.b64decode(image_base64)) print(f"Saved: {output_path}")

client.images.generate(...) और b64_json डिकोड करना वर्तमान SDK अनुबंध के अनुसार है। मॉडल BETTERTOKEN_IMAGE_MODEL से आता है, इसलिए Prompt Template या व्यावसायिक तर्क लिखे बिना उसे बदला जा सकता है।

न्यूनतम बैच कार्य चक्र

नीचे एक स्पष्ट एकीकरण pseudocode है। save_job, generate_image और ApiError स्टोरेज तथा API client के adapter हैं; ये SDK के अतिरिक्त method नहीं हैं।

MAX_ATTEMPTS = 3 RETRYABLE_STATUS = {429, 500, 502, 503, 504} for sku in sku_rows: variables = validate_variables(sku) # API call से पहले prompt = render_product_prompt(variables) job_id = uuid4().hex prompt_hash = sha256(prompt.encode()).hexdigest() save_job(job_id=job_id, sku_id=sku["id"], template_id="skincare_product_v3", prompt_hash=prompt_hash, status="pending") for attempt in range(1, MAX_ATTEMPTS + 1): save_job(job_id=job_id, status="running", attempt=attempt) try: result = generate_image(prompt) except ApiError as error: if error.status_code in {400, 401}: save_job(job_id=job_id, status="failed", error_code=error.status_code) break if error.status_code not in RETRYABLE_STATUS or attempt == MAX_ATTEMPTS: save_job(job_id=job_id, status="failed", error_code=error.status_code) break sleep(min(2 ** attempt, 8)) continue except TimeoutError: save_job(job_id=job_id, status="unknown", error_code="timeout") break # फिर भेजने से पहले Dashboard और storage जाँचें if not result.b64_json: save_job(job_id=job_id, status="failed", error_code="empty_output") break output_path = persist_png(job_id, result.b64_json) save_job(job_id=job_id, status="succeeded", output_path=output_path, model=result.model, attempt=attempt) break

स्थानीय job_id SKU, टेम्पलेट और फ़ाइल को जोड़ता है, लेकिन बाहरी अनुरोध को idempotent नहीं बनाता। timeout के बाद स्थिति unknown रखें, समय के अनुसार Dashboard खोजें और storage जाँचने के बाद केवल एक बार फिर भेजने का निर्णय लें।

समस्या जाँचने का क्रम

लक्षणपहले क्या जाँचेंसुधारदोबारा पुष्टि
400आवश्यक वेरिएबल, वर्तमान Model ID, समर्थित sizeडेटा या parameter सुधारें; वही अनुरोध अपने आप न दोहराएँएक नियंत्रण SKU चलाकर PNG खोलें
401Key variable लोड हुई या नहीं, कुंजी का मालिक और protocolकुंजी को log किए बिना बदलें या फिर बनाएँन्यूनतम अनुरोध भेजकर Dashboard में स्थिति खोजें
429समानांतर कार्य और अनुरोध गतिनए कार्य रोकें, concurrency घटाएँ, सीमित backoff लगाएँएक अनुरोध सफल होने दें, फिर भार धीरे बढ़ाएँ
5xxअनुरोध समय और किए गए प्रयासकेवल MAX_ATTEMPTS तक दोहराएँ; समय और स्थिति सहेजेंटेम्पलेट बदले बिना विराम के बाद एक अनुरोध जाँचें
timeoutDashboard और storageunknown रखें; असफलता न मानेंरिकॉर्ड और फ़ाइल न हों तो उसी स्थानीय job_id से एक बार भेजें
खाली b64_json या decode विफलवर्तमान response format, मॉडल और parameterKey के बिना error सहेजकर parsing या विन्यास सुधारेंएक SKU दोहराकर पुष्टि करें कि PNG खुलता है

बैच जनरेशन से पहले क्या जोड़ें

अनुरोध से पहले डेटा जाँचें

खाली material, product_name में अनपेक्षित मार्कअप या स्वीकृत रंग के स्थान पर स्वतंत्र पाठ प्रॉम्प्ट बदल देता है। आवश्यक फ़ील्ड, लंबाई और मान्य मान जाँचें। अंतिम प्रॉम्प्ट का hash, template_id और SKU पहचान कार्य के साथ सहेजें।

पुनः प्रयास सीमित रखें

timeout के बाद पुनः प्रयास दूसरी इमेज बना सकता है, भले ही अनुप्रयोग को पहली प्रतिक्रिया न मिली हो। अधिकतम प्रयास और विराम तय करें तथा हर रन को job_id दें। 400, 401 या मॉडल सेटिंग की त्रुटि को लगातार न दोहराएँ; पहले डेटा, कुंजी या विन्यास सुधारें।

तकनीकी और विज़ुअल स्वीकृति अलग रखें

HTTP 200 और मान्य PNG तकनीकी सफलता बताते हैं। संरचना, उत्पाद विकृति और ब्रांड के अनुरूपता की जाँच अलग होती है। स्वचालित कार्य फ़ाइल और मेटाडेटा सहेजता है; अगला चरण टेम्पलेट के विज़ुअल मानदंड लागू करता है।

अनुरोध को उपयोग रिकॉर्ड से मिलाएँ

नियंत्रण जनरेशन के बाद समय से Dashboard में अनुरोध खोजें। मॉडल, स्थिति और कटौती जाँचें; उपलब्ध उपयोग फ़ील्ड input, output और cache Token दिखाते हैं। Dashboard उपयोग और खर्च का मेटाडेटा रखता है, पूरा प्रॉम्प्ट या उत्तर नहीं। बजट के लिए वर्तमान मॉडल और मूल्य पृष्ठ देखें और परीक्षण का वास्तविक खर्च अनुरोध रिकॉर्ड से लें।

उत्पाद कैटलॉग का उदाहरण

PIM / SKU डेटाबेस ↓ उत्पाद श्रेणी → template_id ↓ नाम / सामग्री / रंग / पृष्ठभूमि ↓ आवश्यक फ़ील्ड की जाँच ↓ Prompt Template रेंडर ↓ job_id वाला जनरेशन कार्य ↓ Image API ↓ ऑब्जेक्ट स्टोरेज ↓ विज़ुअल स्वीकृति ↓ CMS / मीडिया लाइब्रेरी

प्रॉम्प्ट अब वर्ज़न वाला प्रोडक्शन ऑब्जेक्ट बन जाता है। आप देख सकते हैं कि किस टेम्पलेट ने फ़ाइल बनाई, वर्ज़न के अनुसार अस्वीकृति की तुलना कर सकते हैं और पूरी एकीकरण प्रक्रिया बदले बिना खराब बदलाव वापस कर सकते हैं।

शुरू करने से पहले जाँच सूची

  • टेम्पलेट को सामान्य उत्पादों और कठिन सीमा मामलों पर जाँचा गया है।
  • template_id, आवश्यक वेरिएबल और स्वीकृति मानदंड तय हैं।
  • API Key स्रोत कोड और लॉग से बाहर है।
  • Model ID वातावरण या विन्यास से पढ़ा जाता है।
  • एक परीक्षण अनुरोध अपेक्षित आकार की मान्य फ़ाइल बनाता है।
  • 400/401 पर नए अनुरोध से पहले डेटा या विन्यास सुधरता है।
  • 429/5xx के पुनः प्रयास सीमित हैं।
  • हर कार्य SKU, job_id, टेम्पलेट वर्ज़न और स्टोरेज से जुड़ा है।
  • तकनीकी जाँच और विज़ुअल स्वीकृति अलग हैं।
  • मॉडल, स्थिति और परीक्षण खर्च Dashboard में मिलाए गए हैं।

जिम्मेदारियाँ बाँटने से सहयोग कैसे सरल होता है

Genviso इंटरैक्टिव चक्र संभालता है: विज़ुअल दिशा जल्दी खोजना, प्रॉम्प्ट की तुलना करना और डेवलपर को देने से पहले टेम्पलेट जाँचना। BetterToken सर्वर चक्र संभालता है: API Key, OpenAI-compatible कनेक्शन, वर्तमान उपलब्ध मॉडल को बुलाना और उपयोग दर्ज करना। दोनों टीमों का साझा अनुबंध वेरिएबल, वर्ज़न और स्वीकृति मानदंड वाला Prompt Template है।

स्वीकृत टेम्पलेट को काम करने वाले बैकएंड में ले जाने और एक प्रतिनिधि SKU का खर्च जाँचने के लिए अपनी API Key बनाएँ, Image API संदर्भ का सबसे छोटा अनुरोध चलाएँ और कतार जोड़ने से पहले Dashboard में मॉडल, स्थिति और कटौती मिलाएँ।

अपना LLM वर्कफ़्लो बेहतर बनाना चाहते हैं?

एक API से मॉडल जोड़ें, कुंजियाँ प्रबंधित करें और AI खर्च नियंत्रित करें।