Skip to content

[Feature]: Add macOS support via BlackHole virtual audio driver guide and ScreenCaptureKit bridge — currently Windows-only #416

Description

@prince-pokharna

enhancement, cross-platform, feature, GSSoC 2026

Summary

Paraline is entirely Windows-only due to its reliance on WASAPI loopback audio capture via a C# helper process. However, Electron and all of Paraline's canvas rendering logic are completely cross-platform. macOS has its own system audio APIs (Core Audio, ScreenCaptureKit) that can provide equivalent functionality. Extending Paraline to macOS would double the addressable user base while requiring changes only to the audio capture bridge.

Problem

  • The audio-helper/ directory contains a C# binary compiled against WASAPI — a Windows-exclusive API.
  • macOS does not expose system audio loopback natively without a virtual audio device driver.
  • There is no package.json build target for macOS (darwin).
  • The Electron window uses Windows-specific layering (WS_EX_LAYERED via transparent: true), but Electron handles this transparently on macOS as well via vibrancy/NSWindow.
  • macOS users who discover Paraline on GitHub have no path to use it.

Proposed Solution

I propose a phased approach:

Phase 1 (this PR — documentation + workaround):

Add a docs/MACOS_SETUP.md guide explaining how to use BlackHole (a free, open-source virtual audio driver for macOS) as a system audio loopback source:

## macOS Setup with BlackHole

1. Install BlackHole: `brew install blackhole-2ch`
2. Open Audio MIDI Setup → Create a Multi-Output Device (System Audio + BlackHole)
3. Set Multi-Output as your default audio output
4. Paraline will capture BlackHole's loopback stream

Phase 2 (follow-up issue — native bridge):

Implement a Swift/Objective-C audio helper using ScreenCaptureKit (macOS 12.3+) that mirrors the C# helper's IPC protocol exactly, so the Electron layer requires zero changes:

// audio-helper-mac/Sources/main.swift
import ScreenCaptureKit
import Accelerate

// Capture system audio via ScreenCaptureKit
// Compute FFT bands
// Write JSON to stdout: {"bands": [0.1, 0.4, 0.8, ...]}
// (identical protocol to Windows C# helper)

I am participating in GSSoC 2026 and would like to start with Phase 1 immediately. Could you please assign this issue to me?

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions