Как стать автором
Обновить

Комментарии 53

Надо добавить не ИИ функции. Например исправление раскладки (на случай если набрал что то не в той раскладке и лень переписывать)

ИИ переводчик очень творчески к процессу подходит Ж)

У меня Caramba Switcher под это дело стоит, и он отлично справляется с этой задачей. Я пробовал, кстати, в промпт добавлять строчку про исправление неправильной раскладки, но что-то мне не понравились результаты (кстати, как раз из-за того, что ИИ очень творчески к процессу подходит)))

Omg, я юзаю Punto Switcher уже 20 (!!!) лет. Переключаю раскладку одним нажатием Caps Lock и жутко страдаю, когда на других компах это надо делать по-другому.

Последнее время он стал как-то подрагивать - видно, что Яндекс не занимается его развитием. Но мне и в голову не приходило, что есть и другие свитчеры. Спасибо, добрый человек, что подсказал Карамбу!😁

Более того, Карамбу развивает именно разработчик Punto, правда теперь отдельно. И версия для мака платная, хоть и недорогая

Исправлять раскладку с помощью запроса в гпт?

Это делается гораздо проще без гпт.

Надо просто лишь сделать...

Я кажется видел реализацию пунто свитчера, или чего то похожего, на AutoHotkey. Там встроенный скриптовый язык позволяет писать полноценные программы. Возможно тебе стоит использовать его вместо питона.

https://forum.script-coding.com/viewtopic.php?id=7186
Вот, пользуюсь данным скриптом. Почему то PuntoSwitcher мне не зашел, исправлял иногда не то что нужно. А вот самому исправлять с помощью скрипта - вполне. Плюс настраивай как пожелаешь, добавляй свой функционал и горячие клавиши. Красота.

По-моему, светить гуглу всё содержимое буфера обмена на своей личной ЭВМ плохая идея. Например, там могут быть пароли.

Можно не светить если у тебя есть видеокарта за 2-3т баксов.

А можно не еще не засовывать БЯМ во всё подряд... Для меня ближе концепция цифрового минимализма.

Это упрощение вызова БЯМ, хоткей. Без этого тебе пришлось бы руками копипастить в БЯМ клиента и обратно.

В Google информация из буфера обмена отправляется только после нажатия горячей клавиши. Если вы скопировали пароль, то Google его не увидит, если вы ему его не отправите.

А, теперь понятно.

Идея интересная, но кто-нибудь пробовал запускать? А то у меня в Pycharm есть ошибки, которые не пойму как исправить. Например в строке "from google.generativeai import GenerationConfig" такая ошибка "Cannot find reference 'GenerationConfig' in 'init.py'". И ещё по тексту есть предупреждения.

Собрал .exe (http://vetaone.site/ClipGen/ClipGen.zip) У меня запускается и работает без ошибок, но у меня и через консоль тоже запускается, и тоже всё работает, кстати, добавил в репозиторий ещё requirements.txt может поможет

А можно уточнить какая у вас версия Python? А то на Github написано 3.8, а сайте https://pypi.org/project/google-generativeai/0.1.0/, что требуется не ниже 3.9

PS C:\Projects\Work\Scripts\ClipGen> py --version
Python 3.13.1

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

var tStop=new Date;tStop.setSeconds(tStop.getSeconds()+30);
with(WScript.CreateObject("AutoItX3.Control"))while(tStop-(new Date)>0){ch=false;
	var newURL=repl(ClipGet(),/((?:forum\.|www\.)?script-coding\.)info/gi,'$1com');
	newURL=repl(newURL,/p10903\.clients\.m-10\.ru/gi,'forum.script-coding.com');
	if(newURL && ch)ClipPut(newURL);
	Sleep(500);
}
var i=2;with(new ActiveXObject("WScript.Shell"))while(i--)Run('cmd /c @echo ',0,true);

function repl(s,re,rs){if(re.test(s)){ch=true;return s.replace(re,rs)};return s}

С тех пор к подобными подходам есть некоторый интерес. Результаты наблюдений за ситуацией на настоящий момент такие: оказалось, что подобная техника используется злоумышленниками при краже денег с криптокошельков. То есть пользователь копирует в буфер обмена одно, а незаметно для него туда вставляется другое, в результате деньги уходят на сторону. Я не говорю, что использовать автоматическую модификацию буфера обмена нельзя, но отношусь теперь к подобного рода вещам с чрезвычайной настороженностью. Ни к чему не призываю, просто информирую...

Да, видел примеры с подменой криптокошельков — но мой код открыт.

Я не говорю, что использовать автоматическую модификацию буфера обмена нельзя

А тут я не смог придумать более простой логики работы программы, чтобы не приходилось переключаться или что-то перетаскивать. Работа напрямую с буфером обмена — самое простое и элегантное решение, как мне кажется. Код начинает работать в любой программе, от блокнота до Photoshop, и я просто не представляю, чем это можно заменить.

Я всегда рад за людей, если у них всё получается и нет проблем. Только вот что делать тем, у кого не запускается? Я так понимаю, что возможно не все зависимости совпадают.

Я так понимаю, что возможно не все зависимости совпадают.

Да, скорее всего, сейчас поправлю requirements.txt. Проверил — у меня другая версия установлена.

PS C:\Projects\Work\Scripts\ClipGen> pip show google-generativeai
Name: google-generativeai
Version: 0.8.4
Summary: Google Generative AI High level API client library and tools.
Home-page: https://github.com/google/generative-ai-python
Author: Google LLC
Author-email: googleapis-packages@google.com
License: Apache 2.0
Location: C:\Python313\Lib\site-packages
Requires: google-ai-generativelanguage, google-api-core, google-api-python-client, google-auth, protobuf, pydantic, tqdm, typing-extensions
Required-by:
PS C:\Projects\Work\Scripts\ClipGen>

Спасибо, интересный проект.

У меня, кстати, Ваши зависимости не компилировались, поменял на последние версии - все заработало.

customtkinter==5.2.2
pyperclip==1.9.0
google-generativeai==0.8.4
pywin32==310
pynput==1.8.0
Pillow==11.1.0

Ну, как всё... При запуске из командной строки "python.exe main.py" при выходе из программы python.exe остается в пямяти, можно только убить из TaskManager...

поменял на последние версии

Я же правильно понимаю, что я могу просто ваши версии подставить в свой файл? И у людей будет меньше проблем с запуском?

можно только убить из TaskManager.

Да, спасибо, я это поправлю. Интерфейс доделал в последнюю очередь, а раньше была чисто консольная версия — с ней не было таких проблем.

Да, конечно, можете подставить. На всякий случай, python у меня тоже последний - 3.13.2.

По ходу попробовал поменять Gemini на OpenAI. Работает, но не вставляет результат из клипбоарда обратно в редактор. Сделал все за 15 минут, проблему пока не искал, может, где-то по мелочи накосячил.

А как api key получить из России, "Region not supported."

Тут я не подскажу, так как я не в России сейчас

Только через VPN, к сожалению

Спасибо за проект!

К сожалению, API Gemini в РФ без ухищрений недоступно. Но можно взамен по API подключить бесплатный Mistral Large. Или локально запустить Gemma-3/Qwen2.5. Результат будет не сильно хуже Gemini.

И я был удивлен, узнав из статьи, что Vimeo не заблокирован.

Ответы по картинкам будут сильно заметно хуже

Для моих кейсов Gemma-3 27b очень хороша в VL, даже 12b качественно распознает и описывает картинки. В обоих случаях использовал Q6_K.

Здравствуйте! Я тоже столкнулся с этой ошибкой, хотя уже давно сижу под VPN (странно, torrents качаются, через браузеры прекрасно всё работает и сам Gemini API я получил без проблем - то есть весь комп считает, что я не в РФ, а этот скрипт не обманешь, блин...). Пожалуйста, чуть подробней распишите (если не сложно, само собой!), как именно мне настроить альтернативные LLM (какие строки в коде и как поправить). Я только начал изучение Python, но именно этот проект меня очень заинтересовал, и хочется довести до конца его подключение. Спасибо!

По Python не подскажу. Но план-минимум правок такой:

Заменить API endpoint на:
url = "https://api.mistral.ai/v1/chat/completions"

Model = "mistral-large-latest"

api_key = "your-api-key"

Заменить requestBody на мистралевский по их докам (deepseek подскажет как поменять), добавить паузу между запросами секунд 5. Возможно, внести небольшие правки в функцию разбора ответа.

И да, Gemini из РФ можно пользоваться, но это другая история.

Благодарю! Буду разбираться.

Вообще, я сам о подобной идее думаю но пока руки не дошли. Порой надо работать с текстом, переводчиком и и и. В идеале хочу создать некоторого условного помощника который работает с текстом и имеет небольшой контекст и легковесно что то рендерит (вместо вставки, например) и выполняет ряд команд.

Основная лично моя загвоздка в выборе провайдера модели - бесплатные имеют лимит (и порой слишком маленький), либо качество слабое - а платить, хоть и копеечку - ну такое себе за то, что можно сделать в браузере бесплатно, например через тот же perplexity. Думаю о мистрале, вроде даром отдают апи на ряд моделей, но как будет с русским и качеством в целом - ещё вопрос.

Единственное что, мне кажется использование буфера как такового это не лучше решение. Лучше всего работать с текущим выделенным текстом (полагаю, выделение текста плюс минус должно быть стандартизировано в ос в разных юи фреймворках) - можно случайно скопировать или наоборот, плохо прожать кнопку копирования(особенно если клавиатуре не первый год уже) и отправить что то, что не следует отправлять. Но это уже на моё имхо...

И гугл и мистраль дают нахаляву столько сколько мало кто вынести может. К гуглу например можно сделать 1500 запросов размером 300т символов в сутки, либо 1500 запросов на перевод картинок или звуков в текст.

У мистраля немного иначе но тоже очень много.

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

Не знал, спасибо за информацию. Раньше (года так пол - год назад) было меньше запросов если я все верно находил. Но уже сомневаюсь.

Про качество не знаю - первые версии были кривые как сами знаете что. Сейчас ситуация лучше? Смотреть бы не по рейтингам а отзывы настоящих людей...

Так lmarena это по сути и есть отзывы настоящих людей.

У меня такая штука вместе с мышкой шла.

Неплохо, надо ещё добавить чтобы с текстом уходил скриншот экрана и может быть название активной программы. и по ним он сам вычислял что хочет пользователь. Чтобы не помнить кучу клавиш. Нужно прописать в юзер промте для каких программ что требуется. Или даже привязку к сайту. (Желательно один монитор где мышь, а не все)

Оу, прикольная идея )) Но у меня кейсов таких нет, я в телеграме или в мессенджерах (ну, или вот тут, в комментариях, когда дописываю сообщение) уже на автомате нажимаю Ctrl+A + Ctrl+F1, и она исправляет все ошибки, знаки препинания и т. п.

Сегодня делал сайт в Figma. Просто в тексте просишь: «Дай символ рубля или эмодзи часов», — она удаляет запрос и вставляет в текст то, что нужно. Но это я могу где угодно попросить, что в Telegram, что в Photoshop, например.

Чтобы не помнить кучу клавиш

Но тогда придётся какой-то очень строгий и сильный промпт к каждому запросу отправлять + скрин экрана (где, скорее всего, будет плюсом очень много ненужной инфы, которая пойдёт плюсом к этому запросу). А тебе нужно всего лишь три слова на английский перевести. Ну, в общем, идея прикольная и даже не слишком сложно реализуемая — до момента отправки всего этого в gmini, т. к. больше чем уверен, что она на половину инструкций просто болт положит. За всё время работы с ней я понял: чем короче промпт, тем меньше вероятности, что что-то пойдёт не так )))

Контрибьютерство приветствуется? Попробую перетащить на линукс, макос не обещаю, ибо с этой системой не работал

В любом случае, крайне классный и перспективный проект!

Контрибьютерство приветствуется?

Да, конечно, спасибо большое! Мне нужно ещё денёк, чтобы полностью разобраться с гитхабом, я планирую в скором времени внести некоторые кардинальные изменения.

Начиная с того, чтобы уйти от customtkinter, заканчивая отказом от config_xx.json

Здравствуйте! Очень интересный проект, спасибо. Прошу помощи. Я нуб в Python и Git, но очень хочу разобраться. Вроде всё сделал по инструкции, но при запуске main.py получил такую ошибку:

Traceback (most recent call last):
File "C:\Users\User\documents\clipgen\
main.py", line 49, in
current_config = list(language_configs.values())[0]
~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^
IndexError: list index out of range

В чём может быть дело?

И еще. Не сразу нашёл файлы config_en.json и config_ru.json. После успешного клонирования с Git они обнаружились здесь: ...\ClipGen\dist\ClipGen.zip. Нужно ли их разархивировать и по какому пути они должны в итоге располагаться? Спасибо.

по какому пути они должны в итоге располагаться? 

Рядом с main.py, в этом же каталоге. Ошибка, судя по всему, из-за того, что этих файлов нет. Я обновлю их на гитхабе, немного запутался, как он работает (это просто мой первый проект, который я там выложил, и пока всё очень сложно))). Надо привыкнуть.

Главное пароль или другую важную информацию не копировать.

Копировать можно, просто не нужно отправлять в Gmini, пока не нажмёшь горячую клавишу — инфа из буфера никуда не отправится. Но хотя Gemini это Google, а я не то чтобы безоговорочно доверяю Google, но сейчас так сразу и не вспомню, сколько сервисов у меня завязаны на Gmail, например.

Отличная идея насчет проверки орфографии по выделению текста и шорткату! Прочитал и загорелся это внедрить у себя. Но не хотелось городить огород с исполняемыми файлами, да и функциональность мне вся не нужна, а также все равно поднят n8n серверок для no-code автоматизаций. Так что решил просто внедрить эту идею, и уже все работает, прошло всего 2 часа, просто шикарно и удобно, спасибо!

У меня получилось так реализовать:
(AutoHotKey скрипт) <--> (Webhook n8n - Ai Agent -- Respond to Webhook).
Скрипт мне написал ChatGPT с небольшой помощью Claude.ai.
Ноды n8n помог довести до ума тоже ChatGPT.

если кому нужно, код для AHK:

!1:: {
    ; Clear the clipboard
    A_Clipboard := ""
    
    ; Copy the selected text
    Send("^c")
    
    ; Wait for the clipboard to contain data
    if !ClipWait(2) {
        MsgBox("Не удалось скопировать текст. Убедитесь, что текст выделен.")
        return
    }
    
    ; Get the clipboard content
    text := A_Clipboard
    
    ; Check if text was copied
    if (text = "") {
        MsgBox("Нет скопированного текста.")
        return
    }
    
    ; Prepare JSON data - escape quotes and backslashes in the text
    ;escapedText := StrReplace(StrReplace(text, "\", "\\"), Chr(34), "\" . Chr(34))
    ;jsonData := "{" . Chr(34) . "text" . Chr(34) . ":" . Chr(34) . escapedText . Chr(34) . "}"

; Предполагаем, что переменная text уже содержит исходный текст

; Экранируем обратный слэш:
escapedText := StrReplace(text, "\\", "\\\\")
; Экранируем двойные кавычки:
escapedText := StrReplace(escapedText, Chr(34), "\\" . Chr(34))
; (Дополнительно можно экранировать переводы строк, если требуется)
escapedText := StrReplace(escapedText, "`n", "\\n")
escapedText := StrReplace(escapedText, "`r", "\\r")

; Формируем JSON-строку:
jsonData := "{" . Chr(34) . "text" . Chr(34) . ":" . Chr(34) . escapedText . Chr(34) . "}"

    
    ; Create HTTP request
    try {
        ; Create HTTP object
        http := ComObject("WinHttp.WinHttpRequest.5.1")
        
        ; Open connection
        http.Open("POST", "your-webhook-placeholder", false)
        
        ; Set request header
        http.SetRequestHeader("Content-Type", "application/json")
        
        ; Send the request
        http.Send(jsonData)
        
        ; Check status code
        statusCode := http.Status
        
        if (statusCode != 200) {
            MsgBox("Ошибка сервера. Код статуса: " . statusCode . "`nОтвет: " . http.ResponseText)
            return
        }
        
        ; Get the response
        newText := http.ResponseText
        
        ; Check if response was received
        if (newText != "") {
            ; Set the clipboard to the new text
            A_Clipboard := newText
            Sleep(100)
            Send("^v")
        } else {
            MsgBox("Получен пустой ответ от сервера. Проверьте настройки n8n.")
        }
    } catch as e {
        MsgBox("Ошибка при отправке запроса: " . e.Message)
    }
}


# В файле ClipGen.py замените метод create_log_handler следующим кодом:

# В файле ClipGen.py, изменим метод update_color:

Что-то мне подсказывает, что автор не брезговал помощью Gemini, когда писал этот код...

Что-то мне подсказывает, что вы не прочитали первые четыре строчки моего текста. И в этот раз не Gemini, а сборная солянка из нейронок.

я по профессии графический дизайнер, а не программист. Но это не мешает мне создавать полезные инструменты с помощью ИИ.

Из строчки

Но это не мешает мне создавать полезные инструменты с помощью ИИ.

не очевидно, что код был сгенерирован ИИ

Вам лишь бы придраться? Тогда дочитайте статью до этого фрагмента — «код я пишу с помощью нейросети»

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации