PROJECT 02
Sudden Picture —
AI-редактор фото
Telegram-бот на Google Gemini 2.5 Flash Image (через OpenRouter). Редактирует одно фото по текстовой инструкции в подписи — или совмещает два фото из альбома в одну сцену.
// демо редактирования
🖼️ Sudden Picture Bot — выбери инструкцию и обработай изображение
ИСХОДНОЕ ФОТО
до 4MB после сжатия
РЕЗУЛЬТАТ
обработка через Gemini
✓ готово
Выбери инструкцию и нажми «Обработать»
// как работает
bot/handlers.py — одиночное фото vs альбом
async def handle_photo_with_caption(self, update, context): # Часть альбома (media_group_id) → собираем оба фото и ждём 2с if update.message.media_group_id: await self._collect_media_group(update, context, update.message.media_group_id) else: await self._handle_single_photo(update, context) # Совмещение: первое фото = сцена, второе = объект для вставки edited_path = await self.image_editor.edit_image( image_bytes_list[0], caption, # инструкция из подписи additional_images=image_bytes_list[1:] )
openai_client/gemini_image_editor.py — вызов OpenRouter
async def _try_edit_with_model(self, image_bytes, edit_prompt, model, additional_images=None): content = [{"type": "image_url", "image_url": {"url": base64_image}}] # Второе фото (для режима совмещения) добавляется тем же способом for img in additional_images or []: content.append({"type": "image_url", "image_url": {"url": encode(img)}}) content.append({"type": "text", "text": enhanced_prompt}) async with session.post(f"{self.base_url}/chat/completions", json={ "model": model, # google/gemini-2.5-flash-image через OpenRouter "messages": [{"role": "user", "content": content}], }) as response: result = await response.json() return self._extract_image_from_response(result)
// детали реализации
ТЕХНИЧЕСКИ
- Google Gemini 2.5 Flash Image через OpenRouter (multimodal chat API)
- Альбом собирается по media_group_id с задержкой 2с через job_queue
- ImageUtils сжимает фото до 4MB перед отправкой в API
- Retry с паузой 15с при rate limit (до 3 попыток)
- Разные системные промпты для точечной правки и для «драматичных» изменений
ИСПОЛЬЗОВАНИЕ
- Одно фото + подпись-инструкция → отредактированное фото
- Альбом из 2 фото + подпись к первому → совмещённая сцена
- Первое фото альбома = фон, второе = объект для вставки
- Обработка занимает 10–40 секунд в зависимости от режима
- /help — примеры инструкций для обоих режимов