Fermeture de l'interface FLUX1 de White john, entraînant une grosse perte de trafic sur ce site... Eh bien, nous avons trouvé comment déployer l'API FLUX1 gratuitement !
Une API FLUX1 fournie par un tiers pour insérer des mots clés dans les URL (https://api-flux1.api4gpt.com/?prompt=) était le service de base de l'outil gratuit de génération de leads de ce site, qui a récemment été fermé, ce qui a entraîné une baisse importante du nombre de visiteurs quotidiens sur ce site. Cette API peut être lue Full Blooded FLUX.1 : Utiliser FLUX en ligne sans déploiement local Il est décrit à la fin de l'article. Pour savoir comment utiliser l'API FLUX1 pour attirer du trafic, vous pouvez consulter l'article de ce site sur le corps intelligent Wenxin, qui a été partagé ouvertement, mais dont beaucoup de gens ne réalisent malheureusement pas l'importance.
Pour en revenir au sujet, l'API FLUX1 payante est vraiment inabordable, j'ai déjà entendu dire que l'API FLUX1 payante n'était pas abordable. Flux à base de silicium Fourni une API FLUX1 gratuite, mais je ne connais pas le code, les mots anglais sont limités, et il n'y a pas de serveur gratuit pour déployer le service, c'est difficile ici ......
Cet article est principalement destiné à partager des idées, et ne fournit pas un processus d'opération complet, la fin de l'article pour fournir le code de projet directement disponible.
Passez en mode réflexion...
1) L'interface libre du flux à base de silicium est-elle stable ?
2) Que dois-je faire si l'interface libre se referme...
3. comment le code est écrit...
4) La question centrale est la suivante : en tant que service de base, le plus gros problème est que l'adresse d'accès reste inchangée dans le cas des services de commutation rapide, sans affecter l'utilisation des utilisateurs existants, si l'on paie pour utiliser le coût, pourquoi ne pas l'empocher ?
projeter qqch.
1. je vais construire une URL avec le même format, mais cette URL est la mienne, choisissez le nom de domaine img.kdjingpai.com
2. une interface de documentation API simple pour l'entrée dans le grand modèle devrait permettre d'écrire un code exécutable
3. on peut espérer être déployé sur des travailleurs cloudflare (je ne comprends pas vraiment ce que les travailleurs supportent)
4. des exigences excessives, l'interface d'origine ne prend en charge que l'épissage des mots de repère, en fait, certains besoins n'ont pas été satisfaits.
flux de travail
Trouvez la documentation gratuite sur l'interface FLUX pour Silicon Mobility, et recherchez l'adresse de l'interface et le CLÉ par vous-même.

La documentation a été rassemblée et collée sur Claude avec un message clair pour générer le code des travailleurs, et la première série a abouti à un code exécutable.

En fait, tant que le code des travailleurs liés à un nom de domaine peut être dans l'accès domestique normal, tout comme l'interface d'origine, certains des besoins n'ont pas été satisfaits, de sorte que le code continue d'être optimisé.
Demande 1
Permet de modifier la taille de l'image générée dans l'URL, si aucune taille d'image n'est saisie, une image de 512x512 est générée par défaut (elle est saisie dans le grand modèle pour obtenir le nouveau code).
A ce stade, vous comprendrez que le quota de Claude peut être insuffisant, alors le quota illimité de Claude Mirror Station : Sonnet, Haiku, Opus gamme complète de modèles gratuits ! Il est prêt à partir.
Demande 2
Lorsque le mot-clé saisi en chinois ne peut pas être généré normalement et correctement, la partie du mot-clé à convertir en anglais, il faut alors un grand modèle ou une interface de traduction pour compléter l'interface de traduction libre, qui est trop paresseuse pour être trouvée, la généralité n'est pas forte, c'est pourquoi je veux accéder à une interface de traduction en anglais. API Big Model gratuite Ici, j'ai choisi le GLM-4-Flash de Wisdom Spectrum.
Entrez dans la documentation de l'interface GLM-4-Flash et générez du code à la demande :

Un nouveau snippet a été ajouté au code pour prendre en charge la traduction, qui, malheureusement, s'exécute correctement à une seule invite, de sorte qu'aucun test de suivi n'a été effectué :

Demande 3
Les mots-guides saisis par l'utilisateur peuvent être trop simples, et la composition et les éléments de l'image générée n'ont pas l'air très bons, il suffit d'emprunter à l'API du grand modèle de l'exigence 2 pour optimiser les mots-guides saisis par l'utilisateur, la fonction d'optimisation des mots-guides en tant que paramètre peut être insérée dans l'URL, cette fois, j'ai utilisé ChatGPT pour la conversation, et j'ai obtenu le code suivant, et bien sûr, l'instruction sur la façon d'optimiser la composition est fournie par moi séparément :

Les instructions étant trop complexes, l'image générée peut facilement se déformer et le format de sortie du mot-clé optimisé n'est pas stable. Plusieurs cycles d'optimisation ont donc été effectués pour le mot-clé de l'exigence 3 en tant que tâche distincte, afin d'obtenir les instructions suivantes :

Demande 4
En tant que technicien blanc, très peu habitué à opérer en ligne de commande, et ne regardera pas le message d'erreur, j'ai donc demandé au grand modèle de générer une interface GUI, l'exécution du code dans toute exception est également nécessaire pour afficher directement l'interface, ce qui résout le débogage quotidien de la facilité d'utilisation.
Faites l'expérience de cette humble interface : https://img.kdjingpai.com/GUI/ (ne l'utilisez pas dans les services publics, épargnez-moi...)
Produit final
Une aide est écrite dans le code, ainsi qu'une interface graphique, non pas pour améliorer l'expérience de l'utilisateur, mais en tant que partie du code pour permettre au grand modèle d'être modifié naturellement en tant que contexte de réflexion, afin d'éviter les erreurs. Cependant, un code trop long peut toujours entraîner une mauvaise interprétation du grand modèle, ce qui nécessite un compromis.
L'ajout de commentaires complets et l'utilisation de l'aide est une bonne habitude pour la personne moyenne qui écrit du code.
En fait, il y a encore beaucoup de place pour l'optimisation, par exemple, le grand modèle me dit qu'il est préférable d'abstraire les variables pour assurer la sécurité du programme, pour réduire le nombre de tours de jugement, et pour traiter des questions telles que la logique de retard de la demande, que je ne traiterai pas. Veuillez copier et coller pour une utilisation directe :
La documentation complète sur le déploiement est disponible à l'adresse suivante : 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> `; }
Les gens ont tendance à vouloir ce qu'ils veulent...
Le code git final optimise de nombreux détails, en particulier en faisant abstraction des clés à gérer individuellement et des charges d'interrogation de plusieurs clés.
Ensuite, un widget wordpress de génération d'images est généré selon le code, que vous pouvez voir sur le côté droit de la page de l'article.
Je regrette une chose : j'aimerais conserver un cache des images générées et des URL correspondantes afin d'éviter de générer à nouveau des images lorsque l'utilisateur ouvre ou rafraîchit l'URL à plusieurs reprises. La logique de cette fonction étant compliquée, j'y renonce pour l'instant.
À ce stade, une incompréhension totale du code de l'homme blanc est considérée comme l'écriture d'un outil très simple, veuillez vous rappeler que l'ensemble du processus de génération de code de peignage logique est plus important que les superbes instructions, veuillez étape par étape pour trier la logique d'une itération fonctionnelle raisonnable, de la principale à la seconde, de la petite à la grande.
Cette API est utilisée pour insérer l'URL de l'image générée dans le mot clé :Wenxin Intelligent Body Traffic Tips : Générer du texte, des images, des URL de référence pour générer du trafic vers le site Web.
Ne croyez pas que des gens qui ne savent pas coder puissent écrire un ensemble très complet de projets, j'en doute moi-même en tout cas, et cet exercice, qui est un peu la limite pour un homme blanc, a duré 9 heures, alors merci pour votre patience à le lire.
© déclaration de droits d'auteur
Article copyright Cercle de partage de l'IA Tous, prière de ne pas reproduire sans autorisation.
Articles connexes
Pas de commentaires...