Pull to refresh

Comments 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 может поможет

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, а сборная солянка из нейронок.

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

Из строчки

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

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

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

Sign up to leave a comment.

Articles