Совсем недавно наткнулся на статью - оригинал. Автор поделился хорошей платформой для генерации изображений, но быстренько разработчики прикрыли лавочку. Я углубился в эту тему так как сам заинтересован. Делюсь информацией тем кому это до сих пор актуально. Рассказывать буду два способа. Один личный (для себя), другой вполне подойдёт под коммерческие нужды. Личный вариант (без ограничений, если не ошибаюсь модель Juggernaut XL) import requests import time from aiogram import Bot, Dispatcher, types from aiogram.utils import executor # Ваш токен Telegram бота TELEGRAM_TOKEN = 'Токен бота' # Инициализация бота и диспетчера bot = Bot(token=TELEGRAM_TOKEN) dp = Dispatcher(bot) # Функция для генерации изображения def generate_image_v2(prompt): url = 'https://pornworks.ai/api/v2/generate/text2image' payload = { "checkpoint": "nude_people", "prompt": prompt, "resources": [], "samplerName": "DPM++ 2M Karras", "ratio": "1x1", "hr": False, "sharpness": 5, "cfgScale": 5, "performance": "speed", "denoisingStrength": 1, "fast": False, "inpaintMode": "controlnet" } headers = { 'Content-Type': 'application/json', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0', } try: # Отправка POST-запроса для генерации изображения response = requests.post(url, json=payload, headers=headers) response.raise_for_status() # Если ошибка в ответе, выбрасываем исключение # Получаем ID запроса для дальнейшего опроса data = response.json() image_id = data['id'] print(f"Запрос на генерацию изображения отправлен, ID: {image_id}") # Ожидание завершения генерации image_url = poll_for_image(image_id) return image_url # Возвращаем URL сгенерированного изображения except requests.exceptions.RequestException as error: print(f"Ошибка при генерации изображения: {error}") return None # Функция для опроса статуса генерации изображения def poll_for_image(image_id): url = f'https://pornworks.ai/api/v2/generations/{image_id}/state' while True: try: response = requests.get(url, headers={ 'Accept': 'application/json, text/plain, */*', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0', }) response.raise_for_status() data = response.json() state = data['state'] results = data.get('results') if state == 'done': print(f"Генерация изображения завершена: {results}") return results['image'] # Возвращаем URL сгенерированного изображения else: print("Ожидание завершения генерации...") time.sleep(2) # Ожидаем 2 секунды перед следующим запросом except requests.exceptions.RequestException as error: print(f"Ошибка при опросе изображения: {error}") return None # Обработчик команды /start @dp.message_handler(commands=['start']) async def start(message: types.Message): await message.answer("Привет! Отправь мне любое сообщение, и я сгенерирую картинку!") # Обработчик всех сообщений @dp.message_handler(content_types=['text']) async def handle_message(message: types.Message): user_message = message.text image_url = generate_image_v2(user_message) if image_url: await message.answer(f'Вот ваша картинка: {image_url}') else: await message.answer('Произошла ошибка при генерации картинки. Попробуйте снова.') if __name__ == '__main__': executor.start_polling(dp, skip_updates=True) Python import requests import time from aiogram import Bot, Dispatcher, types from aiogram.utils import executor # Ваш токен Telegram бота TELEGRAM_TOKEN = 'Токен бота' # Инициализация бота и диспетчера bot = Bot(token=TELEGRAM_TOKEN) dp = Dispatcher(bot) # Функция для генерации изображения def generate_image_v2(prompt): url = 'https://pornworks.ai/api/v2/generate/text2image' payload = { "checkpoint": "nude_people", "prompt": prompt, "resources": [], "samplerName": "DPM++ 2M Karras", "ratio": "1x1", "hr": False, "sharpness": 5, "cfgScale": 5, "performance": "speed", "denoisingStrength": 1, "fast": False, "inpaintMode": "controlnet" } headers = { 'Content-Type': 'application/json', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0', } try: # Отправка POST-запроса для генерации изображения response = requests.post(url, json=payload, headers=headers) response.raise_for_status() # Если ошибка в ответе, выбрасываем исключение # Получаем ID запроса для дальнейшего опроса data = response.json() image_id = data['id'] print(f"Запрос на генерацию изображения отправлен, ID: {image_id}") # Ожидание завершения генерации image_url = poll_for_image(image_id) return image_url # Возвращаем URL сгенерированного изображения except requests.exceptions.RequestException as error: print(f"Ошибка при генерации изображения: {error}") return None # Функция для опроса статуса генерации изображения def poll_for_image(image_id): url = f'https://pornworks.ai/api/v2/generations/{image_id}/state' while True: try: response = requests.get(url, headers={ 'Accept': 'application/json, text/plain, */*', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0', }) response.raise_for_status() data = response.json() state = data['state'] results = data.get('results') if state == 'done': print(f"Генерация изображения завершена: {results}") return results['image'] # Возвращаем URL сгенерированного изображения else: print("Ожидание завершения генерации...") time.sleep(2) # Ожидаем 2 секунды перед следующим запросом except requests.exceptions.RequestException as error: print(f"Ошибка при опросе изображения: {error}") return None # Обработчик команды /start @dp.message_handler(commands=['start']) async def start(message: types.Message): await message.answer("Привет! Отправь мне любое сообщение, и я сгенерирую картинку!") # Обработчик всех сообщений @dp.message_handler(content_types=['text']) async def handle_message(message: types.Message): user_message = message.text image_url = generate_image_v2(user_message) if image_url: await message.answer(f'Вот ваша картинка: {image_url}') else: await message.answer('Произошла ошибка при генерации картинки. Попробуйте снова.') if __name__ == '__main__': executor.start_polling(dp, skip_updates=True) Необходимые для запуска кода выше модули: aiogram==2.21 requests Пример генерации: Данная модель очень хорошо генерирует но работает в один поток на IP (при использовании ****** можете довести до ума). Вариант 2 (для публичных целей, FLUX) import requests import base64 from aiogram import Bot, Dispatcher, types from aiogram.utils import executor from PIL import Image from io import BytesIO import time import os # Your Telegram bot token TELEGRAM_TOKEN = 'ТОКЕН БОТА' # Initialize the bot and dispatcher bot = Bot(token=TELEGRAM_TOKEN) dp = Dispatcher(bot) # Function to generate image def generate_image(prompt): url = "https://api-ws.freeflux.ai/v1/images/generate" payload = { "style": "no_style", "color": "no_color", "lighting": "no_lighting", "model": "flux_1_schnell", #Можно так-же flux_1_dev "prompt": prompt, "size": "1_1" #Можно размер больше } headers = { "Content-Type": "application/json" } try: response = requests.post(url, json=payload, headers=headers) response.raise_for_status() data = response.json() image_base64 = data.get("result") # Assuming the base64 image is in "result" return image_base64 if image_base64 else None except requests.exceptions.RequestException as error: print(f"Error generating image: {error}") return None # Function to save base64 image to a temporary file with padding correction def save_base64_image(image_base64, output_dir='generated_images', filename="temp_image.png"): try: # Check if the base64 string has the image data prefix and remove it if image_base64.startswith("data:image/png;base64,"): image_base64 = image_base64[len("data:image/png;base64,"):] # Remove prefix # Ensure padding is correct for base64 decoding padding_needed = len(image_base64) % 4 if padding_needed: image_base64 += "=" * (4 - padding_needed) # Decode the base64 image data image_data = base64.b64decode(image_base64) # Generate a timestamp for the filename timestamp = int(time.time()) image_path = os.path.join(output_dir, f"{timestamp}_{filename}") # Create the output directory if it doesn't exist if not os.path.exists(output_dir): os.makedirs(output_dir) # Save the image to the file image = Image.open(BytesIO(image_data)) image.save(image_path, "PNG") return image_path # Return the path of the saved image except (base64.binascii.Error, ValueError, IOError) as e: print(f"Error saving base64 image: {e}") return None # /start command handler @dp.message_handler(commands=['start']) async def start(message: types.Message): await message.answer("Hello! Send me any message, and I'll generate an image for you!") # Handler for all text messages @dp.message_handler(content_types=['text']) async def handle_message(message: types.Message): user_message = message.text image_base64 = generate_image(user_message) if image_base64: temp_image_path = save_base64_image(image_base64) if temp_image_path: with open(temp_image_path, 'rb') as photo: await message.answer_photo(photo, caption="Here is your generated image! Something beautiful, just for you!") os.remove(temp_image_path) # Clean up temporary file else: await message.answer("Failed to save the generated image. Please try again.") else: await message.answer("An error occurred while generating the image. Please try again.") if __name__ == '__main__': executor.start_polling(dp, skip_updates=True) Python import requests import base64 from aiogram import Bot, Dispatcher, types from aiogram.utils import executor from PIL import Image from io import BytesIO import time import os # Your Telegram bot token TELEGRAM_TOKEN = 'ТОКЕН БОТА' # Initialize the bot and dispatcher bot = Bot(token=TELEGRAM_TOKEN) dp = Dispatcher(bot) # Function to generate image def generate_image(prompt): url = "https://api-ws.freeflux.ai/v1/images/generate" payload = { "style": "no_style", "color": "no_color", "lighting": "no_lighting", "model": "flux_1_schnell", #Можно так-же flux_1_dev "prompt": prompt, "size": "1_1" #Можно размер больше } headers = { "Content-Type": "application/json" } try: response = requests.post(url, json=payload, headers=headers) response.raise_for_status() data = response.json() image_base64 = data.get("result") # Assuming the base64 image is in "result" return image_base64 if image_base64 else None except requests.exceptions.RequestException as error: print(f"Error generating image: {error}") return None # Function to save base64 image to a temporary file with padding correction def save_base64_image(image_base64, output_dir='generated_images', filename="temp_image.png"): try: # Check if the base64 string has the image data prefix and remove it if image_base64.startswith("data:image/png;base64,"): image_base64 = image_base64[len("data:image/png;base64,"):] # Remove prefix # Ensure padding is correct for base64 decoding padding_needed = len(image_base64) % 4 if padding_needed: image_base64 += "=" * (4 - padding_needed) # Decode the base64 image data image_data = base64.b64decode(image_base64) # Generate a timestamp for the filename timestamp = int(time.time()) image_path = os.path.join(output_dir, f"{timestamp}_{filename}") # Create the output directory if it doesn't exist if not os.path.exists(output_dir): os.makedirs(output_dir) # Save the image to the file image = Image.open(BytesIO(image_data)) image.save(image_path, "PNG") return image_path # Return the path of the saved image except (base64.binascii.Error, ValueError, IOError) as e: print(f"Error saving base64 image: {e}") return None # /start command handler @dp.message_handler(commands=['start']) async def start(message: types.Message): await message.answer("Hello! Send me any message, and I'll generate an image for you!") # Handler for all text messages @dp.message_handler(content_types=['text']) async def handle_message(message: types.Message): user_message = message.text image_base64 = generate_image(user_message) if image_base64: temp_image_path = save_base64_image(image_base64) if temp_image_path: with open(temp_image_path, 'rb') as photo: await message.answer_photo(photo, caption="Here is your generated image! Something beautiful, just for you!") os.remove(temp_image_path) # Clean up temporary file else: await message.answer("Failed to save the generated image. Please try again.") else: await message.answer("An error occurred while generating the image. Please try again.") if __name__ == '__main__': executor.start_polling(dp, skip_updates=True) Потребуются следующие библиотеки: requests Pillow aiogram==2.21 Пример генерации: Процесс установки полностью описал ниже, должно быть понятно каждому. ПРОЦЕСС УСТАНОВКИ Устанавливаем PYTHON3 - КЛИК Создаём папочку с проектом, создаём файл app.py, туда кидаем нужный вам код В коде заменяем "токен бота" на ваш токен, получить его можно здесь: КЛИК Открываем POWERSHELL или CMD, переходим в папку с проектом ( cd ПУТЬ К ПАПКЕ) Вводим pip3 install requests Pillow aiogram==2.21 Мы уже подготовили рабочее пространство, осталось запустить (python3 app.py) Если все шаги были выполнены корректно - бот запустится. Пишем ему /start, проверяем. API используется не какой-то официальный, достал с помощью реверс инжиниринга. Если кто-то найдёт что-то интересное в нём о чём я не упомянул, пишите. РЕКОМЕНДУЮ БОТА ДОДЕЛАТЬ ПОД СВОИ НУЖДЫ, НА МАССОВОЕ ИСПОЛЬЗОВАНИЕ (ДЕПЛОЙ) ЛУЧШЕ НЕ ЮЗАТЬ ЭТОТ КОД ПОДДЕРЖАТЬ АВТОРА USDT TRC20 - TAZBSEBVv9buUaDHbumiqhtsdQKMdwe1Jj Так-же планирую поделиться и другими бесплатными ресурсами. Если тема будет интересна - следующее это бесплатная генерация видео ИИ. Буду рад узнать какие направления вам ещё интересны. Данный код может приносить хорошую прибыль и аудиторию. На своём примере говорю, за один комментарий под видео ТТ - 800 подписчиков в группе ТГ Используйте данный инструмент с головой.
ну это мегахуйня а не сервисы, вижу мою ориг тему упоминают, решил оставить коммент. Во первых, там генерации занимают от минуты до бесконечности. Во вторых, код кривой, написан на чатгпт видимо. В третьих, если вы не успели за 3 месяца наабузить денег, в миллион раз выгоднее будет пополнить 20$ на ранвейр и генерить за эту стоимость около 20к картинок(наценку в вашем сервисе ставите х10, к примеру) тут вообще без комментариев...
webad11, в душе не ебу где ты там взял 100 картинок за бакс. мой проект вроде два месяца живет, потрачено меньше 3 долларов, сгенерировано 1300 картинок(и то, в лучшем доступном качестве, могло быть дешевле намного), которые принесли огромный доход