Compare commits
5 Commits
sidecar-v1
...
sidecar-v1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5837b97a20 | ||
|
|
ab09a3e9da | ||
|
|
5343a28a08 | ||
|
|
f0bf026133 | ||
|
|
37a029d1c6 |
@@ -19,9 +19,26 @@ datas = [
|
|||||||
('config/default_config.yaml', 'config'),
|
('config/default_config.yaml', 'config'),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
# Collect sounddevice's bundled PortAudio library (_sounddevice_data)
|
||||||
|
try:
|
||||||
|
import sounddevice
|
||||||
|
sd_path = os.path.dirname(sounddevice.__file__)
|
||||||
|
sd_data = os.path.join(sd_path, '_sounddevice_data')
|
||||||
|
if os.path.exists(sd_data):
|
||||||
|
datas.append((sd_data, '_sounddevice_data'))
|
||||||
|
print(f" + Collected sounddevice PortAudio data from {sd_data}")
|
||||||
|
# Also collect the package itself
|
||||||
|
sd_datas = collect_data_files('sounddevice')
|
||||||
|
if sd_datas:
|
||||||
|
datas += sd_datas
|
||||||
|
print(f" + Collected {len(sd_datas)} sounddevice data files")
|
||||||
|
except ImportError:
|
||||||
|
print(" - Warning: sounddevice not found")
|
||||||
|
|
||||||
# Hidden imports -- only lightweight deps needed for Deepgram streaming
|
# Hidden imports -- only lightweight deps needed for Deepgram streaming
|
||||||
hiddenimports = [
|
hiddenimports = [
|
||||||
'sounddevice',
|
'sounddevice',
|
||||||
|
'_sounddevice_data',
|
||||||
'numpy',
|
'numpy',
|
||||||
# FastAPI and dependencies
|
# FastAPI and dependencies
|
||||||
'fastapi',
|
'fastapi',
|
||||||
|
|||||||
@@ -38,6 +38,21 @@ datas = [
|
|||||||
(vad_assets_path, 'faster_whisper/assets'),
|
(vad_assets_path, 'faster_whisper/assets'),
|
||||||
] + pvporcupine_data_files
|
] + pvporcupine_data_files
|
||||||
|
|
||||||
|
# Collect sounddevice's bundled PortAudio library (_sounddevice_data)
|
||||||
|
try:
|
||||||
|
import sounddevice
|
||||||
|
sd_path = os.path.dirname(sounddevice.__file__)
|
||||||
|
sd_data = os.path.join(sd_path, '_sounddevice_data')
|
||||||
|
if os.path.exists(sd_data):
|
||||||
|
datas.append((sd_data, '_sounddevice_data'))
|
||||||
|
print(f" + Collected sounddevice PortAudio data from {sd_data}")
|
||||||
|
sd_datas = collect_data_files('sounddevice')
|
||||||
|
if sd_datas:
|
||||||
|
datas += sd_datas
|
||||||
|
print(f" + Collected {len(sd_datas)} sounddevice data files")
|
||||||
|
except ImportError:
|
||||||
|
print(" - Warning: sounddevice not found")
|
||||||
|
|
||||||
# Hidden imports -- NO PySide6/Qt needed for headless backend
|
# Hidden imports -- NO PySide6/Qt needed for headless backend
|
||||||
hiddenimports = [
|
hiddenimports = [
|
||||||
# Transcription engine
|
# Transcription engine
|
||||||
@@ -46,6 +61,7 @@ hiddenimports = [
|
|||||||
'faster_whisper.vad',
|
'faster_whisper.vad',
|
||||||
'ctranslate2',
|
'ctranslate2',
|
||||||
'sounddevice',
|
'sounddevice',
|
||||||
|
'_sounddevice_data',
|
||||||
'scipy',
|
'scipy',
|
||||||
'scipy.signal',
|
'scipy.signal',
|
||||||
'numpy',
|
'numpy',
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "local-transcription",
|
"name": "local-transcription",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "2.0.12",
|
"version": "2.0.13",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite dev",
|
"dev": "vite dev",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[project]
|
[project]
|
||||||
name = "local-transcription"
|
name = "local-transcription"
|
||||||
version = "1.0.10"
|
version = "1.0.11"
|
||||||
description = "A standalone desktop application for real-time speech-to-text transcription using Whisper models"
|
description = "A standalone desktop application for real-time speech-to-text transcription using Whisper models"
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
requires-python = ">=3.9"
|
requires-python = ">=3.9"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "local-transcription"
|
name = "local-transcription"
|
||||||
version = "2.0.12"
|
version = "2.0.13"
|
||||||
description = "Real-time speech-to-text transcription for streamers"
|
description = "Real-time speech-to-text transcription for streamers"
|
||||||
authors = ["Local Transcription Contributors"]
|
authors = ["Local Transcription Contributors"]
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|||||||
@@ -74,8 +74,8 @@ pub fn run() {
|
|||||||
.build(tauri::generate_context!())
|
.build(tauri::generate_context!())
|
||||||
.expect("error while building tauri application")
|
.expect("error while building tauri application")
|
||||||
.run(|app, event| {
|
.run(|app, event| {
|
||||||
if let tauri::RunEvent::Exit = event {
|
match event {
|
||||||
// Stop the sidecar when the app exits
|
tauri::RunEvent::Exit => {
|
||||||
if let Some(state) = app.try_state::<sidecar::ManagedSidecar>() {
|
if let Some(state) = app.try_state::<sidecar::ManagedSidecar>() {
|
||||||
if let Ok(mut mgr) = state.0.lock() {
|
if let Ok(mut mgr) = state.0.lock() {
|
||||||
eprintln!("[app] Stopping sidecar on exit...");
|
eprintln!("[app] Stopping sidecar on exit...");
|
||||||
@@ -83,5 +83,16 @@ pub fn run() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
tauri::RunEvent::ExitRequested { .. } => {
|
||||||
|
// Also stop sidecar on exit request (Cmd+Q on macOS)
|
||||||
|
if let Some(state) = app.try_state::<sidecar::ManagedSidecar>() {
|
||||||
|
if let Ok(mut mgr) = state.0.lock() {
|
||||||
|
eprintln!("[app] Stopping sidecar on exit request...");
|
||||||
|
mgr.stop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_ => {}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"productName": "Local Transcription",
|
"productName": "Local Transcription",
|
||||||
"version": "2.0.12",
|
"version": "2.0.13",
|
||||||
"identifier": "net.anhonesthost.local-transcription",
|
"identifier": "net.anhonesthost.local-transcription",
|
||||||
"build": {
|
"build": {
|
||||||
"frontendDist": "../dist",
|
"frontendDist": "../dist",
|
||||||
|
|||||||
@@ -15,6 +15,7 @@
|
|||||||
let sidecarState = $state<SidecarState>("checking");
|
let sidecarState = $state<SidecarState>("checking");
|
||||||
let debugLog = $state("");
|
let debugLog = $state("");
|
||||||
let availableUpdate = $state("");
|
let availableUpdate = $state("");
|
||||||
|
let appVersion = $state("");
|
||||||
|
|
||||||
let obsDisplayUrl = $derived(backendStore.obsUrl);
|
let obsDisplayUrl = $derived(backendStore.obsUrl);
|
||||||
let syncDisplayUrl = $derived(backendStore.syncUrl);
|
let syncDisplayUrl = $derived(backendStore.syncUrl);
|
||||||
@@ -108,6 +109,14 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
onMount(() => {
|
onMount(() => {
|
||||||
|
// Get app version from Tauri
|
||||||
|
import("@tauri-apps/api/app").then(({ getVersion }) =>
|
||||||
|
getVersion().then((v) => { appVersion = v; })
|
||||||
|
).catch(() => {
|
||||||
|
// Browser dev mode -- read from package.json or use fallback
|
||||||
|
appVersion = "dev";
|
||||||
|
});
|
||||||
|
|
||||||
checkAndLaunchSidecar();
|
checkAndLaunchSidecar();
|
||||||
|
|
||||||
return () => {
|
return () => {
|
||||||
@@ -201,7 +210,7 @@
|
|||||||
<TranscriptionDisplay />
|
<TranscriptionDisplay />
|
||||||
<Controls />
|
<Controls />
|
||||||
|
|
||||||
<div class="version-label">v{backendStore.version}</div>
|
<div class="version-label">v{appVersion || backendStore.version}</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{#if showSettings}
|
{#if showSettings}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
"""Version information for Local Transcription."""
|
"""Version information for Local Transcription."""
|
||||||
|
|
||||||
__version__ = "2.0.12"
|
__version__ = "2.0.13"
|
||||||
__version_info__ = (2, 0, 12)
|
__version_info__ = (2, 0, 13)
|
||||||
|
|
||||||
# Version history:
|
# Version history:
|
||||||
# 1.4.0 - Auto-update feature:
|
# 1.4.0 - Auto-update feature:
|
||||||
|
|||||||
Reference in New Issue
Block a user