Alexmurzai

CyrillicFontTransfer — Skill & Development Log

```

Alexmurzai 0 Updated 1mo ago

Resources

10
GitHub

Install

npx skillscat add alexmurzai/cyrillicfonttransfer

Install via the SkillsCat registry.

SKILL.md

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

Categories