Resources
10Install
npx skillscat add alexmurzai/cyrillicfonttransfer Install via the SkillsCat registry.
CyrillicFontTransfer — Skill & Development Log
Описание проекта
Десктопное Windows-приложение для переноса стиля латинских шрифтов на кириллицу с использованием локальных ML-моделей. Пользователь загружает изображение с латинским текстом, приложение извлекает визуальный стиль шрифта и либо находит подходящий кириллический шрифт в базе данных, либо генерирует новые кириллические глифы, которые затем можно экспортировать как .ttf / .otf.
Целевое железо
| Компонент | Характеристика |
|---|---|
| CPU | Intel Core i5-13600KF |
| RAM | 32 GB |
| GPU | NVIDIA RTX 3090, 24 GB VRAM |
| OS | Windows 11 |
Модели загружаются в полной точности (fp32 / fp16), без квантования — VRAM позволяет.
Технологический стек
| Слой | Технология |
|---|---|
| UI | CustomTkinter |
| ML-фреймворк | PyTorch, torchvision, transformers |
| Эмбеддинги шрифтов | CLIP (openai/clip-vit-base-patch32) или ResNet-50 |
| Векторный поиск | ChromaDB (основной) / FAISS (альтернатива) |
| OCR / распознавание | EasyOCR + кастомный font-классификатор |
| Работа со шрифтами | fontTools, Pillow, Potrace |
| Генерация глифов | Diffusion / GAN (ZipLoRA, FontDiffuser) |
Структура проекта
CyrillicFontTransfer/
├── main.py # Точка входа, запуск UI
├── app.py # Главный класс приложения (CustomTkinter)
├── requirements.txt # Зависимости
├── SKILL.md # Этот файл
│
├── core/ # Бизнес-логика (без UI)
│ ├── __init__.py
│ ├── embedder.py # Извлечение эмбеддингов (CLIP/ResNet)
│ ├── font_recognizer.py # OCR + классификатор шрифтов
│ ├── vector_db.py # Работа с ChromaDB/FAISS
│ ├── generator.py # ML-генерация кириллических глифов
│ └── font_builder.py # Векторизация + сборка .ttf
│
├── assets/ # Иконки, placeholder-изображения
├── fonts_db/ # .ttf файлы кириллических шрифтов для индексации
├── models/ # Веса локальных моделей (кеш)
└── output/ # Сгенерированные .ttf файлыЭтапы разработки
✅ Шаг 1 — Каркас UI (ВЫПОЛНЕН)
Файлы: main.py, app.py, core/__init__.py
Описание:
- Полноценный UI на CustomTkinter с темной темой
- Drag & Drop зона для загрузки референса (изображения с латинским текстом)
- Панель превью загруженного изображения
- Все основные кнопки с заглушками (stub-функции):
- Распознать шрифт — заглушка OCR + классификатор
- Поиск похожего — заглушка векторного поиска по ChromaDB
- Сгенерировать кириллицу — заглушка генеративной модели
- Показать алфавит — заглушка полного алфавита (А-Я + 0-9)
- Сохранить и установить — заглушка экспорта .ttf
- Боковая панель результатов с превью найденного/сгенерированного шрифта
- Строка статуса с прогресс-баром
- Логирование событий в текстовую область
Дизайн:
- Тёмная тема (
dark-blueтема CTk) - Акцентный цвет:
#6C63FF(фиолетовый) - Шрифт интерфейса: Segoe UI / системный
- Двухколоночный layout: левая (ввод) + правая (результаты)
Статус: ГОТОВО
✅ Шаг 2 — Скрипт индексации шрифтов в векторную БД (ВЫПОЛНЕН)
Файлы: core/font_utils.py, core/embedder.py, core/vector_db.py, scripts/build_font_db.py
Описание:
- Рендеринг кириллических глифов/слов из .ttf файлов через Pillow в картинку
224x224 - Получение стилевых эмбеддингов (512-мерный вектор) через модель
openai/clip-vit-base-patch32 - Локальное сохранение векторов и путей к шрифтам в коллекции
ChromaDB(косинусное сходство) - Скрипт-индексатор
build_font_db.pyдля автоматического обхода папкиfonts_db/
Статус: ГОТОВО
✅ Шаг 3 — Распознавание и поиск (ВЫПОЛНЕН)
Файлы: core/font_recognizer.py, app.py (интеграция)
Описание:
- Интеграция
EasyOCRдля извлечения текста с изображений. - Классификация стиля (Serif/Sans) на основе эмбеддингов CLIP.
- Реальный поиск по векторной базе
ChromaDBс использованием косинусной близости. - Отрисовка превью найденного кириллического шрифта с использованием пользовательского текста.
- Показ полной таблицы символов найденного шрифта в отдельном окне.
Статус: ГОТОВО
✅ Шаг 4 — Нейросетевая генерация кириллицы (ВЫПОЛНЕН)
Файлы: core/generator.py, app.py (интеграция)
Описание:
- Использование библиотеки
diffusers(HuggingFace). - Stable Diffusion v1.5 с
UniPCMultistepSchedulerдля скорости. ControlNet-Cannyдля сохранения базовой структуры кириллических глифов.IP-Adapterдля переноса визуального стиля с изображения-референса на результат.- Метод ленивой загрузки (модели не висят в VRAM, пока пользователь не нажмет "Сгенерировать").
Статус: ГОТОВО
✅ Шаг 5 — Экспорт в .ttf (ВЫПОЛНЕН)
Файлы: core/exporter.py, app.py
Описание:
- Векторизация сгенерированной растровой сетки букв через алгоритмы
OpenCV(cv2.findContours). - Внедрение векторов в структуру TrueType файла с помощью
fontToolsиTTGlyphPen. - Вызов системного диалогового окна Windows в приложении для сохранения финального шрифта пользователем на диск.
- Открытие папки с готовым шрифтом.
Статус: ГОТОВО
История изменений
| Дата | Версия | Описание |
|---|---|---|
| 2026-04-02 | 0.1.0 | Шаг 1: Каркас UI, все кнопки, stub-функции, drag&drop, превью, статус-бар |
| 2026-04-02 | 0.2.0 | Шаг 2: Внедрен CLIP-embedder, ChromaDB и скрипт сборки локальной базы шрифтов |
| 2026-04-02 | 0.3.0 | Шаг 3: Интеграция EasyOCR и реального векторного поиска в UI |
| 2026-04-02 | 0.4.0 | Шаг 4: Интеграция SD + ControlNet + IP-Adapter для генерации глифов |
| 2026-04-03 | 0.5.0 | Шаг 5: Модуль экспортеров контуров OpenCV -> TTF (проект готов) |
Известные ограничения и TODO
- Drag & Drop на Windows требует
tkinterdnd2илиtkdnd— добавить в requirements - CLIP-модель при первом запуске скачивается из сети (~340 MB) — предусмотреть кеширование в
/models - FontDiffuser пока не имеет готового pip-пакета — нужен ручной клон репозитория
- Potrace — внешний бинарник, нужна инструкция по установке
Установка и запуск
# 1. Создать виртуальное окружение
python -m venv .venv
.venv\Scripts\activate
# 2. Установить зависимости
pip install -r requirements.txt
# 3. Запустить приложение
python main.py