Skip to content

About

MarinCall — текстовые и голосовые каналы, демонстрация экрана по локальной сети, Radmin VPN или интернету. Без серверов.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

MarinCall

Текстовые и голосовые каналы, демонстрация экрана — как в 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 — подменить обновление нельзя.

Установка

  1. Скачайте MarinCall-Setup-X.Y.Z.exe из последнего релиза и запустите.
  2. Права администратора не нужны: программа ставится в %LOCALAPPDATA%\Programs\MarinCall, ярлыки появятся в «Пуске» и (по желанию) на рабочем столе.
  3. При первом запуске 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

Выпуск версии

  1. Поднимите номер в VERSION, опишите изменения в CHANGELOG.md (раздел ## X.Y.Z), сделайте коммит и git push.

  2. Отправьте тег — дальше всё делает GitHub Actions (.github/workflows/release.yml): тесты, сборка exe и установщика на машине GitHub, релиз с описанием из CHANGELOG.md.

    git tag vX.Y.Z
    git push origin vX.Y.Z
    
  3. Релиз ждёт черновиком, пока вы его не подпишете (ключ подписи не покидает ваш компьютер):

    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)

About

MarinCall — текстовые и голосовые каналы, демонстрация экрана по локальной сети, Radmin VPN или интернету. Без серверов.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages