Bot de Discord con generador de imágenes IA: bots gratis y cómo crear uno
¿Quieres un bot de Discord que convierta prompts de texto en imágenes con IA sin pagar una mensualidad? Este artículo ordena las opciones gratuitas según su funcionamiento real, muestra lo que te cuesta cada una en tiempo de espera y límites, y te enseña a crear tu propio bot de imágenes con comandos slash y código funcional.
Escribe /imagine a lighthouse at dawn en un canal de chat, espera unos diez segundos y una imagen terminada aparece en el hilo para que todos reaccionen. Ese es todo el atractivo de un generador de imágenes con IA para bots de Discord: sin pestaña del navegador, sin formulario de registro, sin app extra. El problema es que los bots más conocidos cobran mensualidades, y los gratuitos vienen con colas, límites diarios o un cierre repentino. Este artículo ordena las opciones gratuitas según su funcionamiento real, muestra lo que te cuesta cada una en tiempo de espera y, después, crea tu propio bot en menos de 100 líneas de JavaScript.
💡 Respuesta rápida: La ruta gratuita más sencilla es un bot comunitario que usa GPU voluntarias. La ruta más fiable es un bot que alojas tú mismo, y el código de abajo es lo bastante corto para terminarlo de una sentada.
Qué hacen realmente los bots de imágenes de Discord
Un bot de imágenes de Discord es un programa pequeño con tres tareas: escuchar un comando, enviar tu texto a un modelo de imágenes y publicar el resultado en el canal. El bot apenas hace trabajo pesado. El trabajo real ocurre en una GPU en otro lugar, por eso un bot puede funcionar en un equipo portátil, en un mini PC que no uses o en el servidor en la nube más barato.
Cómo funciona un comando slash
Todos los bots modernos siguen el mismo ciclo, y verlo una vez hace más fácil seguir el resto de este artículo:
Un miembro escribe /imagine y completa un prompt.
Discord envía una interacción a tu bot y espera una respuesta en 3 segundos.
El bot responde con un estado de "pensando", llamado respuesta diferida, que le concede hasta 15 minutos.
El bot llama a un modelo de imágenes y espera a que termine el trabajo.
El bot edita la respuesta y adjunta la imagen terminada.
En el paso 3 fallan la mayoría de los primeros intentos. Generar una imagen tarda más de tres segundos, así que un bot que omite la respuesta diferida muestra "La aplicación no respondió" y nadie recibe la imagen.
Por qué Discord encaja con el arte de IA
El chat resulta ser un hogar sorprendentemente bueno para generar imágenes:
Feed compartido. Todos ven cada prompt, así que la gente copia lo que funciona y lo mejora.
Feedback instantáneo. Las reacciones y las respuestas muestran qué resultados han tenido éxito.
Permisos integrados. Los roles deciden quién puede generar, y los canales mantienen los experimentos alejados de las conversaciones serias.
Adaptado a dispositivos móviles por defecto. Los miembros generan imágenes desde el teléfono sin instalar nada nuevo.
💡 Consejo: Dale al bot su propio canal. El spam de imágenes en un chat general es la forma más rápida de molestar a una comunidad.
Bots gratuitos de imágenes para Discord, comparados
"Gratis" significa cosas distintas según quién paga la GPU. La tabla agrupa los tipos principales según esa sola pregunta.
Tipo de bot
Quién paga la GPU
Espera habitual
Principal inconveniente
Red de GPU comunitaria
Voluntarios que donan capacidad libre
De segundos a varios minutos
Prioridad en la cola, elección de modelo limitada
Bots de prueba gratuita
El dueño del bot, hasta que se acaben los créditos
Rápida
Se acaban los créditos y luego viene un muro de pago
Código abierto autoalojado
Tú
Depende de tu GPU o de la API
Tú lo mantienes
Bots estrella de pago
Tu suscripción
Rápida
Mensualidad
Los precios y los límites cambian a menudo, así que revisa la página del propio bot antes de invitarlo a tu servidor.
Bots de GPU comunitaria
Stable Horde, ahora también llamado AI Horde, es el ejemplo más conocido. Los voluntarios comparten tarjetas gráficas, y cualquiera puede pedir imágenes de Stable Diffusion sin costo. La prioridad se controla con puntos llamados kudos, que se ganan prestando tiempo de GPU, así que las solicitudes de usuarios con menos puntos esperan más. Los bots comunitarios construidos sobre esta red son lo más parecido a un bot de arte con IA para Discord realmente gratuito, con una contrapartida: la velocidad depende de cuántos voluntarios estén conectados.
Bots de prueba gratuita
Muchos bots regalan unas cuantas generaciones y luego piden pago. Funcionan bien para probar un estilo, pero revisa tres señales de alerta antes de añadir uno a un servidor:
Sin actualizaciones desde hace meses.
Sin dueño claro ni canal de soporte.
Una solicitud de permisos que el bot no tiene motivo para necesitar, como Administrador.
Un bot que solo publica imágenes necesita Enviar mensajes y Adjuntar archivos. Nada más.
Por qué Midjourney cuesta dinero
Midjourney empezó como bot de Discord y popularizó el formato. Cada imagen consume minutos reales de GPU, y un bot de chat no tiene espacio publicitario con el que pagarlos, así que el costo recae en el usuario. Por eso los bots gratuitos que duran mucho tiempo suelen ser pequeños, gestionados por la comunidad o respaldados por otro negocio.
Cómo crear tu propio bot
Crear el tuyo elimina la cola y el muro de pago. Tú eliges el modelo, los límites y las reglas. Necesitas Node.js 20.6 o superior, una cuenta de Discord que pueda añadir bots a un servidor y un token de API de un proveedor de imágenes. El código de abajo usa la API de PicassoIA porque el flujo es sencillo: crear una predicción, consultarla y descargar el archivo.
Crea la aplicación de Discord
Abre el Portal para desarrolladores de Discord y haz clic en New Application.
En la pestaña Bot, restablece el token y cópialo una sola vez. Trátalo como una contraseña.
En OAuth2, marca los scopes bot y applications.commands, y después marca los permisos Enviar mensajes y Adjuntar archivos.
Abre la URL generada y añade el bot a un servidor de pruebas.
Activa el Modo desarrollador en la configuración de Discord y después copia el ID de tu servidor y el ID de la aplicación.
Guarda los valores en un archivo .env junto a tu código:
Después ejecuta npm init -y y npm install discord.js, y añade "type": "module" a package.json.
💡 Consejo: Los comandos slash no necesitan intents privilegiados, así que te ahorras la aprobación del contenido de mensajes que sí deben solicitar los bots de comandos de texto.
Registra el comando slash
Crea register.js. Le dice a Discord que /imagine existe, con un prompt obligatorio y un formato opcional:
import { REST, Routes, SlashCommandBuilder } from "discord.js";
const imagine = new SlashCommandBuilder()
.setName("imagine")
.setDescription("Make an image from a text prompt")
.addStringOption((o) =>
o.setName("prompt").setDescription("What to picture").setRequired(true).setMaxLength(500)
)
.addStringOption((o) =>
o.setName("ratio").setDescription("Image shape").addChoices(
{ name: "Square", value: "1:1" },
{ name: "Wide", value: "16:9" },
{ name: "Tall", value: "9:16" }
)
);
const rest = new REST().setToken(process.env.DISCORD_TOKEN);
await rest.put(
Routes.applicationGuildCommands(process.env.CLIENT_ID, process.env.GUILD_ID),
{ body: [imagine.toJSON()] }
);
console.log("Command registered");
Ejecútalo una vez con node --env-file=.env register.js. Los comandos registrados para un solo servidor aparecen al momento, mientras que los comandos globales pueden tardar más en mostrarse, así que prueba primero en un solo servidor.
Escribe el manejador de imágenes
Crea bot.js. Este es el bot completo:
import { Client, GatewayIntentBits, AttachmentBuilder } from "discord.js";
const API = "https://api.picassoia.com/v1";
const headers = {
Authorization: `Bearer ${process.env.PICASSOIA_TOKEN}`,
"Content-Type": "application/json",
};
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
async function generateImage(prompt, aspectRatio) {
const create = await fetch(`${API}/models/picassoia/picassoia-image/predictions`, {
method: "POST",
headers,
body: JSON.stringify({ input: { prompt, aspect_ratio: aspectRatio } }),
});
if (!create.ok) throw new Error(`Create failed with status ${create.status}`);
let prediction = await create.json();
while (["starting", "processing"].includes(prediction.status)) {
await sleep(2000);
const poll = await fetch(`${API}/predictions/${prediction.id}`, { headers });
prediction = await poll.json();
}
if (prediction.status !== "succeeded") throw new Error(`Prediction ${prediction.status}`);
return prediction.output[0];
}
const client = new Client({ intents: [GatewayIntentBits.Guilds] });
client.on("interactionCreate", async (interaction) => {
if (!interaction.isChatInputCommand() || interaction.commandName !== "imagine") return;
const prompt = interaction.options.getString("prompt", true);
const ratio = interaction.options.getString("ratio") ?? "1:1";
await interaction.deferReply();
try {
const imageUrl = await generateImage(prompt, ratio);
const file = Buffer.from(await (await fetch(imageUrl)).arrayBuffer());
await interaction.editReply({
content: `**${interaction.user.username}:** ${prompt.slice(0, 300)}`,
files: [new AttachmentBuilder(file, { name: "image.jpg" })],
allowedMentions: { parse: [] },
});
} catch (error) {
console.error(error);
await interaction.editReply("That one failed. Try again in a minute.");
}
});
client.login(process.env.DISCORD_TOKEN);
Inícialo con node --env-file=.env bot.js, escribe /imagine en tu servidor de pruebas, y una imagen debería aparecer en pocos segundos. Hay cuatro detalles que merecen una mirada más atenta:
deferReply() responde dentro de la ventana de 3 segundos, y después el trabajo real dispone de 15 minutos.
El bucle de consulta comprueba cada 2 segundos y se detiene cuando el estado deja de ser starting y processing.
allowedMentions: { parse: [] } evita que un prompt que contenga @everyone mencione a todo el servidor.
Volver a subir el archivo mantiene la imagen en el canal como un adjunto normal de Discord.
Usa Flux 2 Pro en PicassoIA
Antes de fijar nada en el código, prueba tu redacción en una página de modelo. Flux 2 Pro es un buen lugar para comprobar si un estilo de prompt da resultados nítidos y fotográficos, y después ese mismo prompt puede ir directo a tu bot.
Escribe el prompt exacto que un miembro enviaría a /imagine.
Elige la relación de aspecto que piensas ofrecer: cuadrada, ancha o alta.
Genera, revisa el resultado y cambia un solo detalle de la redacción cada vez.
Repite hasta que tres intentos seguidos se vean bien, y luego guarda esa redacción como ejemplo para tu mensaje de /help.
Algunos consejos de parámetros para el propio bot:
Ofrece solo las tres formas de arriba. Menos opciones significan menos resultados confusos.
Pide una imagen por comando. Las respuestas del chat se mantienen rápidas y el archivo pesa poco, ya que Discord limita los adjuntos a unos 10 MB en un servidor estándar.
Usa salida en JPG para el chat. Se sube más rápido que el PNG.
Añade un número opcional de seed para que tus amigos puedan reproducir los resultados de los demás.
💡 Nota sobre el plan: La página de la API indica que, por ahora, las predicciones no consumen créditos y pide el plan Infinite. Revisa la página de la API de PicassoIA para ver las condiciones vigentes antes de construir sobre ella.
Una vez que las imágenes funcionan, el mismo patrón sirve para otros comandos. Un comando /edit puede llamar a PicassoIA Image Editor Pro, y un comando /animate puede usar un modelo de video como Seedance 2.0. El video tarda más, así que la respuesta diferida importa todavía más ahí.
Mantén el bot rápido y seguro
Un bot que funciona bien para ti solo puede caerse cuando veinte miembros lo usan a la vez.
Enfriamientos y límites de cola
La API de PicassoIA permite 5 predicciones en cola o en ejecución por cuenta, compartidas entre todos tus tokens. Lleva la cuenta de ese número dentro del bot y da a cada usuario un breve enfriamiento:
const COOLDOWN_MS = 20_000;
const MAX_IN_FLIGHT = 5;
const lastUse = new Map();
let inFlight = 0;
function checkLimits(userId) {
const wait = (lastUse.get(userId) ?? 0) + COOLDOWN_MS - Date.now();
if (wait > 0) return `Slow down, try again in ${Math.ceil(wait / 1000)}s.`;
if (inFlight >= MAX_IN_FLIGHT) return "The queue is full. Try again in a minute.";
return null;
}
En el manejador, llama a checkLimits antes de deferReply(). Si devuelve texto, envíalo como respuesta privada (añade MessageFlags a tu importación de discord.js y usa flags: MessageFlags.Ephemeral). Si no, asigna lastUse, suma uno a inFlight y resta uno en un bloque finally cuando termine el trabajo.
Reglas de contenido para tu servidor
Un bot de imágenes publica lo que el modelo genera a partir de lo que escriben las personas, así que define las reglas antes de lanzarlo:
Limita dónde funciona. Restringe /imagine a un canal o a un rol en la configuración de comandos del servidor.
Respeta los canales con restricción de edad. El contenido para adultos solo pertenece a canales que Discord marca con restricción de edad, y las normas propias del proveedor del modelo siguen aplicándose.
Registra los prompts en privado. Publica cada prompt y el ID del usuario en un canal solo para moderadores.
Filtra los abusos evidentes. Rechaza los prompts que coincidan con una lista corta de términos prohibidos antes de que lleguen al modelo.
Bloquea las menciones masivas. Mantén allowedMentions desactivado para el texto de los usuarios.
Dónde alojar el bot
Como el modelo corre en otro lugar, el propio bot necesita muy poca CPU y memoria. Un servidor de 1 GB basta de sobra.
Mini PC o servidor en la nube
Opción
Costo
Disponibilidad
Qué vigilar
Equipo portátil que ya tienes
Gratis
Solo mientras esté encendido
El bot se desconecta cuando cierras la tapa
Mini PC en casa
Un pequeño gasto en la factura de la luz
Tan buena como tu internet
Reinicios del router de casa
Servidor pequeño en la nube
Unos pocos dólares al mes
Muy alta
Tú gestionas las actualizaciones
Niveles de alojamiento gratuito
Gratis
A menudo entra en reposo tras un tiempo inactivo
El bot desaparece de la lista de miembros
Elijas lo que elijas, ejecuta el bot con un gestor de procesos como pm2 o systemd para que se reinicie tras un fallo, y mantén el archivo .env fuera del control de versiones.
Prompts que funcionan en el chat
Los miembros escribirán prompts cortos y vagos. Tu trabajo es hacer que los prompts cortos funcionen y mostrar a la gente cómo se ve uno mejor.
Escribe prompts como un encargo fotográfico
Un patrón fiable es sujeto, escenario, luz, lente. Fija un ejemplo en el canal:
Prompt débil
Prompt más sólido
un perro
un golden retriever en una playa mojada al amanecer, ángulo bajo, foto de 35 mm, contraluz suave
casco antiguo
un pueblo portuario con niebla al amanecer, barcas de pesca, adoquines mojados, foto de 35 mm
café
una taza de cerámica con café sobre una mesa de roble desgastada, luz de ventana desde la izquierda, macro de 85 mm
Deja que un modelo de lenguaje amplíe los prompts
Para los prompts cortos, añade un paso de reescritura: envía el texto del miembro a un modelo de chat con la instrucción "Reescribe esto como un encargo fotográfico de una frase con sujeto, escenario, luz y lente", y luego pasa el resultado al modelo de imágenes. Prueba primero la instrucción a mano. Pégala en Gemini 3.5 Flash o en Claude Sonnet 5 de PicassoIA y lee la salida antes de conectarla al bot. Muestra el prompt reescrito en la respuesta para que los miembros vean cómo se creó el resultado.
Crea tu primera imagen hoy
Ya tienes el mapa completo: bots comunitarios gratuitos para diversión rápida, bots de prueba para experimentar y un bot pequeño autoalojado cuando quieras control. La forma más rápida de descubrir qué prompts le van a encantar a tu servidor es probarlos antes incluso de que exista el bot.
Abre Flux 2 Pro o Seedream 4.5 en PicassoIA, escribe tres prompts que tu comunidad enviaría de verdad y guarda los mejores resultados como ejemplos para tu mensaje de /help. Después toma el código de arriba, añade el comando /imagine e invita a tus amigos. Cuando quieras más opciones, explora todos los modelos de imagen, video y lenguaje en picassoia.com/en/all-models y cambia por el que mejor se ajuste a tu servidor.