Skip to content
Veta-onePublic

About

AI-powered clipboard enhancement utility with hotkeys for instant text correction, translation, rewriting, and image analysis using Google Gemini API

Resources

Stars

55 stars

Watchers

6 watching

Forks

Repository files navigation

ClipGen

ClipGen — Windows-утилита, которая добавляет AI-обработку текста, изображений и голоса прямо в рабочие приложения через глобальные горячие клавиши. Пользователь выделяет текст или копирует изображение, нажимает хоткей, и результат вставляется обратно без переключения в браузер или чат-бот.

  • Текущая версия: 2.3.0
  • Платформа: Windows
  • Интерфейс: PyQt5, русский и английский языки.

Что умеет ClipGen

AI через буфер обмена

ClipGen работает поверх обычного буфера обмена Windows:

  1. Пользователь выделяет текст в любом приложении.
  2. Нажимает назначенную комбинацию клавиш.
  3. ClipGen копирует выделение, отправляет его в выбранную AI-модель и вставляет результат обратно.

Это работает в браузере, Word, Telegram, IDE, Figma, Photoshop, адресной строке браузера и любых других программах, где можно выделять и вставлять текст.

Поддерживаемые AI-провайдеры

ClipGen поддерживает два типа провайдеров:

  • Google Gemini через нативный Gemini API.
  • OpenAI-compatible API: OpenAI, OpenRouter, DeepSeek, Claude через OpenRouter, локальные OpenAI-compatible серверы.

Для OpenAI-compatible режима можно задать собственный Base URL, список ключей и список моделей.

Хоткеи и промпты

Во вкладке Prompts можно настроить:

  • комбинацию клавиш;
  • название действия;
  • цвет логов;
  • промпт;
  • тип действия: обработка текста или голосовая транскрибация;
  • индивидуального провайдера и модель для конкретного хоткея;
  • режим обучения с объяснением исправлений.

По умолчанию создаются:

  • Ctrl+F1 — коррекция текста;
  • Ctrl+F2 — перевод.

Индивидуальная модель для каждого действия

Глобальные настройки задают основной провайдер и модель, но каждый хоткей может использовать собственную модель. Например:

  • коррекция — Gemini Flash;
  • перевод — GPT-4o или DeepSeek;
  • анализ кода — Claude через OpenRouter;
  • быстрые повседневные задачи — локальный OpenAI-compatible endpoint.

Изображения и мультимодальность

Если в буфере обмена находится изображение, ClipGen может отправить его в мультимодальную модель:

  • распознать текст на скриншоте;
  • перевести текст с изображения;
  • объяснить интерфейс, схему или диаграмму;
  • проанализировать изображение с заданным промптом.

Поддержка зависит от выбранной модели и провайдера.

Режим обучения

Для текстовых хоткеев можно включить Learning mode. В этом режиме ClipGen показывает всплывающее объяснение того, что исправила модель:

  • орфография;
  • пунктуация;
  • грамматика;
  • значимые изменения формулировки.

Объяснение также дублируется в логах.

Голосовая транскрибация Whisper

В версии 2.3.0 добавлена голосовая транскрибация на базе faster-whisper / CTranslate2.

Как это работает

  1. Включите голосовую транскрибацию во вкладке Settings.
  2. Нажмите Install / Download, чтобы установить зависимости и скачать модель.
  3. Создайте хоткей во вкладке Prompts и выберите тип Voice transcription.
  4. Удерживайте хоткей как push-to-talk.
  5. После отпускания клавиши ClipGen распознаёт речь и вставляет текст в активное приложение.

Основные настройки транскрибации

Во вкладке Settings доступны:

  • модель: large-v3, medium, small, base, tiny;
  • устройство: auto, cuda, cpu;
  • тип вычислений: float16, int8_float16, float32, int8;
  • язык по умолчанию или автоопределение;
  • выбор микрофона;
  • beam size;
  • VAD-фильтр тишины;
  • фильтр типичных Whisper-галлюцинаций;
  • звуковые сигналы записи;
  • автозагрузка модели при старте;
  • авто-выгрузка модели после простоя.

Для каждого голосового хоткея можно отдельно задать язык и initial prompt.

Почему Whisper-зависимости не входят в exe

Whisper/CUDA stack весит больше гигабайта и нужен не всем пользователям. Поэтому основной ClipGen.exe остаётся компактным, а голосовые зависимости устанавливаются по требованию из интерфейса.

Опциональный стек:

  • faster-whisper;
  • ctranslate2;
  • sounddevice;
  • numpy;
  • huggingface_hub;
  • tqdm;
  • NVIDIA CUDA/cuDNN wheels для Windows.

Надёжность frozen exe

Для exe-сборки используется изоляция Whisper-инференса:

  • модель может загружаться в отдельном worker-процессе;
  • скачивание модели выполняется через внешний helper;
  • отмена скачивания поддерживается через UI;
  • при ошибках создаётся transcription_diagnostics.txt;
  • PyInstaller bundle фильтрует конфликтующие VC runtime DLL из PyQt5 и добавляет актуальные DLL из C:\Windows\System32.

Это сделано, чтобы избежать native crash при загрузке WhisperModel() в собранном exe.

Интерфейс

Вкладки

  • Logs — логи выполнения, ответы модели, ошибки, статус обновлений.
  • Settings — провайдеры, ключи, модели, proxy, транскрибация, язык, масштаб.
  • Prompts — хоткеи, промпты, типы действий, модели для конкретных хоткеев.
  • Help — справка, контакты и поддержка проекта.

Tray icon

Иконка в системном трее показывает состояние:

  • обработка запроса;
  • успешное выполнение;
  • ошибка;
  • загрузка модели;
  • запись голоса;
  • транскрибация.

UX-правки

Выпадающие списки не меняют значение от случайного скролла мыши, пока список не раскрыт кликом. Это защищает настройки от случайного изменения при прокрутке вкладки Settings.

Конфигурация

Файл settings.json создаётся автоматически при первом запуске рядом с приложением.

Ключевые секции:

{
  "provider": "gemini",
  "language": "en",
  "ui_scale": 1.0,
  "api_keys": [],
  "openai_api_keys": [],
  "gemini_models": [],
  "openai_models": [],
  "hotkeys": [],
  "transcription": {
    "enabled": false,
    "model": "large-v3",
    "device": "auto",
    "compute_type": "float16",
    "default_language": "auto",
    "isolate_inference_process": true,
    "auto_unload_minutes": 5,
    "beam_size": 1,
    "vad_filter": true,
    "filter_hallucinations": true,
    "audio": {
      "input_device": null,
      "max_record_seconds": 120
    }
  }
}

При обновлении приложения конфиг мигрируется автоматически: новые ключи добавляются из DEFAULT_CONFIG, пользовательские значения сохраняются.

Приватность и безопасность

ClipGen работает как локальная Windows-утилита и выполняет действия только по пользовательскому хоткею.

Что может отправляться наружу:

  • выделенный или скопированный текст отправляется выбранному AI-провайдеру только после нажатия hotkey;
  • изображение из буфера обмена отправляется провайдеру только для hotkey/промпта, который работает с изображениями;
  • OpenAI-compatible режим отправляет данные на указанный пользователем Base URL;
  • voice transcription на Whisper/Parakeet выполняется локально после установки моделей, но зависимости и модели скачиваются из внешних источников.

Что хранится локально:

  • settings.json рядом с ClipGen.exe;
  • API-ключи Gemini/OpenAI-compatible;
  • proxy-настройки;
  • пользовательские хоткеи, промпты, модели и настройки транскрибации.

API-ключи и proxy-строка хранятся в settings.json обычным текстом. Это сделано для прозрачности и переносимости настроек: пользователь сам контролирует файл, может скопировать папку программы на другой компьютер и вручную редактировать настройки. Не публикуйте свой settings.json и не отправляйте его в issue/чат поддержки.

Логи и диагностика:

  • вкладка Logs может содержать текст результата, ошибки API и технические сообщения;
  • fault_log.txt и transcription_diagnostics.txt могут содержать пути, сведения об окружении, модели и аудиоустройства;
  • перед отправкой логов кому-либо проверьте, нет ли там приватного текста, ключей, путей или фрагментов переписки.

Gemini safety-фильтры не усиливаются приложением: запросы выполняются с пользовательским API-ключом, а ответственность за содержание запросов и соблюдение правил выбранного провайдера остается на пользователе.

Релизная целостность:

  • официальные сборки публикуются через GitHub Releases;
  • рядом с релизным архивом публикуется SHA256;
  • чтобы проверить файл, сравните хэш скачанного архива с опубликованным значением.

Пример проверки SHA256 в PowerShell:

Get-FileHash .\ClipGen-2.3.0.zip -Algorithm SHA256

Локализация

Языковые файлы:

  • lang/en.json;
  • lang/ru.json.

Правило проекта: весь пользовательский текст должен находиться в языковых файлах. Это касается labels, кнопок, tooltips, placeholder, диалогов, ошибок и логов.

Проверка словарей:

python tools/check_i18n.py

Скрипт проверяет:

  • одинаковый набор ключей в en.json и ru.json;
  • отсутствие кириллицы в en.json.

Установка для разработки

git clone https://github.com/Veta-one/ClipGen.git
cd ClipGen
pip install -r requirements.txt
python -m clipgen.main

Для голосовой транскрибации не нужно заранее ставить heavy ML-зависимости. В dev-режиме их можно поставить через кнопку Install / Download в Settings.

Сборка exe

Актуальная сборка выполняется через ClipGen.spec.

Рекомендуемая команда:

py -m PyInstaller --clean ClipGen.spec

Или verbose-скрипт с логом:

build_verbose.bat

build_verbose.bat сохраняет полный вывод в build.log и не удаляет dist\Models, чтобы не скачивать Whisper-модели заново.

Важно: не пересоздавайте ClipGen.spec автоматически без необходимости. В нём зафиксированы:

  • hidden imports для transcription worker/download/diagnostics;
  • исключения heavy ML-пакетов из основного exe;
  • фильтр конфликтующих PyQt5 VC runtime DLL;
  • добавление актуальных VC runtime DLL из System32.

Готовый exe появляется здесь:

dist\ClipGen.exe

Проверки перед релизом

Минимальный набор:

python tools/check_i18n.py
python tools/test_config_migration.py
python -m compileall clipgen tools/check_i18n.py
py -m PyInstaller --clean ClipGen.spec
python tools/prepare_release.py

Ручная проверка:

  • запуск dev-режима;
  • запуск собранного exe;
  • переключение языка RU/EN;
  • проверка Settings и блока транскрибации после переключения языка;
  • проверка, что combo box не меняется от скролла;
  • установка/скачивание Whisper через UI;
  • загрузка модели;
  • push-to-talk запись и вставка результата;
  • unload модели;
  • повторный запуск exe.

Диагностика транскрибации

При проблемах с Whisper создаётся файл:

transcription_diagnostics.txt

В нём фиксируются:

  • версия Python и окружение;
  • режим frozen/dev;
  • параметры модели;
  • наличие faster-whisper, CTranslate2, sounddevice, numpy, huggingface_hub;
  • CUDA/cuDNN сведения;
  • доступные аудиоустройства;
  • пути к моделям.

Если exe падает или модель не загружается, сначала смотрите fault_log.txt, build.log и transcription_diagnostics.txt.

Структура проекта

clipgen/
  api/                 AI-провайдеры и TextProcessor
  core/                конфиг, constants, миграции
  hotkeys/             глобальные хоткеи и CRUD хоткеев
  testing/             тест API-ключей и моделей
  transcription/       Whisper/faster-whisper pipeline
  ui/                  PyQt5 интерфейс
  utils/               i18n, proxy, autostart, clipboard, updates
tools/
  check_i18n.py        проверка языковых файлов
ClipGen.spec           актуальная PyInstaller-сборка
build_verbose.bat      сборка с логом

Поддержка и сообщество

Автор проекта: VETA (Vitalii Kalistratov).

About

AI-powered clipboard enhancement utility with hotkeys for instant text correction, translation, rewriting, and image analysis using Google Gemini API

Resources

Stars

55 stars

Watchers

6 watching

Forks

Releases

Packages

Used by

Contributors

Languages