From c02d66b2d3221c0c5f5e8f2cb2ae218f1e325a0a Mon Sep 17 00:00:00 2001 From: historia Date: Mon, 24 Aug 2026 01:57:13 -0400 Subject: feat: manage venv for all backends --- backends/audiocpp.py | 46 ++++++++++++++++++++++++++++++++-------------- 1 file changed, 32 insertions(+), 14 deletions(-) (limited to 'backends/audiocpp.py') diff --git a/backends/audiocpp.py b/backends/audiocpp.py index 57636a7..486017f 100755 --- a/backends/audiocpp.py +++ b/backends/audiocpp.py @@ -41,24 +41,34 @@ from typing import Callable, Dict, List, Optional, Set, Tuple # Allow running directly (python backends/audiocpp.py) from any cwd. sys.path.insert(0, str(Path(__file__).resolve().parent.parent)) -from ui import tui -from backends import BackendStatus, ConfigureAction -from backends import common +from backends import ( + BackendStatus, + ConfigureAction, + ServerSpec, + common, + format_launch_hint, +) from backends.common import ( CONFIG_PATH, PROMPT_TEXT_FILENAME, TTS_ROOT, + VOICES_DIR, detect_wav_dir, find_wav_files, normalize_dir_arg, read_prompt_text, resolve_wav_dir_arg, + write_prompt_text, +) +from backends.common import ( wav_dir_info as _wav_dir_info, +) +from backends.common import ( wav_dir_preview as _wav_dir_preview, - write_prompt_text, ) from converter import config from converter.tts import transcribe_reference_audio, whisper_backend_available +from ui import tui DEFAULT_HOST = "127.0.0.1" FALLBACK_PORT = 8080 @@ -1145,7 +1155,7 @@ def _wizard(stdscr, args: argparse.Namespace, parser: argparse.ArgumentParser wav_dir = tui.browse_directory( stdscr, "Select the directory with your .wav voices", info=_wav_dir_info, preview=_wav_dir_preview, - start=wav_start if wav_start is not None else Path.cwd(), + start=wav_start if wav_start is not None else VOICES_DIR, back_value=_GO_BACK) if wav_dir is _GO_BACK: step = 3 @@ -1540,8 +1550,8 @@ def _collect_from_flags(args: argparse.Namespace, and config.AUDIOCPP_CLONE_MODEL_ID == entry_ids[0]): sync_model_ids = not args.no_sync_model_ids - # Wav dir + transcription plan. - wav_dir = args.input_dir + # Wav dir + transcription plan (defaults to the project's voices/ dir). + wav_dir = args.input_dir if args.input_dir is not None else VOICES_DIR plan: Optional[dict] = None if include_clone and wav_dir is not None: wav_files = find_wav_files(wav_dir) @@ -1582,8 +1592,9 @@ def build_parser() -> argparse.ArgumentParser: parser.add_argument("--wavs", type=resolve_wav_dir_arg, default=None, dest="input_dir", metavar="WAV_DIR", help="Directory with .wav reference files to publish as " - "a server-level voice_dir cloning library (asked " - "for when omitted in the TUI)") + "a server-level voice_dir cloning library " + f"(default: {VOICES_DIR}; asked for when omitted " + "in the TUI)") parser.add_argument("--output", type=Path, default=None, help="Output path for server.json (default: " "server.json inside the audio.cpp checkout; an " @@ -1664,17 +1675,24 @@ def detect() -> BackendStatus: details.append("not built — run setup to build audiocpp_server") server_json = checkout / "server.json" configured = server_json.exists() + servers: List[ServerSpec] = [] if configured: details.append(f"config: {server_json}") - launch = (f"{binary} --config {server_json}" - if built else - f"./build/--release/bin/" - f"audiocpp_server --config {server_json}") + if built: + servers = [ServerSpec( + "audiocpp", config.AUDIOCPP_API_URL, + [str(binary), "--config", str(server_json)])] + else: + launch = (f"./build/--release/bin/" + f"audiocpp_server --config {server_json}") else: details.append("no server.json — run setup to configure models") + if servers: + launch = format_launch_hint(servers) return BackendStatus("audiocpp", "audio.cpp", installed=built, configured=configured, running=running, - details=details, launch_hint=launch) + details=details, launch_hint=launch, + servers=servers) configure_actions: List[ConfigureAction] = [ -- cgit v1.2.3