n8n के लिए फ़्री इमेज जनरेशन API: वर्कफ़्लो और सेटअप
फ़्री API की मदद से n8n में इमेज बनाने का व्यावहारिक सेटअप। टोकन बनाएँ, उसे क्रेडेंशियल के रूप में सेव करें, POST, Wait और Switch वाला पोलिंग लूप बनाएँ, फ़ाइल सेव करें, और बैच को पाँच-जॉब की सीमा के भीतर रखें ताकि बल्क रन बिना एरर के पूरे हों।
आप लगभग बीस मिनट में n8n में फ़्री इमेज जनरेशन API जोड़ सकते हैं, और जो हिस्सा लोगों को उलझाता है वह रिक्वेस्ट नहीं है। वह इंतज़ार है। PicassoIA API पर इमेज जॉब असिंक्रोनस होते हैं, इसलिए एक अकेला HTTP Request नोड आपको तस्वीर नहीं, बल्कि एक जॉब ID देता है, और उसके बाद का सब कुछ इस पर निर्भर करता है कि आप पोल, रीट्राई और रिज़ल्ट सेव कैसे करते हैं। यह walkthrough पूरा लूप बनाता है: एक ट्रिगर, एक प्रॉम्प्ट, एक POST जो प्रेडिक्शन बनाता है, एक Wait और IF जोड़ी जो जॉब पूरा होने तक पोल करती है, और एक डाउनलोड स्टेप जो आउटपुट को आपके वर्कफ़्लो के अंदर असली फ़ाइल में बदल देता है।
अगर आपने पहले Replicate API इस्तेमाल किया है, तो आपको यह जाना-पहचाना लगेगा। अगर नहीं किया, तो भी ठीक है: इस लेख की हर कॉल का सटीक URL, हेडर और बॉडी दिखाया गया है, साथ ही वे n8n एक्सप्रेशन भी जो नोड्स को आपस में जोड़ते हैं।
API आपको क्या देता है
PicassoIA एक डेवलपर API देता है जो Replicate prediction API की तरह व्यवहार करता है। आप एक जॉब बनाते हैं, उसे पोल करते हैं, और आउटपुट पढ़ते हैं। कोई स्ट्रीमिंग नहीं है और कॉन्फ़िगर करने के लिए कोई webhook callback नहीं है, जो n8n के लिए सचमुच अच्छी खबर है, क्योंकि पोलिंग ऐसा काम है जिसे n8n एडिटर बहुत अच्छी तरह करता है।
एंडपॉइंट और मॉडल
बेस URL https://api.picassoia.com/v1 है, और हर रिक्वेस्ट के साथ एक बेरर टोकन जाता है जो pia_sk_ से शुरू होता है। चार एंडपॉइंट जॉब के पूरे जीवनचक्र को संभालते हैं:
क्रिया
मेथड और पाथ
इसका उपयोग
जॉब बनाएँ
POST /v1/models/{owner}/{name}/predictions
एक जेनरेशन शुरू करें
जॉब जाँचें
GET /v1/predictions/{id}
स्टेटस पोल करें और आउटपुट पढ़ें
जॉब रद्द करें
POST /v1/predictions/{id}/cancel
ऐसा जॉब रोकें जिसकी अब ज़रूरत नहीं
जॉब सूची
GET /v1/predictions
हाल के रन की जाँच करें
स्थिर इमेज के लिए दो मॉडल मायने रखते हैं। picassoia/picassoia-image टेक्स्ट-टू-इमेज मॉडल है, जिसका दस्तावेज़ PicassoIA Image पेज पर है। यह अनलिमिटेड है, सात आस्पेक्ट रेशियो सपोर्ट करता है, सीड स्वीकार करता है, और JPG, PNG या WebP आउटपुट देता है। picassoia/picassoia-image-editor-pro मौजूदा तस्वीरों के एडिट संभालता है, और PicassoIA Image Editor Pro पर मिलता है। उसी एंडपॉइंट स्टाइल के पीछे दो वीडियो मॉडल भी हैं, जो तब काम आते हैं जब आपका इमेज वर्कफ़्लो स्थिर हो जाए और आप उसी ट्रिगर से मोशन चाहें।
जानने लायक सीमाएँ
कुछ भी डिज़ाइन करने से पहले ये संख्याएँ एक स्टिकी नोट पर लिख लें:
5 कंकरंट प्रेडिक्शन प्रति अकाउंट, जो आपके हर टोकन और हर MCP कनेक्शन में साझा होते हैं
प्रति प्रॉम्प्ट अधिकतम 4,000 अक्षर
अधिकतम 10 MB रिक्वेस्ट बॉडी
जॉब टाइम आउट होने से पहले 3 घंटे
प्रति अकाउंट अधिकतम 2 API टोकन
कंकरंट सीमा आपके वर्कफ़्लो को बाकी किसी भी चीज़ से ज़्यादा आकार देती है। हम इस पर विफलताओं वाले हिस्से में लौटेंगे, क्योंकि 200 पंक्तियों वाली स्प्रेडशीट अगर आप उसे चलने दें तो लगभग दो सेकंड में पाँच जॉब की सीमा पार कर जाएगी।
💡 किसी क्लाइंट से "फ़्री" का वादा करने से पहले अपना प्लान जाँचें। API पेज कहते हैं कि प्रेडिक्शन अभी फ़्री हैं और कोई क्रेडिट नहीं लेते, लेकिन दस्तावेज़ में API एक्सेस के लिए Infinite प्लान का भी ज़िक्र है, और प्राइसिंग पेज कई टियर पर API एक्सेस दिखाता है। ये बयान पूरी तरह मेल नहीं खाते, इसलिए क्लाइंट डिलीवरेबल बनाने से पहले पक्का करें कि आपका अपना अकाउंट क्या अनुमति देता है।
PicassoIA Image कैसे इस्तेमाल करें
पहले अपना प्रॉम्प्ट ब्राउज़र में चलाएँ। इसमें कोई खर्च नहीं होता, दस सेकंड लगते हैं, और नोड्स डीबग करने में पूरी दोपहर लगाने से पहले बताता है कि शब्दावली सही है या नहीं।
अपना प्रॉम्प्ट सर्च क्वेरी की तरह नहीं, फ़ोटोग्राफ़र की तरह लिखें। सब्जेक्ट, सेटिंग, रोशनी और लेंस बताएँ। "लिनन पर सिरेमिक मग, बाईं ओर से खिड़की की रोशनी, 50mm, शैलो डेप्थ ऑफ़ फ़ील्ड" की तुलना में "अच्छी मग वाली तस्वीर" कमज़ोर है।
आस्पेक्ट रेशियो चुनें। ब्लॉग हेडर के लिए 16:9, प्रोडक्ट टाइल के लिए 1:1, और स्टोरी व वर्टिकल विज्ञापनों के लिए 9:16 इस्तेमाल करें।
आउटपुट फ़ॉर्मेट चुनें। JPG डिफ़ॉल्ट है, WebP छोटी फ़ाइलें देता है, PNG हर पिक्सल रखता है।
हर रन में कितनी इमेज चाहिए, यह तय करें (एक या दो)। जब कोई नतीजा सही लगे, तो उसे दोबारा बनाने के लिए सीड लॉक कर दें।
जेनरेट करें, फिर इस्तेमाल की गई हर सेटिंग लिख लें। वही सटीक नाम बाद में API बॉडी में जाएँगे।
ब्राउज़र के फ़ील्ड रिक्वेस्ट बॉडी से एक-से-एक मेल खाते हैं, इसलिए कुछ भी अनुवाद में खोता नहीं है:
फ़ील्ड
डिफ़ॉल्ट
नोट्स
prompt
कोई नहीं (ज़रूरी)
सादी भाषा में विवरण, अधिकतम 4,000 अक्षर
aspect_ratio
1:1
इसके अलावा 16:9, 9:16, 4:3, 3:4, 3:2, 2:3
seed
रैंडम
पूर्णांक, दोहराए जा सकने वाले आउटपुट के लिए सेट करें
output_format
jpg
jpg, png या webp
output_quality
80
0 से 100, केवल JPG और WebP पर लागू
num_outputs
1
प्रति कॉल एक या दो इमेज
💡 चालीस प्रॉम्प्ट हाथ से लिखना जल्दी उबाऊ हो जाता है। GPT 5 Mini या Claude 4.5 Haiku जैसे चैट मॉडल में वेरिएशन का ड्राफ़्ट बनाएँ, सबसे अच्छे चुनें, और उन्हें उस स्प्रेडशीट में चिपकाएँ जिससे आपका वर्कफ़्लो पढ़ता है।
n8n क्रेडेंशियल सेट करें
ज़्यादातर असफल सेटअप यहीं टूटते हैं, वर्कफ़्लो में नहीं। इस पर दो मिनट लगाएँ, फिर आपको ऑथेंटिकेशन के बारे में दोबारा नहीं सोचना पड़ेगा।
API टोकन बनाएँ
अपने PicassoIA अकाउंट में API पेज खोलें और एक टोकन बनाएँ। यह pia_sk_ से शुरू होगा। उसे तुरंत किसी पासवर्ड मैनेजर में कॉपी करें। चूँकि एक अकाउंट में अधिकतम दो टोकन हो सकते हैं, एक प्रोडक्शन n8n के लिए रखें और दूसरा लोकल टेस्टिंग के लिए, ताकि आप दोनों में से किसी को भी रद्द कर सकें और दूसरा न टूटे।
n8n को शामिल करने से पहले इसे टर्मिनल से टेस्ट करें:
curl -s -X POST https://api.picassoia.com/v1/models/picassoia/picassoia-image/predictions \
-H "Authorization: Bearer $PICASSOIA_TOKEN" \
-H "Content-Type: application/json" \
-d '{"input":{"prompt":"Ceramic mug on linen, window light from the left, 50mm","aspect_ratio":"16:9"}}'
JSON रिस्पॉन्स में id आना इस बात का संकेत है कि टोकन काम करता है। GET https://api.picassoia.com/v1/predictions/<id> से पोल करें जब तक स्टेटस succeeded न दिखाए, फिर output फ़ील्ड का आकार देखें। एक मिनट में आपको उस आकार की ज़रूरत होगी।
n8n में सेव करें
n8n में Credentials खोलें, एक नया Header Auth क्रेडेंशियल बनाएँ और उसे ऐसे भरें:
Name:Authorization
Value:Bearer pia_sk_ और उसके बाद आपका टोकन, "Bearer" के बाद एक स्पेस के साथ
Credential name:PicassoIA API
टोकन को कभी Set नोड में या सीधे HTTP Request फ़ील्ड में न चिपकाएँ। वह एक्ज़ीक्यूशन लॉग और उस हर वर्कफ़्लो में पहुँच जाता है जिसे आप एक्सपोर्ट या शेयर करते हैं। सेव किया गया क्रेडेंशियल दोनों से बाहर रहता है। सेल्फ़-होस्टेड इंस्टेंस पर आप इसे environment variable से भी दे सकते हैं, लेकिन ज़्यादातर टीमों के लिए क्रेडेंशियल स्टोर सरल है और काफ़ी है।
वर्कफ़्लो, नोड दर नोड
पूरा ढाँचा यह है। आठ नोड, एक लूप:
#
नोड
उसका काम
1
Schedule Trigger या Webhook
रन शुरू करता है
2
Edit Fields (Set)
प्रॉम्प्ट, आस्पेक्ट रेशियो और फ़ॉर्मेट रखता है
3
HTTP Request (POST)
प्रेडिक्शन बनाता है
4
Wait
कुछ सेकंड रुकता है
5
HTTP Request (GET)
जॉब का स्टेटस पढ़ता है
6
Switch या IF
succeeded, failed या "अभी चल रहा है" पर रूट करता है
7
HTTP Request (GET, file)
पूरी हुई इमेज डाउनलोड करता है
8
Drive, S3 या Write Files
उसे आपकी ज़रूरत की जगह पर सेव करता है
ट्रिगर और प्रॉम्प्ट नोड
अगर काम रूटीन है तो Schedule Trigger से शुरू करें, और अगर कोई दूसरा टूल आपसे इमेज माँग सके तो Webhook से। उसके बाद एक Edit Fields नोड लगाएँ जो तीन स्ट्रिंग फ़ील्ड सेट करे: prompt, aspect_ratio और output_format। इन्हें एक ही नोड में रखने से कोई सेटिंग पाँच जगह बदलने के बजाय एक बार बदलनी पड़ती है।
प्रेडिक्शन बनाएँ
एक HTTP Request नोड जोड़ें और उसका नाम Create prediction रखें। मेथड POST और URL https://api.picassoia.com/v1/models/picassoia/picassoia-image/predictions सेट करें। ऑथेंटिकेशन में Generic Credential Type, फिर Header Auth, फिर अपना PicassoIA API क्रेडेंशियल चुनें। Send Body चालू करें, JSON चुनें, और यह बॉडी इस्तेमाल करें:
अगर आपके प्रॉम्प्ट में quotation marks या line breaks हो सकते हैं, तो बॉडी को एक्सप्रेशन के रूप में बनाएँ: {{ JSON.stringify({ input: { prompt: $json.prompt, aspect_ratio: $json.aspect_ratio, output_format: $json.output_format, num_outputs: 1 } }) }}. यह एक बदलाव a sign that says "OPEN" जैसे प्रॉम्प्ट पर होने वाली पुरानी "invalid JSON" एरर को रोक देता है।
रिस्पॉन्स में जॉब id आता है। बाकी वर्कफ़्लो को असल में बस यही एक वैल्यू चाहिए।
Wait और पोल
एक Wait नोड जोड़ें जो समय अंतराल के बाद फिर से शुरू हो, शुरुआत में पाँच सेकंड। फिर Check prediction नाम का दूसरा HTTP Request नोड लगाएँ, मेथड GET और यह URL के साथ:
नतीजा एक Switch नोड में डालें जो {{ $json.status }} पढ़े और succeeded को डाउनलोड स्टेप पर, failed को आपकी एरर ब्रांच पर भेजे, और बाकी सब कुछ वापस Wait नोड पर। वही पीछे की ओर जाने वाला कनेक्शन आपका लूप है।
दो आदतें लूप को सुरक्षित रखती हैं। पहली, प्रयास गिनें। एक छोटा Code नोड जो attempts फ़ील्ड बढ़ाए और 30 पर रुके, उस जॉब से बचा लेगा जो कभी पूरा नहीं होता। दूसरी, काम जितनी तेज़ी से होता है उससे तेज़ पोल न करें। इमेज जल्दी पूरी होती हैं, इसलिए तीन से पाँच सेकंड का अंतराल काफ़ी है, और हर आधे सेकंड पर स्टेटस एंडपॉइंट पर बार-बार दस्तक देना सिर्फ़ एक्ज़ीक्यूशन खर्च करता है।
इमेज डाउनलोड करें
अब आउटपुट। एक तीसरा HTTP Request नोड जोड़ें, मेथड GET, और URL में पूरी हुई जॉब का इमेज पता लगाएँ। एक आउटपुट के लिए यह आम तौर पर {{ $json.output[0] }} होता है, लेकिन लूप को एक टेस्ट प्रॉम्प्ट के साथ एक बार चलाएँ और उस एक्सप्रेशन पर भरोसा करने से पहले एक्ज़ीक्यूशन पैनल में आकार देख लें। नोड के Options में Response जोड़ें, Response Format को File पर सेट करें और binary property को data ही रहने दें।
यहाँ से इमेज n8n की एक सामान्य binary फ़ाइल है। इसे Google Drive, S3, WordPress media endpoint, Slack या किसी लोकल फ़ोल्डर में भेजें। रिज़ल्ट लिंक के बजाय फ़ाइल खुद सेव करें, ताकि आपका आर्काइव कभी इस बात पर निर्भर न रहे कि कोई URL ज़िंदा रहता है या नहीं।
विफलताएँ और सीमाएँ संभालें
जो वर्कफ़्लो एक बार चलता है वह डेमो है। जो वर्कफ़्लो सोमवार सुबह 200 पंक्तियाँ झेल ले, वह टूल है। फ़र्क ज़्यादातर इसी हिस्से में है।
पाँच कंकरंट जॉब के नीचे रहें
यही जाल है। POST कॉल एक सेकंड के अंश में लौट आती है, इसलिए 50 पंक्तियों से भरा HTTP Request नोड लगभग तुरंत 50 जॉब शुरू कर देगा, पहला जॉब खत्म होने से बहुत पहले। एक समय में सिर्फ़ पाँच चल सकते हैं, और बाकी या तो ठुकरा दिए जाएँगे या कतार में लगेंगे, यह इस पर निर्भर है कि API कैसे जवाब देता है।
इसका हल है क्रिएट स्टेप से पहले रखा गया Loop Over Items नोड, जिसका batch size 5 हो। हर बैच पाँच जॉब बनाता है, उन्हें तब तक पोल करता है जब तक पाँचों पूरे न हो जाएँ, फ़ाइलें सेव करता है, और तभी अगले पाँच के लिए वापस लौटता है। याद रखें कि यह सीमा पूरे अकाउंट में साझा है, MCP कनेक्शन समेत। अगर कोई सहकर्मी उसी समय किसी जुड़े असिस्टेंट से इमेज बना रहा है, तो आप वही पाँच स्लॉट साझा कर रहे हैं।
विफल प्रेडिक्शन को रीट्राई करें
failed स्टेटस हमेशा आपकी गलती नहीं होता। उसे एक छोटे Wait (दस सेकंड चलता है) पर रूट करें, फिर वही प्रॉम्प्ट एक बार और भेजें। अगर दूसरी कोशिश भी विफल हो, तो रीट्राई रोकें और Slack, Gmail या Telegram नोड से किसी को सूचित करें। हमेशा के लिए रीट्राई करने से बस खराब प्रॉम्प्ट छिपता है।
सामान्य नेटवर्क दिक्कतों के लिए HTTP Request नोड के Settings टैब में जाकर Retry On Fail चालू करें, तीन प्रयास और दो सेकंड का अंतराल रखें। इससे टूटे कनेक्शन संभल जाते हैं, बिना आपके लूप लॉजिक को छुए।
प्रॉम्प्ट की लंबाई और रिक्वेस्ट का आकार
प्रॉम्प्ट अधिकतम 4,000 अक्षरों तक सीमित हैं। अगर आपके प्रॉम्प्ट यूज़र इनपुट से या किसी लैंग्वेज मॉडल से आते हैं, तो उन्हें API तक पहुँचने से पहले Code नोड में $json.prompt.slice(0, 4000) से काट लें। 10 MB बॉडी की सीमा सिर्फ़ टेक्स्ट वाली इमेज जनरेशन में आपको परेशान नहीं करेगी, लेकिन एडिटर मॉडल को सोर्स तस्वीरें भेजते ही यह मायने रखने लगती है।
फिर भी कुछ टूटे, तो यह टेबल आम कारण बताती है:
लक्षण
संभावित कारण
समाधान
401 Unauthorized
Bearer प्रीफ़िक्स गायब या गलत टोकन
क्रेडेंशियल वैल्यू को Bearer pia_sk_... के रूप में दोबारा डालें
बल्क रन में जॉब ठुकराए गए
एक साथ 5 से ज़्यादा प्रेडिक्शन
batch size 5 वाला Loop Over Items
output[0] undefined है
स्टेटस succeeded होने से पहले आउटपुट पढ़ा गया
केवल succeeded ब्रांच को डाउनलोड नोड पर रूट करें
डाउनलोड नोड JSON लौटाता है
Response Format डिफ़ॉल्ट पर छोड़ा गया
Response Format को File पर सेट करें
प्रॉम्प्ट ठुकराया गया
4,000 अक्षरों से ज़्यादा
Code नोड में प्रॉम्प्ट काटें
वर्कफ़्लो कभी खत्म नहीं होता
पोलिंग प्रयासों पर कोई सीमा नहीं
30 पोल के बाद रुकें और किसी को अलर्ट करें
सटीक एरर कोड API से ही आते हैं, इसलिए अंदाज़ा लगाने से पहले फ़ेल हुआ एक्ज़ीक्यूशन खोलें और रिस्पॉन्स बॉडी पढ़ें।
तीन वर्कफ़्लो जो बनाने लायक हैं
वही लूप बहुत अलग कामों को चलाता है। ट्रिगर और गंतव्य बदलें, बीच का हिस्सा रखें।
शेड्यूल पर ब्लॉग हेडर
एक Schedule Trigger को Google Sheets नोड की ओर इंगित करें जो todo चिह्नित पंक्तियाँ लौटाए। प्रॉम्प्ट लेख के शीर्षक और एक तय स्टाइल लाइन से बनाएँ: "documentary photograph, natural light, 35mm, no text"। 16:9 पर जेनरेट करें, अपनी मीडिया लाइब्रेरी में अपलोड करें, और फ़ाइल URL को done स्टेटस वाली पंक्ति में वापस लिखें। एक एडिटर शाम को बीस शीर्षक कतार में डाल सकता है और सुबह बीस हेडर इंतज़ार करते मिलेंगे।
स्प्रेडशीट से प्रोडक्ट शॉट
हर प्रोडक्ट के लिए एक पंक्ति, जिसमें प्रोडक्ट नाम, मटीरियल और सेटिंग के कॉलम हों। 1:1 पर जेनरेट करें, num_outputs को 2 पर सेट करें ताकि आप बेहतर फ़्रेम चुन सकें, और हर प्रोडक्ट लाइन के लिए एक सीड रखें ताकि पूरे कैटलॉग में रोशनी एक-सी रहे। जिन शॉट्स में गढ़े हुए नहीं, बल्कि मौजूदा फ़ोटो में बदलाव चाहिए, उनके लिए वह फ़ोटो दूसरे HTTP Request नोड के साथ PicassoIA Image Editor Pro मॉडल से भेजें। उसके सटीक इनपुट फ़ील्ड जानने के लिए मॉडल पेज देखें।
Webhook से सोशल पोस्ट
कोई फ़ॉर्म, Slack कमांड या दूसरा वर्कफ़्लो एक छोटे ब्रीफ़ के साथ आपके Webhook नोड को कॉल करे। Respond to Webhook नोड से तुरंत "got it" का जवाब दें, फिर जेनरेशन बैकग्राउंड में चलाएँ और जॉब सफल होने पर पूरी हुई 9:16 इमेज चैनल में पोस्ट करें। लोग खुश रहते हैं, क्योंकि इमेज रेंडर होते समय कुछ अटकता नहीं।
सही मॉडल चुनें
लिखने के समय API चार मॉडल देता है: इमेज के लिए दो और वीडियो के लिए दो। आपके n8n वर्कफ़्लो के लिए इमेज वाली जोड़ी ही पूरा फ़ैसला है।
कैटलॉग के बाकी मॉडल अब भी काम के हैं, बस आज API के ज़रिए नहीं। P Image और FLUX Schnell जैसे मॉडल ब्राउज़र में आज़माने लायक हैं, ताकि अलग-अलग स्टाइल की तुलना की जा सके, और प्लेटफ़ॉर्म अपने सभी मॉडल पेज के ज़रिए बैकग्राउंड हटाना, अपस्केलिंग और वीडियो इफ़ेक्ट्स की बड़ी लाइब्रेरी भी देता है। एक काम का तरीका: ब्राउज़र में कोई लुक आज़माएँ, फिर जो प्रॉम्प्ट और सीड सबसे अच्छा रहे, उसे n8n में दोबारा चलाएँ।
आज ही अपनी पहली इमेज चलाएँ
अब आपके पास एक काम करने वाला लूप बनाने की हर चीज़ है: सुरक्षित रखा गया टोकन, जॉब बनाने वाला POST, उसे पोल करने वाला Wait और Switch, नतीजा सेव करने वाला File डाउनलोड, और कंकरंट सीमा का सम्मान करने वाले पाँच-पाँच के बैच। इसे साबित करने का सबसे तेज़ तरीका है पहला संस्करण छोटा रखना। एक Edit Fields नोड, एक प्रॉम्प्ट, कोई स्प्रेडशीट नहीं, कोई loop over items नहीं। जब वह अकेली इमेज आपके फ़ोल्डर में आ जाए, तब बैच और शेड्यूल जोड़ें।
ब्राउज़र में PicassoIA Image खोलें, किसी ऐसी चीज़ का प्रॉम्प्ट लिखें जिसकी इस हफ़्ते आपको सच में ज़रूरत है, और उसे जेनरेट करें। फिर वही सटीक प्रॉम्प्ट, आस्पेक्ट रेशियो और सीड ऊपर वाले n8n वर्कफ़्लो में कॉपी करें। एक ही प्रॉम्प्ट से 16:9 हेडर, वर्ग आकार का प्रोडक्ट टाइल और वर्टिकल स्टोरी बनाकर देखें कि आपकी टीम पहले किसे उठाती है। जो भी आप आज़माएँ, वह Picasso IA पर एक क्लिक दूर है, इसलिए अब बस रन दबाना बाकी है।