From ef642d2835815b6a58c49e113df3f985b2a4859c Mon Sep 17 00:00:00 2001 From: CaYatur <152031095+CaYatur@users.noreply.github.com> Date: Sat, 26 Sep 2026 13:30:48 +0300 Subject: [PATCH] fix(dev): rebuild audify for Electron on npm install Source installs often left audify without a native binary, so loopback-helper returned non-JSON stdout and Admin showed INVALID_HELPER_OUTPUT. Add @electron/rebuild, postinstall + rebuild:audio script, and short README notes. --- README.md | 2 ++ README.tr.md | 2 ++ package-lock.json | 2 +- package.json | 5 +++- scripts/rebuild-audify.js | 58 +++++++++++++++++++++++++++++++++++++++ 5 files changed, 67 insertions(+), 2 deletions(-) create mode 100644 scripts/rebuild-audify.js diff --git a/README.md b/README.md index dbbd388..225f49b 100644 --- a/README.md +++ b/README.md @@ -1207,6 +1207,8 @@ computes the FFT, and sends frames to the renderer. npm install ``` +After `npm install`, the `audify` native module is rebuilt for Electron automatically (`postinstall` → `rebuild:audio`). Without that step, source `npm start` can show `INVALID_HELPER_OUTPUT` from the audio helper. Manual: `npm run rebuild:audio`, then `npm run check:runtime`. + ```bash npm start ``` diff --git a/README.tr.md b/README.tr.md index 00ff3cf..ca5617b 100644 --- a/README.tr.md +++ b/README.tr.md @@ -1204,6 +1204,8 @@ okur, FFT'yi hesaplar ve kareleri arayüze gönderir. npm install ``` +`npm install` bitince `audify` native modülü Electron için otomatik yeniden derlenir (`postinstall` → `rebuild:audio`). Bu adım olmazsa kaynaktan `npm start` ses yardımcı sürecinde `INVALID_HELPER_OUTPUT` verebilir. Elle: `npm run rebuild:audio`, sonra `npm run check:runtime`. + ```bash npm start ``` diff --git a/package-lock.json b/package-lock.json index e4f0214..29cc202 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,6 +15,7 @@ }, "devDependencies": { "@electron/packager": "^20.0.0", + "@electron/rebuild": "^4.2.0", "electron": "^43.6.0", "electron-builder": "^26.15.3", "node-gyp": "^12.3.0", @@ -458,7 +459,6 @@ "resolved": "https://registry.npmjs.org/@electron/rebuild/-/rebuild-4.2.0.tgz", "integrity": "sha512-RKL/O+jGoXJMxrx/5771y1n0xTKmFuOYGO3gMmwypBM6rsH0kou0mswwdXA2JrhIkE4xyC7v9vGk0n6NPzgOxQ==", "dev": true, - "license": "MIT", "dependencies": { "@malept/cross-spawn-promise": "^2.0.0", "debug": "^4.1.1", diff --git a/package.json b/package.json index 1de9d4a..bd1ddfc 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "soundvisualizer", "version": "3.1.4", - "description": "CAYADEV — çoklu ekran, OBS yayın çıkışı ve Studio shader editörü olan ses görselleştirici (Windows + macOS)", + "description": "CAYADEV \u2014 \u00e7oklu ekran, OBS yay\u0131n \u00e7\u0131k\u0131\u015f\u0131 ve Studio shader edit\u00f6r\u00fc olan ses g\u00f6rselle\u015ftirici (Windows + macOS)", "main": "src/main/main.js", "author": { "name": "CAYADEV", @@ -17,6 +17,8 @@ "scripts": { "start": "node scripts/start.js", "dev": "node scripts/start.js --dev", + "postinstall": "node scripts/rebuild-audify.js", + "rebuild:audio": "node scripts/rebuild-audify.js", "icons": "node scripts/gen-icons.js", "prepare:smtc": "node scripts/prepare-smtc.js", "prepare:appaudio": "node scripts/prepare-app-audio.js", @@ -31,6 +33,7 @@ }, "devDependencies": { "@electron/packager": "^20.0.0", + "@electron/rebuild": "^4.2.0", "electron": "^43.6.0", "electron-builder": "^26.15.3", "node-gyp": "^12.3.0", diff --git a/scripts/rebuild-audify.js b/scripts/rebuild-audify.js new file mode 100644 index 0000000..ca9bae6 --- /dev/null +++ b/scripts/rebuild-audify.js @@ -0,0 +1,58 @@ +'use strict'; +/* Kaynaktan `npm install` sonrası audify native ikilisini Electron ABI'sine + göre derler. Yapılmazsa loopback-helper stdout'ta geçerli JSON üretemez + ve Admin `INVALID_HELPER_OUTPUT` gösterir (ZIP + npm start senaryosu). + + Sürüm (.exe) paketleri bunu paketleme sırasında zaten alır; bu betik + yalnız geliştirme kurulumuna yöneliktir. */ +const { spawnSync } = require('child_process'); +const fs = require('fs'); +const path = require('path'); + +const root = path.join(__dirname, '..'); +const cli = path.join(root, 'node_modules', '@electron', 'rebuild', 'lib', 'cli.js'); + +let electronPath = null; +try { + electronPath = require('electron'); +} catch { + electronPath = null; +} + +if (typeof electronPath !== 'string' || !fs.existsSync(electronPath)) { + console.warn('[rebuild-audify] Electron henüz yok; atlanıyor.'); + process.exit(0); +} + +if (!fs.existsSync(cli)) { + console.warn('[rebuild-audify] @electron/rebuild bulunamadı; atlanıyor.'); + process.exit(0); +} + +console.log('[rebuild-audify] audify → Electron native rebuild…'); +const result = spawnSync(process.execPath, [cli, '-f', '-w', 'audify'], { + cwd: root, + stdio: 'inherit', + windowsHide: true, + env: process.env, +}); + +if (result.error) { + console.error('[rebuild-audify] başarısız:', result.error.message); + console.error('Elle deneyin: npm run rebuild:audio'); + process.exit(0); +} +if (result.status !== 0) { + console.error('[rebuild-audify] çıkış kodu ' + (result.status || 1)); + console.error('Elle deneyin: npm run rebuild:audio (Windows: Visual Studio Build Tools gerekebilir)'); + /* postinstall'ı tamamen düşürme: katkıcılar sadece UI bakabilsin. + Ses için check:runtime / rebuild:audio yeterli sinyal. */ + process.exit(0); +} + +const built = path.join(root, 'node_modules', 'audify', 'build', 'Release', 'audify.node'); +if (fs.existsSync(built)) { + console.log('[rebuild-audify] tamam: ' + built); +} else { + console.warn('[rebuild-audify] bitti ama audify.node bulunamadı; npm run check:runtime ile doğrulayın.'); +}