---
name: svg-image-no-api
description: "Generate images on macOS WITHOUT any API keys — hand-craft SVG illustrations and convert to PNG using macOS built-in QuickLook (qlmanage). No Python packages, no API calls, no internet needed."
tags: [macos, svg, image-generation, offline, creative, fallback]
---

# SVG Image Generation — No API (macOS)

## Когда использовать

- API для генерации изображений недоступен (нет ключа, нет бюджета, нет интернета)
- Пользователь просит «нарисуй картинку» — весёлую, поддерживающую, персонажа
- Нужно быстро создать визуал без внешних зависимостей
- macOS с любой версией (High Sierra+)

## Процесс

### 1. Создать SVG-файл

Написать SVG-код вручную. Использовать:

- **Цвета:** яркие, тёплые (работает лучше для настроения)
- **Формы:** круги, эллипсы, пути, прямоугольники, линии
- **Градиенты:** linearGradient / radialGradient для неба, солнца, света
- **Текст:** `<text>` с кириллицей (шрифт Arial/Helvetica)
- **Анимации:** `<animate>` / `<animateTransform>` (необязательно, для веба)
- **Фильтры:** `<feDropShadow>` для теней

Пример структуры:
```svg
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 600">
  <defs>
    <linearGradient id="sky".../>
    <filter id="shadow".../>
  </defs>
  <!-- Sky background -->
  <rect width="800" height="600" fill="url(#sky)"/>
  <!-- Sun with face -->
  ...
  <!-- Character -->
  ...
  <!-- Text -->
  <text ...>Привет!</text>
</svg>
```

### 2. Конвертировать SVG → PNG

Использовать macOS QuickLook (не требует установки):

```bash
qlmanage -t -s 800 -o /tmp/ /path/to/file.svg
```

- `-t` = thumbnail mode
- `-s 800` = размер (ширина 800px)
- `-o /tmp/` = выходная директория
- Последний аргумент = входной SVG

На выходе: `/path/to/file.svg.png`

### 3. Отправить пользователю

Использовать MEDIA-синтаксис для Telegram:
```
MEDIA:/path/to/file.png
```

## Pitfalls

1. **SVG слишком сложный** — qlmanage может съесть много памяти при сложных градиентах/фильтрах. Держать SVG в разумных пределах (до 15-20KB).
2. **Кириллица в SVG** — нужно указывать запасной шрифт (`font-family="Arial, Helvetica, sans-serif"`), иначе может не отобразиться.
3. **Анимации** — в PNG, очевидно, не работают. Анимации в SVG — только для веба.
4. **Качество** — qlmanage выдаёт не идеальное качество (немного сглаживает). Для продакшена не подходит, для бытовых/поддерживающих картинок — отлично.
5. **Прозрачность** — если нужен PNG с прозрачностью, убедись что у SVG нет прямоугольного фона во весь viewBox.
6. **Альтернатива** — если нужен лучший конвертер SVG→PNG, установить cairosvg: `pip install cairosvg` (но это уже не zero-dependency).

## Примеры

1. Кот на подоконнике с солнцем, цветами и надписью «Ты справишься! Всё будет хорошо ✨»
2. Улыбающееся солнце с лучами, облака, бабочки — любой поддерживающий визуал
3. Персонаж (кот, пёс, вымышленный маскот) в простой сцене

## Альтернативы (если есть доступ к API)

- `image-generation` skill (Gemini) — если есть GEMINI_API_KEY
- `p5js` skill — для интерактивной/генеративной графики
- `ascii-art` skill — если нужен ASCII art вместо изображения
