Eine FLUX1-API, die von einem Drittanbieter zur Verfügung gestellt wurde, um Eingabeaufforderungen in URLs zu verbinden (https://api-flux1.api4gpt.com/?prompt=), war der Basisdienst für das kostenlose Lead-Generierungs-Tool dieser Website, das vor kurzem abgeschaltet wurde, was zu einem erheblichen Rückgang der täglichen Besucher dieser Website führte. Diese API kann gelesen werden Vollblut-FLUX.1: FLUX online ohne lokalen Einsatz nutzen Sie wird am Ende des Artikels beschrieben. Darüber, wie FLUX1 API verwenden, um Verkehr zu gewinnen, können Sie diese Website Artikel über Wenxin Intelligent Body, die offen geteilt wurde suchen, aber leider viele Menschen nicht erkennen, seine Bedeutung.
Zurück zum Thema, die kostenpflichtige FLUX1 API ist wirklich unerschwinglich, ich habe schon gehört, dass die Durchfluss auf Siliziumbasis Bietet eine kostenlose FLUX1 API, aber ich weiß nicht, Code, wissen die englischen Worte sind begrenzt, und keine freien Server, um den Dienst bereitstellen, ist es schwierig hier ......
Dieser Artikel ist vor allem, um Ideen auszutauschen, und nicht eine vollständige Operation Prozess, das Ende des Artikels, um direkt verfügbar Projekt-Code bieten.
In den Denkmodus gehen...
1. ist die freie Grenzfläche des auf Silizium basierenden Flusses stabil...
2. was soll ich tun, wenn sich die freie Schnittstelle wieder schließt...
3. wie der Code geschrieben ist...
4. das Kernproblem ist: als Basisdienst ist das größte Problem, dass die Zugangsadresse im Falle von schnellen Vermittlungsdiensten unverändert bleibt, ohne die Nutzung bestehender Nutzer zu beeinträchtigen, wenn für die Nutzung gezahlt wird, können die Kosten wieder eingesackt werden, warum nicht?
etw. projizieren
1. ich werde eine URL mit demselben Format erstellen, aber diese URL ist meine, wählen Sie den Domainnamen img.kdjingpai.com
2. eine einfache API-Schnittstellendokumentation, die in das große Modell eingegeben wird, sollte in der Lage sein, lauffähigen Code zu schreiben
3. hoffentlich für Cloudflare Worker eingesetzt werden kann (ich weiß nicht, was Worker eigentlich unterstützen)
4. übermäßige Anforderungen, die ursprüngliche Schnittstelle unterstützt nur Spleißen Stichwort Worte, in der Tat gibt es eine Reihe von Bedürfnissen nicht erfüllt wurden
Arbeitsablauf
Suchen Sie die kostenlose FLUX-Schnittstellendokumentation für Silicon Mobility, und suchen Sie selbst nach der Schnittstellenadresse und dem KEY.
Die Dokumentation wurde zusammengestellt und in Claude eingefügt, mit der klaren Anweisung, den Code für die Arbeiter zu erstellen, und die erste Runde ergab einen ausführbaren Code.
In der Tat, hier am Ende, solange der Code, um die Arbeitnehmer an einen Domain-Namen gebunden werden kann in der inländischen normalen Zugang, sagte nur die ursprüngliche Schnittstelle einige der Bedürfnisse nicht erfüllt wurden, so dass der Code wieder auf der Grundlage der weiterhin zu optimieren.
Nachfrage 1
Die Größe des erzeugten Bildes kann in der URL geändert werden; wenn keine Bildgröße eingegeben wird, wird standardmäßig ein 512x512 Bild erzeugt (dies wird in das große Modell eingegeben, um den neuen Code zu erhalten)
Spätestens jetzt werden Sie feststellen, dass die Claude-Quote möglicherweise nicht ausreicht, dann wird die unbegrenzte Quote von Claude Mirror Station: Sonnet, Haiku, Opus vollständige Palette von Modellen für frei! Es kann losgehen.
Nachfrage 2
Wenn die Eingabeaufforderung Wort Chinesisch, kann nicht normal und korrekt generiert Bilder, so dass die Eingabeaufforderung Teil der Umwandlung in Englisch, zu diesem Zeitpunkt die Notwendigkeit für ein großes Modell oder Übersetzung Schnittstelle, um die freie Übersetzung Schnittstelle ist zu faul, um zu finden, die Allgemeinheit ist nicht stark, so möchte ich auf eine Kostenlose Big Model API Hier habe ich mich für das GLM-4-Flash von Wisdom Spectrum entschieden.
Geben Sie die Dokumentation der GLM-4-Flash-Schnittstelle ein und generieren Sie bei Bedarf Code:
Dem Code wurde ein neues Snippet hinzugefügt, das die Übersetzung übernimmt. Leider wird dieses Snippet bei einer einzigen Eingabeaufforderung korrekt ausgeführt, so dass keine weiteren Tests durchgeführt wurden:
Nachfrage 3
Die vom Benutzer eingegebenen Prompt-Worte können zu einfach sein, und die generierte Bildkomposition und die Elemente sehen nicht so gut aus, es ist nur von der großen Modell-API von Anforderung 2 geliehen, um die vom Benutzer eingegebenen Prompt-Worte zu optimieren, die Funktion der Optimierung der Prompt-Worte als Parameter kann in die URL eingespleißt werden, dieses Mal habe ich ChatGPT für die Konversation verwendet, und bekam den folgenden Code, und natürlich, die Anleitung, wie man die Komposition optimiert, wird von mir separat bereitgestellt:
Bei zu komplexen Anweisungen kann das erzeugte Bild leicht aus der Form geraten, und das Ausgabeformat des optimierten Stichworts ist nicht stabil. Daher wurden mehrere Optimierungsrunden für das Stichwort der Anforderung 3 als separate Aufgabe durchgeführt, um die folgenden Anweisungen zu erhalten:
Nachfrage 4
Als technische weiß, sehr ungewohnt für den Betrieb in der Kommandozeile, und wird nicht auf die Fehlermeldung zu suchen, so fragte ich das große Modell, um eine GUI-Schnittstelle zu generieren, Code-Ausführung in jeder Ausnahme ist auch erforderlich, um direkt die Schnittstelle, die das tägliche Debugging der Benutzerfreundlichkeit löst.
Erleben Sie dieses bescheidene Interface: https://img.kdjingpai.com/GUI/ (bitte verwenden Sie es nicht im öffentlichen Dienst, verschonen Sie mich...)
Endprodukt
Es wird eine Hilfe in den Code geschrieben und eine grafische Oberfläche zur Verfügung gestellt, nicht um die Benutzererfahrung zu verbessern, sondern als Teil des Codes, um das große Modell auf natürliche Weise als Denkkontext zu verändern und Fehler zu vermeiden. Ein zu langer Code kann jedoch immer noch dazu führen, dass das große Modell falsch interpretiert wird, was einen Kompromiss erfordert.
Das Hinzufügen von vollständigen Kommentaren und die Verwendung der Hilfe sind gute Gewohnheiten für die durchschnittliche Person, die Code schreibt.
Als Nächstes bat ich Claude, den Code in mehreren Runden zu optimieren, und erhielt den folgenden vollständigen Code. Tatsächlich gibt es noch viel Raum für Optimierungen, z. B. sagt mir das große Modell, dass es besser ist, Variablen zu abstrahieren, um die Sicherheit des Programms zu gewährleisten, die Anzahl der Beurteilungsrunden zu verringern und Probleme wie die Logik der Anforderungsverzögerung zu behandeln, auf die ich nicht eingehen werde. Bitte kopieren und einfügen, um sie direkt zu verwenden:
Die vollständige Einsatzdokumentation finden Sie unter: https://github.com/pptt121212/freefluxapi
// Constants const IMAGE_API_URL = 'https://api.siliconflow.cn/v1/image/generations'; const IMAGE_API_KEY = ''; const PROCESS_API_URL = 'https://open.bigmodel.cn/api/paas/v4/chat/completions'; const PROCESS_API_KEY = ''; const DEFAULT_SIZE = '512x512'; const SIZE_REGEX = /^\d+x\d+$/; const NON_ASCII_REGEX = /[^\x00-\x7F]/; addEventListener('fetch', event => { event.respondWith(handleRequest(event.request)); }); async function handleRequest(request) { try { const url = new URL(request.url); // Check if the request is for the GUI page if (url.pathname === '/GUI/') { return new Response(getGuiPage(), { headers: { 'Content-Type': 'text/html' } }); } const prompt = url.searchParams.get('prompt'); // Check if the prompt is valid if (!prompt) { return new Response(getUsageInstructions(), { headers: { 'Content-Type': 'text/html' } }); } const { size, optimization } = parseRequestParams(request); const processedPrompt = await getProcessedPrompt(prompt, optimization); const imageUrl = await getImageUrl(processedPrompt, size); return await fetchAndReturnImage(imageUrl); } catch (error) { return new Response(error.message, { status: error.status || 500 }); } } function parseRequestParams(request) { const url = new URL(request.url); const size = url.searchParams.get('size') || DEFAULT_SIZE; const optimization = url.searchParams.get('optimization') === '1'; if (!SIZE_REGEX.test(size)) { throw new Error('Invalid size parameter. Use format: widthxheight'); } return { size, optimization }; } async function getProcessedPrompt(prompt, optimization) { if (!NON_ASCII_REGEX.test(prompt) && !optimization) { return prompt; } return processPrompt(prompt, optimization); } async function getImageUrl(prompt, size) { const response = await fetch(IMAGE_API_URL, { method: 'POST', headers: { 'Accept': 'application/json', 'Authorization': `Bearer ${IMAGE_API_KEY}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ model: "black-forest-labs/FLUX.1-schnell", prompt, image_size: size }) }); if (!response.ok) { throw new Error(`API error: ${response.status}`); } const data = await response.json(); const imageUrl = data?.images?.[0]?.url; if (!imageUrl) { throw new Error('Unexpected API response format'); } return imageUrl; } async function fetchAndReturnImage(imageUrl) { const imageResponse = await fetch(imageUrl); const imageBlob = await imageResponse.blob(); return new Response(imageBlob, { headers: { 'Content-Type': imageResponse.headers.get('Content-Type') } }); } async function processPrompt(text, optimize) { const content = optimize ? ` # 优化以下图像prompt,保留prompt主要元素基础上使细节、构图更加丰富: ## 图像prompt: ${text} ## 优化要求 1. 优化后的图像prompt是一组<英文TAG标签>,每个TAG应该遵循构图的基本原则,将画风、构图、主体、动作、场景、元素、按顺序进行描述。 2. <英文TAG标签>中每个词组用逗号","分割,逗号","前后不允许有"空格"。 # 仅仅输出优化后的图像prompt,不要有其他说明: ` : `请将以下内容翻译为英文,保持原意:${text}`; const response = await fetch(PROCESS_API_URL, { method: 'POST', headers: { 'Authorization': `Bearer ${PROCESS_API_KEY}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ model: "GLM-4-Flash", messages: [{ role: "user", content }] }) }); if (!response.ok) { throw new Error(`Translation/Optimization API error: ${response.status}`); } const data = await response.json(); return data.choices?.[0]?.message?.content?.trim() || text; } // 函数:返回使用说明的HTML内容 function getUsageInstructions() { return ` <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>使用说明</title> </head> <body> <h1>使用说明</h1> <p>欢迎使用图像生成 API!请按照以下步骤生成您的图像:</p> <h2>1. 请求格式</h2> <p>访问 API 的 URL 格式如下:</p> <pre>https://your-worker-url/?prompt={您的提示}&size={图像尺寸}&optimization={优化选项}</pre> <h3>参数说明</h3> <ul> <li><strong>prompt</strong>: (必填) 您想要生成图像的描述文本,例如“一位女孩”。</li> <li><strong>size</strong>: (可选) 图像的尺寸,格式为 <code>宽度x高度</code>,默认为 <code>512x512</code>。例如:<code>256x256</code> 或 <code>1024x768</code>。</li> <li><strong>optimization</strong>: (可选) 是否进行优化,值为 <code>1</code> 表示进行优化,值为 <code>0</code> 或不提供该参数表示不进行优化。</li> </ul> <h2>2. 返回结果</h2> <p>访问 API 后,您将获得生成的图像。若请求成功,您将看到生成的图像。如果请求失败,您会看到错误信息。</p> <h2>3. 示例请求</h2> <p>您可以通过以下示例请求生成图像:</p> <pre>https://your-worker-url/?prompt=一位女孩&size=512x512&optimization=1</pre> <p>此请求将生成一幅描述为“一位女孩”的图像,并将其大小设置为 512x512 像素,并进行优化。</p> <h2>4. 注意事项</h2> <ul> <li>确保您的 <code>prompt</code> 参数包含有效的描述。</li> <li><code>size</code> 参数应遵循 <code>宽度x高度</code> 格式。</li> <li>如果使用优化功能,确保 <code>prompt</code> 中包含非 ASCII 字符。</li> </ul> <p>如有任何问题,请随时联系支持团队!</p> </body> </html> `; } // 添加图形化用户界面功能 function getGuiPage() { return ` <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>图像生成 GUI</title> </head> <body> <h1>图像生成</h1> <form id="imageForm"> <label for="prompt">图像描述:</label><br> <input type="text" id="prompt" required><br><br> <label for="size">图像尺寸 (格式: 宽度x高度,默认: 512x512):</label><br> <input type="text" id="size" value="512x512" required><br><br> <label for="optimization">是否优化:</label><br> <select id="optimization"> <option value="0">不优化</option> <option value="1">优化</option> </select> <p>优化选项说明: 选择“优化”将使生成的图像具有更丰富的细节和构图。</p><br> <button type="submit">生成图像</button> </form> <h2>生成结果:</h2> <div id="result"></div> <div id="status"></div> <script> document.getElementById('imageForm').addEventListener('submit', async (event) => { event.preventDefault(); const prompt = document.getElementById('prompt').value; const size = document.getElementById('size').value; const optimization = document.getElementById('optimization').value; // 更新状态信息 document.getElementById('status').innerText = '正在处理请求...'; try { const response = await fetch(\`/\?prompt=\${encodeURIComponent(prompt)}&size=\${size}&optimization=\${optimization}\`); if (response.ok) { const blob = await response.blob(); const img = document.createElement('img'); img.src = URL.createObjectURL(blob); img.style.maxWidth = '100%'; document.getElementById('result').innerHTML = ''; document.getElementById('result').appendChild(img); document.getElementById('status').innerText = '图像生成成功!'; } else { document.getElementById('result').innerText = '生成图像失败: ' + response.statusText; document.getElementById('status').innerText = '请求失败,状态码: ' + response.status; } } catch (error) { document.getElementById('result').innerText = '生成图像过程中出现错误: ' + error.message; document.getElementById('status').innerText = '错误信息: ' + error.message; } }); </script> </body> </html> `; }
Die Menschen neigen dazu, das zu wollen, was sie wollen...
Der endgültige Git-Code optimiert viele Details, insbesondere die Abstraktion von einzeln zu verwaltenden KEYs und die Abfrage von mehreren KEYs.
Dann wird ein Wordpress-Bilderzeugungs-Widget entsprechend dem Code generiert, das Sie auf der rechten Seite der Beitragsseite sehen können.
Eine Sache, die ich bedauere: Ich würde gerne einen Cache der generierten Bilder und der entsprechenden URLs behalten, um zu vermeiden, dass Bilder neu generiert werden, wenn der Benutzer die URL wiederholt öffnet oder aktualisiert. Die Logik dieser Funktion ist kompliziert, also gebe ich es vorerst auf.
Bis zu diesem Punkt, ein völliger Mangel an Verständnis für den Code des weißen Mannes gilt als ein sehr einfaches Werkzeug zu schreiben, denken Sie bitte daran, dass der gesamte Code-Generation Prozess der logischen Kämmen ist wichtiger als die hervorragende Anweisungen, bitte Schritt für Schritt zu sortieren, die Logik eines vernünftigen funktionalen Iteration, von der ersten bis zur zweiten, von klein bis groß.
Diese API wird verwendet, um die URL des generierten Bildes in das Prompt-Wort einzufügen:Wenxin Intelligent Body Traffic Tipps: Generieren Sie Texte, Bilder und URLs, um Besucher auf Ihre Website zu leiten
Ich glaube nicht, dass Leute, die nicht programmieren können, eine vollständige Reihe von Projekten schreiben können. Ich selbst bezweifle das jedenfalls, und diese Übung, die für einen Weißen sozusagen das Limit darstellt, hat 9 Stunden gedauert, also danke für Ihre Geduld beim Lesen.