Skill Recorder supports native Windows 11 builds for both x64 and ARM64. The
architecture gate lives in .github/workflows/windows.yml
and runs on GitHub's windows-latest and native windows-11-arm images.
| Component | Windows x64 | Windows ARM64 | Notes |
|---|---|---|---|
| Electron 43 | Yes | Yes | Official Electron archives |
| Koffi / foreground-window FFI | Yes | Yes | Prebuilt N-API packages; no compiler |
| Sharp / libvips | Yes | Yes | @img/sharp-win32-* packages |
| ONNX Runtime | Yes | Yes | Both payloads ship in onnxruntime-node |
| GitHub Copilot CLI | Yes | Yes | @github/copilot-win32-* packages |
| TypeScript, Rolldown, Lightning CSS | Yes | Yes | Native development packages exist for both |
Standalone FFmpeg / ffmpeg-static |
No | No | Chromium replaced all current media uses |
Electron ffmpeg.dll codec library |
Yes | Yes | LGPL-2.1+; standard Electron component and notices |
get-windows remains an optional dependency for macOS/Linux. Windows uses Koffi
to call user32, dwmapi, and kernel32 directly, so a missing Windows
get-windows prebuild cannot break installation or runtime capture.
The previous install blocker was ffmpeg-static, whose postinstall script had no
Windows ARM64 binary. It has been removed from package.json, the lockfile,
Vite externals, electron-builder unpack rules, and packaged output.
Screen recording still uses Chromium's VP8/VP9 MediaRecorder. In parallel, the
capture renderer reads the desktop track, deduplicates 1 fps snapshots, and writes
a heartbeat at least every five seconds. Post-processing selects, crops, and
deduplicates those JPEGs without decoding the WebM.
Narration no longer shells out to FFmpeg either. A hidden Chromium renderer
decodes Opus/WebM with AudioContext, downmixes/resamples to 16 kHz mono, and the
main process performs silence detection before Whisper transcription.
For each Windows architecture, CI:
- Installs native Node 24 and runs
npm ci. - Loads Sharp, ONNX Runtime, and Koffi.
- Runs unit tests and the production build.
- Builds the architecture-specific NSIS installer.
- Verifies the packaged PE machine type and the Sharp, ONNX, Koffi, and Copilot payload architecture.
- Inspects loose and
app.asarpaths, fails ifffmpeg-staticor a standalone FFmpeg executable appears, and verifies Electron's codec DLL and license notices.
Release publication is additionally gated on attaching the pinned LGPL source
and relinking materials listed in THIRD-PARTY-NOTICES.md.
Local equivalents:
npm ci
npm test
npm run build
npm run dist:win:arm64 # on native Windows ARM64
node scripts/verify-windows-package.mjs arm64Use dist:win:x64 and x64 for the x64 package. Building each installer on its
native runner ensures npm selects the correct optional native packages. The package
scripts reject cross-architecture builds instead of producing an installer containing
host-architecture Koffi, Sharp, or Copilot binaries.
Automated packaging cannot validate desktop permissions or real foreground apps. Before a release, run this checklist on a physical Windows 11 ARM64 machine:
- Confirm
node -p "process.arch"and the running Electron process both reportarm64. - Start a two-minute recording, leave the screen static for at least 15 seconds, then switch among a Win32 app, Settings, a browser, and an elevated app.
- Confirm
app.activaterecords the owning process (notApplicationFrameHost.exefor Settings) and does not crash on the elevated app. - Confirm
video.webm,video-frames.json, periodic files undervideo-frames/, and retained JPEGs underframes/. - Request cropped frames from the Sessions analysis and verify exact crop dimensions and readable text.
- Record narration, transcribe it, and confirm timestamped segments without a system FFmpeg installation.
- Open a pre-change recording. With system FFmpeg installed, legacy frame extraction should work; without it, the event-only analysis must still work and log one actionable compatibility warning.
- Browser URL capture still uses the existing Windows PowerShell UI Automation sidecar. Core app/window tracking does not depend on PowerShell.
- Snapshot information is capped by the intentional 1 fps desktop capture rate. Asking for a higher sampling density cannot create additional visual detail.
- A standalone system FFmpeg is optional and legacy-only; it is never downloaded, bundled, or required for new recordings. Electron's standard LGPL codec DLL remains part of the Chromium runtime.