La interfaz FLUX1 de White John se cerró, lo que provocó una gran pérdida de tráfico en este sitio... Bueno, ¡averiguando cómo desplegar la API FLUX1 gratis!

Una API FLUX1 proporcionada por un tercero para empalmar palabras rápidas en URLs (https://api-flux1.api4gpt.com/?prompt=) era el servicio base para la herramienta gratuita de generación de leads de este sitio, que ha sido cerrada recientemente, lo que ha provocado que haya muchos menos visitantes diarios a este sitio. Esta API puede leerse Full Blooded FLUX.1: Utiliza FLUX Online sin despliegue local Se describe al final del artículo. Acerca de cómo utilizar FLUX1 API para atraer tráfico, puede buscar en el artículo de este sitio sobre Wenxin Cuerpo Inteligente, que se ha compartido abiertamente, pero por desgracia muchas personas no se dan cuenta de su importancia.

 

Volviendo al tema, la API FLUX1 de pago es realmente inasequible, he oído antes que el Flujo basado en silicio Proporcionó una API FLUX1 libre, pero no puedo código, conocer las palabras en inglés son limitadas, y no hay servidor gratuito para implementar el servicio, es difícil aquí ......

 

Este artículo es principalmente para compartir ideas, y no proporciona un proceso de operación completa, el final del artículo para proporcionar código del proyecto directamente disponible.

 

Entra en modo pensar...

1. ¿Es estable la interfaz libre del flujo a base de silicio...

2. ¿Qué debo hacer si la interfaz libre se cierra de nuevo...

3. Cómo está escrito el código...

4. La cuestión central es: como servicio básico, el mayor problema es que la dirección de acceso no se modifica en el caso de los servicios de conmutación rápida, sin afectar al uso de los usuarios existentes, si se paga por utilizar el coste se puede volver a embolsar ¿por qué no?

 

proyectar algo

1. Voy a construir una URL con el mismo formato, pero esta URL es mía, elija el nombre de dominio img.kdjingpai.com

2. Entrada de documentación de interfaz API sencilla para el modelo grande debe ser capaz de escribir código ejecutable

3. es de esperar que se puede implementar en los trabajadores cloudflare (en realidad no entiendo lo que los trabajadores de apoyo)

4. Excesivo algunos de los requisitos, la interfaz original sólo admite empalme palabras de referencia, de hecho, hay algunas necesidades no han sido satisfechas

 

flujo de trabajo

 

Encuentre la documentación gratuita de la interfaz FLUX para Silicon Mobility, y busque la dirección de la interfaz y la CLAVE por su cuenta.

白嫖FLUX1接口关闭,导致本站流量大折损...好吧,摸索如何免费部署FLUX1 API

 

Se recopiló la documentación y se pegó en Claude con un mensaje claro para generar el código de los trabajadores, y la primera ronda dio como resultado un código ejecutable.

白嫖FLUX1接口关闭,导致本站流量大折损...好吧,摸索如何免费部署FLUX1 API

 

De hecho, aquí en el extremo, siempre y cuando el código a los trabajadores vinculados a un nombre de dominio puede estar en el acceso normal doméstica, acaba de decir la interfaz original de algunas de las necesidades no se han cumplido, por lo que el código de nuevo sobre la base de seguir optimizando.

 

Demanda 1

Permitir cambiar el tamaño de la imagen generada en la URL, cuando no se introduce ningún tamaño de imagen, se genera por defecto una imagen de 512x512 (esto se introduce en el modelo grande para obtener el nuevo código).

En este punto se dará cuenta de que la cuota Claude puede ser insuficiente, entonces la cuota ilimitada de Claude Mirror Station: Soneto, Haiku, Opus ¡toda una gama de modelos gratis! Está listo.

 

Demanda 2

Cuando la palabra de entrada prompt chino, no puede ser normal y correctamente las imágenes generadas, por lo que la parte prompt de la conversión al Inglés, en este momento la necesidad de un gran modelo o interfaz de traducción para completar la interfaz de traducción libre es demasiado perezoso para encontrar, la generalidad no es fuerte, así que quiero acceder a un API gratuita Big Model Aquí elegí el GLM-4-Flash de Wisdom Spectrum.

Acceda a la documentación de la interfaz GLM-4-Flash y genere código bajo demanda:

白嫖FLUX1接口关闭,导致本站流量大折损...好吧,摸索如何免费部署FLUX1 API

 

Se ha añadido un nuevo fragmento al código para que se encargue de la traducción, que, lamentablemente, se ejecuta correctamente en una única solicitud, por lo que no se han realizado pruebas de seguimiento:

白嫖FLUX1接口关闭,导致本站流量大折损...好吧,摸索如何免费部署FLUX1 API

 

Demanda 3

Las palabras introducidas por el usuario puede ser demasiado simple, y la composición de la imagen generada y los elementos no se ven tan bien, es sólo prestado de la gran API modelo de requisito 2 para optimizar las palabras introducidas por el usuario, la función de optimización de las palabras como un parámetro puede ser empalmado en la URL, esta vez, he utilizado ChatGPT para la conversación, y obtuvo el siguiente código, y, por supuesto, la instrucción sobre cómo optimizar la composición es proporcionada por mí por separado:

白嫖FLUX1接口关闭,导致本站流量大折损...好吧,摸索如何免费部署FLUX1 API

 

Si las instrucciones son demasiado complejas, es fácil que la imagen generada se deforme, y el formato de salida de la palabra clave optimizada no es estable, por lo que se han llevado a cabo múltiples rondas de optimización para la palabra clave del requisito 3 como tarea independiente por sí sola, para obtener las siguientes instrucciones:

白嫖FLUX1接口关闭,导致本站流量大折损...好吧,摸索如何免费部署FLUX1 API

 

 

Demanda 4

Como un blanco técnico, muy poco acostumbrados a operar en la línea de comandos, y no va a mirar el mensaje de error, por lo que pidió a la gran modelo para generar una interfaz GUI, la ejecución de código en cualquier excepción también se requiere para mostrar directamente la interfaz, que resuelve la depuración diaria de la facilidad de uso.

Experimente esta humilde interfaz: https://img.kdjingpai.com/GUI/ (por favor, no la utilice en los servicios públicos, perdóneme...)

 

Producto final

Se escribe una ayuda en el código, además de ofrecer una interfaz gráfica, no para mejorar la experiencia del usuario, sino como parte del código para permitir que el big model se modifique de forma natural como contexto para pensar, para evitar errores. Sin embargo, un código demasiado largo puede hacer que el big model se malinterprete, lo que exige un compromiso.

Añadir comentarios completos y utilizar la ayuda es un buen hábito para la persona media que escribe código.

A continuación le pedí a Claude que optimizara el código en varias rondas, y obtuve el siguiente código completo. De hecho, todavía hay mucho margen de optimización, por ejemplo, el gran modelo me dice que es mejor abstraer variables para garantizar la seguridad del programa, para reducir el número de rondas de juicio, y para tratar cuestiones como la lógica de retardo de peticiones, que no trataré. Por favor, copie y pegue para utilizarlo directamente:

La documentación completa sobre la implantación está disponible en: 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>
`;
}

 

La gente tiende a querer lo que quiere...

El código git final optimiza muchos detalles, en particular la abstracción de las CLAVES que deben gestionarse individualmente, y las cargas de sondeo multi-CLAVE.

A continuación, se genera un widget de generación de imágenes de wordpress de acuerdo con el código, que se puede ver en la parte derecha de la página del post.

Una cosa que lamento: me gustaría mantener una caché de las imágenes generadas y las URL correspondientes para evitar volver a generar imágenes cuando el usuario abre o actualiza la URL repetidamente. La lógica de esta función es complicada, así que me rindo por ahora.

 

Hasta este punto, una completa falta de comprensión del código del hombre blanco se considera que escribir una herramienta muy simple, por favor recuerde que todo el proceso de generación de código de peinado lógico es más importante que las instrucciones magníficas, por favor, paso a paso para ordenar la lógica de una iteración funcional razonable, de la principal a la segunda, de pequeño a grande.

Esta API se utiliza para empalmar la URL de la imagen generada en la palabra clave:Wenxin Cuerpo Inteligente Tráfico Consejos: Generar texto, imágenes y URLs de referencia para dirigir el tráfico a su sitio web.

No creas que la gente que no sabe codificar puede escribir un conjunto de proyectos muy completo, yo mismo lo dudo de todas formas, y este simulacro, que es algo así como el límite para un blanco, duró 9 horas, así que gracias por tu paciencia al leerlo.

© declaración de copyright

Artículos relacionados

Sin comentarios

Debe iniciar sesión para participar en los comentarios.
Acceder ahora
ninguno
Sin comentarios...