# asciigen — скелет проекта ## Структура ``` asciigen/ ├── go.mod ├── variant.go # тип Variant + интерфейс Renderer ├── options.go # ImageOptions/TextOptions, палитры, пресеты ├── image.go # ImageRenderer — картинка -> ASCII ├── text.go # TextRenderer — текст -> FIGlet-баннер ├── tui/ │ └── model.go # bubbletea-модель: список превью + выбор └── cmd/asciigen/ └── main.go # CLI: `asciigen img file.png` / `asciigen text "Hello"` ``` Ядро (`asciigen.Renderer`) не знает о TUI и не знает о CLI — можно подключить как библиотеку в другой Go-проект (auspex, rimefrost и т.д.) и обвязать своим интерфейсом, ничего не переписывая внутри пакета. Подробный разбор потока данных и почему всё разложено именно так — см. **[ARCHITECTURE.md](./ARCHITECTURE.md)**. ## Что уже готово - Интерфейс `Renderer` с двумя реализациями (`ImageRenderer`, `TextRenderer`) - Пресеты вариантов (палитры для картинок, шрифты для текста) - TUI на bubbletea: навигация стрелками, превью справа, Enter — полный рендер - CLI-обвязка с двумя подкомандами - `image.go` → `render()` реализован полностью: ресайз, яркость (luma), гамма-коррекция, инверсия, маппинг на палитру, опциональный ANSI-цвет ## Что нужно доделать - `go.sum` — появится сам после `go mod tidy` (нужен доступ к proxy.golang.org, которого нет в этой песочнице, так что тут не собирал и не компилировал) - Реальный запуск и визуальная проверка на конкретных картинках — стоит подобрать `Gamma` под глаз, цифры в пресетах сейчас ориентировочные - См. "Известные ограничения" в ARCHITECTURE.md — сознательно не решённые мелочи (авто-определение ширины терминала, оптимизация ANSI-вывода) ## Запуск (после `go mod tidy` у себя) ``` go run ./cmd/asciigen img photo.png go run ./cmd/asciigen text "HELLO" ```