Текстовые и голосовые каналы, демонстрация экрана — как в Discord, но без серверов: компьютеры общаются напрямую — в локальной сети, через Radmin VPN или через интернет по коду приглашения (сеть на iroh: QUIC, пробивка NAT, всё зашифровано).
- Текстовые каналы — Markdown (
**жирный**,*курсив*,`код`, блоки кода, ссылки, спойлеры||…||, списки, заголовки), превью ссылок, ответы, редактирование и удаление, реакции, эмодзи с поиском, упоминания@имя/@все, картинки и файлы до 25 МБ (вставка из буфера и перетаскивание), просмотр картинок с увеличением, GIF, встроенный видеоплеер, голосовые сообщения, черновики, «печатает…», непрочитанные, закреплённые сообщения и поиск по всей истории (Ctrl+F). - Личные сообщения — только между двумя участниками и хранятся только у вас двоих. Если собеседник не в сети, сообщение передают остальные участники комнаты в зашифрованном виде (прочитать его они не могут). Видно, доставлено ли и прочитано.
- Голосовые каналы — Opus 48 кГц напрямую между участниками, эхоподавление и шумоподавление WebRTC (можно без наушников), активация голосом с автоматической чувствительностью или режим рации (глобальная клавиша — работает в играх), выключение микрофона/звука, громкость каждого участника, звуки входа/выхода, звуковая панель (встроенные звуки и свои).
- Видеозвонки — камера в плитках голосового канала у всех участников.
- Демонстрация экрана в голосовом канале — экран через DXGI, окно через Windows Graphics Capture (как в OBS: не по заголовку, игры и браузеры не чёрные, видно и под другими окнами), аппаратное кодирование NVENC (или x264) встроенными библиотеками FFmpeg, до 1440p60. Зрители смотрят прямо в канале (F — на весь экран); если поток прервался, он переподключается сам. Пока вы в текстовом канале, трансляция остаётся в мини-плеере в углу окна. Звук — всё, что играет на компьютере, кроме голосового чата: зрители слышат игру, но не себя. При показе окна можно отдать звук только этой программы (захват звука процессов Windows 10 2004+, «Стерео микшер» не нужен). Ваша плитка показывает, кто смотрит.
- История без сервера — у каждого участника свой журнал событий; когда вы снова в сети, пропущенные сообщения досинхронизируются от любого, кто онлайн.
- Статусы «В сети», «Отошёл» (сам через 10 минут) и «Не беспокоить», линия «НОВЫЕ» перед непрочитанным.
- Аватарки-картинки, темы (тёмная, пепельная, полночь, светлая, системная), акцентный цвет, масштаб текста.
- Выбор устройств ввода/вывода, проверка микрофона.
- Автозапуск с Windows, сворачивание в трей, запуск свёрнутым, уведомления Windows.
- Горячие клавиши — глобальные (работают в играх и не перехватывают клавиши у игры):
микрофон
Ctrl+Shift+M, звукCtrl+Shift+D, рация, демонстрация, вход/выход из голосового канала, показать окно; можно назначить кнопки мыши 4/5 и одиночный модификатор. В окне:Ctrl+K— быстрый переход,Alt+↑/↓— каналы,Ctrl+/— все сочетания. - Обновления из релизов: новая версия скачивается в фоне и ставится, когда вы закрываете приложение (или сразу — одной кнопкой). Ставится только установщик с подписью ключа MarinCall — подменить обновление нельзя.
- Скачайте MarinCall-Setup-X.Y.Z.exe из последнего релиза и запустите.
- Права администратора не нужны: программа ставится в
%LOCALAPPDATA%\Programs\MarinCall, ярлыки появятся в «Пуске» и (по желанию) на рабочем столе. - При первом запуске Windows спросит доступ к сети — разрешите хотя бы для частных сетей.
Программа не подписана сертификатом, поэтому SmartScreen может показать «Windows защитила ваш компьютер»: Подробнее → Выполнить в любом случае.
Обновления приложение предлагает само: скачивает новый установщик и ставит его в один клик. Если друзья вас не видят: Настройки → Сеть → «Открыть порты в брандмауэре».
- Каждый участник — пара ключей Ed25519: публичный ключ служит ID, им подписано каждое сообщение.
- Соединения — QUIC через iroh: в локальной сети и Radmin напрямую, через интернет — с пробивкой NAT, а если не вышло, через ретранслятор n0 (видит только шифрованные данные). В режиме «только локальная сеть» внешние сервисы не используются вообще.
- Комната — это секрет: открытые комнаты задаются названием (для своей сети), закрытые — только по коду приглашения. Участники доказывают знание секрета при каждом соединении. Код приглашения — около 80 символов: ключ друга, метка ретранслятора и комната, с контрольной суммой.
- История у каждого своя и досинхронизируется от тех, кто онлайн.
- Личные сообщения для того, кто не в сети, запечатываются его ключом (X25519 из того же Ed25519-ключа, sealed box libsodium) и хранятся у остальных участников, пока он не заберёт их и не подпишет квитанцию; файлы к ним шифруются отдельным случайным ключом.
| Что | Порт | Протокол |
|---|---|---|
| Поиск участников в локальной сети | 8890 | UDP broadcast |
| Всё остальное (чат, голос, трансляция) | 8891 | UDP (QUIC) |
Данные хранятся в %APPDATA%\MarinCall (профиль, ключ, история, файлы) — папку с программой можно
переносить между компьютерами.
classic.bat открывает прежнее окно ScreenShare — трансляция по IP без каналов. Ему нужен
отдельный FFmpeg: при первом запуске окно предложит скачать его само.
Из командной строки: python screen_share.py send <ip> / python screen_share.py receive.
Windows 10/11. Для установленной версии больше ничего не нужно — Python и всё остальное уже внутри. Аппаратное кодирование трансляции — на видеокартах NVIDIA (иначе кодирует процессор).
История изменений — в CHANGELOG.md.
setup.bat ставит Python-зависимости и FFmpeg в venv
run.bat запускает приложение из исходников
classic.bat старое окно ScreenShare
-
Поднимите номер в
VERSION, опишите изменения вCHANGELOG.md(раздел## X.Y.Z), сделайте коммит иgit push. -
Отправьте тег — дальше всё делает GitHub Actions (
.github/workflows/release.yml): тесты, сборка exe и установщика на машине GitHub, релиз с описанием изCHANGELOG.md.git tag vX.Y.Z git push origin vX.Y.Z -
Релиз ждёт черновиком, пока вы его не подпишете (ключ подписи не покидает ваш компьютер):
python tools\release.py --sign-draft vX.Y.Z
Если положить ключ в секрет репозитория MARINCALL_SIGNING_KEY, релиз будет подписан и
опубликован сразу, без шага 3 — удобнее, но тогда подписать обновление сможет любой, кто получит
доступ к репозиторию.
Ключ подписи — %APPDATA%\MarinCall-release\release.key (создаётся один раз:
python tools\sign.py keygen, открытая часть — RELEASE_KEY в marincall/config.py).
Сохраните копию этого файла: без него новые версии не смогут обновиться сами.
Без GitHub Actions, целиком на своём компьютере: tools\build.bat, затем python tools\release.py
(нужны Inno Setup 6 — winget install JRSoftware.InnoSetup — и GitHub CLI, gh auth login).
python -m pytest тесты (хранилище, приглашения, форматирование, подпись обновлений)
python tools\screens.py скриншоты всех экранов в тёмной и светлой теме — в build\screens\
Скриншоты снимаются без окон на экране, с тремя тестовыми участниками в отдельной закрытой комнате и временной папке профилей — ваша история и друзья их не видят.
app.py запуск приложения
marincall/ ядро: сеть (iroh), голос, демонстрация экрана, хранилище, обновления
marincall/ui/ интерфейс на PySide6
screen_share.py классическое окно ScreenShare
assets/ иконка приложения
packaging/ спецификация PyInstaller и сценарий установщика
tools/ сборка, выпуск и подпись релиза, скриншоты, генерация иконки
tests/ автотесты (pytest)