rus-image-percent-gen
DeepSeek Harness bundle: Russian UI localization, element scaling (80-220%), pixel-art drawing (pixel_art), and outbound proxy choice with its own settings page - HTTP(S)/SOCKS5, latency and exit-country checks (proxy_switch).
- Stars
- 0
- Language
- JavaScript
- Created
- Oct 15, 2026
- Updated
- Oct 15, 2026
Introduction
rus-image-percent-gen
Один плагин DeepSeek Harness, который делает четыре вещи:
| Что | Как это выглядит |
|---|---|
| Русский интерфейс | перевод всей оболочки (2310 строк), включается автоматически |
| Масштаб элементов | кнопка A+ / A− в подвале панели, от 80 % до 220 % (шаг 5 %, выше 160 % — 10 %) |
| Рисование | инструмент pixel_art: холст 4×4…256×256, покраска по пикселю, предпросмотр ×5/×3, экспорт PNG |
| Прокси | инструмент proxy_switch, переключатель в подвале панели и своя страница в настройках: адрес по частям, HTTP(S)/SOCKS5, проверка по пингу со страной выхода |
Пример результата: 
Английская версия — ниже. Как выложить плагин, чтобы его скачали другие — PUBLISH.md.
Установка одной строкой:
dsh plugin --profile desktop add github:Pro12447890/rus-image-percent-gen
Рисование: инструмент pixel_art
action | Что делает |
|---|---|
help | отдаёт эту инструкцию целиком (lang: "ru" или "en") |
new | создаёт/очищает холст: width, height (4…256), необязательный background |
pixels | красит отдельные пиксели: [{x, y, color, alpha?}] |
draw | рисует ASCII-сетку по палитре: rows + palette (символ → цвет) |
fill | заливает прямоугольник {x, y, w, h, color, alpha?} |
dump | возвращает холст сеткой символов и легендой палитры (текстом) |
preview | возвращает холст картинкой PNG (по умолчанию ×5, для крупных ×3) |
save | пишет итоговый PNG (1:1), с scale — ещё и увеличенную копию |
Цвета: #rgb, #rrggbb, #rrggbbaa, "r,g,b[,a]", имя (red, teal, skin)
или массив [r,g,b,a]. Альфа — 0…255.
Несколько холстов сразу — через необязательное имя canvas.
Прокси: инструмент proxy_switch
Прокси по умолчанию НЕ вписан и НЕ включён. Ни адреса, ни логина, ни пароля: пока пользователь не задаст свой, всё идёт напрямую, как будто инструмента нет. Это сделано намеренно — чужой прокси в общем пакете не нужен никому.
Части адреса вводятся раздельно — у каждого прокси они свои: protocol, host,
port, user, password. Можно и одной строкой (proxy), если так удобнее.
action | Что делает |
|---|---|
status | текущий маршрут: режим, адрес (логин скрыт), список обхода, кандидаты, результат последней проверки, доступен ли undici, что в переменных окружения |
check | проверка по пингу: идёт через каждого кандидата настоящим запросом и показывает время ответа, внешний IP и страну; "choose": true — переключиться на быстрейшего |
set | включить свой прокси — по частям (host, port, user, password, protocol) или одной строкой proxy |
env | взять адрес из переменных окружения (HTTPS_PROXY/HTTP_PROXY/ALL_PROXY) |
off | вернуться к прямому выходу |
help | отдать инструкцию (lang: "ru" или "en") |
Поддерживаются HTTP(S) и SOCKS5 (у SOCKS5 нет списка обхода). Есть отдельная страница настроек в интерфейсе: Настройки → Прокси.
Логин и пароль в ответах скрываются (http://***@host:8080). Переключение действует
сразу для всех внутрипроцессных запросов (модели, поиск, HTTP-MCP) и, если не выключить
export_env, уходит в переменные дочерних процессов (curl/git, stdio-MCP).
{"action":"set","protocol":"http","host":"proxy.example.com","port":8080,
"user":"логин","password":"пароль","noProxy":["localhost","api.deepseek.com"]}
{"action":"set","proxy":"http://user:password@proxy.example.com:8080"}
{"action":"check","targets":[
{"name":"Домашний","host":"proxy-a.example.com","port":8080,"user":"u","password":"p"},
{"name":"Рабочий","host":"proxy-b.example.com","port":3128}]}
{"action":"check","choose":true}
Чтобы адрес применялся при каждом запуске DSH, а кандидатов было удобно проверять по пингу, впишите их в конфиг записи плагина (по умолчанию там пусто):
- insert:
- id: rus-image-percent-gen
name: 'rus-image-percent-gen'
config:
proxy:
enabled: true
url: 'http://user:password@proxy-a.example.com:8080' # включается при запуске
candidates: # что проверяет check
- { name: 'Домашний', protocol: http, host: proxy-a.example.com, port: 8080, user: u, password: p }
- 'http://user:password@proxy-b.example.com:8080'
noProxy: ['localhost', '127.0.0.1']
exportEnv: true
Ответ check выглядит так:
Проверка прокси (2):
1. Домашний — http://***@proxy-a.example.com:8080 — живой, 412 мс, внешний IP 38.154.185.97, страна United States (US)
2. Рабочий — http://***@proxy-b.example.com:3128 — нет ответа за 5000 мс (no answer within 5000 ms)
Быстрейший: Домашний — http://***@proxy-a.example.com:8080 (412 мс, United States).
Если в профиле уже стоит отдельный плагин прокси с карточкой настроек (например
@memef1f1y/dsh-plugin-proxy) — держите включённым только один: оба пишут один и тот же
глобальный диспетчер.
Для внутрипроцессного прокси нужен пакет undici (объявлен в зависимостях, при
установке из npm ставится сам). Если его нет, set/env/check честно скажут об этом.
Установка
# из локальной папки
dsh plugin --profile desktop add <путь-к-папке-плагина>
# или из npm / git, когда пакет опубликован
dsh plugin --profile desktop add rus-image-percent-gen
dsh plugin --profile desktop add github:Pro12447890/rus-image-percent-gen
В интерфейсе DSH то же самое делается через Настройки → Плагины (установка
бандла). После установки плагин виден в перечне бандлов профиля, а инструмент
pixel_art появляется у агента без перезапуска — достаточно нового запроса.
Совместимость: собран и проверен на DSH 0.2.0-rc.2, профиль desktop (Windows).
Лицензия — MIT, исходники целиком в репозитории, внешних сервисов плагин не требует.
Внешних зависимостей ровно одна — undici (нужна только для прокси; при установке из
npm ставится сама). PNG кодируется встроенным node:zlib, определение инструментов
собирается вручную. Нужны сервисы tools и (для показа картинок) attachments.
Код разложен по трём файлам: plugin.js — точка входа и пиксель-арт, proxy.js — выбор
прокси, shared.js — чтение инструкций.
Как этим пользуется ИИ
help— читает инструкциюinstructions/pixel-art.<язык>.md;new— выбирает разрешение;pixels/draw/fill— рисует;preview— смотрит на себя картинкой и правит, пока не понравится;dump— когда нужно посчитать пиксели или сверить координаты без зрения;save— отдаёт итоговый PNG человеку.
Инструкция лежит в двух файлах — instructions/pixel-art.ru.md и
instructions/pixel-art.en.md; она же возвращается действием help.
Ограничения
- Холсты живут в процессе хоста до перезапуска DSH (в файлы они не пишутся,
пока не вызван
save). - Увеличение предпросмотра упирается в лимиты сервиса вложений: если предел меньше запрошенного, инструмент сам уменьшит масштаб и скажет об этом.
- Инструмент помечен как небезопасный для параллельных вызовов: холст — общее состояние.
Лицензия
MIT.
English
One DeepSeek Harness bundle that does four things:
| What | How it shows up |
|---|---|
| Russian UI | the whole shell translated (2310 strings), switched on automatically |
| Element scaling | an A+ / A− control in the sidebar foot, 80 % to 220 % (5 % steps, 10 % above 160 %) |
| Drawing | the pixel_art tool: a 4×4…256×256 canvas, per-pixel painting, ×5/×3 previews, PNG export |
| Proxy | the proxy_switch tool, a switch in the sidebar foot and its own settings page: address parts, HTTP(S)/SOCKS5, latency check with the exit country |
Publishing instructions: PUBLISH.md. Example output:

Drawing: the pixel_art tool
action | What it does |
|---|---|
help | returns these instructions (lang: "ru" or "en") |
new | creates/resets a canvas: width, height (4…256), optional background |
pixels | paints individual pixels: [{x, y, color, alpha?}] |
draw | paints an ASCII grid by palette: rows + palette (character → colour) |
fill | fills a rectangle {x, y, w, h, color, alpha?} |
dump | returns the canvas as a character grid with a palette legend |
preview | returns the canvas as a PNG (×5 by default, ×3 for large canvases) |
save | writes the final 1:1 PNG; with scale also an upscaled copy |
Colours: #rgb, #rrggbb, #rrggbbaa, "r,g,b[,a]", a name (red, teal,
skin) or [r,g,b,a]. Alpha runs 0…255. Several canvases at once via the
optional canvas name.
Proxy: the proxy_switch tool
No proxy is filled in and none is enabled by default. No address, no login, no password: until the user supplies their own, everything goes out directly, exactly as if the tool were not there. That is deliberate — somebody else's proxy has no place in a shared package.
The parts of an address are entered separately — every proxy differs here:
protocol, host, port, user, password. A single proxy URL string still works.
action | What it does |
|---|---|
status | the current route: mode, address (credentials hidden), bypass list, candidates, the last check, whether undici is available, what the environment holds |
check | latency check: walks each candidate with a real request through it and reports the round trip, the exit address and the country; "choose": true switches to the fastest one |
set | switch to your own proxy — by parts (host, port, user, password, protocol) or as one proxy URL |
env | take the address from the environment (HTTPS_PROXY/HTTP_PROXY/ALL_PROXY) |
off | return to a direct connection |
help | return the instructions (lang: "ru" or "en") |
{"action":"set","protocol":"http","host":"proxy.example.com","port":8080,
"user":"login","password":"secret","noProxy":["localhost","api.deepseek.com"]}
{"action":"check","targets":[
{"name":"Home","host":"proxy-a.example.com","port":8080,"user":"u","password":"p"},
{"name":"Office","host":"proxy-b.example.com","port":3128}]}
{"action":"check","choose":true}
HTTP(S) and SOCKS5 are supported (a SOCKS5 proxy has no bypass list). There is a
dedicated settings page: Settings -> Proxy. Credentials are hidden in answers (http://***@host:8080). A switch applies at
once to every in-process request (models, search, HTTP MCP) and, unless export_env is
off, reaches the environment of child processes (curl/git, stdio MCP).
To apply an address on every DSH start, and to keep a candidate list for the latency check, put both into the plugin entry config (empty by default):
- insert:
- id: rus-image-percent-gen
name: 'rus-image-percent-gen'
config:
proxy:
url: 'http://user:password@proxy-a.example.com:8080' # applied at startup
candidates: # what check tests
- 'http://user:password@proxy-a.example.com:8080'
- 'http://user:password@proxy-b.example.com:8080'
noProxy: ['localhost', '127.0.0.1']
exportEnv: true
{"action":"check"} // who answers, and how fast
{"action":"check","choose":true} // and switch to the fastest
If the profile already carries a dedicated proxy plugin with a settings card (for example
@memef1f1y/dsh-plugin-proxy), keep only one of them enabled: both write the same global
dispatcher.
The in-process proxy needs the undici package (declared as a dependency, installed
automatically from npm). When it is missing, set/env/check say so plainly.
dsh plugin --profile desktop add rus-image-percent-gen
There is exactly one external dependency, undici (needed only for the proxy; npm installs
it automatically). PNG encoding uses the built-in node:zlib and the tool definitions are
assembled by hand. Only the tools service is required, plus attachments for showing
pictures. The instructions live in instructions/*.md and are also returned by
action: "help". The code is split into plugin.js (entry plus pixel art), proxy.js
(the proxy tool) and shared.js (instruction loading).
MIT © 2026 Daymix