feat(windows): bundle PixelPass viewer

This commit is contained in:
2026-08-22 21:02:32 -04:00
parent f2220ed84e
commit 437c95380e
11 changed files with 258 additions and 85 deletions
+18 -3
View File
@@ -21,8 +21,9 @@ it once, then you and I connect directly to each other.
4. The setup window opens. Just keep clicking **Next**. Two checkboxes you'll
see along the way:
- **"Allow PeerSpeak through Windows Firewall"** — leave this **checked**
(it lets the call connect without interruptions).
- **"Allow PeerSpeak and PixelPass through Windows Firewall"** — leave this
**checked** (it lets calls and incoming screen shares connect without
interruptions).
- **"Create a desktop shortcut"** — check it if you'd like an icon on your
desktop.
@@ -69,7 +70,19 @@ Either way works the same; it just depends on who makes the room.
---
## 4. Chatting and sharing photos/files
## 4. Watching a shared screen
This Windows build can watch a screen shared by someone using PeerSpeak on
Linux. Install [VLC](https://www.videolan.org/vlc/) (or mpv) first. When someone
starts sharing, click **Watch** next to their name; the shared desktop opens in
the player.
Starting your own screen share from Windows is not available yet. The Windows
build labels that control **Sharing unavailable** while keeping Watch enabled.
---
## 5. Chatting and sharing photos/files
There's a **text chat** box at the bottom of the call window — type a message
and press **Enter** to send it to everyone in the room.
@@ -102,6 +115,8 @@ A couple of notes:
ticket — they're meant to be used right away. Also make sure we're both on the
**same version** — if I've sent you an updated installer, install it (an old
version and a new one can't connect to each other).
- **"Watch doesn't open anything."** Install VLC, restart PeerSpeak, and try
Watch again. The PixelPass viewer is already included with PeerSpeak.
- **The blue warning again.** Same as install: **More info → Run anyway**. It's
the unsigned-app warning, not malware.
+19 -10
View File
@@ -3,11 +3,12 @@
This directory builds a Windows setup installer for PeerSpeak using
[Inno Setup](https://jrsoftware.org/isinfo.php).
PeerSpeak ships as a **single self-contained `peerspeak.exe`** — the GUI icon,
notification chimes, and avatar presets are all embedded in the binary
PeerSpeak itself is a **self-contained `peerspeak.exe`** — the GUI icon,
notification chimes, and avatar presets are embedded in the binary
(`include_bytes!`), and the executable is statically linked against the GNU
runtime, so there are no extra DLLs to bundle. The installer payload is just the
`.exe` plus an `.ico` for the Start-menu / desktop shortcuts.
runtime. The installer also bundles the matching viewer-only `pixelpass.exe`,
which lets Windows participants watch shares hosted by Linux. VLC or mpv is
still required to render the received stream.
## Version compatibility
@@ -30,6 +31,7 @@ per-peer noise-gate release; it cannot connect to a 0.2.x peer.)
| `peerspeak.ico` | yes | multi-resolution app icon (from `assets/icons/*.png`) |
| `README.md` | yes | this file |
| `peerspeak.exe` | no (gitignored) | staged build artifact, copied from `target/x86_64-pc-windows-gnu/release/` |
| `pixelpass.exe` | no (gitignored) | matching staged Windows viewer from the PixelPass repository |
| `output/peerspeak-<ver>-setup.exe` | no (gitignored) | the compiled installer |
## Build steps
@@ -45,12 +47,19 @@ per-peer noise-gate release; it cannot connect to a 0.2.x peer.)
installed in that toolchain. The result is a statically-linked,
GUI-subsystem `.exe` (no stray console window).
2. **Stage the binary** next to the script:
2. **Cross-compile PixelPass's Windows viewer** from the matching PixelPass
source, then stage both binaries next to the script:
```sh
cp target/x86_64-pc-windows-gnu/release/peerspeak.exe packaging/windows/
cp ../pixelpass/target/x86_64-pc-windows-gnu/release/pixelpass.exe \
packaging/windows/
```
PixelPass may use a separate target directory on low-space builders; copy
the final `pixelpass.exe` from that directory instead. Do not substitute an
older helper without re-running the ticket/viewer compatibility test.
3. **Regenerate the icon** if the source PNGs changed:
```sh
@@ -71,12 +80,12 @@ per-peer noise-gate release; it cannot connect to a 0.2.x peer.)
## What the installer does
- Installs `peerspeak.exe` to `Program Files\PeerSpeak` (requires admin / one
UAC prompt).
- Installs `peerspeak.exe` and the matching `pixelpass.exe` to
`Program Files\PeerSpeak` (requires admin / one UAC prompt).
- Creates a Start-menu shortcut, with an optional desktop shortcut.
- Optionally adds a Windows Firewall allow-rule for PeerSpeak (recommended —
iroh uses UDP hole-punching, so this avoids a mid-call firewall prompt). The
rule is removed on uninstall.
- Optionally adds idempotent Windows Firewall allow-rules for PeerSpeak and
PixelPass (recommended — both use iroh/QUIC). The rules are replaced on
upgrade and removed on uninstall.
- Provides a standard uninstaller.
> **Note:** the installer and the binary are **not code-signed**, so Windows
+9 -5
View File
@@ -1,8 +1,7 @@
; Inno Setup script for PeerSpeak (Windows installer).
;
; PeerSpeak is a single self-contained binary: the GUI icon, notification
; chimes, and avatar presets are all embedded in the .exe (include_bytes!),
; so the only payload here is peerspeak.exe plus an .ico for the shortcuts.
; PeerSpeak itself is a self-contained binary. The installer also carries the
; matching viewer-only PixelPass helper so Windows can watch Linux-hosted shares.
;
; Build (under Wine on Linux, or native Windows):
; wine "C:\Program Files (x86)\Inno Setup 6\ISCC.exe" peerspeak.iss
@@ -12,9 +11,10 @@
; (x86_64-pc-windows-gnu, statically linked -- no extra DLLs needed).
#define MyAppName "PeerSpeak"
#define MyAppVersion "0.6.7"
#define MyAppVersion "0.6.8"
#define MyAppPublisher "mollusk"
#define MyAppExeName "peerspeak.exe"
#define PixelPassExeName "pixelpass.exe"
[Setup]
; A stable AppId keeps upgrades/uninstall tracking consistent across versions.
@@ -43,10 +43,11 @@ Name: "english"; MessagesFile: "compiler:Default.isl"
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
Name: "firewall"; Description: "Allow PeerSpeak through Windows Firewall (recommended for voice calls)"; GroupDescription: "Network:"
Name: "firewall"; Description: "Allow PeerSpeak and PixelPass through Windows Firewall (recommended)"; GroupDescription: "Network:"
[Files]
Source: "peerspeak.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "pixelpass.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "peerspeak.ico"; DestDir: "{app}"; Flags: ignoreversion
[Icons]
@@ -61,7 +62,10 @@ Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; IconFilen
; its no-match exit code on a first install is harmless to Inno Setup.
Filename: "{sys}\netsh.exe"; Parameters: "advfirewall firewall delete rule name=""PeerSpeak"""; Flags: runhidden; Tasks: firewall
Filename: "{sys}\netsh.exe"; Parameters: "advfirewall firewall add rule name=""PeerSpeak"" dir=in action=allow program=""{app}\{#MyAppExeName}"" enable=yes profile=any"; Flags: runhidden; Tasks: firewall
Filename: "{sys}\netsh.exe"; Parameters: "advfirewall firewall delete rule name=""PeerSpeak PixelPass"""; Flags: runhidden; Tasks: firewall
Filename: "{sys}\netsh.exe"; Parameters: "advfirewall firewall add rule name=""PeerSpeak PixelPass"" dir=in action=allow program=""{app}\{#PixelPassExeName}"" enable=yes profile=any"; Flags: runhidden; Tasks: firewall
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#MyAppName}}"; Flags: nowait postinstall skipifsilent
[UninstallRun]
Filename: "{sys}\netsh.exe"; Parameters: "advfirewall firewall delete rule name=""PeerSpeak"""; Flags: runhidden; RunOnceId: "DelPeerSpeakFirewall"
Filename: "{sys}\netsh.exe"; Parameters: "advfirewall firewall delete rule name=""PeerSpeak PixelPass"""; Flags: runhidden; RunOnceId: "DelPeerSpeakPixelPassFirewall"